Das stille Leck
Leckage heißt, dass Information aus den Testzeilen das Modell erreicht, bevor es bewertet wird. Die lauten Formen sind leicht zu vermeiden (ein Merkmal aus dem Kurs von morgen). Die stille Form versteckt sich in der Vorverarbeitung: Man wählt die besten Spalten, skaliert oder füllt Lücken mit allen Zeilen und teilt erst danach für die Kreuzvalidierung. Jeder Test-Fold hat die Wahl schon beeinflusst, und der Score schmeichelt. Die Merkmalsauswahl ist der schlimmste Täter, denn hundert verrauschte Spalten enthalten in jeder Stichprobe einige, die prädiktiv aussehen; wählt man sie auf allen Daten, werden die Test-Folds teils durch Spalten „vorhergesagt“, die gewählt wurden, weil sie genau zu diesen Folds passten. Die strukturelle Lösung ist eine Pipeline: Gibt man cross_val_score die ganze Pipeline, passt sie Skalierung, Auswahl und Modell in jedem Trainingsfenster neu an und bewertet erst dann das Testfenster.
Das Labor stellt bewusst eine schwierige Frage: Können die gestrigen Renditen von 60 weiteren Anlagen vorhersagen, ob SPY heute steigt? Es gibt fast nichts zu finden. Die lecke Auswertung (SelectKBest(f_classif, k=5) auf allen Zeilen, dann TimeSeriesSplit-Kreuzvalidierung) meldet einen AUC von 0,534. Die ehrliche (Skalierer, Selektor und logistische Regression in einer Pipeline, in jedem Fenster neu angepasst) meldet 0,512. Die 0,022 dazwischen sind reines Leck. Man kann auch hineinschauen: cross_validate(modell, X, y, cv=..., return_estimator=True) liefert die angepassten Pipelines, und estimator.named_steps['select'].get_support(indices=True) listet die von jeder gewählten Spalten. Über die fünf Folds wird nur eine Spalte jedes Mal gewählt, so sieht Auswahl auf Rauschen aus. Einen mit einer Pipeline berechneten Score kann man verteidigen, einen nach „etwas Vorverarbeitung auf allem“ nicht.
- Erst teilen, dann lernen: Skalierung, Auswahl und Imputation gehören alle in die Kreuzvalidierungsschleife.
- Eine Pipeline ist ein Leckschutz: Geben Sie
cross_val_scoredie ganze Pipeline, und jeder Schritt wird in jedem Trainingsfenster neu angepasst. - Sehen Sie, was jeder Fold gewählt hat: Spalten, die von Fold zu Fold wechseln, sind Rauschen, kein Signal.
Lab: Was bewertet wird
- Die lecke Auswertung15 Pkt.
- Die Pipeline10 Pkt.
- Die ehrliche Auswertung15 Pkt.
- Was jeder Fold gewählt hat20 Pkt.
- Die Größe des Lecks10 Pkt.
- Der Vergleich auf echten Daten30 Pkt.