SYNTOLOGY HomeExplorerAtlasCodeMethodologyAboutDevelopersFeedPricing
Paper · 2609.12752 · September 2026

Optimizing for the decision not the prediction: an exploration of Smooth Net Benefit as a training objective

Koen Gorgels¹², Lasai Barreñada³, Maarten Van Smeden¹, Ben Calster¹³, Ewout Steyerberg¹, Wouter Van Amsterdam¹

arXiv · PDF · Open in the Atlas

Code that ran

We lifted 11 functions out of this paper's own repositories and ran 0 of them in a sandbox. "Ran" means the function executed on a synthesized input and returned a value. It is not a reproduction of the paper's results.

RepositoryRoleRan
KoenGorgels/Smooth-Net-Benefit canonical 0 of 11
FunctionStatusWhere it lives
decision_curve Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/metrics.py
pointer only (licence: NONE) · get_code("872c03d861b33378")
make_optimizer Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/trainer.py
pointer only (licence: NONE) · get_code("71f4421a921fe1c0")
nb_anneal_only_with_l2 Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/trainer.py
pointer only (licence: NONE) · get_code("7647894dcfdbf0ef")
net_benefit_hard Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/metrics.py
pointer only (licence: NONE) · get_code("05c5413ace5a09ed")
net_benefit_hard_band_xgb Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/xgboost_objectives.py
pointer only (licence: NONE) · get_code("1de655d7ca41f94d")
net_benefit_treat_all Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/metrics.py
pointer only (licence: NONE) · get_code("12d066619e72504d")
plot_decision_curves Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/plots.py
pointer only (licence: NONE) · get_code("28f4b5207225e2d6")
plot_decision_curves_with_band Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/plots.py
pointer only (licence: NONE) · get_code("b6dbf012e017d3a8")
plot_roc_curves Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/plots.py
pointer only (licence: NONE) · get_code("c4078273ded8e604")
smooth_net_benefit_loss Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/loss.py
pointer only (licence: NONE) · get_code("9515563b93fb2449")
smooth_net_benefit_range_mean_loss Not yet run KoenGorgels/Smooth-Net-Benefit/nbloss/loss.py
pointer only (licence: NONE) · get_code("573729cacb35b020")

Repositories linked to this paper

Some links come from the archived Papers with Code dataset (CC BY-SA 4.0): attribution and licence.

Abstract

Prediction models are commonly trained using objectives such as Bernoulli negative loglikelihood (NLL), although downstream clinical decisions may depend on specific risk thresholds. We introduce Smooth Net Benefit (NB), a differentiable approximation of Net Benefit designed to align model training with threshold-specific clinical utility. We evaluated NB as a training objective for logistic regression, generalized additive models (GAMs), and XGBoost with three Hessian implementations. Experiments used the Framingham cardiovascular risk dataset and 44 TabZilla datasets comprising 72 dataset-threshold combinations. NB training did not consistently improve Net Benefit in Framingham. Across the TabZilla benchmark, mean standardized Net Benefit for logistic regression increased from 0.5669 with NLL to 0.5765 with sNB (mean difference 0.0096, 95% CI -0.0001 to 0.0193). For GAMs, mean standardized Net Benefit decreased from 0.5921 to 0.5625 (mean difference -0.0296, 95% CI -0.0721 to 0.0129). For XGBoost, NLL achieved 0.6745 compared with 0.6723-0.6735 across NB implementations. In logistic regression, sNB gains were positively associated with the performance advantage of XGBoost over NLL-trained logistic regression.

For agents

The same record, over MCP at https://syntology.ai/mcp:

get_harvested_code_for_paper("2609.12752")
get_code_for_paper("2609.12752")
have("2609.12752")

Connect an agent — have() is free.