Imbalanced Data
Ein häufiges Problem in ML, wenn Klassen im Datensatz sehr ungleich verteilt sind – z.B. 99% normale Transaktionen, 1% Betrug. Erfordert spezielle Techniken.
Eine Technik zur Erzeugung synthetischer Datenpunkte für unterrepräsentierte Klassen – löst das Problem unbalancierter Datensätze im ML.
SMOTE erzeugt synthetische Datenpunkte für die Minderheitsklasse durch Interpolation.
Vorher (imbalanced):
Klasse 0: ●●●●●●●●●● (1000)
Klasse 1: ●● (20)
Nach SMOTE:
Klasse 0: ●●●●●●●●●● (1000)
Klasse 1: ●●●●●●●●●● (1000, davon 980 synthetisch)
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)
# So funktioniert es:
# 1. Wähle Sample aus Minderheitsklasse
# 2. Finde k nächste Nachbarn (gleiche Klasse)
# 3. Wähle zufällig einen Nachbarn
# 4. Erzeuge neuen Punkt auf Linie zwischen beiden
| Variante | Beschreibung |
|---|---|
| SMOTE | Standard-Interpolation |
| SMOTE-NC | Für kategorische Features |
| Borderline-SMOTE | Fokus auf Grenzfälle |
| ADASYN | Adaptiv, mehr Samples in schwierigen Regionen |
SMOTE ist wie das Klonen von seltenen Pflanzen: Statt nur die wenigen Exemplare zu nutzen, erzeugst du ähnliche Varianten, um eine ausgewogene Population zu bekommen.
Erzeugt synthetische Samples für Minderheitsklasse
Interpoliert zwischen existierenden Datenpunkten
Besser als einfaches Duplizieren
Fraud Detection
Wenige Fraud-Fälle vs. viele normale
Medizinische Diagnose
Seltene Krankheiten erkennen
Churn Prediction
Wenige Churner vs. viele Bleibende
SMOTE: Mehr Daten für Minderheit. Undersampling: Weniger Daten für Mehrheit. SMOTE verliert keine Information, Undersampling ist schneller.
Bei sehr kleiner Minderheit (zu wenig für Interpolation), bei hochdimensionalen Daten (Curse of Dimensionality), bei Zeitreihen.