Box-Cox 변환

이정훈·2026년 2월 15일

Box-Cox?

  • 데이터가 한쪽으로 쏠려(Skewed) 있거나, 퍼짐 정도가 일정하지 않을 때 box-cox변환 사용

  • λ\lambda승 만큼 제곱해서 Skewed데이터의 모양을 정규분포로 바꿔줌(일반적으로 [-5, 5]구간의 λ\lambda를 사용)

    yi(λ)={yiλ1λ(λ0)ln(yi)(λ=0)y_i^{(\lambda)} = \begin{cases} \frac{y_i^\lambda - 1}{\lambda} & (\lambda \neq 0) \\ \ln(y_i) & (\lambda = 0) \end{cases}
  • λ\lambda값에 따른 일반적으로 알고 있는 변환

  • MLE(maximum likelihood estimation)로 box-cox의 λ\lambda값 추정 가능하며 σ^2\hat{\sigma}^2을 구하여 ll(λ)ll(\lambda) 이 최대화 되는 λ\lambda를 선택

ll(λ)=n2ln(σ^2(λ))+(λ1)i=1nln(yi)ll(\lambda) = -\frac{n}{2} \ln(\hat{\sigma}^2(\lambda)) + (\lambda - 1) \sum_{i=1}^n \ln(y_i)

yi(λ)y_i^{(\lambda)}가 정규분포를 따른다고 가정하고 log likelihood를 계산


코드

# 1. 찌그러진 데이터 생성 (지수 분포 - 왼쪽으로 쏠림)
original_data = np.random.exponential(scale=2, size=1000)

# 2. Box-Cox 변환 수행 (lmbda를 정의하지 않으면 MLE로 최적의 lambda 도출)
# 반환값: (변환된 데이터, 최적의 람다)
transformed_data, best_lambda = stats.boxcox(original_data)

profile
AngDDo

0개의 댓글