Assignment Chef icon Assignment Chef
All German tutorials

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.

UCI Adult Datensatz Census Income Dataset binäre Klassifikation Machine Learning Tutorial Klassifikationsmodell erstellen Python scikit-learn Random Forest Klassifikation Logistische Regression Datenvorverarbeitung Feature Engineering Modellbewertung Hyperparameter Tuning KI im Alltag Einkommensvorhersage Assignment Hilfe Studium 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 OneHotEncoder oder OrdinalEncoder. Für den Einstieg bietet sich der ColumnTransformer an.
  • 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

Viel Erfolg bei deinem Assignment und beim Experimentieren mit Machine Learning!