공부

PowerTransformer

ko_sick 2025. 2. 24. 22:35

PowerTransformer 완벽 해부: 정규 분포로의 마법과 수학적 원리, 코드 예시까지! ‍♂️

PowerTransformer는 데이터 과학 마법사가 애용하는 도구 중 하나입니다. 데이터 분포를 정규 분포에 가깝게 변환시켜 모델 성능을 향상시키는 강력한 기능을 자랑하죠. "power"라는 이름 때문에 제곱을 떠올릴 수 있지만, 실제 작동 방식은 조금 다릅니다. 함께 PowerTransformer의 비밀을 파헤쳐 볼까요?

1. 정규 분포, 왜 중요할까?

- 통계학의 중심

정규 분포는 통계학에서 가장 흔하고 중요한 분포입니다. 많은 통계적 추론 및 검정 방법들이 데이터가 정규 분포를 따른다고 가정합니다.

- 머신러닝 모델의 선호

일부 머신러닝 모델은 데이터가 정규 분포에 가까울 때 성능이 향상되는 경향이 있습니다. 특히, 선형 모델(Linear Regression, Logistic Regression)이나 Gaussian Naive Bayes 등이 대표적입니다.

2. PowerTransformer, 어떻게 작동할까?

PowerTransformer는 데이터를 정규 분포에 가깝게 변환하기 위해 Yeo-Johnson 변환 또는 Box-Cox 변환을 사용합니다.

- Yeo-Johnson 변환

음수 값을 포함하는 데이터에 적용 가능하며, Box-Cox 변환의 일반화된 형태입니다.

- Box-Cox 변환

양수 값 데이터에만 적용 가능하며, 특정 조건 하에서 최적의 변환을 제공합니다.

두 변환 모두 데이터를 특정 지수승하여 정규 분포에 가깝게 만드는 원리를 이용합니다.

3. 수학적 원리 엿보기

변환 과정은 복잡한 수학적 계산을 포함하지만, 핵심은 데이터를 특정 지수(λ)로 거듭제곱하여 분포를 조정하는 것입니다. 최적의 λ 값은 데이터의 왜도(skewness)를 최소화하는 값으로 결정됩니다.

4. 코드 예시로 이해하기

Python
 
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PowerTransformer

# 1. 데이터 생성: 왼쪽으로 치우쳐진 분포
data = np.random.exponential(size=1000).reshape(-1, 1)

# 2. PowerTransformer 객체 생성 및 변환
pt = PowerTransformer(method='yeo-johnson') # 음수값 포함시 yeo-johnson, 양수만 있다면 box-cox
data_transformed = pt.fit_transform(data)

# 3. 시각화: 변환 전후 분포 비교
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))

ax1.hist(data, bins=50, color='skyblue')
ax1.set_title('Original Data (Skewed)')

ax2.hist(data_transformed, bins=50, color='lightcoral')
ax2.set_title('Transformed Data (Normal-like)')

plt.show()

위 코드에서는 np.random.exponential 함수를 사용하여 왼쪽으로 치우쳐진 데이터를 생성하고, PowerTransformer를 이용하여 정규 분포에 가깝게 변환합니다. 히스토그램을 통해 변환 전후의 분포를 비교하면 PowerTransformer의 효과를 눈으로 확인할 수 있습니다.

왜도가 심한 Hist(좌)를 PowerTransformer를 통해서 어느정도 정규분포에 가깝도록 변환

 

5. PowerTransformer, 언제 사용할까?

- 데이터 분포 개선

데이터가 정규 분포와 거리가 멀 때 PowerTransformer를 사용하여 모델 성능을 향상시킬 수 있습니다.

- 특정 모델 성능 향상

선형 모델, Gaussian Naive Bayes 등 특정 모델은 데이터가 정규 분포에 가까울 때 성능이 향상되는 경향이 있습니다.

6. 주의 사항

- 모든 데이터에 효과적인 것은 아님

PowerTransformer는 데이터 분포를 정규 분포에 가깝게 만들어주지만, 모든 데이터에 효과적인 것은 아닙니다.

- 과도한 변환은 역효과

지나치게 정규 분포에 맞추려는 시도는 오히려 모델 성능을 저해할 수 있습니다.