Imputation avant ou après scission en train et test?


18

J'ai un ensemble de données avec N ~ 5000 et environ 1/2 manquant sur au moins une variable importante. La principale méthode d'analyse sera les risques proportionnels de Cox.

Je prévois d'utiliser l'imputation multiple. Je vais également me séparer en train et en test.

Dois-je diviser les données puis imputer séparément, ou imputer puis diviser?

Si cela importe, je vais utiliser PROC MIdans SAS.


2
50% de valeurs manquantes pour une variable cruciale? Pouah. Plutôt que d'imputer, pourquoi ne pas créer une catégorie «manquante» pour la variable?
RobertF

Aucune variable n'a 50% manquant, mais environ 50% est manquant sur au moins une. De plus, ils sont continus, donc "manquer" gâcherait les choses.
Peter Flom - Réintègre Monica

Ah. Je deviens nerveux en utilisant l'imputation. Je m'interroge sur le bien-fondé d'avoir une variable continue avec des valeurs imputées à 50% par rapport à la conversion du cont. variable à catégorique avec une catégorie «manquant» plus suffisamment de cases pour capturer le comportement des valeurs non manquantes?
RobertF

Je n'aime pas regrouper les variables continues.
Peter Flom - Réintègre Monica

Réponses:


20

Vous devez diviser avant le prétraitement ou l'imputation.

La division entre la formation et l'ensemble de test est une tentative de reproduire la situation où vous avez des informations passées et construisez un modèle que vous testerez sur des informations futures encore inconnues: l'ensemble de formation prend la place du passé et l'ensemble de test prend l'endroit du futur, donc vous ne pourrez tester votre modèle formé qu'une seule fois.

En gardant à l'esprit l'analogie passée / future, cela signifie que tout ce que vous faites pour prétraiter ou traiter vos données, comme imputer des valeurs manquantes, vous devez le faire uniquement sur l'ensemble de formation. Vous pouvez ensuite vous souvenir de ce que vous avez fait à votre ensemble d'entraînement si votre ensemble de test doit également être prétraité ou imputé, de sorte que vous le fassiez de la même manière sur les deux ensembles.

Ajouté à partir des commentaires: si vous utilisez les données de test pour affecter les données de formation, alors les données de test sont utilisées pour construire votre modèle, donc elles cessent d'être des données de test et ne fourniront pas un test équitable de votre modèle. Vous risquez de sur-adapter, et c'était pour décourager cela que vous avez séparé les données de test en premier lieu


Lorsque vous dites "vous procédez de la même manière sur les deux ensembles", voulez-vous dire: "utilisez la même méthode pour imputer les données manquantes dans l'ensemble de test, mais PAS les mêmes données"?
timwiz

@colorlace Utilisez l'analogie passé / futur. Vous avez utilisé l'ensemble de formation dans le passé et imputé certaines valeurs. Vous obtenez maintenant l'ensemble de test à l'avenir et souhaitez imputer certaines de ses valeurs; vous utiliserez probablement la même méthode qu'avant appliquée aux données de test (bien que vous soyez libre d'incorporer ce que vous avez appris des données de formation)
Henry

Si vous "êtes libre d'incorporer ce que vous avez appris des données d'entraînement", alors en quoi est-ce différent de ne pas se séparer avant l'imputation.
timwiz

1
@colorlace: ce point final est précisément ce que je dis: rien de ce que vous faites avec les données de formation ne devrait être informé par les données de test (l'analogie est que l'avenir ne devrait pas affecter le passé), mais ce que vous faites avec les données de test peut être informé par les données de formation (l'analogie est que vous pouvez utiliser le passé pour aider à prédire l'avenir)
Henry

1
@colorlace - si vous utilisez les données de test pour affecter les données de formation, alors les données de test sont utilisées pour construire votre modèle, donc elles cessent d'être des données de test et ne fourniront pas un test équitable de votre modèle. Vous risquez de sur-adapter, et c'est pour décourager cela que vous avez séparé les données de test en premier lieu
Henry

1

Je pense que vous feriez mieux de vous séparer avant de procéder à l'imputation. Par exemple, vous souhaiterez peut-être imputer des valeurs manquantes avec la moyenne des colonnes. Dans ce cas, si vous imputez d'abord avec train + ensemble de données valide et fractionnez ensuite, vous avez utilisé un ensemble de données de validation avant de construire votre modèle, c'est ainsi qu'un problème de fuite de données apparaît.

Mais vous pourriez vous demander, si j'impute après le fractionnement, cela peut être trop fastidieux lorsque je dois faire une validation croisée. Ma suggestion pour cela est d'utiliser le pipeline sklearn. Cela simplifie vraiment votre code et réduit les risques d'erreur. Voir Pipeline


0

Juste pour ajouter à ce qui précède, je préférerais également le fractionnement avant l'imputation ou tout autre type de prétraitement. Rien de ce que vous faites avec les données d'entraînement ne devrait être informé par les données du test (l'analogie est que l'avenir ne devrait pas affecter le passé). Vous pouvez ensuite vous souvenir de ce que vous avez fait à votre ensemble d'entraînement si votre ensemble de test doit également être prétraité ou imputé, de sorte que vous le fassiez de la même manière sur les deux ensembles (l'analogie est que vous pouvez utiliser le passé pour aider à prédire l'avenir) .

Si vous utilisez les données de test pour affecter les données de formation de quelque manière que ce soit, alors les données de test sont utilisées pour construire votre modèle, elles cessent donc d'être des données de test et ne fourniront pas un test équitable de votre modèle. Vous risquez un ajustement excessif, et c'est pour décourager cela que vous avez séparé les données de test en premier lieu!

Je pense que le paquet caret dans r est très utile dans ce cadre. J'ai trouvé que cet article était extrêmement utile https://topepo.github.io/caret/model-training-and-tuning.html

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.