Add quantile regression with pinball loss to EBMs#663
Add quantile regression with pinball loss to EBMs#663Erik-BM wants to merge 2 commits intointerpretml:mainfrom
Conversation
35d9593 to
fdc0486
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #663 +/- ##
==========================================
- Coverage 66.40% 66.39% -0.02%
==========================================
Files 75 75
Lines 11589 11589
==========================================
- Hits 7696 7694 -2
- Misses 3893 3895 +2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Adds a new "quantile" objective for ExplainableBoostingRegressor that enables quantile regression via pinball loss. Usage: objective="quantile:alpha=0.5" where alpha in (0,1) selects the target quantile. This is useful for prediction intervals, asymmetric risk, and robust median regression. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Erik B. Myklebust <erik.bryhn.myklebust@gmail.com>
fdc0486 to
24612e9
Compare
|
Hi @Erik-BM -- The code looks good. It can be made a bit more efficient though because the hessian is always 1.0. To make that, change: OBJECTIVE_BOILERPLATE(PinballRegressionObjective, MINIMIZE_METRIC, Objective_Other, Link_identity, true) to OBJECTIVE_BOILERPLATE(PinballRegressionObjective, MINIMIZE_METRIC, Objective_Other, Link_identity, false) And then you can eliminate the function CalcGradientHessian The notebook is great to have, but could you also add a test. The documentation error is due to a deprecation of the URL that we used to get the adult dataset from -- this has been fixed in the latest commit on main. No need to merge that though since I know why it's happening. Thanks! |
Remove the CalcGradientHessian function from PinballRegressionObjective since the OBJECTIVE_BOILERPLATE now uses k_bHessian=false, making it gradient-only like RMSE. Add tests for quantile regression covering quantile ordering (q10 < q50 < q90), default alpha, and parameter validation (alpha=0, alpha=1, alpha<0 all rejected). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Erik B. Myklebust <erik.bryhn.myklebust@gmail.com>
4a2f016 to
2fe848c
Compare
Summary
"quantile"objective toExplainableBoostingRegressorimplementing pinball loss for quantile regressionobjective="quantile:alpha=0.5"where alpha in (0, 1) selects the target quantile (default 0.5 = median)Changes
shared/libebm/compute/objectives/PinballRegressionObjective.hpp— C++ objective with identity link, constant hessian, SIMD/GPU supportobjective_registrations.hpp— register the new objective_ebm.py— update regressor docstringdocs/interpret/ebm-internals-quantile-regression.ipynb— notebook covering median regression, prediction intervals, and interpretabilitydocs/interpret/ebm-internals.md— link to new notebookTest plan
build.shand verify compilationpytest python/interpret-core/tests/glassbox/ebm/