Skip to main content

변수의 변형

변수의 변형

  • 필요성: 선형 모형은 독립-종속 변수 간 선형 관계 가정. 현실 데이터는 비선형 관계 많음.
  • 방법: 독립변수(또는 종속변수)에 비선형 함수(로그, 제곱근, 제곱 등) 적용하여 관계 선형화 시도.
  • 예시: z=logxz = \log x, y^=wz+b\hat{y} = wz + b
  • Python: 관계식 내 numpy 등 수학 함수 직접 사용 가능 (np.log(x)).

로그 함수 변환

  • 형태: 오른쪽 위로 갈수록 완만해짐 (증가율 감소).
  • 특성: 큰 값 차이 줄여줌 (예: 1 vs 10, 10 vs 100, 100 vs 1000 이 로그 스케일에서는 등간격).
  • 효과: 데이터 오른쪽 긴 꼬리(positive skew) 왼쪽으로 끌어당겨 분포 대칭적으로 만듦.
  • 용도: 소득, 가격 등 오른쪽으로 치우친(positive skewed) 변수 변환에 자주 사용. 간격 일정하게 만드는 효과.

왜도

  • 데이터 분포의 비대칭 정도.
    • Negative Skew: 왼쪽 꼬리 김 (- 방향 치우침). 평균 < 중간값 < 최빈값.
    • Positive Skew: 오른쪽 꼬리 김 (+ 방향 치우침). 최빈값 < 중간값 < 평균.
  • 값 해석 (절대값 기준):
    • 0: 좌우 대칭.
    • |0.5|: 중간 정도 치우침.
    • |1|: 극단적 치우침.

예시: 중고차 주행거리 분포

  • 히스토그램: 오른쪽 꼬리 긴 형태 보임.
  • 왜도 계산: skew(df['mileage']) 결과 > 1.04 → + 방향 매우 치우침.
  • 로그 변환: np.log(mileage) 적용 시 분포 좀 더 대칭적으로 변함. 회귀 분석 성능 개선 기대.

Python 회귀분석과 산점도 (로그 변환 적용)

import matplotlib.pyplot as plt
import numpy as np
from statsmodels.formula.api import ols

# 회귀분석 (로그 변환된 mileage 사용)
m = ols('price ~ np.log(mileage)', data=df).fit()

# 산점도 (x축도 로그 변환)
plt.plot(np.log(df.mileage), df.price, 'o') # 'o'는 점 모양
plt.xlabel('Log(Mileage)')
plt.ylabel('Price')
plt.show()

Box-Cox 변환

from scipy.stats import boxcox
df['mileage_tr'], lambd = boxcox(df.mileage)

회귀 분석

ols('price ~ mileage_tr', data=df).fit().summary()

변환 함수의 시각화

# 변환 함수의 플롯
import matplotlib.pyplot as plt
x = np.linspace(0, 200000, 100)
y = boxcox(x, lambd)
plt.plot(x, y)

I() 함수

  • statsmodels 관계식 내에서 **산술 연산자(+, *, , / 등) 그대로 사용하고 싶을 때 사용. (+는 변수 추가 의미이므로)
  • 예시: xz를 더한 변수를 독립변수로 사용:
    price ~ I(my_car_damage + other_car_damage)

2차항(제곱항) 추가

  • 목적: 곡선(비선형) 관계 모델링.
  • 관계식: ** (거듭제곱 연산자)와 I() 함수 사용.
    # y = w2*x^2 + w1*x + b 모형
    y ~ I(x**2) + x

절편 없는 모형

  • 목적: 이론적으로 x=0x=0 일 때 y=0y=0 이어야 하는 경우 (예: 속도 0일 때 제동거리 0).
  • 관계식: 0 + 추가.
    y ~ 0 + x
  • 주의: 절편 유무에 따라 R2R^2 계산 방식 달라짐 (TSS 기준 다름). 직접 비교 어려움.

절편 없는 이차함수 예시: 제동 거리

# 제동거리(dist) ~ 속도(speed)
# 데이터 로드
sp = pd.read_excel('speed.xlsx')

# 절편 없는 일차함수
m1 = ols('dist ~ 0 + speed', data=sp).fit()

# 절편 없는 이차함수 (speed^2 항 추가)
m2 = ols('dist ~ 0 + I(speed**2) + speed', data=sp).fit()

절편의 이동 (Centering)

  • 절편 의미: 모든 독립변수 = 0 일 때 종속변수 예측치.
  • 이동: 독립변수 값에서 특정 상수(예: 평균, 기준 시점) 빼주면 절편 의미 바뀜.
    • price ~ I(year - 2010) → 절편은 year = 2010 일 때 price 예측치 의미.
  • 효과: 분석 결과 자체 영향 없으나, 절편 해석 용이해질 수 있음.

독립변수의 서열(순위) 이용 회귀분석

  • 방법: 독립변수 실제 값 대신 순위(rank) 사용.
  • 관계식: y ~ x.rank()
  • 논리: 스피어만 상관계수와 유사. 변수 간 단조적 관계 파악.
  • 장점:
    • 표준화처럼 단위 다른 변수 비교 용이.
    • 로그 변환처럼 한쪽으로 치우친 데이터 영향 완화. 비선형성 일부 처리.
  • 단점:
    • 새로운 데이터 예측 시, 기존 데이터 기준 순위 다시 매겨야 함 (번거로움).
    • 관찰 범위 벗어난 값 예측 불가 (순위 기반이므로).

퀴즈