Feature Engineering voor Machine Learning: Technieken en Interviewvragen 2026

Leer de belangrijkste feature engineering technieken voor machine learning interviews. Met Python-voorbeelden en veelgestelde data science interviewvragen.

Feature Engineering voor Machine Learning: Technieken en Interviewvragen 2026

Feature engineering is het proces waarbij ruwe data wordt omgezet in betekenisvolle variabelen die de voorspelkracht van machine learning modellen aanzienlijk verbeteren. In een feature engineering interview wordt niet alleen theoretische kennis getoetst, maar ook het vermogen om creatieve en effectieve features te ontwerpen voor complexe datasets. Dit artikel behandelt de kernconcepten, praktische Python-implementaties en veelgestelde data science interview questions die in 2026 regelmatig terugkomen bij technische gesprekken.

Tip

Feature engineering bepaalt vaak het verschil tussen een middelmatig en een uitstekend presterend model. Recruiters en hiring managers hechten grote waarde aan kandidaten die niet alleen modellen kunnen trainen, maar ook weten hoe ze de juiste input daarvoor samenstellen.

Waarom Feature Engineering Onmisbaar Is

Het succes van elk machine learning project hangt voor een groot deel af van de kwaliteit van de input-features. Zelfs het meest geavanceerde deep learning model levert ondermaatse resultaten op wanneer het wordt gevoed met slecht voorbereide data. Machine learning feature engineering omvat het selecteren, transformeren en creëren van variabelen die de onderliggende patronen in data beter vastleggen.

In de praktijk besteden data scientists vaak 60 tot 80 procent van hun tijd aan data voorbereiding en feature engineering. Dit is geen toeval: de juiste features reduceren ruis, voorkomen overfitting en maken modellen interpreteerbaarder. Tijdens een sollicitatiegesprek is het essentieel om dit proces helder te kunnen uitleggen en te demonstreren.

Feature Scaling en Normalisatie

Veel machine learning algoritmen, waaronder gradient descent-gebaseerde modellen en afstandsgebaseerde methoden zoals k-NN, zijn gevoelig voor de schaal van inputvariabelen. Feature scaling zorgt ervoor dat alle variabelen op een vergelijkbare schaal opereren, waardoor het trainingsproces stabieler en sneller verloopt.

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

df = pd.DataFrame({
    "salary": [45000, 52000, 61000, 48000, 95000],
    "experience_years": [2, 4, 6, 3, 15],
    "age": [25, 30, 35, 28, 45]
})

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

# MinMaxScaler: waarden tussen 0 en 1
minmax_scaler = MinMaxScaler()
df_minmax = pd.DataFrame(
    minmax_scaler.fit_transform(df),
    columns=df.columns
)

# RobustScaler: robuust tegen uitschieters
robust_scaler = RobustScaler()
df_robust = pd.DataFrame(
    robust_scaler.fit_transform(df),
    columns=df.columns
)

print("StandardScaler resultaat:")
print(df_standard.round(3))

De keuze tussen deze methoden hangt af van de verdeling van de data. StandardScaler is geschikt voor normaal verdeelde variabelen, MinMaxScaler voor bounded features, en RobustScaler wanneer de dataset uitschieters bevat. Een veelgestelde interviewvraag is wanneer welke methode de voorkeur verdient — het antwoord draait altijd om de eigenschappen van de specifieke dataset.

Categorische Variabelen Coderen

Categorische variabelen vormen een bijzondere uitdaging omdat de meeste algoritmen uitsluitend met numerieke input werken. De wijze waarop deze variabelen worden gecodeerd, heeft directe invloed op modelprestaties. Er bestaan verschillende strategieën, elk met eigen voor- en nadelen.

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

df = pd.DataFrame({
    "city": ["Amsterdam", "Rotterdam", "Utrecht", "Amsterdam", "Den Haag"],
    "education": ["HBO", "WO", "MBO", "WO", "HBO"],
    "salary": [55000, 62000, 41000, 68000, 52000]
})

# One-Hot Encoding: voor nominale variabelen zonder ordening
df_onehot = pd.get_dummies(df, columns=["city"], prefix="city")

# Ordinal Encoding: voor variabelen met natuurlijke ordening
education_order = [["MBO", "HBO", "WO"]]
ordinal_enc = OrdinalEncoder(categories=education_order)
df["education_encoded"] = ordinal_enc.fit_transform(df[["education"]])

# Target Encoding: gemiddelde van de doelvariabele per categorie
target_enc = TargetEncoder(cols=["city"], smoothing=2)
df["city_target_encoded"] = target_enc.fit_transform(
    df["city"], df["salary"]
)

print("One-Hot Encoded:")
print(df_onehot.head())
print("\nOrdinal + Target Encoded:")
print(df[["city", "education_encoded", "city_target_encoded"]])

One-hot encoding is de veiligste keuze voor variabelen met weinig unieke waarden, maar leidt tot dimensie-explosie bij hoge cardinaliteit. Target encoding is in dat geval een krachtig alternatief, mits het correct wordt toegepast met kruisvalidatie om data leakage te voorkomen. Dit onderscheid is een klassiek onderwerp bij data science interview questions.

Klaar om je Data Science & ML gesprekken te halen?

Oefen met onze interactieve simulatoren, flashcards en technische tests.

Feature Selection Technieken

Niet elke feature draagt bij aan de voorspelkracht van een model. Irrelevante of redundante variabelen introduceren ruis en verhogen de kans op overfitting. Feature selection techniques helpen bij het identificeren van de meest informatieve subset van variabelen.

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

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

# Filter methode: statistische tests
selector_anova = SelectKBest(score_func=f_classif, k=10)
X_filtered = selector_anova.fit_transform(X, y)
anova_scores = pd.Series(
    selector_anova.scores_, index=feature_names
).sort_values(ascending=False)
print("ANOVA F-scores (top 10):")
print(anova_scores.head(10))

# Mutual Information: vangt ook niet-lineaire relaties
selector_mi = SelectKBest(score_func=mutual_info_classif, k=10)
selector_mi.fit(X, y)
mi_scores = pd.Series(
    selector_mi.scores_, index=feature_names
).sort_values(ascending=False)

# Wrapper methode: Recursive Feature Elimination
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rfe = RFE(estimator=rf_model, n_features_to_select=10, step=2)
rfe.fit(X, y)
selected_features = [f for f, s in zip(feature_names, rfe.support_) if s]
print(f"\nRFE geselecteerde features: {selected_features}")

Filter-methoden zoals ANOVA en mutual information zijn snel maar houden geen rekening met interacties tussen features. Wrapper-methoden zoals RFE zijn nauwkeuriger maar computationeel duurder. Embedded methoden, zoals de ingebouwde feature importance van Random Forest of L1-regularisatie, bieden een goed compromis. Tijdens een interview is het waardevol om alle drie de categorieën te kunnen benoemen en hun afwegingen te bespreken.

Interactie-Features Creëren

Soms ligt de voorspelkracht niet in individuele variabelen maar in de combinatie ervan. Interactie-features leggen relaties vast die een model anders niet zou ontdekken, vooral bij lineaire modellen die geen automatische interactie-detectie uitvoeren.

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

df = pd.DataFrame({
    "length": [5.2, 3.8, 7.1, 4.5, 6.3],
    "width": [2.1, 1.9, 3.4, 2.0, 2.8],
    "height": [1.5, 1.2, 2.0, 1.3, 1.7]
})

# Handmatige interactie-features
df["volume"] = df["length"] * df["width"] * df["height"]
df["area"] = df["length"] * df["width"]
df["length_width_ratio"] = df["length"] / df["width"]
df["surface_density"] = df["height"] / df["area"]

# PolynomialFeatures voor systematische interacties
poly = PolynomialFeatures(
    degree=2,
    interaction_only=True,
    include_bias=False
)
X_poly = poly.fit_transform(df[["length", "width", "height"]])
poly_names = poly.get_feature_names_out(["length", "width", "height"])

df_interactions = pd.DataFrame(X_poly, columns=poly_names)
print("Gegenereerde interactie-features:")
print(df_interactions.head())

# Domeinspecifieke ratio-features
df["aspect_ratio"] = df["length"] / df["height"]
df["compactness"] = df["volume"] / (df["length"] ** 3)
print("\nDataset met alle features:")
print(df.round(3))

Het verschil tussen een junior en een senior data scientist wordt vaak zichtbaar in de kwaliteit van handmatig ontworpen features. Domeinkennis speelt hierbij een cruciale rol: wie de onderliggende businesslogica begrijpt, kan features creëren die een zuiver algoritmische aanpak mist. Bij een feature engineering interview wordt deze vaardigheid actief getoetst.

Omgaan met Ontbrekende Waarden

Ontbrekende waarden komen in vrijwel elke productiedataset voor. De strategie voor het afhandelen ervan heeft directe impact op modelkwaliteit. Het simpelweg verwijderen van rijen met missende waarden is zelden de beste aanpak, vooral wanneer het patroon van ontbrekende data zelf informatief is.

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

df = pd.DataFrame({
    "age": [25, np.nan, 35, 40, np.nan, 55],
    "income": [45000, 52000, np.nan, 68000, 41000, np.nan],
    "score": [7.5, 8.0, 6.5, np.nan, 7.0, 9.0],
    "category": ["A", "B", np.nan, "A", "C", "B"]
})

# Indicatorvariabelen: ontbrekend als feature
for col in ["age", "income", "score"]:
    df[f"{col}_missing"] = df[col].isna().astype(int)

# Numerieke imputatie met KNN
knn_imputer = KNNImputer(n_neighbors=3, weights="distance")
numeric_cols = ["age", "income", "score"]
df[numeric_cols] = knn_imputer.fit_transform(df[numeric_cols])

# Iteratieve imputatie (MICE-achtig)
iterative_imputer = IterativeImputer(
    max_iter=20, random_state=42
)
df_iterative = pd.DataFrame(
    iterative_imputer.fit_transform(df[numeric_cols]),
    columns=numeric_cols
)

# Categorische imputatie: modus of aparte categorie
df["category"] = df["category"].fillna("Unknown")

print("Geïmputeerde dataset:")
print(df.round(2))
print(f"\nMissing indicator kolommen: {[c for c in df.columns if '_missing' in c]}")

Het toevoegen van missingness-indicatoren als aparte features is een techniek die tijdens interviews vaak het verschil maakt. Het patroon van ontbrekende data kan zelf voorspellende waarde bevatten — bijvoorbeeld wanneer gebruikers bewust bepaalde velden leeg laten. KNN-imputatie en iteratieve imputatie leveren doorgaans betere resultaten dan simpele gemiddelde-imputatie, omdat ze de correlaties tussen variabelen meenemen.

Tijdgebaseerde Feature Engineering

Tijdreeksdata vereist specifieke feature engineering technieken die temporele patronen vastleggen. Van seizoensgebonden trends tot rolling statistics: het extraheren van tijdsinformatie is een veelvoorkomend onderwerp in machine learning feature engineering interviews.

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({
    "date": dates,
    "sales": np.random.poisson(lam=50, size=365) + \
             (np.sin(np.arange(365) * 2 * np.pi / 7) * 10).astype(int)
})

# Kalender-features extraheren
df["day_of_week"] = df["date"].dt.dayofweek
df["month"] = df["date"].dt.month
df["quarter"] = df["date"].dt.quarter
df["is_weekend"] = (df["day_of_week"] >= 5).astype(int)
df["day_of_year"] = df["date"].dt.dayofyear

# Cyclische codering voor periodieke features
df["month_sin"] = np.sin(2 * np.pi * df["month"] / 12)
df["month_cos"] = np.cos(2 * np.pi * df["month"] / 12)
df["dow_sin"] = np.sin(2 * np.pi * df["day_of_week"] / 7)
df["dow_cos"] = np.cos(2 * np.pi * df["day_of_week"] / 7)

# Rolling statistics: voortschrijdende vensters
df["sales_rolling_7d"] = df["sales"].rolling(window=7).mean()
df["sales_rolling_30d"] = df["sales"].rolling(window=30).mean()
df["sales_rolling_std_7d"] = df["sales"].rolling(window=7).std()

# Lag-features: waarden uit het verleden
for lag in [1, 7, 14, 28]:
    df[f"sales_lag_{lag}"] = df["sales"].shift(lag)

# Verschil-features
df["sales_diff_1d"] = df["sales"].diff(1)
df["sales_diff_7d"] = df["sales"].diff(7)

# Expanding (cumulatieve) statistieken
df["sales_expanding_mean"] = df["sales"].expanding().mean()

print("Tijdgebaseerde features (eerste 35 rijen):")
print(df.iloc[30:35][["date", "sales", "sales_rolling_7d",
                        "sales_lag_7", "month_sin"]].round(3))

Cyclische codering met sinus- en cosinustransformaties voorkomt dat het model onterechte afstanden leert — maand 12 en maand 1 liggen in werkelijkheid naast elkaar, maar als integers zijn ze ver verwijderd. Lag-features en rolling statistics geven het model geheugen over het verleden, wat essentieel is voor nauwkeurige tijdreeksvoorspellingen.

Veelgestelde Interviewvragen over Feature Engineering

Ter voorbereiding op een feature engineering interview is het nuttig om de meest voorkomende vragen en verwachte antwoorden te kennen:

Wat is het verschil tussen feature selection en feature extraction? Feature selection kiest een subset uit bestaande features, terwijl feature extraction nieuwe features creëert door transformaties toe te passen (zoals PCA). Beide verminderen dimensionaliteit maar op fundamenteel verschillende manieren.

Hoe voorkom je data leakage bij feature engineering? Alle transformaties worden uitsluitend op trainingsdata gefit en vervolgens op test- en validatiedata getransformeerd. Pipelines in scikit-learn garanderen deze scheiding. Target encoding vereist extra aandacht en wordt idealiter met cross-validation binnen de trainingsset uitgevoerd.

Wanneer kies je voor one-hot encoding versus target encoding? One-hot encoding is veilig bij lage cardinaliteit (minder dan 15-20 unieke waarden). Bij hogere cardinaliteit leidt one-hot encoding tot een explosie van dimensies en is target encoding of embedding-gebaseerde encoding effectiever.

Hoe ga je om met features die een hoge correlatie vertonen? Sterk gecorreleerde features verwijderen verbetert modelstabiliteit en interpreteerbaarheid. Variance Inflation Factor (VIF) en correlatiematrices zijn standaardtools voor het opsporen van multicollineariteit.

Conclusie

Feature engineering blijft in 2026 een van de meest gewaardeerde vaardigheden in data science. De combinatie van technische implementatiekennis en domeinbegrip onderscheidt sterke kandidaten in het sollicitatieproces. De belangrijkste takeaways voor een succesvolle voorbereiding:

  • Beheers de verschillende scalingsmethoden en weet wanneer welke van toepassing is op basis van dataverdeling en algoritme-eisen.
  • Kies de juiste encodingstrategie voor categorische variabelen, met speciale aandacht voor data leakage bij target encoding.
  • Combineer filter-, wrapper- en embedded-methoden voor robuuste feature selection techniques die zowel efficiënt als nauwkeurig zijn.
  • Behandel ontbrekende waarden als informatiebron door missingness-indicatoren toe te voegen naast imputatie.
  • Pas cyclische codering en lag-features toe voor tijdreeksdata om temporele patronen volledig vast te leggen.
  • Oefen het uitleggen van ontwerpkeuzes — interviewers waarderen een helder verhaal minstens zo veel als correcte code.

Begin met oefenen!

Test je kennis met onze gespreksimulatoren en technische tests.

Tags

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

Delen

Gerelateerde artikelen