TATECHATLAS
◎ Deutsch
Mathematik und Modelle

Überanpassung und Lernkurven: Unterschiede ohne Datenleck untersuchen

Training und Validierung gemeinsam lesen, Vorverarbeitung im Pipeline-Modell lernen und den Abschlusstest unabhängig halten.

Auf dieser Seite

Ein Modell, das auf Trainingsdaten deutlich besser als auf ungesehenen Validierungsdaten abschneidet, könnte überangepasst sein. Der Abstand ist ein Hinweis, keine vollständige Erklärung: Ungeeignete Aufteilungen, veränderte Verteilungen, Datenlecks und kleine Stichproben spielen ebenfalls eine Rolle. Beginnen Sie mit einer Aufteilung, die spätere Einsätze abbildet, lernen Sie Vorverarbeitung in einer Pipeline und vergleichen Sie eine einfache Referenz. Lernkurven zeigen anschließend den Verlauf bei wachsenden Trainingsmengen. Wählen Sie Modellkomplexität auf Entwicklungsdaten und behalten Sie einen unabhängigen Abschlusstest, statt Einstellungen ständig nach dessen Ergebnissen auszuwählen.

Überanpassung von anderen Ursachen trennen

Bei einer Kennzahl, deren größere Werte besser sind, etwa Genauigkeit, deuten gute Trainingswerte und deutlich schlechtere Validierungswerte auf ein Generalisierungsproblem hin. Sind beide schwach, könnten Modell oder Merkmale unzureichend sein. Diagnostizieren Sie nicht anhand einer einzelnen Zahl oder zufällig günstigen Aufteilung. Prüfen Sie Stichprobengröße, Zielwerte und Einsatznähe der Validierung. Eine veränderte Population erfordert eine andere Untersuchung als das Auswendiglernen einzelner Details innerhalb ansonsten vergleichbarer Datenbestände.

Die Aufteilung am späteren Einsatz ausrichten

Klären Sie, was spätere Vorhersagen bedeuten: neue unabhängige Fälle, neue Kunden oder spätere Beobachtungen. Eine zufällige Aufteilung eignet sich nicht für jede Situation. Wiederholte Messungen derselben Person können eine Gruppentrennung erfordern; zeitliche Vorhersagen benötigen möglicherweise eine zeitgerechte Trennung. Stratifizierung erhält Klassenanteile, löst aber weder Abhängigkeiten noch zeitliche Datenlecks. Der Beispielcode verwendet stratifizierte Faltungen für künstliche Klassifikationsdaten. Übertragen Sie das Verfahren erst, wenn seine Annahmen zu den echten Einsatzdaten passen.

Vorverarbeitung innerhalb der Pipeline lernen

Teilen Sie die Daten vor dem Anpassen gelernter Transformationen auf. Skalierung, Ersetzung fehlender Werte und Merkmalsauswahl können Validierungsinformationen verraten, wenn sie auf dem gesamten Bestand gelernt werden. Eine Pipeline lässt die Kreuzvalidierung den Scaler auf der jeweiligen Trainingsportion anpassen und anschließend auf die Validierung anwenden. Sie korrigiert jedoch keine grundsätzlich verräterischen Merkmale, etwa später verfügbare Informationen über das Ziel. Prüfen Sie Bedeutung und Verfügbarkeit jedes Merkmals ebenso gründlich wie die Einstellungen des Schätzers.

Beide Lernkurven gemeinsam lesen

Eine Lernkurve berechnet Trainings- und Validierungswerte für mehrere Trainingsgrößen. Lesen Sie beide Kurven statt nur des besten Punkts. Ein dauerhaft großer Abstand kann hohe Varianz nahelegen; schwache, nahe beieinanderliegende Kurven können auf unzureichende Kapazität oder Merkmale hindeuten. Mehr Beispiele können helfen, aber die Kurve verspricht keinen bestimmten Gewinn. Im Beispiel entspricht jede Zeile der Ergebnisfelder einer Trainingsgröße und jede Spalte einer Faltung. Die Mittelwerte fassen diese Validierungsfaltungen übersichtlich zusammen.

import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, learning_curve
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

# Illustrative synthetic classification data.
X, y = make_classification(
    n_samples=500, n_features=20,
    n_informative=5, n_redundant=5, random_state=42
)
model = make_pipeline(
    StandardScaler(), LogisticRegression(max_iter=1000)
)
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
sizes, training_scores, validation_scores = learning_curve(
    model, X, y, cv=cv,
    train_sizes=np.linspace(0.2, 1.0, 5), scoring="accuracy"
)
print(sizes)
print(training_scores.mean(axis=1))
print(validation_scores.mean(axis=1))

Referenz und geeignete Kennzahl vergleichen

Vergleichen Sie eine zur Aufgabe passende einfache Referenz, bevor Sie einen scheinbar beeindruckenden Wert interpretieren. Bei ungleichen Klassenhäufigkeiten kann hohe Genauigkeit bloß die Vorhersage der häufigen Klasse widerspiegeln und seltene Fälle schlecht erkennen. Wählen Sie die Kennzahl anhand der unterstützten Entscheidung und beachten Sie ihre Verbesserungsrichtung. Das Beispiel nutzt accuracy nur zur API-Demonstration mit künstlichen Daten. Es zeigt nicht, dass Genauigkeit für jede reale Klassifikationsaufgabe die geeignete Kennzahl ist oder alle relevanten Fehlerkosten abbildet.

Komplexität und Regularisierung gezielt ändern

Prüfen Sie eine kleine geplante Auswahl von Komplexitäts- oder Regularisierungsänderungen mit demselben Entwicklungsprotokoll. Bei LogisticRegression bedeutet kleineres C stärkere Regularisierung; max_iter begrenzt Optimierungsiterationen und regelt nicht die Regularisierungsstärke. Kontrollieren Sie außerdem Skalierung und Konvergenz. Verändern Sie jeweils einen sinnvollen Faktor und vergleichen Sie Validierung statt ausschließlich Trainingsleistung. Ein einfacheres Modell kann besser generalisieren, doch dafür sind repräsentative Validierungsdaten nötig. Eine gewünschte Kurvenform ersetzt diese Beurteilung nicht.

Unterschiede zwischen Validierungsfaltungen prüfen

Betrachten Sie einzelne Faltungswerte neben ihrem Mittelwert. Ein großer Abstand zwischen ihnen kann Empfindlichkeit gegenüber ausgewählten Beispielen oder unterschiedliche Schwierigkeit zeigen. Ihre Standardabweichung beschreibt diese Streuung und ist nicht automatisch ein Konfidenzintervall. Trainingsportionen der Kreuzvalidierung überschneiden sich; die Ergebnisse sind deshalb keine unabhängigen experimentellen Wiederholungen. Nutzen Sie Streuung, um Protokoll, Stichprobe und Gruppen zu untersuchen, statt daraus ohne weitere Annahmen eine präzise Schranke für den Fehler in der späteren Population abzuleiten.

Die abschließende Bewertung unabhängig halten

Fixieren Sie Merkmale und Parameter vor der abschließenden Bewertung auf zurückgehaltenen Daten. Wiederholtes Betrachten dieses Tests bei der Auswahl macht ihn zum Teil der Auswahl und schwächt seine Unabhängigkeit. Dokumentieren Sie Datenversion, Merkmalsdefinitionen, Aufteilungsregeln, Zufallszustand, Kennzahl und Softwareversionen. Der Code erzeugt künstliche Daten und gibt berechnete Zusammenfassungen aus; konkrete Zahlen oder Benchmark-Ergebnisse werden hier nicht behauptet. Ein nachvollziehbarer Prozess trennt tatsächliche Modellverbesserungen von Änderungen an der Bewertungsmethode.

Was Sie prüfen sollten

  • Validierung auf zukünftige Fälle, Gruppen oder Zeitabschnitte ausrichten.
  • Gelernte Vorverarbeitung nur auf Trainingsportionen anpassen, möglichst in einer Pipeline.
  • Training und Validierung zusammen mit Referenz und Faltungsstreuung betrachten.
  • Parameter auf Entwicklungsdaten auswählen und den abschließenden Test unabhängig halten.

Lernkurven hängen von Datenqualität, Aufteilung, Modell und Kennzahl ab. Sie deuten mögliche Ursachen an, beweisen aber nicht, dass mehr Daten oder stärkere Regularisierung die Aufgabe lösen. Das künstliche Beispiel wurde nicht als Benchmark ausgeführt.

Quellen

  1. scikit-learn: learning and validation curves ↗
  2. scikit-learn: learning_curve API ↗
  3. scikit-learn: data leakage and pipelines ↗
  4. scikit-learn: cross-validation ↗
  5. scikit-learn: LogisticRegression ↗
Nach oben ↑