Feature Engineering für Machine Learning: Techniken und Interview-Fragen 2026

Feature Engineering für ML-Interviews meistern: Skalierung, Encoding, Feature Selection und zeitbasierte Features mit Python-Codebeispielen.

Feature Engineering für Machine Learning: Techniken und Interview-Fragen 2026

Feature Engineering gilt als eine der entscheidenden Disziplinen im Bereich Machine Learning und Data Science. Wer ein feature engineering interview erfolgreich bestehen möchte, muss nicht nur theoretisches Wissen mitbringen, sondern auch praktische Techniken sicher beherrschen. Dieser Artikel behandelt die wichtigsten Methoden, die in data science interview questions regelmäßig abgefragt werden, und liefert produktionsreife Python-Codebeispiele für jede Technik.

Profi-Tipp

Feature Engineering macht in der Praxis oft den größeren Unterschied als die Wahl des Algorithmus. Interviewer achten besonders darauf, ob Kandidaten systematisch an die Aufbereitung von Features herangehen und dabei Domänenwissen einbeziehen.

Was Feature Engineering in der Praxis bedeutet

Unter machine learning feature engineering versteht man den gesamten Prozess der Transformation, Erstellung und Auswahl von Eingabevariablen für ein Modell. Rohdaten enthalten selten die optimale Repräsentation für einen Algorithmus. Feature Engineering schließt diese Lücke zwischen Rohdaten und Modellperformance.

Der Prozess umfasst mehrere Stufen: Bereinigung fehlender Werte, Skalierung numerischer Features, Encoding kategorialer Variablen, Erstellung neuer Features aus bestehenden Daten und die gezielte Auswahl der relevantesten Merkmale. Jede dieser Stufen erfordert fundierte Entscheidungen, die sich direkt auf die Modellqualität auswirken.

In Interviews wird häufig gefragt, warum Feature Engineering vor dem Modelltraining stattfinden muss und welche Risiken entstehen, wenn dieser Schritt übersprungen wird. Die Antwort liegt in der Datenqualität: Ein komplexes Modell kann schlechte Features nicht kompensieren.

Feature-Skalierung und Normalisierung

Unterschiedliche Skalen bei numerischen Features führen dazu, dass Algorithmen wie Gradient Descent, SVM oder k-NN verzerrte Ergebnisse liefern. Skalierung bringt alle Features auf einen vergleichbaren Wertebereich.

python
# feature_scaling.py
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler

df = pd.DataFrame({
    "gehalt": [35000, 72000, 120000, 45000, 88000],
    "erfahrung_jahre": [2, 5, 12, 3, 7],
    "projekte": [4, 15, 30, 6, 20]
})

# StandardScaler: Mittelwert=0, Standardabweichung=1
standard_scaler = StandardScaler()
df_standard = pd.DataFrame(
    standard_scaler.fit_transform(df),
    columns=df.columns
)

# MinMaxScaler: Werte zwischen 0 und 1
minmax_scaler = MinMaxScaler()
df_minmax = pd.DataFrame(
    minmax_scaler.fit_transform(df),
    columns=df.columns
)

# RobustScaler: Robust gegenueber Ausreissern (nutzt Median und IQR)
robust_scaler = RobustScaler()
df_robust = pd.DataFrame(
    robust_scaler.fit_transform(df),
    columns=df.columns
)

print("StandardScaler:\\n", df_standard.round(3))
print("\\nRobustScaler:\\n", df_robust.round(3))

Die Wahl des Scalers hängt von der Datenverteilung ab. StandardScaler eignet sich für annähernd normalverteilte Daten. Bei Ausreißern liefert RobustScaler stabilere Ergebnisse, da er auf Median und Interquartilsabstand basiert. MinMaxScaler ist sinnvoll, wenn ein fester Wertebereich benötigt wird, etwa bei neuronalen Netzen mit Sigmoid-Aktivierung.

Encoding kategorialer Variablen

Machine-Learning-Modelle arbeiten mit numerischen Werten. Kategoriale Variablen müssen daher in eine numerische Repräsentation überführt werden, ohne dabei künstliche Ordnungsbeziehungen zu erzeugen.

python
# categorical_encoding.py
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OrdinalEncoder
from category_encoders import TargetEncoder

df = pd.DataFrame({
    "stadt": ["Berlin", "Muenchen", "Hamburg", "Berlin", "Koeln", "Muenchen"],
    "erfahrungslevel": ["Junior", "Senior", "Mid", "Mid", "Senior", "Junior"],
    "gehalt": [42000, 85000, 62000, 48000, 78000, 40000]
})

# One-Hot Encoding: Fuer nominale Variablen ohne Ordnung
df_onehot = pd.get_dummies(df, columns=["stadt"], prefix="stadt", dtype=int)
print("One-Hot Encoding:\\n", df_onehot)

# Ordinal Encoding: Fuer Variablen mit natuerlicher Reihenfolge
level_order = [["Junior", "Mid", "Senior"]]
ordinal_enc = OrdinalEncoder(categories=level_order)
df["level_encoded"] = ordinal_enc.fit_transform(df[["erfahrungslevel"]])

# Target Encoding: Ersetzt Kategorie durch Mittelwert der Zielvariable
target_enc = TargetEncoder(cols=["stadt"], smoothing=2.0)
df["stadt_target"] = target_enc.fit_transform(df["stadt"], df["gehalt"])

print("\\nTarget Encoding:\\n", df[["stadt", "stadt_target", "gehalt"]])

One-Hot Encoding erzeugt bei hoher Kardinalität sehr viele Spalten. Target Encoding löst dieses Problem, birgt aber das Risiko von Data Leakage. In Interviews wird häufig nach Strategien gefragt, um Target Leakage zu vermeiden — die Antwort lautet: K-Fold Target Encoding, bei dem die Zielwerte nur aus anderen Folds berechnet werden.

Bereit für deine Data Science & ML-Interviews?

Übe mit unseren interaktiven Simulatoren, Flashcards und technischen Tests.

Feature-Selection-Techniken im Detail

Nicht jedes Feature verbessert ein Modell. Irrelevante oder redundante Features erhöhen die Dimensionalität, verlangsamen das Training und können zu Overfitting führen. Feature selection techniques lassen sich in drei Kategorien einteilen: Filter-, Wrapper- und Embedded-Methoden.

python
# feature_selection.py
import pandas as pd
import numpy as np
from sklearn.datasets import make_classification
from sklearn.feature_selection import (
    mutual_info_classif,
    SelectKBest,
    f_classif,
    SequentialFeatureSelector
)
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LassoCV

X, y = make_classification(
    n_samples=1000, n_features=20, n_informative=8,
    n_redundant=5, n_classes=2, random_state=42
)
feature_names = [f"feature_{i}" for i in range(20)]
df = pd.DataFrame(X, columns=feature_names)

# Filter-Methode: Mutual Information
mi_scores = mutual_info_classif(X, y, random_state=42)
mi_ranking = pd.Series(mi_scores, index=feature_names).sort_values(ascending=False)
print("Top 8 Features (Mutual Information):")
print(mi_ranking.head(8))

# Filter-Methode: ANOVA F-Test
selector = SelectKBest(score_func=f_classif, k=8)
X_selected = selector.fit_transform(X, y)
selected_mask = selector.get_support()
print(f"\\nANOVA-selektierte Features: {np.array(feature_names)[selected_mask].tolist()}")

# Embedded-Methode: L1-Regularisierung (Lasso)
lasso = LassoCV(cv=5, random_state=42)
lasso.fit(X, y)
lasso_importance = pd.Series(np.abs(lasso.coef_), index=feature_names)
print(f"\\nLasso (nicht-null Features): {(lasso_importance > 0).sum()}")

# Embedded-Methode: Random Forest Feature Importance
rf = RandomForestClassifier(n_estimators=200, random_state=42)
rf.fit(X, y)
rf_importance = pd.Series(rf.feature_importances_, index=feature_names)
print("\\nTop 8 Features (Random Forest):")
print(rf_importance.sort_values(ascending=False).head(8))

Filter-Methoden wie Mutual Information sind schnell und modellunabhängig, berücksichtigen aber keine Feature-Interaktionen. Embedded-Methoden wie Lasso oder Random Forest Importance bewerten Features im Kontext des Modells. Wrapper-Methoden wie Sequential Feature Selection liefern oft die besten Ergebnisse, sind aber rechenintensiv. In der Praxis empfiehlt sich eine Kombination: erst Filter zur Vorauswahl, dann Embedded-Methoden zur Feinauswahl.

Interaktions-Features erstellen

Interaktions-Features erfassen Beziehungen zwischen Variablen, die ein Modell allein aus den Einzelfeatures nicht ableiten kann. Besonders bei linearen Modellen steigern sie die Ausdruckskraft erheblich.

python
# interaction_features.py
import pandas as pd
import numpy as np
from sklearn.preprocessing import PolynomialFeatures

df = pd.DataFrame({
    "wohnflaeche": [60, 85, 120, 45, 200],
    "zimmer": [2, 3, 4, 1, 6],
    "baujahr": [1990, 2005, 2018, 1975, 2022],
    "stockwerk": [3, 1, 5, 0, 8]
})

# Manuelle Interaktions-Features mit Domaenenwissen
df["flaeche_pro_zimmer"] = df["wohnflaeche"] / df["zimmer"]
df["gebaeude_alter"] = 2026 - df["baujahr"]
df["flaeche_x_stockwerk"] = df["wohnflaeche"] * df["stockwerk"]
df["log_wohnflaeche"] = np.log1p(df["wohnflaeche"])

# Automatische polynomiale Interaktionen (Grad 2)
poly = PolynomialFeatures(degree=2, interaction_only=True, include_bias=False)
feature_cols = ["wohnflaeche", "zimmer", "stockwerk"]
X_poly = poly.fit_transform(df[feature_cols])
poly_names = poly.get_feature_names_out(feature_cols)

df_poly = pd.DataFrame(X_poly, columns=poly_names)
print("Polynomiale Features:\\n", df_poly.head())
print(f"\\nAnzahl Features: {len(poly_names)} (von {len(feature_cols)} Ursprungsfeatures)")

# Binning als nicht-lineare Transformation
df["flaeche_kategorie"] = pd.qcut(
    df["wohnflaeche"], q=3, labels=["klein", "mittel", "gross"]
)
print("\\nBinning:\\n", df[["wohnflaeche", "flaeche_kategorie"]])

Domänenspezifische Features wie "Fläche pro Zimmer" übertreffen automatisch generierte Interaktionen in der Regel deutlich. Interviewer bewerten positiv, wenn Kandidaten erklären können, warum ein bestimmtes Interaktions-Feature inhaltlich sinnvoll ist, statt blind alle Kombinationen zu erzeugen.

Umgang mit fehlenden Werten

Fehlende Werte sind in realen Datensätzen unvermeidlich. Die Behandlungsstrategie beeinflusst die Modellqualität erheblich und gehört zu den häufigsten data science interview questions.

python
# missing_values.py
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer, KNNImputer
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

np.random.seed(42)
df = pd.DataFrame({
    "alter": [25, np.nan, 35, 42, np.nan, 55, 30, np.nan, 48, 33],
    "einkommen": [30000, 45000, np.nan, 72000, 38000, np.nan, 51000, 42000, np.nan, 47000],
    "bewertung": [3.5, 4.0, np.nan, 4.5, 3.0, 4.2, np.nan, 3.8, 4.1, np.nan]
})

# Analyse fehlender Werte
print("Fehlende Werte pro Spalte:")
print(df.isnull().sum())
print(f"\\nAnteil fehlend: {df.isnull().mean().round(3).to_dict()}")

# Indikator-Features: Information ueber Fehlen bewahren
for col in df.columns:
    df[f"{col}_fehlend"] = df[col].isnull().astype(int)

# Median-Imputation (robust gegenueber Ausreissern)
median_imputer = SimpleImputer(strategy="median")
df_median = pd.DataFrame(
    median_imputer.fit_transform(df[["alter", "einkommen", "bewertung"]]),
    columns=["alter", "einkommen", "bewertung"]
)

# KNN-Imputation: Nutzt aehnliche Datenpunkte
knn_imputer = KNNImputer(n_neighbors=3)
df_knn = pd.DataFrame(
    knn_imputer.fit_transform(df[["alter", "einkommen", "bewertung"]]),
    columns=["alter", "einkommen", "bewertung"]
)

# Iterative Imputation (MICE-Algorithmus)
mice_imputer = IterativeImputer(max_iter=10, random_state=42)
df_mice = pd.DataFrame(
    mice_imputer.fit_transform(df[["alter", "einkommen", "bewertung"]]),
    columns=["alter", "einkommen", "bewertung"]
)

print("\\nVergleich der Imputationsmethoden (Spalte 'alter'):")
print(f"  Median: {df_median['alter'].values}")
print(f"  KNN:    {df_knn['alter'].round(1).values}")
print(f"  MICE:   {df_mice['alter'].round(1).values}")

Ein oft übersehener Aspekt: Das Fehlen selbst kann Information tragen. Indikator-Features, die kennzeichnen, ob ein Wert ursprünglich fehlte, verbessern in vielen Fällen die Vorhersagequalität. KNN- und MICE-Imputation berücksichtigen Zusammenhänge zwischen Variablen und liefern realistischere Schätzungen als einfache Mittelwert-Imputation.

Zeitbasiertes Feature Engineering

Zeitreihen und zeitgestempelte Daten erfordern spezielle Techniken. Lag-Features, Rolling-Statistiken und zyklische Encodings gehören zum Standardrepertoire im machine learning feature engineering.

python
# time_features.py
import pandas as pd
import numpy as np

dates = pd.date_range("2025-01-01", periods=365, freq="D")
np.random.seed(42)
df = pd.DataFrame({
    "datum": dates,
    "umsatz": np.random.normal(1000, 200, 365).cumsum() + 50000
})

# Kalender-Features extrahieren
df["jahr"] = df["datum"].dt.year
df["monat"] = df["datum"].dt.month
df["wochentag"] = df["datum"].dt.dayofweek
df["quartal"] = df["datum"].dt.quarter
df["ist_wochenende"] = (df["wochentag"] >= 5).astype(int)
df["tag_im_jahr"] = df["datum"].dt.dayofyear

# Zyklisches Encoding: Vermeidet kuenstliche Spruenge (Dez->Jan)
df["monat_sin"] = np.sin(2 * np.pi * df["monat"] / 12)
df["monat_cos"] = np.cos(2 * np.pi * df["monat"] / 12)
df["wochentag_sin"] = np.sin(2 * np.pi * df["wochentag"] / 7)
df["wochentag_cos"] = np.cos(2 * np.pi * df["wochentag"] / 7)

# Lag-Features: Vergangene Werte als Praediktor
for lag in [1, 7, 14, 30]:
    df[f"umsatz_lag_{lag}"] = df["umsatz"].shift(lag)

# Rolling-Statistiken: Gleitende Fenster
for window in [7, 14, 30]:
    df[f"umsatz_rolling_mean_{window}"] = (
        df["umsatz"].rolling(window=window, min_periods=1).mean()
    )
    df[f"umsatz_rolling_std_{window}"] = (
        df["umsatz"].rolling(window=window, min_periods=1).std()
    )

# Expanding Features: Kumulative Statistiken
df["umsatz_expanding_mean"] = df["umsatz"].expanding().mean()
df["umsatz_pct_change_7d"] = df["umsatz"].pct_change(periods=7)

print("Zeitbasierte Features (letzte 5 Zeilen):")
print(df[["datum", "umsatz", "umsatz_lag_7", "umsatz_rolling_mean_7",
          "monat_sin", "monat_cos"]].tail())
print(f"\\nGesamte Feature-Anzahl: {len(df.columns)}")

Zyklisches Encoding mit Sinus und Kosinus ist ein häufiges Interview-Thema. Es löst das Problem, dass ordinale Encodings von Monaten oder Wochentagen künstliche Distanzen erzeugen — der Abstand zwischen Dezember (12) und Januar (1) wäre numerisch größer als zwischen Januar und Februar, was inhaltlich falsch ist. Die Sinus-Kosinus-Transformation bildet die zyklische Natur korrekt ab.

Häufige Interview-Fragen und Antwortstrategien

Neben den technischen Implementierungen tauchen in Vorstellungsgesprächen regelmäßig konzeptionelle Fragen auf. Hier sind die wichtigsten Themenbereiche, die bei feature selection techniques und Feature Engineering geprüft werden:

Data Leakage vermeiden: Jede Transformation, die auf dem gesamten Datensatz berechnet wird, bevor Train-Test-Split stattfindet, erzeugt Leakage. Skalierung, Imputation und Encoding müssen innerhalb einer Pipeline auf den Trainingsdaten gefittet und auf die Testdaten nur transformiert werden.

Feature Importance vs. Feature Selection: Feature Importance gibt an, wie stark ein Feature zur Vorhersage beiträgt. Feature Selection nutzt diese Information, um irrelevante Features zu entfernen. Beides ist nicht identisch — ein Feature mit hoher Importance kann redundant sein, wenn ein korreliertes Feature bereits vorhanden ist.

Curse of Dimensionality: Mit steigender Feature-Anzahl wächst der benötigte Datenumfang exponentiell. Feature Selection und Dimensionalitätsreduktion sind daher keine Optimierung, sondern eine Notwendigkeit bei hochdimensionalen Daten.

Multikollinearität: Stark korrelierte Features destabilisieren lineare Modelle. Der Variance Inflation Factor (VIF) quantifiziert dieses Problem. Features mit VIF-Werten über 10 sollten entfernt oder kombiniert werden.

Fazit und Handlungsempfehlungen

Feature Engineering entscheidet in der Praxis häufiger über den Projekterfolg als die Modellauswahl. Für die Vorbereitung auf ein feature engineering interview gelten folgende Kernpunkte:

  • Skalierung an den Algorithmus anpassen: Baumbasierte Modelle benötigen keine Skalierung, distanzbasierte Algorithmen schon. Diese Unterscheidung wird in Interviews gezielt abgefragt.
  • Encoding-Strategie nach Kardinalität wählen: One-Hot für niedrige, Target Encoding für hohe Kardinalität. K-Fold Target Encoding verhindert Leakage.
  • Feature Selection systematisch durchführen: Filter-Methoden zur Vorauswahl, Embedded-Methoden zur Feinauswahl. Immer im Kontext des Validierungsschemas evaluieren.
  • Zeitfeatures zyklisch codieren: Sinus-Kosinus-Transformation für periodische Variablen nutzen, Lag- und Rolling-Features für Zeitreihenprognosen einsetzen.
  • Fehlende Werte als Information behandeln: Indikator-Features erstellen, bevor imputiert wird. Die Imputationsmethode nach dem Fehlmechanismus wählen (MCAR, MAR, MNAR).
  • Pipelines nutzen: Alle Transformationen in sklearn-Pipelines kapseln, um Data Leakage zu vermeiden und Reproduzierbarkeit sicherzustellen.

Wer diese Techniken sicher beherrscht und die zugrundeliegenden Konzepte erklären kann, ist für data science interview questions im Bereich Feature Engineering bestens vorbereitet.

Fang an zu üben!

Teste dein Wissen mit unseren Interview-Simulatoren und technischen Tests.

Tags

#feature-engineering
#machine-learning
#data-science
#interview
#python

Teilen

Verwandte Artikel