Gérer de bonnes performances sur les données de formation et de validation, mais de très mauvaises performances sur les données de test

8

J'ai un problème de régression avec 5-6k variables. Je divise mes données en 3 ensembles qui ne se chevauchent pas: formation, validation et tests. Je m'entraîne en utilisant uniquement l'ensemble d'entraînement et je génère de nombreux modèles de régression linéaire différents en choisissant un ensemble différent de 200 variables pour chaque modèle (j'essaie environ 100 000 de ces sous-ensembles). Je marque un modèle comme . En utilisant ce critère, je finis par choisir un modèle. Il s'avère que le modèle choisi a un R ^ 2 très similaire sur la formation et les données de validation. Cependant, lorsque j'essaie ce modèle sur les données de test, il a un R ^ 2 beaucoup plus faible . Il semble donc que je sois en quelque sorte sur-ajusté à la fois sur les données de formation et de validation. Avez-vous des idées sur la façon d'obtenir un modèle plus robuste? min(Rtraining data2,Rvalidation data2)R2R2

J'ai essayé d'augmenter la taille des données d'entraînement, mais cela n'a pas aidé. Je pense peut-être à réduire la taille de chaque sous-ensemble.

J'ai essayé d'utiliser la régularisation. Cependant, les modèles que j'obtiens en utilisant le lasso ou le filet élastique ont un R ^ 2 beaucoup plus faible R2sur l'ensemble d'apprentissage ainsi que sur l'ensemble de validation, par rapport au modèle que j'obtiens en faisant l'approche de sélection des sous-ensembles. Par conséquent, je ne considère pas ces modèles, car je suppose que si le modèle A fonctionne mieux que le modèle B à la fois sur l'ensemble de formation et sur l'ensemble de validation, le modèle A est clairement meilleur que le modèle B.Je serais très curieux si vous en désaccord avec cela.

Sur une note connexe, pensez-vous que R2 est un mauvais critère pour choisir mes modèles?

user10
la source

Réponses:

5

Bien que cela ressemble un peu à un sur-ajustement, je pense qu'il est en fait plus probable que vous ayez une sorte de "bug" dans votre code ou votre processus. Je commencerais par vérifier que votre ensemble de tests n'est pas en quelque sorte systématiquement différent de l'ensemble de formation / validation. Supposons que vos données soient triées par date (ou autre). Si vous avez utilisé les premiers 50% pour la formation, les 25% suivants pour la validation et le reste pour les tests, vous avez peut-être accidentellement stratifié vos données d'une manière qui rend les données de formation quelque peu représentatives des données de validation, mais moins pour le tester les données. C'est assez facile à faire par accident.

Vous devez également vous assurer que vous n'êtes pas en train de "doubler" les données de validation, ce qui arrive parfois accidentellement.

Alternativement, le CV de @Frank Harrell a rapporté qu'un seul train / split de test est souvent trop variable pour fournir des informations utiles sur les performances d'un système (peut-être qu'il peut peser avec une citation ou des données). Vous pourriez envisager de faire quelque chose comme la validation croisée ou l'amorçage, qui vous permettrait de mesurer à la fois la moyenne et la variance de votre mesure de précision.

Contrairement à Mikera, je ne pense pas que le problème soit votre mécanisme de notation. Cela dit, je ne peux pas imaginer une situation où votre , je suggère donc de noter en utilisant uniquement les données de validation.Rtraining2<Rvalidation2

Plus généralement, je pense que ou quelque chose comme ça est un choix raisonnable pour mesurer les performances d'un modèle à sortie continue, en supposant que vous êtes conscient de ses mises en garde potentielles. En fonction de ce que vous faites exactement, vous pouvez également rechercher l' erreur maximale ou la pire des situations. Si vous discrétisez en quelque sorte votre sortie (régression logistique, certains seuils externes), alors regarder la précision / le rappel / l'AUC pourrait être une meilleure idée.R2

Matt Krause
la source
Merci pour ta réponse Matt. J'ai en effet des données triées par date. Je le divise en 3 parties et utilise la première partie pour la formation, la prochaine partie pour la validation et la dernière partie pour les tests. Pour mon application, les données de test seront toujours chronologiquement après l'ensemble de formation et de validation, bien que je puisse mélanger l'ensemble de formation et de validation comme je le souhaite (y compris la validation croisée). Je vais essayer la validation croisée. Cependant, je ne m'attends pas à ce qu'il fasse cela bien parce que mon sur l'ensemble de formation et de validation est assez proche. <Le repos a continué dans le commentaire suivant>R2
user10
Je vérifierai également la variance de pour différents jours. Si la variance est élevée, je m'attendrais à ce que la validation croisée soit utile. Sinon, je m'attendrais à ce qu'il donne des résultats similaires à un ensemble de validation comme je l'ai déjà. Merci encore! R2
user10
La commande en soi n'est pas le problème; c'est que l'ensemble de formation pourrait être plus représentatif de l'ensemble de validation que l'ensemble de test. Par exemple, imaginez que vous prédisez les ventes d'un magasin. Si votre ensemble de formation contient juin, juillet et août, il fera probablement un bon travail pour prédire les ventes de septembre également (l'ensemble de validation). Cependant, il pourrait complètement s'effondrer lors des tests sur les ventes de novembre et décembre: les gens achètent des cadeaux de vacances et des vêtements d'hiver au lieu de shorts et de crème solaire, etc.
Matt Krause
1

Vous êtes surajusté parce que vous utilisez des min(training r-square,validation r-square)données pour produire un score, qui est à son tour utilisé pour piloter la sélection du modèle. Parce que votre carré d'entraînement r est probablement égal ou inférieur (après tout, vous venez de faire une régression), cela équivaut à peu près à faire la sélection du modèle sur le carré r des données d'entraînement.

Cela a pour effet de s'adapter trop étroitement aux données de formation et d'ignorer les données de validation.

Si vous l'avez utilisé, validation r-squarevous devriez obtenir un meilleur résultat.

mikera
la source
Mais n'est-ce pas l'intérêt d'avoir un ensemble de données de validation? Ne devrais-je pas simplement choisir un modèle présentant une faible erreur sur l'ensemble de validation (c'est-à-dire hors échantillon)?
user10
Désolé d'avoir mal lu votre question. J'ai modifié la réponse.
mikera
Puisque j'ai effectué une régression, ma formation devrait généralement être supérieure à la validation , et puisque j'utilise le min, n'est-ce pas équivalent à faire une sélection de modèle en utilisant l'ensemble de validation? Il se trouve que depuis que j'utilise min, j'obtiens un bon pour la formation et la validation, ce qui malheureusement ne se traduit pas par l'ensemble de test. Merci! R2R2R2
user10