KI‑Kompass
Kompass

Merkmale bauen

Aus Rohdaten Spalten machen, mit denen ein Modell etwas anfangen kann: Kodierung, Skalierung, Zeitmerkmale und der häufigste Weg, sich selbst zu betrügen.

·2 Min. Lesezeit·Von Fachredaktion Technik
DETAILGRAD
3 Abschnitte

Die Idee

Ein Modell sieht Spalten mit Zahlen. Ein Datum wie 2026-08-25 ist für es zunächst bedeutungslos. Nützlich wird es erst als „Dienstag", „Kalenderwoche 35", „drei Tage vor Monatsende". Merkmalstechnik ist die Übersetzung von Wirklichkeit in solche Spalten.

Die üblichen Umwandlungen

RohwertNützliche Merkmale
DatumWochentag, Monat, Feiertag, Tage seit Ereignis
AdresseRegion, Entfernung zum Standort, Stadt oder Land
TextLänge, Sprache, Vorhandensein bestimmter Begriffe, Embedding
BetragBetrag, Logarithmus, Abweichung vom Kundenmittel
KategorieOne-Hot, Häufigkeit, Zielkodierung

Die Pipeline, die Leakage verhindert

import numpy as np, pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.ensemble import HistGradientBoostingClassifier

num = ["betrag", "tage_seit_letztem_auftrag"]
kat = ["region", "kanal"]

vorbereitung = ColumnTransformer([
    ("num", Pipeline([("imp", SimpleImputer(strategy="median")),
                      ("sc",  StandardScaler())]), num),
    ("kat", OneHotEncoder(handle_unknown="ignore", min_frequency=20), kat),
])

# Alles in einer Pipeline: Median und Kategorienliste werden je Faltung
# nur aus dem Trainingsteil gelernt. Genau das verhindert Leakage.
modell = Pipeline([("vor", vorbereitung),
                   ("clf", HistGradientBoostingClassifier())])
  • Nie den Median über den gesamten Datensatz berechnen und dann teilen.
  • handle_unknown="ignore" setzen, sonst bricht der Betrieb bei neuen Kategorien.
  • Seltene Kategorien zusammenfassen, statt hunderte Spalten mit je drei Fällen zu erzeugen.
  • Zyklische Größen wie Stunde oder Monat als Sinus und Kosinus kodieren, nicht als Zahl.

Zielkodierung mit Glättung

Geglättete Zielkodierung

enc(c) = ( n_c · ȳ_c + m · ȳ ) / ( n_c + m )

Eine seltene Kategorie wird stark zum Gesamtmittel hin gezogen, eine häufige behält ihren eigenen Wert.

ȳ_c
der Zielmittelwert innerhalb der Kategorie c
ȳ
der Gesamtmittelwert
n_c
Anzahl der Fälle in Kategorie c
m
Glättungsstärke, üblich 10 bis 50

Ohne Glättung bekommt eine Kategorie mit einem einzigen Fall exakt dessen Zielwert und wird damit zu einer verkleideten Kopie des Etiketts. Ohne Kreuzvalidierung innerhalb der Kodierung passiert dasselbe auch bei größeren Kategorien, nur subtiler.

Zyklische Kodierung

Stunde als Punkt auf einem Kreis

x₁ = sin(2π · h / 24) x₂ = cos(2π · h / 24)

Zwei Spalten statt einer sorgen dafür, dass 23 Uhr und 0 Uhr benachbart sind.

h
die Stunde von 0 bis 23

Als schlichte Zahl liegen 23 und 0 maximal weit auseinander, obwohl sie eine Stunde trennt. Für Baumverfahren ist das unerheblich, für lineare Modelle und Netze ist es ein systematischer Fehler.

Was bei Tabellendaten wirklich zählt

Empirisch schlägt Gradient Boosting auf gut gebauten Merkmalen tiefe Netze auf denselben Daten in der Mehrzahl der Fälle. Die drei ertragreichsten Griffe:

  1. Aggregate über Gruppen. Mittelwert, Maximum und Anzahl je Kunde, Standort oder Monat, jeweils nur aus der Vergangenheit gerechnet.
  2. Differenzen und Verhältnisse. Betrag geteilt durch den üblichen Betrag desselben Kunden sagt mehr als der Betrag selbst.
  3. Zeitabstände. Tage seit dem letzten Vorgang, Tage bis zur Frist.

Alle drei sind anfällig für Leakage über die Zeitachse. Der Aufwand steckt nicht in der Berechnung, sondern in der korrekten Fensterung. Siehe Datenlecks im Training.

Passende Kurse und Quellen

KursKostenlos600 Min.EN

Kaggle Learn

Kurze Einheiten mit ausführbaren Notebooks, von Python über Pandas bis zu ersten Modellen. Ohne Installation, direkt im Browser.

Für den allerersten Einstieg ohne Installation, direkt im Browser.

War diese Seite hilfreich?
Merkmale bauen