Trainingsdaten
Die Datensätze, mit denen KI-Modelle trainiert werden – sie bestimmen maßgeblich, was ein Modell lernt, wie gut es funktioniert und welche Verzerrungen es aufweist.
Ein häufiges Problem in ML, wenn Klassen im Datensatz sehr ungleich verteilt sind – z.B. 99% normale Transaktionen, 1% Betrug. Erfordert spezielle Techniken.
Imbalanced Data (unausgewogene Daten) liegt vor, wenn eine Klasse im Trainingsdatensatz deutlich häufiger vorkommt als andere. Ein Betrugserkennungs-Datensatz könnte 99% legitime Transaktionen und nur 1% Betrug enthalten. Ein Modell, das immer “legitim” vorhersagt, hätte 99% Accuracy – aber würde jeden Betrug übersehen. Imbalanced Data ist eines der häufigsten und tückischsten Probleme in realen ML-Projekten, weil Standard-Metriken wie Accuracy täuschen können.
Imbalanced Data bedeutet, dass Klassen sehr ungleich verteilt sind. Das Problem: Ein Modell kann “schummeln”, indem es einfach immer die häufigste Klasse vorhersagt.
Beispiel Fraud Detection:
Datensatz: 10.000 Transaktionen
- 9.900 legitim (99%)
- 100 Betrug (1%)
Dummes Modell: "Alles ist legitim"
-> Accuracy: 99% 🎉
-> Betrug erkannt: 0% 😱
Warum ist das ein Problem?
Uns interessiert gerade die seltene Klasse (Betrug, Krankheit, Anomalie). Ein Modell, das diese nie erkennt, ist nutzlos – trotz hoher Accuracy.
| Strategie | Beschreibung | Wann nutzen |
|---|---|---|
| Undersampling | Mehrheitsklasse reduzieren | Viele Daten |
| Oversampling | Minderheitsklasse duplizieren | Wenige Daten |
| SMOTE | Synthetische Minority-Samples | Wenige Daten |
| Class Weights | Minderheit stärker gewichten | Immer anwendbar |
| Threshold Moving | Entscheidungsschwelle anpassen | Nach Training |
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)
# Vorher: 9900 legitim, 100 Betrug
# Nachher: 9900 legitim, 9900 Betrug (synthetisch)
from sklearn.ensemble import RandomForestClassifier
# Automatische Gewichtung
clf = RandomForestClassifier(class_weight='balanced')
# Oder manuell
clf = RandomForestClassifier(class_weight={0: 1, 1: 99})
| Metrik | Formel | Wann nutzen |
|---|---|---|
| Precision | TP / (TP + FP) | Wenn False Positives teuer |
| Recall | TP / (TP + FN) | Wenn False Negatives teuer |
| F1 | 2 × (P × R) / (P + R) | Balance zwischen P und R |
| AUC-ROC | Area under ROC | Gesamtperformance |
| PR-AUC | Area under PR Curve | Bei starker Imbalance |
Imbalanced Data ist wie eine Schule mit 99 Rechtshändern und 1 Linkshänder: Ein Modell, das einfach 'Rechtshänder' rät, hat 99% Accuracy – aber es hat nichts gelernt.
Klassen sind sehr ungleich verteilt (z.B. 99:1)
Standard-Accuracy ist irreführend – Modell lernt nur Mehrheitsklasse
Lösungen: Resampling, Gewichtung, spezielle Metriken
Fraud Detection
99.9% legitime Transaktionen, 0.1% Betrug
Medizinische Diagnose
Seltene Krankheiten erkennen
Anomalieerkennung
Wenige Anomalien in vielen normalen Daten
Bei 99:1 Verteilung erreicht ein Modell, das immer 'Mehrheitsklasse' sagt, 99% Accuracy – ohne etwas gelernt zu haben. Precision, Recall und F1 sind aussagekräftiger.
Kommt auf die Datenmenge an. Undersampling bei vielen Daten (verliert Information). Oversampling/SMOTE bei wenigen Daten (kann Overfitting verursachen). Oft ist Class Weighting der einfachste Ansatz.
Ab etwa 10:1 wird es problematisch, ab 100:1 kritisch. Aber es hängt auch von der Gesamtdatenmenge ab – 1000 Minority-Samples sind besser als 10, auch bei gleicher Ratio.