Umgang mit guten Leistungen bei Trainings- und Validierungsdaten, aber sehr schlechten Leistungen bei Testdaten

8

Ich habe ein Regressionsproblem mit 5-6k Variablen. Ich teile meine Daten in 3 nicht überlappende Sätze ein: Training, Validierung und Testen. Ich trainiere nur mit dem Trainingssatz und generiere viele verschiedene lineare Regressionsmodelle, indem ich für jedes Modell einen anderen Satz von 200 Variablen auswähle (ich versuche ungefähr 100.000 solcher Teilmengen). Ich bewerte ein Modell als . Nach diesem Kriterium wähle ich am Ende ein Modell. Es stellt sich heraus, dass das gewählte Modell in den Trainings- und Validierungsdaten ein sehr ähnliches R ^ 2 aufweist . Wenn ich dieses Modell jedoch anhand der Testdaten ausprobiere, hat es viel weniger R ^ 2 . Es scheint also, dass ich sowohl die Trainings- als auch die Validierungsdaten irgendwie überpasse. Irgendwelche Ideen, wie ich ein robusteres Modell bekommen kann? min(Rtraining data2,Rvalidation data2)R2R2

Ich habe versucht, die Größe der Trainingsdaten zu erhöhen, aber das hat nicht geholfen. Ich denke daran, vielleicht die Größe jeder Teilmenge zu verkleinern.

Ich habe versucht, Regularisierung zu verwenden. Die Modelle, die ich mit dem Lasso oder dem elastischen Netz erhalte, haben jedoch sowohl im Trainingssatz als auch im Validierungssatz viel weniger R2 als das Modell, das ich mit dem Teilmengenauswahlansatz erhalte. Daher berücksichtige ich diese Modelle nicht, da ich davon ausgehe, dass Modell A sowohl im Trainingssatz als auch im Validierungssatz eine bessere Leistung als Modell B erbringt als Modell B. Ich wäre sehr neugierig, wenn Sie stimme dem nicht zu.

Denken Sie in einem ähnlichen Zusammenhang, dass R2 ein schlechtes Kriterium für die Auswahl meiner Modelle ist?

user10
quelle

Antworten:

5

Das klingt zwar etwas nach Überanpassung, aber ich denke, es ist tatsächlich wahrscheinlicher, dass Sie einen "Fehler" in Ihrem Code oder Ihrem Prozess haben. Ich würde zunächst überprüfen, ob sich Ihr Testsatz nicht systematisch vom Trainings- / Validierungssatz unterscheidet. Angenommen, Ihre Daten sind nach Datum (oder was auch immer) sortiert. Wenn Sie die ersten 50% für das Training, die nächsten 25% für die Validierung und den Rest für Tests verwendet haben, haben Sie Ihre Daten möglicherweise versehentlich so geschichtet, dass die Trainingsdaten etwas repräsentativ für die Validierungsdaten sind, weniger jedoch für die Daten testen. Dies ist aus Versehen ziemlich einfach.

Sie sollten auch sicherstellen, dass Sie nicht irgendwie in die Validierungsdaten "doppelt eintauchen", was manchmal versehentlich passiert.

Alternativ hat CVs eigener @Frank Harrell berichtet, dass eine einzelne Zug- / Testaufteilung oft zu variabel ist, um nützliche Informationen über die Leistung eines Systems zu liefern (möglicherweise kann er mit einem Zitat oder einigen Daten abwägen). Sie könnten in Betracht ziehen, eine Kreuzvalidierung oder ein Bootstrapping durchzuführen, mit denen Sie sowohl den Mittelwert als auch die Varianz Ihres Genauigkeitsmaßes messen können.

Im Gegensatz zu Mikera glaube ich nicht, dass das Problem Ihr Bewertungsmechanismus ist. Trotzdem kann ich mir keine Situation vorstellen, in der Ihr ist. Daher würde ich vorschlagen, die Bewertung nur anhand der Validierungsdaten vorzunehmen.Rtraining2<Rvalidation2

Generell halte ich oder ähnliches für eine vernünftige Wahl, um die Leistung eines Modells mit kontinuierlicher Ausgabe zu messen, vorausgesetzt, Sie sind sich seiner möglichen Einschränkungen bewusst. Je nachdem, was Sie gerade tun, möchten Sie möglicherweise auch den maximalen oder den schlimmsten Fehler untersuchen. Wenn Sie Ihre Ausgabe irgendwie diskretisieren (logistische Regression, einige externe Schwellenwerte), ist es möglicherweise besser, auf Präzision / Rückruf / AUC zu achten.R2

Matt Krause
quelle
Vielen Dank für Ihre Antwort Matt. Ich habe tatsächlich Daten nach Datum sortiert. Ich teile es in 3 Teile und verwende den ersten Teil für das Training, den nächsten Teil für die Validierung und den letzten Teil zum Testen. Für meine Anwendung werden die Testdaten immer chronologisch nach dem Trainings- und Validierungssatz angezeigt, obwohl ich den Trainings- und Validierungssatz beliebig mischen kann (einschließlich Kreuzvalidierung). Ich werde die Kreuzvalidierung versuchen. Obwohl ich nicht erwarte, dass es so gut läuft, weil mein sowohl im Trainings- als auch im Validierungssatz ziemlich nahe beieinander liegt. <Rest im nächsten Kommentar fortgesetzt>R2
user10
Ich werde auch die Varianz in für verschiedene Tage überprüfen . Wenn die Varianz hoch ist, würde ich erwarten, dass eine Kreuzvalidierung hilfreich ist. Wenn nicht, würde ich erwarten, dass es ähnliche Ergebnisse liefert wie ein Validierungssatz, wie ich ihn bereits habe. Danke noch einmal! R2
Benutzer10
Die Bestellung an sich ist nicht das Problem; Es ist so, dass der Trainingssatz möglicherweise repräsentativer für den Validierungssatz ist als der Testsatz. Stellen Sie sich zum Beispiel vor, Sie prognostizieren den Umsatz eines Geschäfts. Wenn Ihr Trainingsset Juni, Juli und August enthält, kann es wahrscheinlich auch die Verkäufe im September gut vorhersagen (das Validierungsset). Es könnte jedoch völlig auseinanderfallen, wenn es im November und Dezember getestet wird: Die Leute kaufen Weihnachtsgeschenke und Winterkleidung anstelle von Shorts und Sonnencreme usw.
Matt Krause
1

Sie passen zu viel, weil Sie min(training r-square,validation r-square)Daten verwenden, um eine Punktzahl zu erstellen, die wiederum zur Steuerung der Modellauswahl verwendet wird. Da Ihr Trainings-R-Quadrat wahrscheinlich gleich oder niedriger ist (Sie haben schließlich nur eine Regression durchgeführt), entspricht dies in etwa der Modellauswahl auf dem R-Quadrat der Trainingsdaten.

Dies hat zur Folge, dass die Trainingsdaten zu eng anliegen und die Validierungsdaten ignoriert werden.

Wenn Sie gerade validation r-squaredann verwendet haben, sollten Sie ein besseres Ergebnis erzielen.

mikera
quelle
Aber ist das nicht der Sinn eines Validierungsdatensatzes? Sollte ich nicht einfach ein Modell auswählen, das einen geringen Fehler bei der Validierung (dh außerhalb der Stichprobe) aufweist?
Benutzer10
Entschuldigung, ich habe Ihre Frage leicht falsch verstanden. Ich habe die Antwort geändert.
Mikera
Da ich eine Regression durchgeführt habe, sollte mein Training im Allgemeinen größer sein als die Validierung , und da ich die min verwende, ist es nicht gleichbedeutend mit der Modellauswahl unter Verwendung des Validierungssatzes? Es kommt einfach so vor, dass ich, da ich min benutze, sowohl für das Training als auch für die Validierung ein gutes bekomme , was sich leider nicht auf den Testsatz überträgt. Vielen Dank! R2R2R2
Benutzer10