Quelle est la bonne façon de déterminer quelles caractéristiques ont le plus contribué à la prédiction d'un vecteur d'entrée donné?

9

J'utilise la régression logistique pour la classification binaire. J'ai un ensemble de données volumineuses (se trouve être très déséquilibré: 19: 1). J'utilise donc scikit-learn LogisticRegression()pour m'entraîner sur 80% de mes données étiquetées, puis j'ai validé avec les 20% restants (j'ai regardé la zone sous ROC ainsi que le rappel de précision parce que les données étaient tellement déséquilibrées; j'ai également utilisé le modèle avec class_weight='auto').

Ma question principale est la suivante: une fois que j'ai commencé à générer des prédictions de vecteurs d'entrée non étiquetés (en utilisant predict_proba()), comment savoir quelles caractéristiques ont le plus contribué à la prédiction de cette entrée particulière ? J'imagine que cela pourrait être différent des «caractéristiques les plus importantes» telles que déterminées en général pour le modèle basé sur les données de formation étiquetées (par exemple, la magnitude du coefficient).

J'avais une idée très basique:

  1. Prenez le produit par composant de mes valeurs d'entité en entrée avec la valeur absolue de mes coefficients d'entité. La caractéristique la plus contributive est alors celle qui correspond à l'entrée avec la plus grande valeur.

  2. Faites (1) mais utilisez des z-scores pour tout (formation et fonctionnalités d'entrée). J'ai pensé que ce serait important parce que je craignais que certaines gammes de fonctionnalités soient très différentes des autres et que le simple fait de prendre des produits ne les capture pas; mais je suppose que les coefficients devraient refléter les plages, alors peut-être que cela n'a pas d'importance.

Toutes les pensées seraient grandement appréciées car je suis nouveau dans ce domaine. Les choses spécifiques à la régression logistique (c.-à-d. Sigmoïde au lieu d'une simple fonction linéaire) et toute référence à la façon de mettre en œuvre des actions spécifiques (par exemple, les transformations) dans scikit-learn seraient grandement appréciées car je fais actuellement un projet avec des données réelles.

kilgoretrout
la source
La régression logistique n'est-elle pas davantage un modèle prédictif qu'un type explicatif?
tagoma
@tagoma c'est les deux, non?
Firebug

Réponses:

2

Il existe un moyen d'utiliser uniquement les coefficients de régression, vous pouvez comprendre quelles caractéristiques contribuent le plus à la prédiction d'un vecteur d'entrée donné.

Cependant, vous devrez d'abord standardiser et mettre à l'échelle chaque variable (c'est-à-dire soustraire la moyenne et la diviser par l'écart-type). Ensuite, en réaménageant votre modèle avec les données normalisées et mises à l'échelle, la caractéristique avec le plus grand coefficient de régression sera la caractéristique qui contribuera le plus aux prévisions futures.

Les coefficients de régression sont comparables après la mise à l'échelle car nous avons rendu les unités des entités non pertinentes, donc une augmentation d'une unité de l'entité X1 correspond à sauter 1 écart-type de la fonction non mise à l'échelle.

Alejandro Ochoa
la source
Alejandro, merci pour votre réponse. Il y a un problème avec la formation sur les données normalisées. J'obtiens des performances de modèle bien pires. Ma zone sous la courbe ROC est d'environ 10% de moins et ma zone sous la courbe précision-rappel est également pire. Ainsi, j'hésite à passer mon ajustement de modèle à des données normalisées. Est-ce le coût pour obtenir l'importance des fonctionnalités individuelles que je recherche? Y a-t-il un autre moyen? L'ampleur des coefficients ne reflète-t-elle pas leur importance?
kilgoretrout
Hmm c'est très étrange. Je ne m'attendrais pas à ce que la normalisation des données affecte vos estimations, car la normalisation n'affecte pas les relations sous-jacentes entre les variables. Je ne suis pas sûr d'une autre façon de comparer la valeur prédictive des caractéristiques individuelles
Alejandro Ochoa
2
Si vous constatez de moins bonnes performances dans une régression linéaire après la normalisation des fonctionnalités, vous avez un bogue. Les modèles sur les prédicteurs normalisés et normalisés devraient donner exactement les mêmes prédictions. Un terme de régularisation peut affecter cela, mais les modèles régularisés doivent toujours utiliser des prédicteurs normalisés.
Matthew Drury
2

Une méthode que j'aime utiliser pour voir quelle fonctionnalité contribue à une prédiction spécifique est de réinitialiser toutes les fonctionnalités à leur moyenne une par une, puis de voir comment la prédiction change. J'ai repris cette méthode sur cette page . Mais j'expliquerai également mon propre exemple.

Disons par exemple que nous avons un modèle qui prédit si une journée est une bonne journée pour porter des shorts en fonction de certaines informations météorologiques, disons la température, le vent et la pluie. et disons que nous utilisons une méthode qui nous donne des probabilités de classe.

Nous avons maintenant un jour où le modèle prévoit 50/50 pour un jour donné, mais nous ne voulons pas savoir ce qui cause cela. Nous allons donc passer en revue chacune des fonctionnalités, les réinitialiser à leur moyenne (ou 0) et voir ce que le modèle prédit maintenant.

  • Disons que la température est de 20 ° C, mais la température moyenne est de 10 ° C. Si nous reprédictons le modèle avec la température de ce jour fixée à la moyenne de 10 ° C, mais en gardant la pluie et le vent aux mêmes valeurs, la prédiction finira par être de 80% pour aucun short. De toute évidence, la température a un grand effet! Maintenant, nous pouvons faire de même pour les autres variables.

  • La vitesse du vent est légèrement supérieure à la moyenne, et en remettant le vent à la moyenne et en maintenant les autres égaux, la prédiction ne change que légèrement à 55% pour les shorts. Il semble que la température soit plus importante.

  • Maintenant, la pluie est un peu étrange, car la pluie est déjà dans la moyenne. ainsi, la réinitialisation à la moyenne n'aurait évidemment aucun effet. Mais nous voulons toujours savoir si la pluie influe sur la prédiction, alors ce que nous pouvons faire à la place est de mettre la pluie à 0. Et voilà, une fois que nous avons mis la pluie à 0, le modèle prévoit 75% pour les shorts. Encore un très gros effet.

En parcourant chaque caractéristique et en les réglant sur leur moyenne ou 0, nous avons pu identifier à un niveau de prédiction quelles caractéristiques étaient importantes. Le vent et la température ont tous deux eu un effet important dans les deux sens, tandis que le vent a eu un effet beaucoup plus faible.

Maintenant, pourquoi avons-nous remis la pluie à 0? Faire cela pour la température ou le vent aurait été bizarre, car pour ces 0, c'est une valeur qui arrive rarement et qui a peu d'importance, mais pour la pluie, 0 est à la fois relativement fréquent et signifie quelque chose de spécifique, une journée sèche. Cela signifie qu'il est judicieux de réinitialiser à 0. Donc, vous devez vraiment regarder une fonctionnalité par fonctionnalité ce qui a du sens.

Marijn Stevering
la source