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:
- Que puis-je faire pour améliorer le nombre de résultats positifs?
- Comment déterminer s'il y a sur-équipement dans un tel cas? (J'ai essayé de tracer etc.)
- À 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)
- 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?
- 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]]