Kurs

„In vielen praktischen Data-Science-Aufgaben enthält der Datensatz kategoriale Variablen. Diese Variablen werden typischerweise als Textwerte gespeichert.“ (Practical Business Python) Da Machine Learning auf mathematischen Gleichungen basiert, wird es problematisch, wenn wir kategoriale Variablen unverändert lassen. Viele Algorithmen können kategoriale Werte ohne weitere Bearbeitung verarbeiten, dennoch ist oft strittig, ob man sie kodieren sollte. Algorithmen, die kategoriale Werte nicht unterstützen, sind hingegen auf Kodierungsmethoden angewiesen. Schauen wir uns einige Verfahren an.
Kodierungsmethoden
Label-Encoding
Beim Label-Encoding ordnen wir jeder Kategorie eine Zahl bzw. ein Label zu. Zwischen den vergebenen Labels besteht keine inhaltliche Beziehung. Kategorien, die inhaltlich zusammenhängen oder nah beieinanderliegen, verlieren nach der Kodierung diese Information.
Frequenzkodierung
Hier nutzen wir die Häufigkeit der Kategorien als Labels. Wenn die Häufigkeit mit der Zielvariable zusammenhängt, hilft das dem Modell, Gewichte in direkter oder inverser Proportion zu vergeben – je nach Datenlage.
One-Hot-Encoding
In diesem Verfahren ordnen wir jeder Kategorie einen Vektor aus 1 und 0 zu, der das Vorhandensein eines Merkmals anzeigt. Die Anzahl der Vektoren hängt von den zu berücksichtigenden Kategorien ab. Bei Merkmalen mit hoher Kardinalität entstehen sehr viele Spalten, was das Training deutlich verlangsamt. Oft wird One-Hot-Encoding mit „Dummy-Encoding“ verglichen. Sie sind sich sehr ähnlich, mit dem Unterschied, dass One-Hot so viele Spalten erzeugt wie Kategorien vorhanden sind, während beim Dummy-Encoding eine Spalte weniger entsteht. Welche Variante verwendet wird, sollte im Validierungsprozess fallbezogen entschieden werden.
Dummy-Variable-Falle:
Angenommen, ein kategoriales Merkmal hat zwei Ausprägungen. Nach One-Hot-Encoding gibt es zwei Spalten, die dieses Merkmal repräsentieren. Schaut man genauer hin, reicht jedoch eine Spalte aus. Hat ein Merkmal beispielsweise die Werte „rot“ und „blau“, entstehen zwei Vektoren – einer für „rot“, einer für „blau“. Die Information lässt sich aber mit nur einem Vektor abbilden; der andere ist dann deterministisch. Wir können also eine Spalte weglassen. Das reduziert die Datenmenge, auf der Algorithmen trainiert werden müssen, verbessert oft die Modellleistung und macht das Modell leichter erklärbar. In der Praxis haben wir häufig viele kategoriale Merkmale, teils mit Vorwissen über deren Wirkung. Kodierungsverfahren helfen zwar bei der Aufbereitung, machen den Prozess und das Training aber auch aufwendiger.
Target-, Impact- oder Likelihood-Encoding
Target-Encoding ähnelt dem Label-Encoding, nur dass die Labels hier direkt mit dem Ziel verknüpft sind. Beim Mean-Target-Encoding etwa erhält jede Kategorie als Label den Mittelwert der Zielvariable im Trainingsdatensatz. Diese Methode bildet die Beziehung zwischen ähnlichen Kategorien ab, beschränkt sich aber auf die Beziehung zwischen Kategorien und Zielvariable. Vorteile: Das Datenvolumen bleibt unverändert und das Training wird schneller. Nachteil: Die Validierung ist anspruchsvoller. Für diese Methode ist Regularisierung erforderlich. Siehe Target-Encoder in Python und R.
Kodierungsstatistik
Kodierungsvariabilität beschreibt, wie stark die Kodierung innerhalb einer Kategorie variiert. Bei One-Hot-Encoding hängt die Variabilität vom Zeitpunkt und der Logik der Umsetzung ab, also davon, welche Kategorien genügend Einfluss auf die Zielvariable haben, um berücksichtigt zu werden. Andere Kodierungsmethoden zeigen ebenfalls Variabilität, die sich in der Validierung beurteilen lässt.
Zur Berechnung der Unterscheidbarkeit einer Kodierung zählen wir die Labels der Kategorien und berechnen anschließend die Standardabweichung der Labels. So sehen wir, ob die kodierten Kategorien klar getrennt sind oder eher dicht beieinanderliegen.
Beachte: Wählst du im Modellierungsprozess eine sehr einfache Kodierung, kann das Modell verzerrt sein. Für weiterführende Erläuterungen siehe diese Diskussion. Je nach Modell musst du die Kodierung anpassen – für Regression bietet sich z. B. Mean-Target-Encoding an, für Klassifikation etwa relative Frequenzkodierung.
Zum Schluss möchte ich noch einen Transformer im scikit-learn-Stil teilen, der kategoriale Variablen mit verschiedenen Techniken kodiert.
category_encoders
Diese scikit-learn-Bibliothek stellt aktuell folgende Techniken bereit:
- Ordinal
- One-Hot
- Binary
- Helmert Contrast
- Sum Contrast
- Polynomial Contrast
- Backward Difference Contrast
- Hashing
- BaseN
- LeaveOneOut
- Target Encoding
Sie unterstützt pandas-DataFrames als Input und kann Daten transformieren. Außerdem lässt sie sich in sklearn-Pipelines einsetzen. Details findest du hier.
Wenn du mehr über scikit-learn lernen möchtest, schau dir den DataCamp-Kurs Supervised Learning with scikit-learn an.