Weiter zum Inhalt

Box-Cox-Transformation: Varianz stabilisieren ohne Ratespiel

Erfahre, wie die Box-Cox-Transformation funktioniert, wie du den Lambda-Parameter wählst und wann du sie einsetzt, um Varianz zu stabilisieren, Schiefe zu reduzieren und statistische Modelle zu verbessern.
Aktualisiert 15. Okt. 2026  · 9 Min. lesen

Entdecke KI

ChatGPTClaudePerplexity

Du baust ein lineares Regressionsmodell für Immobilienpreise. Das Residuen-Diagramm sieht aus wie ein Megafon: links eng, rechts weit auffächernd. Das Modell läuft zwar, aber die Ergebnisse sind nicht belastbar. Dieses Muster heißt Heteroskedastizität und ist eine dieser Verletzungen, die deine Schlüsse leise entwerten, ohne einen klaren Fehler zu werfen.

Eine Option ist, die Zielvariable zu transformieren. Und statt zu raten, ob Log, Quadratwurzel oder Kehrwert passend ist, lässt du die Daten die Richtung vorgeben. Genau dahinter steckt die Box-Cox-Transformation. Hier zeige ich dir die Formel, wie du Lambda auswählst und wie du das Ganze in Python und R umsetzt.

Was ist die Box-Cox-Transformation?

Die Box-Cox-Transformation ist eine Familie von Potenztransformationen für strikt positive Daten. Statt dich für eine bestimmte Transformation zu entscheiden, kannst du über einen ganzen Bereich davon suchen, indiziert durch einen Parameter namens Lambda (λ).

Wenn Lambda 0 ist, erhältst du eine Log-Transformation. Bei 0,5 liegst du nahe an der Quadratwurzel. Bei -1 bist du in der Nähe eines Kehrwerts. Alles sind Spezialfälle derselben Formel, sodass du dich nicht vorab festlegen musst. Du schätzt aus den Daten, was am besten passt.

Wichtig von Anfang an: Box-Cox macht Daten nicht einfach „normal“. Je nach Problem kann sie Varianz stabilisieren, die Linearität zwischen Prädiktoren und Antwort verbessern oder Annahmen deines Modells besser erfüllen. Sie erfordert strikt positive Eingabewerte. Nullen und Negative sind tabu. Mehr dazu im Abschnitt zu Einschränkungen.

Wie die Box-Cox-Transformation funktioniert

Vor der Formel etwas Intuition: Du hast eine Variable wie wöchentliche Umsätze, rechtsschief mit langem rechten Schwanz und einer Varianz, die mit dem Mittelwert wächst. Die Frage ist, welche Potenz dieser Variable sich wie eine gutmütige Antwortgröße verhält.

Verschiedene Lambda-Werte entsprechen dir bekannten Transformationen:

  • Lambda = 1: lineare Verschiebung von x (Form der Verteilung bleibt erhalten)
  • Lambda = 0: logarithmische Transformation
  • Lambda = 0,5: verwandt mit der Quadratwurzel-Transformation
  • Lambda = -1: verwandt mit der Kehrwert-Transformation

Die übliche Box-Cox-Formulierung enthält Skalierungs- und Verschiebungskonventionen; daher sind dies vertraute Äquivalente, keine wortwörtlich identischen Formeln. Der Log-Fall (Lambda = 0) wird als Grenzwert behandelt. Die Formel wechselt dort zu log(x) aufgrund von Stetigkeit, nicht als willkürliche Ausnahme.

Box-Cox-Formel

Die stückweise definierte Standardformel lautet:

Hier ist x der positive zu transformierende Wert und Lambda der Transformationsparameter. Die Form (xλ - 1) / λ wirkt zunächst ungewohnt. Das ist die Skalierungskonvention, die die Transformation stetig hält, während Lambda gegen null geht. Ohne sie gäbe es einen Sprung bei Lambda = 0 und der Log-Fall wäre von der Familie entkoppelt. Mit ihr geht die Formel glatt in ln(x) über, wenn λ → 0.

Die Herleitung ist hier nicht entscheidend. Praktisch gilt: Lambda wählen oder schätzen, positive Werte einsetzen und mit den transformierten Ausgaben arbeiten.

Wie wähle ich Lambda für die Box-Cox-Transformation?

Lambda setzt du nicht nach Bauchgefühl. Du schätzt es aus den Daten. Das unterscheidet Box-Cox vom „probier mal Log“. Dahinter steckt ein sauberes statistisches Verfahren.

Maximum-Likelihood-Schätzung

Die Idee: Finde das Lambda, das deine Daten am besten zum angenommenen Modell passen lässt. In der Regression heißt das, das Lambda zu finden, bei dem die transformierte Antwort die Modellannahmen am besten erfüllt, typischerweise Normalität und konstante Varianz der Residuen. Du wählst nicht das Lambda, das die Randverteilung der Antwort isoliert am normalsten aussehen lässt, sondern das, das im Modellkontext am besten funktioniert. Dieser Unterschied ist wichtig und taucht in den typischen Fehlern wieder auf.

Box-Cox-Profillikelihood

Sehr hilfreich ist der Profillikelihood-Plot: Lambda-Werte auf der x-Achse, die Log-Likelihood auf der y-Achse. Das Maximum zeigt das geschätzte optimale Lambda. Ebenso wichtig ist das Konfidenzintervall um dieses Maximum, oft als horizontale Linie unterhalb des Maximums dargestellt. Jedes Lambda in diesem Intervall ist statistisch nicht vom Optimum zu unterscheiden.

Ein gut erklärbares Lambda wählen

Ein Praxis-Tipp, der oft unterschätzt wird: Liegt das optimale Lambda bei 0,43 und liegt 0,5 im Konfidenzintervall, nimm 0,5. Eine Quadratwurzel-Transformation ist leichter zu erklären, leichter zurückzutransformieren und verliert kaum Leistung. Dasselbe gilt für 0 (Log) und 1 (keine Transformation). Verständlichkeit zählt, vor allem wenn du dein Modell erklären musst.

Box-Cox in Python und R einsetzen

Jetzt, da klar ist, was Lambda ist und wie es gewählt wird, geht es in die Praxis. Erst Python, dann R.

Box-Cox in Python

Das stats-Modul von SciPy kann das direkt. Die Funktion boxcox() schätzt Lambda und gibt in einem Aufruf die transformierten Werte zurück. Ein minimales Beispiel mit simulierten rechtsschiefen Daten:

import numpy as np
from scipy import stats

# Simulate right-skewed data (e.g., weekly sales revenue in thousands)
rng = np.random.default_rng(42)
revenue = rng.exponential(scale=50, size=300)

# Confirm all values are positive before transforming
assert (revenue > 0).all(), "Box-Cox requires strictly positive values"

# Estimate lambda and transform
transformed, estimated_lambda = stats.boxcox(revenue)

print(f"Estimated lambda: {estimated_lambda:.4f}")
print(f"Original mean: {revenue.mean():.2f}, std: {revenue.std():.2f}")
print(f"Transformed mean: {transformed.mean():.2f}, std: {transformed.std():.2f}")

Das estimated_lambda maximiert die Log-Likelihood unter der Normalitätsannahme. Diesen Wert nutzt du anschließend auch, um neue Daten für Vorhersagen zu transformieren.

Beachte: Hier wird Lambda aus der Randverteilung der Antwort geschätzt, nicht im Regressionsmodell. In einem Modell-Workflow bewertest du Lambda im Modellkontext. Das R-Beispiel unten zeigt das mit boxcox() aus MASS.

Box-Cox in R

In R ist die Funktion boxcox() aus dem Paket MASS für Regressions-Workflows gemacht. Sie nimmt ein gefittetes Modellobjekt und plottet direkt die Profillikelihood – passender, weil du Lambda im Modell- statt am isolierten Vektor bewertest.

library(MASS)

# Simulate right-skewed response (e.g., weekly revenue)
set.seed(42)
revenue <- rexp(300, rate = 1/50)
predictor <- rnorm(300)

# Fit initial model
initial_model <- lm(revenue ~ predictor)

# Estimate lambda via profile likelihood
bc_result <- boxcox(initial_model, lambda = seq(-2, 2, by = 0.1))

# Extract the lambda with highest log-likelihood
best_lambda <- bc_result$x[which.max(bc_result$y)]
cat("Best lambda:", round(best_lambda, 3), "\n")

# Refit with transformed response
revenue_transformed <- (revenue^best_lambda - 1) / best_lambda
final_model <- lm(revenue_transformed ~ predictor)

R's boxcox() plottet die Profillikelihood automatisch, inklusive Konfidenzintervall. So kannst du leicht entscheiden, ob du Lambda auf einen einfacheren Wert rundest.

Box-Cox interpretieren und rücktransformieren

Nach der Transformation und dem Fit liegen deine Vorhersagen auf der transformierten Skala, nicht der ursprünglichen. Eine Prognose von 3,2 bedeutet 3,2 Einheiten von (xλ - 1) / λ, nicht 3,2 Einheiten Umsatz.

Koeffizienten vorsichtig interpretieren

Die Interpretation der Koeffizienten ändert sich. Auf der transformierten Skala entspricht ein Anstieg eines Prädiktors um eine Einheit einer bestimmten Änderung in y(λ), nicht im ursprünglichen y. Liegt Lambda nahe 0 (nahe Log), kannst du Prozentänderungen auf der Originalskala näherungsweise ableiten. Bei anderen Lambda-Werten hängt die Beziehung vom aktuellen Niveau von x ab.

Inverse Transformation

Um Vorhersagen auf die Originalskala zurückzuführen, wendest du die Inverse an:

Für Lambda = 0 ist die Inverse von ln(x) einfach exp(y).

Hinweis zur Retransformationsverzerrung

Das Rücktransformieren des vorhergesagten Mittelwerts auf der transformierten Skala liefert keine unverzerrte Schätzung des Mittelwerts auf der Originalskala. Das ist eine bekannte Folge der Ungleichung von Jensen und wiegt besonders bei Prognosen von Mittelwerten in log-linearen Modellen. Eine tiefe Behandlung der Bias-Korrektur sprengt hier den Rahmen. Unser Introduction to Regression in Python Kurs deckt Vorhersage und Interpretation breiter ab, falls du mehr Kontext möchtest.

Box-Cox vs. andere Transformationen

Wann solltest du Box-Cox gegenüber Alternativen einsetzen, die du vielleicht schon nutzt?

Box-Cox vs. Log-Transformation

Die Log-Transformation ist der Fall Lambda = 0 bei Box-Cox. Punkt. Wenn du Log bereits genutzt hast, hast du eine spezielle Box-Cox-Variante mit festem Lambda verwendet. Der Vorteil von Box-Cox: Du legst dich nicht vorab auf 0 fest. Liegt das Maximum der Profillikelihood klar bei Lambda = 0, nimm Log. Kein Grund für zusätzliche Komplexität.

Box-Cox vs. Yeo-Johnson-Transformation

Die Yeo-Johnson-Transformation ist eine Erweiterung von Box-Cox für Nullen und negative Werte. Greife dazu, wenn deine Daten Nullen (z. B. Zählwerte) oder Negative enthalten. Die Transformationen sind mathematisch ähnlich; Yeo-Johnson lockert nur die Positivitätsbedingung. In scikit-learn unterstützt PowerTransformer beides, method='box-cox' und method='yeo-johnson', sodass du leicht wechseln kannst.

Box-Cox vs. Standardisierung

Standardisierung (z-Standardisierung) verschiebt und skaliert Daten: Mittelwert 0, Standardabweichung 1. Box-Cox ändert die Form der Verteilung über eine nichtlineare Transformation. Sie lösen unterschiedliche Probleme. Standardisierung reduziert keine Schiefe und stabilisiert keine Varianz. Box-Cox zentriert nicht und macht Features nicht vergleichbar in der Größenordnung. Du kannst beides in Folge tun: erst transformieren, dann standardisieren – Alternativen sind es nicht.

Einschränkungen und typische Fehler

Manches wirkt im Rückblick offensichtlich. Passieren tut es trotzdem – und einiges ist subtil genug, dass „offensichtlich“ viel Arbeit leistet.

Box-Cox auf Null- oder Negativwerte anwenden

Die Formel bricht bei Werten ≤ 0 zusammen. 0λ ist für positives Lambda 0 und für negatives undefiniert; log(0) ist minus Unendlich. Enthalten deine Daten Nullen oder Negative, gibt Box-Cox Fehler oder stillen Unsinn. Nutze stattdessen Yeo-Johnson oder füge eine kleine positive Konstante als Verschiebung hinzu. Letzteres ist eine Näherung und mit Vorsicht zu genießen.

Nur transformieren, um Normalität zu erzwingen

Setze Box-Cox als Reaktion auf ein konkretes Modellproblem ein: nichtkonstante Varianz, miese Linearität, verletzte Residuenannahmen. Sie als automatischen Preprocessing-Schritt zu nutzen, um die Randverteilung „normal“ aussehen zu lassen, ist der falsche Ansatz. Das Lambda, das isoliert normalisiert, ist nicht zwingend das, das deine Modellresiduen verbessert.

Modelldiagnostik ignorieren

Lambda zu schätzen ist nur die halbe Miete. Nach Transformation und Refit Residuenplots erneut prüfen. Box-Cox garantiert keine erfüllten Annahmen, es verschafft dir Chancen. Fächern die Residuen weiter auf oder zeigt sich Krümmung, liegt ein anderes Problem vor.

Vergessen, dass sich die Interpretation ändert

Nach der Transformation beschreiben Koeffizienten keine Zusammenhänge mehr auf der Originalskala. Das führt häufig zu Fehlinterpretationen bei Reporting oder Vorhersagen. Behalte jederzeit im Blick, auf welcher Skala du arbeitest.

Lambda außerhalb des Modellkontexts bewerten

Aus einer univariaten Verteilung (nur Histogramm der Antwort) geschätztes Lambda kann sich von dem im Regressionsmodell unterscheiden. Der modellbasierte Ansatz ist der richtige. Ziel ist die Erfüllung der Residuenannahmen, nicht die der Randverteilung.

Bei Vorhersagen die Transformation vergessen

Setzt du ein Modell mit transformierten Daten ein, musst du neue Eingaben mit demselben Lambda transformieren und Vorhersagen zurücktransformieren. Lässt du einen der Schritte aus, arbeitest du auf der falschen Skala. Klingt banal, wird aber regelmäßig vergessen.

Fazit

Box-Cox ist eine Transformationsfamilie, nicht eine einzelne. Lambda bestimmt, welches Familienmitglied du bekommst; die Log-Transformation ist nur der Spezialfall Lambda = 0. Viele Analysten greifen automatisch zu Log, ohne darüber nachzudenken. Box-Cox macht die Wahl explizit und liefert einen fundierten Weg zu prüfen, ob ein anderes Lambda dem Modell besser dient.

Nutze sie, wenn du etwas Konkretes diagnostizierst: Heteroskedastizität in Residuen, Nichtlinearität, klar verletzte Annahmen. Sie pauschal auf jede Zielvariable anzuwenden, ist eine Gewohnheit, die du dir abgewöhnen solltest. Und wenn deine Daten Nullen oder Negative enthalten, ist das kein Box-Cox-Terrain, sondern Yeo-Johnson.

Für ein tieferes Fundament in den Regressionsmethoden, die Box-Cox typischerweise unterstützt, sind unser Intermediate Regression in R Kurs und Introduction to Regression with statsmodels in Python gute nächste Schritte.


Vinod Chugani's photo
Author
Vinod Chugani
LinkedIn

Vinod Chugani startete seine Karriere in Tokio als jüngster Head of Hedge Fund Sales Desk bei JPMorgan und stellte später bei Lehman Brothers einen individuellen Verkaufsrekord auf, baute danach ein Elektronikvertriebsunternehmen in 30 Ländern auf über 100 Mio. SG$ Umsatz aus und wechselte anschließend in die Datenwelt. Als Economics-Absolvent der Duke University und Alumni der NYC Data Science Academy war er einer von drei Stipendiaten unter mehr als 100 Bewerbenden für Hugo Bowne-Andersons Kurs "Building AI Applications" auf Maven. Heute schreibt er für DataCamp, KDnuggets, Machine Learning Mastery und Statology über Themen von Statistik bis agentischer KI und coacht Datenprofis an der NYC Data Science Academy mit über 1.000 Eins-zu-eins-Sessions.

 

FAQs

Erfordert die Box-Cox-Transformation normalverteilte Eingangsdaten?

Nein. Box-Cox macht keine Annahmen über die Eingangsverteilung, nur dass Werte strikt positiv sind. Ziel ist es, transformierte Daten zu erzeugen, die die Annahmen deines nachgelagerten Modells besser erfüllen, etwa konstante Varianz und annähernde Normalität der Residuen. Normalverteilung als Input ist nicht erforderlich.

Kann ich Box-Cox auf Prädiktoren anwenden oder nur auf die Zielvariable?

Technisch ja, in der Praxis wird sie aber am häufigsten auf die Zielvariable in der Regression angewandt, um Residuenannahmen zu erfüllen. Prädiktoren zu transformieren ist ein separates Thema, das meist mit anderen Techniken adressiert wird. Box-Cox auf jede Spalte eines Datensatzes anzuwenden, ist nicht ihr Zweck.

Was soll ich tun, wenn meine Daten Nullen enthalten?

Box-Cox kann keine Nullen oder negativen Werte verarbeiten, da die Formel dort undefiniert ist. Du hast zwei Optionen: Erstens, die Yeo-Johnson-Transformation nutzen, die den Rahmen auf nichtpositive Werte erweitert. Zweitens, eine kleine positive Konstante addieren, um die Daten vor der Transformation zu verschieben – das ist jedoch nur eine Näherung und kann die Lambda-Schätzung beeinflussen.

Wie wende ich Box-Cox nach dem Training konsistent auf neue Daten an?

Speichere das während des Trainings geschätzte Lambda. Wende bei neuen Daten dieselbe Formel mit diesem festen Lambda an. Schätze Lambda nicht mit neuen Beobachtungen neu. In scikit-learn speichert PowerTransformer mit fit() das Lambda und transform() wendet es konsistent an. Das ist in Pipelines der sicherste Weg.

Warum nutzt die Box-Cox-Formel (x^λ - 1) / λ statt nur x^λ?

Diese Skalierungskonvention hält die Transformation stetig, wenn Lambda gegen null geht. Ohne die Form (x^λ - 1) / λ gäbe es bei Lambda = 0 einen Sprung statt einer glatten Annäherung an die Log-Transformation. So gehören alle Spezialfälle – Log, Quadratwurzel, Kehrwert – zu einer zusammenhängenden Familie.

Garantiert das auf Trainingsdaten geschätzte Lambda, dass meine Modellannahmen erfüllt sind?

Nein. Die Lambda-Schätzung erhöht die Chance, dass deine Modellannahmen besser erfüllt sind, sie garantiert es nicht. Nach Transformation und Refit musst du Residuenplots weiterhin prüfen. Bleiben Probleme, ist Box-Cox für diesen Datensatz oder dieses Modell womöglich nicht das richtige Werkzeug.

Was ist der Unterschied zwischen Box-Cox in SciPy und dem `PowerTransformer` von scikit-learn?

SciPy's boxcox() ist eine unkomplizierte Statistikfunktion. Sie schätzt Lambda und gibt das transformierte Array zurück – gut für Standalone-Analysen. Scikit-learns PowerTransformer mit method='box-cox' verpackt dieselbe Logik als Transformer für Pipelines, trennt fit() und transform() und unterstützt auch Yeo-Johnson. In ML-Workflows ist PowerTransformer meist bequemer.

Sollte ich einen gerundeten Lambda-Wert w&auml;hlen, auch wenn die optimale Sch&auml;tzung leicht abweicht?

Oft ja. Liegt das optimale Lambda bei 0,48, aber 0,5 innerhalb des Konfidenzintervalls der Profillikelihood, ist die Quadratwurzel-Transformation statistisch vertretbar und deutlich leichter zu erklären und zu invertieren. Der Leistungsunterschied ist vernachlässigbar, der Gewinn an Verständlichkeit real. Dasselbe gilt, wenn 0 (Log) oder 1 (formtreue Verschiebung) im Intervall liegen.

Themen
Datenwissenschaft

Mit DataCamp lernen

{count, plural, one {Kurs} other {Kurse}}

Einführung in die Datenvisualisierung mit Seaborn

{hours} Std.
184.9K
Erstelle mit Seaborn in Python informative Visualisierungen, die deine Zielgruppe überzeugen.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow
Ähnlich

{count, plural, one {Tutorial} other {Tutorials}}

OLS-Regression: Die wichtigsten Ideen erklärt

Gewinne Vertrauen in die OLS-Regression, indem du ihre theoretischen Grundlagen beherrschst. Erforsche, wie du einfache Implementierungen in Excel, R und Python durchführst.
Josef Waples's photo

Josef Waples

8 Min.

{count, plural, one {Tutorial} other {Tutorials}}

Python-Lambda-Funktionen: Ein Leitfaden für Anfänger

Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Mark Pedigo's photo

Mark Pedigo

10 Min.

{count, plural, one {Tutorial} other {Tutorials}}

AVERAGE() in Excel: Die wichtige Funktion einfach erklärt

Lerne die Arbeit mit Excels AVERAGE()-Funktion – inklusive bedingter und logischer Varianten.
Josef Waples's photo

Josef Waples

3 Min.

{count, plural, one {Tutorial} other {Tutorials}}

Zahlen in Python quadrieren: Grundlagen und fortgeschrittene Methoden

Quadrieren in Python ist einfach: Nutze den eingebauten Operator ** oder setze für vielseitigere Lösungen NumPy, pow(), math.pow(), Bitoperatoren und weitere Funktionen ein.
Allan Ouko's photo

Allan Ouko

11 Min.

{count, plural, one {Tutorial} other {Tutorials}}

Fibonacci-Folge in Python: Lerne und entdecke Programmiertechniken

Finde raus, wie die Fibonacci-Folge funktioniert. Schau dir die mathematischen Eigenschaften und die Anwendungen in der echten Welt an.
Laiba Siddiqui's photo

Laiba Siddiqui

6 Min.

{count, plural, one {Tutorial} other {Tutorials}}

Hamming-Distanz erklärt: Theorie und Anwendungen

Erkunde Grundlagen, Anwendungen und Vergleiche der Hamming-Distanz in verschiedenen Bereichen.
Vinod Chugani's photo

Vinod Chugani

8 Min.

Mehr AnzeigenMehr Anzeigen