Transformasi Box-Cox

Prep

Transformasi Box-Cox

Dibuat: Pembaruan terakhir: Waktu baca: 1 menit

Transformasi Box-Cox mengurangi skewness dan menstabilkan variansi selama semua nilai bernilai positif. Jika terdapat nol atau bilangan negatif, geser datanya atau gunakan transformasi Yeo-Johnson.

Definisi #

Untuk (x > 0) dan parameter (\lambda):

$$ T_\lambda(x) = \begin{cases} \dfrac{x^\lambda - 1}{\lambda}, & \lambda \ne 0,\\ \log x, & \lambda = 0. \end{cases} $$

Contoh penggunaan #

import numpy as np
import matplotlib.pyplot as plt

x = np.random.default_rng(42).lognormal(mean=1.5, sigma=0.6, size=1_000)
plt.figure(figsize=(6, 4))
plt.hist(x, bins=30, color="steelblue")
plt.title("Distribusi awal (positif namun skewed)")
plt.show()

Contoh penggunaan (diagram)

from scipy.stats import boxcox, boxcox_normmax

lmbda = boxcox_normmax(x)
print(f"Lambda terestimasi: {lmbda:.3f}")

x_trans = boxcox(x, lmbda=lmbda)
plt.figure(figsize=(6, 4))
plt.hist(x_trans, bins=30, color="seagreen")
plt.title("Setelah transformasi Box-Cox")
plt.show()

Contoh penggunaan (diagram)

Tips praktis #

  • Hitung (\lambda) hanya dengan data pelatihan kemudian terapkan nilai tersebut pada data validasi maupun pengujian.
  • Gunakan inv_boxcox untuk mengembalikan hasil prediksi ke skala asli.
  • Kombinasikan dengan scaler tambahan (StandardScaler, MinMaxScaler) bila model membutuhkan fitur yang terpusat dan ter-skala.
  • Jika fitur memuat nilai nol atau negatif, geser datanya atau gunakan transformasi Yeo-Johnson.