Modèle de classification binaire pour les données asymétriques

14

J'ai un ensemble de données avec les spécifications suivantes:

  • Ensemble de données d'apprentissage avec 193 176 échantillons avec 2 821 positifs
  • Ensemble de données de test avec 82 887 échantillons avec 673 positifs
  • Il y a 10 fonctionnalités.

Je souhaite effectuer une classification binaire (0 ou 1). Le problème auquel je suis confronté est que les données sont très déséquilibrées. Après la normalisation et la mise à l'échelle des données ainsi que l'ingénierie des fonctionnalités et l'utilisation de quelques algorithmes différents, voici les meilleurs résultats que j'ai pu obtenir:

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

soit seulement 6 coups positifs corrects. Il s'agit de régression logistique. Voici les différentes choses que j'ai essayées avec ceci:

  • Différents algorithmes comme RandomForest, DecisionTree, SVM
  • Modification de la valeur des paramètres pour appeler la fonction
  • Ingénierie des fonctionnalités basée sur l'intuition pour inclure des fonctionnalités composées

Maintenant, mes questions sont:

  1. Que puis-je faire pour améliorer le nombre de résultats positifs?
  2. Comment déterminer s'il y a sur-équipement dans un tel cas? (J'ai essayé de tracer etc.)
  3. À quel moment pourrait-on conclure si c'est peut-être le meilleur ajustement possible que je pourrais avoir? (ce qui semble triste si l'on considère seulement 6 hits sur 673)
  4. Existe-t-il un moyen de faire en sorte que les instances d'échantillons positifs pèsent plus afin que la reconnaissance des formes s'améliore, entraînant plus de hits?
  5. Quels graphiques pourraient aider à détecter les valeurs aberrantes ou une certaine intuition quant au modèle qui conviendrait le mieux?

J'utilise la bibliothèque scikit-learn avec Python et toutes les implémentations sont des fonctions de bibliothèque.

Éditer:

Voici les résultats avec quelques autres algorithmes:

Classificateur de forêt aléatoire (n_estimators = 100)

[[82211   667]
[    3     6]]

Arbres de décision:

[[78611   635]
[ 3603    38]]
tejaskhot
la source

Réponses:

11
  1. Puisque vous effectuez une classification binaire, avez-vous essayé d'ajuster le seuil de classification? Étant donné que votre algorithme semble plutôt insensible, j'essaierais de l'abaisser et de vérifier s'il y a une amélioration.

  2. Vous pouvez toujours utiliser des courbes d'apprentissage ou un tracé d'un paramètre de modèle par rapport à une erreur de formation et de validation pour déterminer si votre modèle est trop adapté. Il semble que ce soit mal adapté à votre cas, mais ce n'est que de l'intuition.

  3. Eh bien, en fin de compte, cela dépend de votre ensemble de données et des différents modèles que vous avez essayés. À ce stade, et sans tests supplémentaires, il ne peut y avoir de réponse définitive.

  4. Sans prétendre être un expert sur le sujet, il existe un certain nombre de techniques différentes que vous pouvez suivre (indice: premier lien sur google ), mais à mon avis, vous devez d'abord vous assurer de bien choisir votre fonction de coût, afin qu'elle représente ce que vous recherchez réellement.

  5. Vous ne savez pas ce que vous entendez par intuition de modèle, pouvez-vous élaborer?

Au fait, quels ont été vos résultats avec les différents algorithmes que vous avez essayés? Étaient-ils différents?

insys
la source
1
L'ajustement du seuil de régression logistique a fait l'affaire. Merci pour la liste des sources.
tejaskhot
Quelqu'un peut-il coller un extrait de code indiquant comment ajuster un seuil de régression logistique?
Blenz
0

Étant donné que les données sont très asymétriques, dans un tel cas, nous pouvons également essayer la formation de modèles après un suréchantillonnage des données.

SMOTE et ADASYN sont quelques-unes des techniques que nous pouvons utiliser pour suréchantillonner les données.

vipin bansal
la source