Random/stratifiziert
Nur für plausibel i.i.d. Einheiten. Stratifizierung stabilisiert Klassenanteile, beweist aber keine zeitliche Übertragbarkeit.
Machine Learning · Splits & Leakage
Zeitpunkt, Einheit und Auswahlprozess bestimmen den Split; Preprocessing, Tuning und Kalibrierung bleiben innerhalb der Trainingsgrenze.
Eine ML-Evaluation schätzt nicht abstrakt „Modellgüte“, sondern Leistung für eine definierte Zielpopulation, Vorhersageeinheit, Entscheidungszeit und Datenpipeline. Der Holdout muss die späteren unbekannten Fälle nachbilden. Ein zufälliger Zeilensplit beantwortet diese Frage nur, wenn Zeilen hinreichend unabhängig und aus demselben stabilen Prozess stammen.
Die offizielle scikit-learn-Dokumentation warnt: Sobald Hyperparameter wiederholt anhand des Tests angepasst werden, fließt Testwissen in die Modellwahl und der Score verliert seine Rolle als Generalisationsschätzung.[2]
| Leck | Beispiel | Reparatur |
|---|---|---|
| Target leakage | Feature wird erst nach dem Zielereignis erzeugt. | Feature-Verfügbarkeit zum Entscheidungszeitpunkt rekonstruieren. |
| Train–test contamination | Imputer, Skalierer, PCA oder Feature-Auswahl auf allen Daten fitten. | Split zuerst; Transformation ausschließlich im Trainingsfold fitten. |
| Entity leakage | Vorgänge derselben Person liegen in Train und Test. | Alle abhängigen Zeilen derselben Entität in einem Fold halten. |
| Temporal leakage | Zukunftsdaten trainieren ein Modell für frühere Fälle. | Rolling/forward split, Cutoff und gegebenenfalls zeitlichen Gap verwenden. |
| Selection leakage | Nur Fälle mit später beobachtetem Label evaluieren. | Labelmechanismus, Coverage und selektive Missingness untersuchen. |
Transformationen müssen auf Train gelernt und konsistent auf Validation/Test angewandt werden. Pipelines kapseln diesen Ablauf in Cross-Validation und Hyperparametertuning.[1]
Allgemeines Lernbeispiel: 600 Zeilen stammen von 200 Personen, je drei Vorgänge. Ein zufälliger 80/20-Zeilensplit legt im Erwartungswert pro Person 2,4 Zeilen in Train und 0,6 in Test. Die Wahrscheinlichkeit, dass alle drei Zeilen einer Person nur in Train oder nur in Test liegen, ist 0,8³+0,2³=0,520. Damit landen ungefähr 48% der Personen in beiden Mengen. Personennahe Features können dann Wiedererkennung statt Übertragung auf neue Personen messen.
Reparatur: Wenn der Einsatz neue Personen betrifft, gruppenweise nach Person splitten. Wenn zukünftige Vorgänge bestehender Personen das Ziel sind, braucht es zusätzlich einen zeitlichen Cutoff und eine explizite Regel für Historienfeatures.
Nur für plausibel i.i.d. Einheiten. Stratifizierung stabilisiert Klassenanteile, beweist aber keine zeitliche Übertragbarkeit.
Für Personen, Standorte, Geräte oder andere abhängige Cluster. Keine Gruppe über Fold-Grenzen teilen.
Vergangenheit trainiert, Zukunft testet. Cutoff, Labelverzug, saisonale Fenster und Gap begründen.
Bei wiederholten Entitäten und Zukunftseinsatz beide Strukturen respektieren; Standard-Splitter reichen eventuell nicht.
Die scikit-learn-Dokumentation empfiehlt bei Gruppenstruktur gruppenweise und bei zeitabhängigen Prozessen zeitgerechte Cross-Validation; klassische K-Fold-Verfahren beruhen auf einer i.i.d.-artigen Sicht.[2]
„Ich starte bei Einheit, Entscheidungszeit und künftigem Einsatz. Dann zeichne ich für jedes Feature, Label und Preprocessing den Verfügbarkeitszeitpunkt. Der äußere Test bildet neue Gruppen oder Zukunft ab; innerhalb des Trainingsbereichs wähle ich Pipeline und Hyperparameter mit passenden Folds. Schwelle und Kalibrierung lernen nicht am finalen Test. Am Ende berichte ich nicht nur einen Mittelwert, sondern Fold-, Zeit- und Subgruppenstabilität sowie verbleibende Selektionsrisiken.“