Supposons que je veuille apprendre un classificateur qui prédit si un courrier électronique est un spam. Et supposons que seulement 1% des emails sont du spam.
La chose la plus simple à faire serait d'apprendre le classificateur trivial qui dit qu'aucun des courriels n'est du spam. Ce classificateur nous donnerait une précision de 99%, mais n'apprendrait rien d'intéressant et aurait un taux de faux négatifs de 100%.
Pour résoudre ce problème, les gens m'ont dit de "sous-échantillonner" ou d'apprendre sur un sous-ensemble de données où 50% des exemples sont du spam et 50% ne sont pas du spam.
Mais je suis inquiet à propos de cette approche, puisqu’une fois que nous aurons construit ce classificateur et commencé à l’utiliser sur un véritable corpus d’e-mails (par opposition à un ensemble de tests 50/50), il se peut qu’ils prédisent que de nombreux e-mails sont du spam quand ils " re vraiment pas. Juste parce qu'il est habitué à voir beaucoup plus de spam qu'il n'y en a réellement dans l'ensemble de données.
Alors, comment pouvons-nous résoudre ce problème?
("Upsampling" ou répétition répétée des exemples positifs d’entraînement pour que 50% des données soient des exemples positifs d’entraînement, semble souffrir de problèmes similaires.)
la source
Le vrai problème ici réside dans le choix de votre métrique: le pourcentage de précision est une mauvaise mesure du succès d’un modèle sur un ensemble de données non équilibré (pour la raison précise que vous mentionnez: c’est trivial d’atteindre une précision de 99% dans ce cas).
Équilibrer votre jeu de données avant d'ajuster le modèle est une mauvaise solution car cela polarise votre modèle et (pire encore) jette des données potentiellement utiles.
Vous feriez bien mieux d’équilibrer votre mesure de précision plutôt que d’équilibrer vos données. Par exemple , vous pouvez utiliser une précision équilibrée lorsque vous évaluer le modèle:
(error for the positive class + error for the negative class)/2
. Si vous prédisez tout positif ou tout négatif, cette métrique sera50%
une propriété intéressante.À mon avis, la seule raison pour sous-échantillonner est lorsque vous avez trop de données et que vous ne pouvez pas adapter votre modèle. De nombreux classificateurs (régression logistique, par exemple) conviendront parfaitement aux données non équilibrées.
la source
Comme toujours
@Marc Claesen
comme une excellente réponse.J'ajouterais simplement que le concept clé qui semble manquer est celui d'une fonction de coût . Quel que soit le modèle, le coût implicite ou explicite des faux négatifs en faux positifs (FN / FP) est implicite ou explicite. Pour les données déséquilibrées décrites, on est souvent prêt à avoir un rapport de 5: 1 ou 10: 1. Il existe de nombreuses façons d’introduire des fonctions de coût dans les modèles. Une méthode traditionnelle consiste à imposer un seuil de probabilité aux probabilités générées par un modèle - cela fonctionne bien pour la régression logistique.
Une méthode utilisée pour les classificateurs stricts qui ne génèrent pas naturellement les estimations de probabilité consiste à sous-échantillonner la classe majoritaire selon un ratio qui induira la fonction de coût qui vous intéresse. Notez que si vous échantillonnez à 50/50, vous induisez une fonction de coût arbitraire. La fonction de coût est différente mais tout aussi arbitraire que si vous échantillonniez au taux de prévalence. Vous pouvez souvent prédire un ratio d'échantillonnage approprié correspondant à votre fonction de coût (ce n'est généralement pas 50/50), mais la plupart des praticiens auxquels j'ai parlé se contentent d'essayer quelques ratios et de choisir celui qui est le plus proche de leur fonction de coût.
la source
Répondez directement à la question de Jessica - une des raisons pour le sous-échantillonnage est lorsque vous travaillez avec un jeu de données volumineux et que vous faites face à des limites de mémoire sur votre ordinateur ou souhaitez simplement réduire le temps de traitement. Le sous-échantillonnage (c’est-à-dire le prélèvement d’un échantillon aléatoire sans remplacement) à partir des observations négatives réduit l’ensemble de données à une taille plus gérable.
Vous avez mentionné l'utilisation d'un "classificateur" dans votre question mais vous n'avez pas précisé lequel. Les classificateurs que vous voudrez peut-être éviter sont les arbres de décision. Lorsque j'exécute un arbre de décision simple sur des données d'événements rares, je trouve souvent que l'arbre ne construit qu'une seule racine, car il a des difficultés à scinder si peu de cas positifs en catégories. Il peut y avoir des méthodes plus sophistiquées pour améliorer les performances des arbres lors d'événements rares - je n'en connais aucune de manière inattendue.
Par conséquent, l’utilisation d’une régression logistique renvoyant une valeur de probabilité prédite continue, comme le suggère Marc Claesen, constitue une meilleure approche. Si vous effectuez une régression logistique sur les données, les coefficients restent non biaisés malgré le nombre réduit d'enregistrements. Vous devrez ajuster l'interception,β0
oùp+ est la fraction des cas positifs dans votre population avant échantillonnage.
la source
Bien sûr, tout classer comme "non spam" vous permet de dire que, pour 100 courriers, 100 d'entre eux sont correctement classés, mais également comme "non spam" le seul étiqueté comme spam (100% faux positif). Il s'avère que la métrique choisie pour évaluer l'algorithme n'est pas adaptée. Cette vidéo illustre le concept.
En gros, l’équilibrage du jeu de données vous permet de pondérer les erreurs de classification. Un algorithme qui utilise un ensemble d’entraînement déséquilibré n’apprendra vraisemblablement pas à discriminer les caractéristiques, car il n’accorderait pas beaucoup d’importance au fait que les données de la classe maigre sont mal classées.
la source
Je ne choisirais ni le sous-échantillonnage ni le rééchantillonnage car les deux astuces de l'algorithme d'apprentissage. Cependant, si les données sont déséquilibrées, la mesure de la précision devient invalide ou manque d'information, il est donc préférable d'utiliser des mesures de précision et de rappel, les deux dépendant principalement du TP ( les spams correctement classés dans votre cas), cela donne une bonne idée de la performance réelle de votre système en termes de détection des spams quel que soit le nombre d'exemples négatifs.
la source