변수의 변형
변수의 변형
- 필요성: 선형 모형은 독립-종속 변수 간 선형 관계 가정. 현실 데이터는 비선형 관계 많음.
- 방법: 독립변수(또는 종속변수)에 비선형 함수(로그, 제곱근, 제곱 등) 적용하여 관계 선형화 시도.
- 예시: ,
- 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
관계식 내에서 **산술 연산자(+, *, , / 등) 그대로 사용하고 싶을 때 사용. (+
는 변수 추가 의미이므로)- 예시:
x
와z
를 더한 변수를 독립변수로 사용:price ~ I(my_car_damage + other_car_damage)
2차항(제곱항) 추가
- 목적: 곡선(비선형) 관계 모델링.
- 관계식:
**
(거듭제곱 연산자)와I()
함수 사용.# y = w2*x^2 + w1*x + b 모형
y ~ I(x**2) + x
절편 없는 모형
- 목적: 이론적으로 일 때 이어야 하는 경우 (예: 속도 0일 때 제동거리 0).
- 관계식:
0 +
추가.y ~ 0 + x
- 주의: 절편 유무에 따라 계산 방식 달라짐 (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()
- 논리: 스피어만 상관계수와 유사. 변수 간 단조적 관계 파악.
- 장점:
- 표준화처럼 단위 다른 변수 비교 용이.
- 로그 변환처럼 한쪽으로 치우친 데이터 영향 완화. 비선형성 일부 처리.
- 단점:
- 새로운 데이터 예측 시, 기존 데이터 기준 순위 다시 매겨야 함 (번거로움).
- 관찰 범위 벗어난 값 예측 불가 (순위 기반이므로).