Datenaufbereitung fuer Machine Learning: Der komplette Leitfaden
80% der Zeit in ML-Projekten fliesst in die Datenaufbereitung. Lernen Sie, wie Sie Rohdaten systematisch in qualitativ hochwertige Trainingsdaten verwandeln.
"Garbage in, garbage out" - dieses Prinzip gilt nirgends so stark wie im Machine Learning. Selbst das beste Modell kann nur so gut sein wie seine Trainingsdaten. Die Datenaufbereitung (Data Preprocessing) ist daher ein kritischer Erfolgsfaktor fuer jedes ML-Projekt.
Die Data Preprocessing Pipeline
Eine strukturierte Vorgehensweise hilft, keine wichtigen Schritte zu vergessen. Die typische Pipeline besteht aus diesen Phasen:
- Data Collection - Daten aus verschiedenen Quellen zusammenfuehren
- Data Exploration - Daten verstehen und Probleme identifizieren
- Data Cleaning - Fehler und Inkonsistenzen bereinigen
- Data Transformation - Daten in geeignete Formate bringen
- Feature Engineering - Aussagekraeftige Merkmale erstellen
- Data Splitting - Train/Validation/Test Sets erstellen
Praxis-Tipp: Dokumentieren Sie jeden Schritt Ihrer Pipeline. Nutzen Sie Tools wie DVC (Data Version Control) oder MLflow, um Datenversionen zu tracken. So koennen Sie spaeter nachvollziehen, welche Daten zu welchen Ergebnissen gefuehrt haben.
Data Exploration: Daten verstehen
Bevor Sie Daten transformieren, muessen Sie sie verstehen. Die explorative Datenanalyse (EDA) beantwortet zentrale Fragen:
Grundlegende Statistiken
- Datentypen - Numerisch, kategorisch, Text, Datum?
- Verteilungen - Wie sind die Werte verteilt? Gibt es Ausreisser?
- Missing Values - Wie viele Werte fehlen? In welchen Spalten?
- Korrelationen - Welche Features haengen zusammen?
- Klassenverteilung - Bei Klassifikation: Sind Klassen balanciert?
Python mit Pandas und Matplotlib/Seaborn sind die Standardwerkzeuge fuer EDA:
import pandas as pd
import seaborn as sns
# Ueberblick verschaffen
df.info()
df.describe()
# Missing Values visualisieren
sns.heatmap(df.isnull(), cbar=True)
# Verteilungen pruefen
df.hist(figsize=(12, 8))
# Korrelationen analysieren
sns.heatmap(df.corr(), annot=True)
Tool-Tipp: Fuer schnelle EDA empfehlen wir ydata-profiling (frueher pandas-profiling). Mit einer Zeile Code erhalten Sie einen umfassenden HTML-Report ueber Ihren Datensatz.
Data Cleaning: Qualitaet sicherstellen
Reale Daten sind selten perfekt. Die haeufigsten Probleme und ihre Loesungen:
Missing Values behandeln
Fehlende Werte sind allgegenwaertig. Die richtige Strategie haengt vom Kontext ab:
- Loeschen - Bei wenigen fehlenden Werten und genuegend Daten
- Imputation mit Mittelwert/Median - Einfach, aber kann Verteilungen verzerren
- Imputation mit Modus - Fuer kategorische Variablen
- Forward/Backward Fill - Fuer Zeitreihen
- KNN-Imputation - Nutzt aehnliche Datenpunkte zur Schaetzung
- Modellbasierte Imputation - Trainiert ein Modell zur Vorhersage fehlender Werte
from sklearn.impute import SimpleImputer, KNNImputer
# Mittelwert-Imputation
imputer = SimpleImputer(strategy='median')
df_imputed = imputer.fit_transform(df)
# KNN-Imputation (oft bessere Ergebnisse)
knn_imputer = KNNImputer(n_neighbors=5)
df_imputed = knn_imputer.fit_transform(df)
Achtung: Imputation sollte nur auf Trainingsdaten gefittet werden. Wenden Sie denselben Imputer dann auf Validation/Test Daten an. Sonst riskieren Sie Data Leakage.
Ausreisser identifizieren und behandeln
Ausreisser koennen legitime Extremwerte oder Fehler sein. Pruefung ist wichtig:
- IQR-Methode - Werte ausserhalb von 1.5 * IQR als Ausreisser markieren
- Z-Score - Werte mit |z| > 3 als Ausreisser betrachten
- Isolation Forest - ML-basierte Erkennung multivariater Ausreisser
from scipy import stats
import numpy as np
# Z-Score Methode
z_scores = np.abs(stats.zscore(df.select_dtypes(include=[np.number])))
outliers = (z_scores > 3).any(axis=1)
# Ausreisser entfernen oder cappen
df_clean = df[~outliers] # Entfernen
df['column'] = df['column'].clip(lower=q1, upper=q3) # Cappen
Duplikate und Inkonsistenzen
- Exakte Duplikate - Mit
df.duplicated()finden und entfernen - Fuzzy Duplikate - Aehnliche Eintraege mit String-Matching finden
- Typfehler - Kategorische Werte standardisieren (z.B. "Germany", "germany", "DE")
- Datumsformate - Einheitliche Formate erzwingen
Data Transformation
Nach dem Cleaning muessen Daten oft transformiert werden, damit Modelle sie optimal verarbeiten koennen.
Skalierung numerischer Features
Viele ML-Algorithmen sind sensitiv gegenueber unterschiedlichen Skalen:
- StandardScaler - Mittelwert 0, Standardabweichung 1. Gut fuer normalverteilte Daten
- MinMaxScaler - Skaliert auf [0,1]. Gut wenn Grenzen bekannt sind
- RobustScaler - Nutzt Median und IQR. Robust gegenueber Ausreissern
- Log-Transformation - Bei stark rechtsschiefen Verteilungen
from sklearn.preprocessing import StandardScaler, RobustScaler
# Standard-Skalierung
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # Nur transform!
# Log-Transformation fuer schiefe Daten
df['log_feature'] = np.log1p(df['skewed_feature'])
Encoding kategorischer Variablen
ML-Modelle benoetigen numerische Eingaben. Kategorien muessen kodiert werden:
- Label Encoding - Kategorien als Zahlen (0, 1, 2...). Nur fuer ordinale Daten
- One-Hot Encoding - Binaere Spalten pro Kategorie. Standard fuer nominale Daten
- Target Encoding - Kategorien durch Zielvariablen-Statistik ersetzen
- Frequency Encoding - Kategorien durch Haeufigkeit ersetzen
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
import category_encoders as ce
# One-Hot Encoding
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
encoded = encoder.fit_transform(df[['category_column']])
# Target Encoding (bei High-Cardinality)
target_encoder = ce.TargetEncoder()
df['encoded'] = target_encoder.fit_transform(df['category'], df['target'])
High-Cardinality: Bei Kategorien mit vielen Auspraegungen (z.B. Postleitzahlen) fuehrt One-Hot Encoding zu sehr vielen Spalten. Target oder Frequency Encoding sind dann besser geeignet.
Feature Engineering
Gutes Feature Engineering kann die Modellleistung dramatisch verbessern. Es geht darum, das Domainwissen in die Features einzubringen.
Neue Features aus bestehenden erstellen
- Interaktionen - Produkt oder Quotient zweier Features
- Aggregationen - Gruppierte Statistiken (Mittelwert, Max, Count)
- Zeitbasierte Features - Wochentag, Monat, Zeit seit Event
- Text-Features - Wortanzahl, Sentiment, TF-IDF
- Binning - Kontinuierliche Werte in Kategorien einteilen
# Interaktionsfeature
df['price_per_sqm'] = df['price'] / df['square_meters']
# Zeitbasierte Features
df['day_of_week'] = df['date'].dt.dayofweek
df['is_weekend'] = df['day_of_week'].isin([5, 6]).astype(int)
df['days_since_signup'] = (pd.Timestamp.now() - df['signup_date']).dt.days
# Aggregationen
df['avg_purchase_by_customer'] = df.groupby('customer_id')['amount'].transform('mean')
Feature Selection
Nicht alle Features sind nuetzlich. Irrelevante Features koennen die Modellleistung verschlechtern:
- Korrelationsanalyse - Hoch korrelierte Features entfernen
- Varianzfilter - Features mit geringer Varianz entfernen
- Feature Importance - Random Forest oder XGBoost zur Bewertung nutzen
- Recursive Feature Elimination - Iterativ unwichtige Features entfernen
Data Splitting: Train/Val/Test
Die korrekte Aufteilung der Daten ist entscheidend fuer valide Modellbewertung:
- Training Set (60-80%) - Zum Trainieren des Modells
- Validation Set (10-20%) - Zum Tunen der Hyperparameter
- Test Set (10-20%) - Zur finalen, unvoreingenommenen Bewertung
from sklearn.model_selection import train_test_split
# Einfacher Split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# Train/Val/Test Split
X_temp, X_test, y_temp, y_test = train_test_split(X, y, test_size=0.2)
X_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.25)
Wichtig bei Zeitreihen: Kein zufaelliger Split! Verwenden Sie chronologische Splits, um Data Leakage zu vermeiden. Das Testset sollte zeitlich nach dem Trainingsset liegen.
Checkliste: Datenaufbereitung
Nutzen Sie diese Checkliste fuer Ihre ML-Projekte:
- Daten verstehen - EDA durchfuehren, Dokumentation lesen, Domain-Experten befragen
- Datenqualitaet pruefen - Missing Values, Ausreisser, Duplikate, Inkonsistenzen
- Cleaning-Strategie waehlen - Dokumentieren, warum welche Entscheidung getroffen wurde
- Transformation planen - Skalierung und Encoding je nach Modell waehlen
- Features engineeren - Domain-Wissen einbringen, neue Features erstellen
- Pipeline erstellen - Reproduzierbare, automatisierte Verarbeitung
- Split korrekt durchfuehren - Zeitliche Abhaengigkeiten beruecksichtigen
- Leakage vermeiden - Alle Transformationen nur auf Trainingsdaten fitten
Automatisierte Pipelines für die Praxis
In produktiven ML-Projekten sollte die Datenaufbereitung nicht manuell erfolgen, sondern als reproduzierbare Pipeline implementiert werden. Scikit-learn bietet dafür leistungsstarke Werkzeuge.
Pipeline mit Scikit-learn
Eine Pipeline fasst alle Preprocessing-Schritte zusammen und stellt sicher, dass sie konsistent auf Training- und Testdaten angewendet werden:
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
# Numerische Features
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())
])
# Kategorische Features
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder(handle_unknown='ignore'))
])
# Zusammenführen
preprocessor = ColumnTransformer(transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)
])
Der große Vorteil: Die Pipeline verhindert automatisch Data Leakage, da alle Transformationen nur auf den Trainingsdaten gefittet werden. Für Unternehmen, die ML-Modelle in Produktion betreiben, ist das unverzichtbar.
Datenqualität kontinuierlich überwachen
Einmalige Datenbereinigung reicht nicht aus. In produktiven Systemen verändern sich Daten über die Zeit - ein Phänomen, das als Data Drift bezeichnet wird. Etablieren Sie Monitoring-Prozesse, die automatisch warnen, wenn sich Datenverteilungen signifikant verändern oder die Datenqualität abnimmt. Tools wie Great Expectations oder Evidently AI unterstützen Sie dabei.
Best Practice: Definieren Sie für jede Datenspalte Qualitätsregeln (Data Contracts): Welcher Wertebereich ist erlaubt? Wie viele fehlende Werte sind akzeptabel? Diese Regeln dienen als automatische Prüfpunkte in Ihrer Pipeline und helfen, Probleme frühzeitig zu erkennen.
Häufig gestellte Fragen
Warum ist Datenaufbereitung so wichtig für Machine Learning?
Datenaufbereitung ist der wichtigste Erfolgsfaktor in ML-Projekten. Etwa 80% der Projektzeit fließt in die Datenarbeit. Schlechte Datenqualität führt direkt zu schlechten Modellen - nach dem Prinzip "Garbage in, garbage out". Saubere, gut strukturierte Daten verbessern die Modellgenauigkeit typischerweise stärker als aufwändigere Algorithmen. Unsere KI-Beratung unterstützt Sie beim Aufbau effizienter Datenpipelines.
Was ist der Unterschied zwischen Data Cleaning und Feature Engineering?
Data Cleaning behebt Qualitätsprobleme in den Rohdaten - fehlende Werte, Ausreißer, Duplikate und Inkonsistenzen werden behandelt. Feature Engineering geht einen Schritt weiter und erstellt aus den bereinigten Daten neue, aussagekräftige Merkmale. Beispielsweise kann aus einem Datumsstempel der Wochentag extrahiert werden, der für Vorhersagen relevanter sein kann als das Datum selbst.
Wie vermeidet man Data Leakage bei der Datenaufbereitung?
Data Leakage entsteht, wenn Informationen aus dem Test-Set in das Training einfließen. Um dies zu vermeiden: Führen Sie den Train/Test-Split vor allen Transformationen durch. Fitten Sie Imputer, Scaler und Encoder nur auf Trainingsdaten und wenden Sie die gleiche Transformation auf Test-Daten an. Bei Zeitreihen verwenden Sie chronologische Splits statt zufälliger Aufteilung.
Welche Tools eignen sich für automatisierte Datenaufbereitung?
Python mit Pandas und Scikit-learn ist der Standard. Für schnelle explorative Analyse empfiehlt sich ydata-profiling. Für reproduzierbare Pipelines bieten Scikit-learn Pipelines und Feature-engine ideale Werkzeuge. DVC (Data Version Control) und MLflow helfen bei der Versionierung. Wer die volle Kontrolle über Daten und Verarbeitung behalten möchte, kann auf unseren On-Premise-Lösungen arbeiten.
Unterstuetzung bei Ihrem ML-Projekt?
Von der Datenaufbereitung bis zum produktiven Modell - wir begleiten Sie durch den gesamten ML-Lifecycle.
Beratung anfragen