← retour aux snippets

sklearn GradientBoostingRegressor en quantile

prédire des intervalles par quantile regression avec GradientBoosting

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é.