La régression logistique prévoit tous les 1 et aucun 0


10

J'exécute une analyse sur la probabilité de défaut de paiement en utilisant une régression logistique et des forêts aléatoires.

Lorsque j'utilise la régression logistique, la prédiction est toujours «1» (ce qui signifie un bon prêt). Je n'ai jamais vu cela auparavant et je ne sais pas par où commencer pour essayer de régler le problème. Il y a 22 colonnes avec 600K lignes. Lorsque je diminue le nombre de colonnes, j'obtiens le même résultat avec la régression logistique.

Pourquoi la régression logistique pourrait-elle être si mauvaise?

**Actual from the data**

0 :   41932

1 :   573426

**Logistic regression output** 

prediction for 1 when actually 0: 41932
prediction for 1 when actually 1:573426

A**s you can see, it always predicts a 1**


**Random forests does better:**

actual 0, pred 0 : 38800 
actual 1, pred 0 : 27 
actual 0, pred 1 : 3132
actual 1, pred 1 : 573399

4
Cela n'a aucun sens. Logit ne prédira pas exactement 0. Il peut prédire une valeur faible que vous avez interprétée comme 0. Ainsi, le problème pourrait être dû au seuil, pas seulement au modèle lui
Aksakal

@Aksakal, j'utilise la méthode scikit learn .predict. prédire les étiquettes de classe pour les échantillons en X
ivan7707

Connaissez-vous les courbes ROC? Vous pouvez extraire les probabilités prédites, puis jouer avec le seuil pour classer les données vous-même. Le seuil est votre levier de compromis entre l'identification des défauts ou des non-défauts.
Aksakal

1
Voir ma réponse ci-dessous, mais vous pouvez également utiliser ROC pour trouver le point idéal dans votre paramètre de classificateur pour le logit entre la sensibilité et la spécificité
Aksakal

4
Ne pas utiliser predicten sklearn sur un modèle de probabilité, c'est inutile. TOUJOURS utiliser predict_proba.
Matthew Drury

Réponses:


5

Eh bien, il est logique que votre modèle prédit toujours 1. Jetez un œil à votre ensemble de données: il est gravement déséquilibré en faveur de votre classe positive. La classe négative ne représente que ~ 7% de vos données. Essayez de rééquilibrer votre ensemble d'entraînement ou utilisez un algorithme sensible aux coûts.


merci pour l'entrée. Existe-t-il une règle de base pour ce qui est acceptable pour les données non équilibrées, ou de bonnes sources pour rééquilibrer que vous pourriez suggérer?
ivan7707

Malheureusement, il n'y a pas de règle sur la façon de choisir un algorithme, mais le "théorème du déjeuner gratuit". Dans votre cas particulier, j'irais d'abord avec le package C5.0 de Ross Quinlan. Ensuite, vous pouvez expérimenter différents coûts et techniques d'échantillonnage comme le sous-échantillonnage et le sous-échantillonnage, SMOTE etc. En outre, le site de Max Kuhn propose un joli résumé des algorithmes établis.
JimBoy

7
(+1) En l'absence d'une fonction de coût, il ne semble pas y avoir de raison d'utiliser la régression logistique comme classificateur : vous avez les probabilités prédites et pouvez utiliser une règle de notation appropriée pour évaluer les performances de votre modèle. Voir, par exemple, quelle est la mesure permettant d'évaluer la précision de la classification binaire pour les données déséquilibrées? . Le déséquilibre n'est pas un problème en soi: voir Le sous-échantillonnage modifie-t-il les coefficients de régression logistique? .
Scortchi - Réintégrer Monica

@Scortchi, merci pour les liens et l'idée d'utiliser des modèles avec des coûts. J'ai pu trouver ce lien papier qui me fait avancer dans la bonne direction.
ivan7707

1
Non, cela n'a aucun sens que son modèle prédit toujours 1s, car 7% est un taux de défaut plutôt élevé et le logit est largement utilisé dans les défauts de paiement. Prenons les prêts notés AAA qui font défaut à 0,1% par an. Il s'agit essentiellement de prêts indésirables.
Aksakal

13

La réponse courte est que la régression logistique sert à estimer les probabilités , ni plus ni moins. Vous pouvez estimer les probabilités quel que soit le déséquilibreOuiest. Les courbes ROC et certaines des autres mesures données dans la discussion n'aident pas. Si vous devez prendre une décision ou entreprendre une action, vous appliquez la fonction perte / utilité / coût au risque prévu et choisissez l'action qui optimise l'utilité attendue. Il semble que beaucoup d'utilisateurs de machine learning ne comprennent pas vraiment les risques et les décisions optimales.


2
(+1) Oui, la question est "résolvez-vous un problème de classification, ou résolvez-vous un problème d'aide à la décision?".
GeoMatt22

1
Je n'en suis pas sûr. L'estimation des probabilités est un excellent résultat final. Et notez que la majorité des problèmes de "classification" sont mieux traités en utilisant des décisions Bayes optimales. Hormis la reconnaissance visuelle et audio des formes, la plupart des problèmes d'application des méthodes de classification seraient mieux traités par une estimation directe des probabilités.
Frank Harrell

@FrankHarrell Est-il exact que l'interprétation de la sortie comme des probabilités nécessite une conception qui permette une telle interprétation (cohorte). Et si nous n'avons pas une telle conception, nous devons prendre une décision basée sur les «scores de risque». De plus, bien qu'il existe de la littérature traitant de cela dans le cadre non calibré, ce n'est pas si courant dans la pratique. Est-ce correct?
Julieth

1
Veuillez décrire en quoi l'échantillonnage utilisé pour assembler l'ensemble de données utilisé pour le développement du modèle diffère des clients auxquels vous appliquerez les prévisions.
Frank Harrell

Par exemple, un échantillonnage cas-témoins dont la prévalence cible est inconnue. Ou des échantillons de commodité de taille moyenne.
julieth

1

Lorsque vous classifiez à l'aide de logit, c'est ce qui se produit.

Le logit prédit la probabilité de défaut (PD) d'un prêt, qui est un nombre compris entre 0 et 1. Ensuite, vous définissez un seuil D, de sorte que vous marquez un prêt par défaut si PD> D, et le marquez comme non par défaut si PD

Naturellement, dans une population de prêt typique PD << 1. Donc, dans votre cas, 7% est une probabilité plutôt élevée de données sur un an (les PD sont normalement déclarés sur une base annuelle). S'il s'agit de données pluriannuelles, nous parlons alors de la PD dite cumulative, dans ce cas cumPD = 7% n'est pas un chiffre élevé pour 10 ans de données, par exemple. Par conséquent, selon aucune norme, je ne dirais pas que votre ensemble de données est problématique. Je le décrirais au moins typique pour les données de défaut de prêt, sinon génial (dans le sens où vous avez un nombre relativement élevé de défauts).

Supposons maintenant que votre modèle prédit les trois niveaux de DP suivants:

  • 0,1 (563 426)
  • 0,5 (20 000)
  • 0,9 (31 932)

Supposons également que les valeurs par défaut réelles pour ces groupes soient:

  • 0
  • 10 000
  • 31 932

Vous pouvez maintenant définir D sur différentes valeurs et voir comment la matrice change. Utilisons d'abord D = 0,4:

  • Valeur par défaut réelle, prédire non par défaut: 0
  • Valeur par défaut réelle, valeur par défaut prévue: 41 932
  • Non réel par défaut réel, non prévu par défaut: 563 426
  • Réel non par défaut, prédire par défaut: 10000

Si vous définissez D = 0,6:

  • Valeur par défaut réelle, prédire la valeur non par défaut: 31 932
  • Valeur par défaut réelle, valeur par défaut prévue: 10 000
  • Non réel par défaut réel, non prévu par défaut: 573 426
  • Réel non par défaut, prédire par défaut: 0

Si vous définissez D = 0,99:

  • Valeur par défaut réelle, prédire non par défaut: 41 932
  • Valeur par défaut réelle, valeur par défaut prévue: 0
  • Non réel par défaut réel, non prévu par défaut: 573 426
  • Réel non par défaut, prédire par défaut: 0

Le dernier cas est ce que vous voyez dans les résultats de votre modèle. Dans ce cas, je souligne le seuil D pour un classificateur. Un simple changement de D peut améliorer certaines caractéristiques de votre prévision. Notez que dans les trois cas, la PD prédite est restée la même, seul le seuil D a changé.

Il est également possible que votre régression logit elle-même soit merdique, bien sûr. Donc, dans ce cas, vous avez au moins deux variables: la spécification logit et le seuil. Les deux ont un impact sur votre puissance de prévision.


Vous vous rendez compte que vous proposez une technique pour traiter les données déséquilibrées, n'est-ce pas? Par conséquent, vous admettez l'effet de la classe plus petite sur la précision de la prédiction. De plus, vous proposez une technique que le modèle d'origine n'utilise pas du tout. Vous ne pouvez pas simplement changer les circonstances à votre guise et ensuite faire une déclaration au fur et à mesure.
JimBoy

Dans l'analyse / la prévision du défaut de paiement, les données sont toujours "déséquilibrées" dans ce sens. C'est la situation normale.
Aksakal

C'est peut-être comme ça. Néanmoins, vous devriez jeter un coup d'œil à ce que Max Kuhn décrit comme le "taux de non-information", qui n'est rien d'autre que la plus grande classe de l'ensemble de données. Alors, jetez un coup d'œil à la table fournie par Ivan. Les résultats sont parfaitement logiques pour le modèle qu'il a utilisé. Que vous puissiez réellement optimiser ces résultats avec différentes techniques est une autre question et tout à fait possible.
JimBoy

@JimBoy, j'ai vu sa table et j'en ai vu beaucoup d'autres comme ça. Le sien est plutôt simple, nous traitons généralement des données sur les défauts de paiement des prêts, où les états sont en cours depuis le courant jusqu'à 30 jours en souffrance, 60, 90 ... par défaut et fermé. Dans un bon portefeuille, vous pouvez avoir 95% de prêts dans l'état actuel (propre) et seulement 1% en défaut. Les gens utilisent logit mulltinomial pour ce genre de choses tout le temps dans l'industrie.
Aksakal

@Aksakal, je devrai faire plus de lecture sur la modification du seuil, car j'ai beaucoup lu sur la façon dont il est mathématiquement incorrect de le changer pour la régression logistique. Sur une autre note, qu'entendiez-vous par «il est possible que votre régression logit elle-même soit minable»?
ivan7707

1

Si le problème est bien le déséquilibre entre les classes, je commencerais simplement par équilibrer les poids des classes:

log_reg = LogisticRegression(class_weight = 'balanced')

Ce paramétrage signifie que les pénalités pour les fausses prédictions dans la fonction de perte seront pondérées avec des proportions inverses aux fréquences des classes. Cela peut résoudre le problème que vous décrivez.


Il n'est pas clair pour moi que vous ayez identifié le problème. Je pense que Matthew Drury a abordé le problème lié à l'utilisation de Sklearn.
Michael R. Chernick

0

Eh bien, sans plus d'informations, c'est difficile à dire, mais par la définition de la régression logistique, vous êtes saturé sur la base des données ajustées. Donc, dans l'équation, le terme e ^ -t va à 0. Donc, le premier endroit à regarder serait de voir quels sont les coefficients réels.

Cela pourrait également être dû à des variables mal mises à l'échelle. Il peut y avoir un problème où l'une des colonnes a une valeur numérique énorme par rapport à d'autres, ce qui la fait gâcher.


@ Tim Felty, Merci pour la réponse. Pouvez-vous s'il vous plaît développer ce que je rechercherais concernant les coefficients et comment cela se rapporte à la saturation (ou me diriger vers une ressource à lire)? De plus, j'avais l'impression que des variables mal échelonnées n'auraient pas d'effet négatif sur la régression logistique. [link (] stats.stackexchange.com/questions/18916/… )
ivan7707

0

Vous pouvez utiliser SMOTE pour équilibrer l'ensemble de données déséquilibré. Un bon document de référence est:

Lifeng Zhou, Hong Wang, Loan Default Prediction on Large Imbalanced Data Using Random Forests, TELKOMNIKA Indonesian Journal of Electrical Engineering, Vol.10, No.6, octobre 2012, pp. 1519 ~ 1525, lien .


Pourriez-vous ajouter une citation / référence complète (y compris l'auteur, la date, l'éditeur, etc.) comme vous le feriez dans un article académique? Cela faciliterait la recherche des futurs lecteurs si le lien cessait de fonctionner
Silverfish
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.