Implementation:Interpretml Interpret TweedieDevianceRegressionObjective
| Knowledge Sources | |
|---|---|
| Domains | Machine_Learning, EBM_Core |
| Last Updated | 2026-02-07 12:00 GMT |
Overview
Implements the Tweedie deviance regression objective function for modeling data with combined discrete and continuous distributions, parameterized by variance power.
Description
The TweedieDevianceRegressionObjective.hpp defines the TweedieDevianceRegressionObjective struct, which implements Tweedie distribution deviance loss with a log link function. The Tweedie distribution is a family that includes Poisson (variance_power=1) and Gamma (variance_power=2) as special cases. This implementation currently supports variance_power strictly between 1.0 and 2.0, corresponding to compound Poisson-Gamma distributions. The loss function involves two exponential terms: exp((1-p)*score) and exp((2-p)*score), where p is the variance_power. The gradient uses FusedNegateMultiplyAdd for efficiency. Pre-computed member variables store derived constants: m_variancePowerParamSub1 (1-p), m_variancePowerParamSub2 (2-p), m_negInverseVariancePowerParamSub1 (-1/(1-p)), and m_inverseVariancePowerParamSub2 (1/(2-p)). FinishMetric multiplies by 2.0 for standard deviance scaling.
Usage
Used when the user specifies the "tweedie_deviance" objective with a variance_power parameter for modeling data that has a mix of exact zeros and positive continuous values, such as insurance claims data.
Code Reference
Source Location
- Repository: Interpretml_Interpret
- File: shared/libebm/compute/objectives/TweedieDevianceRegressionObjective.hpp
Signature
template<typename TFloat> struct TweedieDevianceRegressionObjective : RegressionObjective {
OBJECTIVE_BOILERPLATE(TweedieDevianceRegressionObjective, MINIMIZE_METRIC,
Objective_Other, Link_log, true)
TFloat m_variancePowerParamSub1;
TFloat m_variancePowerParamSub2;
TFloat m_negInverseVariancePowerParamSub1;
TFloat m_inverseVariancePowerParamSub2;
inline TweedieDevianceRegressionObjective(const Config& config, double variancePower);
inline bool CheckRegressionTarget(const double target) const noexcept;
inline double FinishMetric(const double metricSum) const noexcept; // 2.0 * metricSum
GPU_DEVICE inline TFloat CalcMetric(const TFloat& score, const TFloat& target) const noexcept;
GPU_DEVICE inline TFloat CalcGradient(const TFloat& score, const TFloat& target) const noexcept;
GPU_DEVICE inline GradientHessian<TFloat> CalcGradientHessian(
const TFloat& score, const TFloat& target) const noexcept;
};
I/O Contract
| Parameter | Constraint |
|---|---|
| variancePower | Must be strictly between 1.0 and 2.0 |
| target | Must be non-negative, non-NaN, non-infinite |
| Method | Formula |
|---|---|
| CalcGradient | -target * exp((1-p)*score) + exp((2-p)*score) |
| CalcGradientHessian | hessian = -(1-p)*target*exp((1-p)*score) + (2-p)*exp((2-p)*score) |
Usage Examples
# Called internally via native bindings
from interpret.glassbox import ExplainableBoostingRegressor
ebm = ExplainableBoostingRegressor(objective="tweedie_deviance")
ebm.fit(X, y) # Uses TweedieDevianceRegressionObjective for mixed distributions