Échantillonnage des données déséquilibrées en régression

22

Il y a eu de bonnes questions sur le traitement des données déséquilibrées dans le contexte de la classification , mais je me demande ce que les gens font pour échantillonner pour la régression.

Supposons que le domaine problématique soit très sensible au signe, mais seulement quelque peu sensible à l'ampleur de la cible. Cependant, l'ampleur est suffisamment importante pour que le modèle soit la régression (cible continue) et non la classification (classes positives vs négatives). Et dites dans ce domaine problématique que tout ensemble de données d'entraînement aura 10 fois plus de cibles négatives que positives.

Dans ce scénario, je pourrais suréchantillonner les exemples de cible positive pour faire correspondre le nombre d'exemples de cible négative, puis former un modèle pour différencier les deux cas. De toute évidence, l'approche de la formation fonctionne mal sur les données déséquilibrées, donc je dois faire un échantillonnage quelconque. Quelle serait une manière décente de "défaire" ce suréchantillonnage lors de la réalisation de prévisions? Peut-être se traduisant par la moyenne (négative) ou la médiane de la cible des données d'entraînement naturelles?

someben
la source

Réponses:

15

Le déséquilibre n'est pas nécessairement un problème, mais comment y arriver peut l'être. Il n'est pas judicieux de baser votre stratégie d'échantillonnage sur la variable cible. Étant donné que cette variable incorpore le caractère aléatoire dans votre modèle de régression, si vous effectuez un échantillonnage sur cette base, vous aurez de gros problèmes à faire tout type d'inférence. Je doute qu'il soit possible de "résoudre" ces problèmes.

Vous pouvez légitimement sur- ou sous-échantillonner en fonction des variables prédictives . Dans ce cas, à condition de vérifier soigneusement que les hypothèses du modèle semblent valides (par exemple l'homoscédasticité qui nous vient à l'esprit comme importante dans cette situation, si vous avez une régression "ordinaire" avec les hypothèses habituelles), je ne pense pas que vous ayez besoin de annuler le suréchantillonnage lors de la prévision. Votre cas serait désormais similaire à celui d'un analyste qui a conçu explicitement une expérience pour avoir une plage équilibrée de variables prédictives.

Édition - ajout - expansion sur les raisons pour lesquelles il est mauvais d'échantillonner sur la base de Y

y=Xb+eeeXb) le e n'aura plus de moyenne nulle ni ne sera distribué de façon identique. Par exemple, des valeurs faibles de y qui pourraient inclure des valeurs très faibles de e pourraient être moins susceptibles d'être sélectionnées. Cela ruine toute inférence basée sur les moyens habituels d'ajustement de tels modèles. Des corrections peuvent être faites similaires à celles faites en économétrie pour ajuster des modèles tronqués, mais elles sont pénibles et nécessitent des hypothèses supplémentaires, et ne devraient être utilisées que lorsqu'il n'y a pas d'alternative.

Considérez l'illustration extrême ci-dessous. Si vous tronquez vos données à une valeur arbitraire pour la variable de réponse, vous introduisez des biais très importants. Si vous le tronquez pour une variable explicative, il n'y a pas nécessairement de problème. Vous voyez que la ligne verte, basée sur un sous-ensemble choisi en raison de leurs valeurs de prédicteur, est très proche de la vraie ligne ajustée; cela ne peut pas être dit de la ligne bleue, basée uniquement sur les points bleus.

Cela s'étend au cas moins grave de sous-échantillonnage ou de suréchantillonnage (car la troncature peut être considérée comme un sous-échantillonnage poussé à son extrême logique).

entrez la description de l'image ici

# generate data
x <- rnorm(100)
y <- 3 + 2*x + rnorm(100)

# demonstrate
plot(x,y, bty="l")
abline(v=0, col="grey70")
abline(h=4, col="grey70")
abline(3,2, col=1)
abline(lm(y~x), col=2)
abline(lm(y[x>0] ~ x[x>0]), col=3)
abline(lm(y[y>4] ~ x[y>4]), col=4)
points(x[y>4], y[y>4], pch=19, col=4)
points(x[x>0], y[x>0], pch=1, cex=1.5, col=3)
legend(-2.5,8, legend=c("True line", "Fitted - all data", "Fitted - subset based on x",
    "Fitted - subset based on y"), lty=1, col=1:4, bty="n")
Peter Ellis
la source
Merci pour la réponse, Peter. Pourriez-vous expliquer ce que vous entendez par «parce que cette variable incorpore le caractère aléatoire dans votre modèle de régression»? La cible est un observable dans l'environnement, alors voulez-vous dire une erreur de mesure?
someben
1
Voici un article d'un prof de NYU nommé Foster Provost sur la question: pages.stern.nyu.edu/~fprovost/Papers/skew.PDF Dans mon cas, je fais une régression avec des données déséquilibrées et non une classification. D'où ma question.
someben
1
@someben - J'ai élaboré et ajouté un exemple. Il est bien décrit dans la littérature sur la régression que vous ne pouvez pas échantillonner en fonction de la variable dépendante. Cela devrait également s'appliquer à d'autres modèles. Un échantillon qui est "déséquilibré" est une chose différente et n'est pas un problème; sauf si vous l'avez délibérément créé par une stratégie d'échantillonnage injustifiable. Ce n'est pas l'équilibre ou le manque d'équilibre qui est le problème, mais la façon dont vous obtenez vos données.
Peter Ellis
2
@someben, non, je ne pense pas que cela fasse une différence. La question est plus fondamentale que cela.
Peter Ellis
1
Bel exemple! Votre graphique me rappelle un article de Richard Berk (1983) sur le biais de sélection des échantillons . À noter également, vous pouvez "annuler" ces problèmes si vous connaissez explicitement le mécanisme de sélection des échantillons, et il existe une série de modèles économétriques construits autour de cette notion (comme le modèle tobit ou les travaux de James Heckman).
Andy W
2

Il s'agit de savoir si vous faites une analyse causale ou une prédiction. Lisez http://m.statisticalhorizons.com/?ref=http%3A%2F%2Ft.co%2F54MWZrVAyX&url=http%3A%2F%2Fstatisticalhorizons.com%2Fprediction-vs-causation-in-regression-analysis&width=640

Le rééchantillonnage sur la variable cible pour la formation à des fins de prédiction fonctionne aussi longtemps que l'on teste sur un échantillon non rééchantillonné. Le tableau de performance final doit être basé uniquement sur le maintien. Pour une plus grande précision dans la détermination de la prévisibilité du modèle, des techniques de validation croisée doivent être utilisées.

Vous "annulez" par l'analyse finale du modèle de régression et sur l'ensemble de données déséquilibré.

Chris
la source
2

Ce n'est pas une tentative de fournir une solution pratique à votre problème, mais je viens de faire un peu de recherche sur la gestion des ensembles de données déséquilibrés dans les problèmes de régression et je voulais partager mes résultats:

jhin
la source
1

tout d'abord, la ration 1:10 n'est pas mal du tout. il existe un moyen simple d'annuler l'échantillonnage -

1) pour un problème de classification, si vous avez sous-échantillonné une classe négative par 10. la probabilité résultante est 10 fois plus élevée. vous pouvez simplement diviser la probabilité résultante par 10. (connu sous le nom de réétalonnage du modèle)

2) Facebook a également des sous-échantillons (pour la prédiction des clics dans la régression logistique) et fait un échantillonnage négatif vers le bas. le recalibrage se fait par la formule simple p / (p + (1-p) / w); où p est la prédiction dans le sous-échantillonnage, nw est le taux d'échantillonnage négatif vers le bas.

Arpit Sisodia
la source
Je ne pense pas que ce soit aussi simple, Arpit. De nombreux algos non linéaires ne voient pas suffisamment d'instances de classe sous-échantillonnées et deviennent biaisés vers une suréchantillonnage, et en raison de leur non-linéarité, vous n'aurez pas les moyens de résoudre ce problème.
Anatoly Alekseev
1

Je pense que ce qui pourrait vous aider compte tenu de votre problème est la technique de suréchantillonnage des minorités synthétiques pour la régression (SMOTER). Il y a des recherches sur ce sujet. Cependant, il reste moins exploré que son homologue de classification, comme vous l'avez probablement rencontré.

Je pourrais suggérer le document cité ci-dessous (et la conférence à laquelle il a été présenté http://proceedings.mlr.press/v74/ ) en fonction de votre intérêt à le comprendre dans une perspective de recherche. J'ai vraiment apprécié l'introduction du bruit gaussien dans la génération des observations synthétiques.

Si vous êtes plus intéressé par une solution pratique, le premier auteur a une implémentation R disponible sur sa page Github. https://github.com/paobranco/SMOGN-LIDTA17

Si Python est plus de votre persuasion, j'ai récemment distribué une implémentation entièrement Pythonique de l'algorithme SMOGN qui est maintenant disponible et en cours de test unitaire. https://github.com/nickkunz/smogn

J'espère que cela a aidé!

Branco, P., Torgo, L., Ribeiro, R. (2017). "SMOGN: Une approche de prétraitement pour une régression déséquilibrée". Proceedings of Machine Learning Research, 74: 36-50. http://proceedings.mlr.press/v74/branco17a/branco17a.pdf .

Nick Kunz
la source