sklearn GradientBoostingRegressor en quantile
objectif
Expliquer et montrer comment prédire des intervalles par quantile regression avec GradientBoosting.
code minimal
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
rng = np.random.RandomState(0)
X = rng.rand(1000, 2)
y = X[:,0]*5 + np.sin(6*X[:,1]) + rng.randn(1000)*0.5
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.2, random_state=0)
q10 = GradientBoostingRegressor(loss="quantile", alpha=0.1, random_state=0).fit(Xtr, ytr)
q50 = GradientBoostingRegressor(loss="quantile", alpha=0.5, random_state=0).fit(Xtr, ytr)
q90 = GradientBoostingRegressor(loss="quantile", alpha=0.9, random_state=0).fit(Xtr, ytr)
pred_int = np.column_stack([q10.predict(Xte), q50.predict(Xte), q90.predict(Xte)])
pred_int[:3]
utilisation
# taux de couverture empirique ~ 80% pour [10%,90%]
yhat_lo, yhat_med, yhat_hi = pred_int.T
coverage = np.mean((yte >= yhat_lo) & (yte <= yhat_hi))
print(round(float(coverage), 3))
variante(s) utile(s)
# XGBoost/CatBoost/LightGBM supportent aussi les objectifs quantiles
# Exemple CatBoost quantile:
# from catboost import CatBoostRegressor
# CatBoostRegressor(loss_function="Quantile:alpha=0.1").fit(...)
notes
- Trois modèles pour estimer basses/médianes/hautes quantiles.
- Utiliser un random_state identique pour comparabilité.