Les sorties XGBoost tendent vers les extrêmes


15

J'utilise actuellement XGBoost pour la prédiction des risques, il semble faire du bon travail dans le département de classification binaire mais les sorties de probabilité sont très éloignées, c'est-à-dire que changer la valeur d'une caractéristique dans une observation de très petite quantité peut rendre la probabilité saut de sortie de 0,5 à 0,99.

Je vois à peine les sorties dans la gamme 0,6-0,8. Dans tous les cas, la probabilité est inférieure à 0,99 ou 1.

Je connais les méthodes d'étalonnage post-formation telles que la mise à l'échelle Platt et la correction logistique, mais je me demandais s'il y avait quelque chose que je pouvais modifier dans le processus de formation XGBoost.

J'appelle XGBoost à partir de différentes langues à l'aide de FFI, donc ce serait bien si je pouvais résoudre ce problème sans introduire d'autres bibliothèques d'étalonnage, par exemple, changer la métrique d'évaluation d'AUC pour enregistrer la perte.


Avez-vous vérifié que la mise à l'échelle que vous avez appliquée à l'ensemble d'apprentissage a également été appliquée correctement à l'ensemble de test?
bradS

J'ai le même problème. Pourriez-vous trouver quelque chose d'utile? En tant que solution temporaire, j'ai trié les probs et normalisé sous 0 à 1 en fonction des occurrences, mais je ne pense pas que ce soit une bonne solution.
Ilker Kurtulus du

Combien de variables catégorielles avez-vous dans votre modèle?
ngopal

En fait, il XGBoostest assez robuste contre les valeurs aberrantes, par rapport à d'autres méthodes comme la vanille SVM.
Piotr Rarus - Réintègre Monica

Réponses:


1

XGBoost n'est pas naturellement calibré en probabilités. Vous devez utiliser quelque chose comme:

objective = "binary:logistic"

pour vous assurer que la sortie du modèle peut être interprétée comme une probabilité. Sinon, vous ne pouvez obtenir que des scores, qui ne peuvent être utilisés que pour classer les instances. Comme la plupart des mesures de performances peuvent être calculées sur des scores, il est courant d'utiliser ce qui ressemble à des probabilités (associées à de bonnes mesures de performances) au lieu de probabilités «réelles».

En ce qui concerne l'instabilité du modèle (ici en ce sens qu'un léger changement de variable explicative change beaucoup la prédiction), vous devez revérifier l'ensemble de votre processus d'étalonnage: sélection de variable, partitionnement train / test, réglage hyperparamétrique / validation croisée, performances les métriques utilisées, pour vous assurer que votre modèle n'est pas trop adapté.


0

Oui, vérifiez la distribution des pertes de journaux à mesure que le nombre d'itérations augmente. S'il commence à se déclencher avant votre dernière itération de boost, il est trop adapté.


0

La première que je demanderais serait «Qu'est-ce que les ratios positifs / négatifs?». Tout simplement parce que j'ai eu plusieurs fois un problème similaire lorsque les cours étaient très déséquilibrés. Si c'est votre cas, vous pouvez essayer d'équilibrer l'ensemble de données ou essayer de jouer avec le scale_pos_weightparamètre de XGboost. Dans le cas des ratios 50/50 classes, les probabilités peuvent être plus ou moins normalisées.

De plus, il est très probable que vous ayez un surapprentissage en même temps. Essayez de régler le taux d'apprentissage, les paramètres d'échantillonnage et les paramètres de régularisation (reg_alpha, reg_lambda).


-1

Tout d'abord, vous devez être sûr que vos données sont suffisamment volumineuses lorsque vous travaillez avec des algorithmes basés sur des arbres tels que XGBoost et LightGBM, de tels changements soudains peuvent indiquer un surajustement. (10 000 échantillons au moins, règle générale)

Deuxièmement, comment est votre cardinalité; si vous avez 3-4 fonctionnalités, on s'attend à ce qu'un changement de fonctionnalité provoque un tel effet.

Troisièmement, quelle est votre sélection d'hyperparamètres? Les modèles arborescents sont très sensibles aux changements de paramètres. Assurez-vous que vous implémentez soigneusement votre réglage d'hyperparamètre.

Enfin, lorsqu'il s'agit de classification binaire; les mesures d'erreur deviennent vraiment importantes. Vous pouvez faire une combinaison de perte de journal binaire et d'erreur binaire (XGBoost vous permet d'en choisir plusieurs); assurez-vous également d'implémenter l'arrêt précoce en choisissant early_stopping_rounds = N dans la méthode de train de XGBoost, où N est la sélection des itérations. Par cela, votre algorithme s'arrêtera tôt à un point raisonnable où votre perte cesse de diminuer, en évitant le sur-ajustement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.