Programming lesson
Einstieg in die binäre Klassifikation mit dem UCI Adult-Datensatz: Ein praxisnahes Tutorial (2026)
Lerne in diesem Tutorial, wie du mit dem UCI Adult-Datensatz (Census Income) ein binäres Klassifikationsmodell erstellst. Schritt-für-Schritt-Anleitung für Studierende und Einsteiger in Machine Learning.
Warum der UCI Adult-Datensatz auch 2026 noch relevant ist
Der UCI Adult-Datensatz – auch bekannt als Census Income Dataset – ist einer der Klassiker im Machine Learning. Er enthält rund 48.842 Zeilen mit Daten aus der US-Volkszählung und wird genutzt, um vorherzusagen, ob das Einkommen einer Person über oder unter 50.000 USD pro Jahr liegt. In Zeiten von KI-Tools und automatisierten Entscheidungssystemen ist das Verständnis solcher Klassifikationsmodelle wichtiger denn je. Ob bei der Bonitätsprüfung, personalisierten Werbung oder in der Medizin – binäre Klassifikation ist überall.
Ziel dieses Tutorials
Du lernst, wie du einen geeigneten Machine-Learning-Algorithmus auswählst, den Datensatz vorbereitest und ein Modell trainierst. Dabei gehen wir auf die Besonderheiten des Adult-Datasets ein: gemischte numerische und kategoriale Merkmale, fehlende Werte und Ungleichgewichte in den Klassen. Am Ende wirst du in der Lage sein, Vorhersagen zu treffen und die Modellgüte zu bewerten – alles in Python mit scikit-learn.
Daten laden und erkunden
Zunächst laden wir den Datensatz. Er ist direkt über die UCI Machine Learning Repository oder via pandas verfügbar. Ein typischer Code-Ausschnitt:
import pandas as pd
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"
columns = ['age', 'workclass', 'fnlwgt', 'education', 'education-num', 'marital-status',
'occupation', 'relationship', 'race', 'sex', 'capital-gain', 'capital-loss',
'hours-per-week', 'native-country', 'income']
df = pd.read_csv(url, names=columns, na_values=' ?', skipinitialspace=True)Ein erster Blick mit df.head() zeigt die 14 Merkmale. Die Zielvariable income hat zwei Ausprägungen: >50K und <=50K. Wir müssen sie in 0 und 1 umwandeln.
Datenvorverarbeitung – der wichtigste Schritt
Der Adult-Datensatz enthält fehlende Werte (als ? markiert) und kategoriale Merkmale. Wir gehen wie folgt vor:
- Fehlende Werte behandeln: Entweder Zeilen löschen oder durch den häufigsten Wert ersetzen (z.B. mit
SimpleImputer). - Kategoriale Merkmale kodieren: Mit
OneHotEncoderoderOrdinalEncoder. Für den Einstieg bietet sich derColumnTransformeran. - Numerische Merkmale skalieren: StandardScaler oder MinMaxScaler verbessern oft die Performance.
Ein Beispiel mit scikit-learn:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
numeric_features = ['age', 'fnlwgt', 'education-num', 'capital-gain', 'capital-loss', 'hours-per-week']
categorical_features = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'native-country']
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), numeric_features),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
])Modell auswählen: Logistische Regression vs. Random Forest
Für binäre Klassifikation gibt es viele Algorithmen. Zwei bewährte sind:
- Logistische Regression: Einfach, interpretierbar, gut als Baseline.
- Random Forest: Leistungsstark, robust gegen Overfitting, aber schwerer interpretierbar.
Wir testen beide. Der Random Forest ist oft der Gewinner bei gemischten Datensätzen – ähnlich wie ein E-Sports-Team, das aus vielen Spezialisten besteht und gemeinsam bessere Entscheidungen trifft.
Modell erstellen und trainieren:
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
model = Pipeline(steps=[
('preprocessor', preprocessor),
('classifier', RandomForestClassifier(n_estimators=100, random_state=42))
])
X = df.drop('income', axis=1)
y = df['income'].apply(lambda x: 1 if x == ' >50K' else 0)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model.fit(X_train, y_train)Vorhersagen treffen und Modell evaluieren
Nach dem Training können wir Vorhersagen für den Testdatensatz treffen:
y_pred = model.predict(X_test)Zur Bewertung nutzen wir Metriken wie Accuracy, Precision, Recall und F1-Score. Da die Klassen unbalanciert sind (ca. 75% <=50K), reicht Accuracy allein nicht. Ein Confusion Matrix gibt Aufschluss:
from sklearn.metrics import classification_report, confusion_matrix
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))Ein gutes Modell erkennt sowohl die High-Income- als auch die Low-Income-Gruppe zuverlässig. In der Praxis – etwa bei der Kreditvergabe – ist es wichtiger, False Positives zu vermeiden (jemandem fälschlich hohes Einkommen zu unterstellen).
Hyperparameter-Tuning für bessere Ergebnisse
Mit GridSearchCV oder RandomizedSearchCV können wir die besten Parameter finden. Beispiel für Random Forest:
from sklearn.model_selection import GridSearchCV
param_grid = {
'classifier__n_estimators': [50, 100, 200],
'classifier__max_depth': [None, 10, 20],
}
grid = GridSearchCV(model, param_grid, cv=5, scoring='f1')
grid.fit(X_train, y_train)
print(grid.best_params_)Das Tuning kann die F1-Score deutlich verbessern – ähnlich wie das Feintuning eines KI-Chatbots für präzisere Antworten.
Häufige Fehler und wie du sie vermeidest
- Data Leakage: Niemals die Skalierung oder Kodierung vor dem Split durchführen! Immer Pipeline verwenden.
- Ignorieren von fehlenden Werten: Einfaches Löschen kann zu Informationsverlust führen. Besser Imputation.
- Überoptimierung auf den Testdatensatz: Halte Testdaten bis zum Schluss unberührt.
Fazit und nächste Schritte
Du hast nun ein funktionierendes Klassifikationsmodell für den UCI Adult-Datensatz erstellt. Der nächste Schritt könnte sein, andere Algorithmen wie Gradient Boosting (z.B. XGBoost) auszuprobieren oder die Feature-Importance zu analysieren. Auch das Deployment als API ist ein spannendes Thema – vielleicht mit Flask oder FastAPI.
Denke daran: In der realen Anwendung – ob bei der Steuerklassifikation oder in der Gesundheitsdiagnostik – ist die ethische und faire Nutzung von KI entscheidend. Der Adult-Datensatz enthält sensible Merkmale wie Geschlecht und Ethnie; hier ist besondere Vorsicht geboten, um Bias zu vermeiden.
Weiterführende Ressourcen
- UCI Adult Dataset
- scikit-learn Dokumentation
- Buch: „Einführung in Machine Learning mit Python“ von Müller & Guido
Viel Erfolg bei deinem Assignment und beim Experimentieren mit Machine Learning!