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.
la source
XGBoost
est assez robuste contre les valeurs aberrantes, par rapport à d'autres méthodes comme la vanilleSVM
.Réponses:
XGBoost n'est pas naturellement calibré en probabilités. Vous devez utiliser quelque chose comme:
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é.
la source
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é.
la source
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_weight
paramè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).
la source
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.
la source