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()

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()

Tips praktis #
- Hitung (\lambda) hanya dengan data pelatihan kemudian terapkan nilai tersebut pada data validasi maupun pengujian.
- Gunakan
inv_boxcoxuntuk 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.