← retour aux snippets

lightgbm: contraintes monotones

Imposer des relations monotones entre features et prédictions.

objectif

Imposer des relations monotones entre features et prédictions.

code minimal

import numpy as np
from lightgbm import LGBMRegressor

rng = np.random.RandomState(0)
X = rng.randn(200, 2)
y = X[:,0] * 2.0 - X[:,1] * 3.0 + rng.randn(200)*0.1

# +1 => monotone croissant sur f0, -1 => décroissant sur f1
model = LGBMRegressor(monotone_constraints=[1, -1], n_estimators=500, random_state=0)
model.fit(X, y)
print(hasattr(model, "predict"))

utilisation

# Vérifier qualitativement par grille
import numpy as np
x0 = np.linspace(-2, 2, 5)
x1 = np.zeros_like(x0)
preds = [model.predict(np.c_[[a],[0]])[0] for a in x0]
print(all(b-a >= -1e-6 for a,b in zip(preds, preds[1:])))

variante(s) utile(s)

# Contraintes avec LGBMClassifier idem, liste alignée aux colonnes
print(len(model.monotone_constraints_) == 2)

notes

  • Utile en domaine régulé (risque, pricing) pour garantir des comportements attendus.