변수의 변형
변수의 변형
- 주요 개념:
- 로그 함수
- I 함수
- 2차항
- 절편이 없는 모형
- 절편의 이동
- 독립변수의 서열을 이용한 회귀분석
변수의 변형
- 선형 모형은 독립변수와 종속변수의 선형적 관계를 가정한다는 한계
- 독립변수를 비선형 변환하면 이 한계를 일부 극복할 수 있음
- Python은 관계식에 수학 함수를 사용하면 자동으로 변수 변환
왜도 skewnesss
- 데이터가 한쪽 방향으로 치우친 정도( 해당 방향으로 극단치가 존재)
- negative skew: - 방향으로 치우침
- positive skew: + 방향으로 치우침
- 0이면 좌우대칭,±0.5면 중간 정도 치우침, ±1이 넘으면 극단적 치우침
중고차 주행거리의 분포
히스토그램
import seaborn as sns
sns.histplot(x='mileage', data=df)
- 왜도 > 1.04 (+로 매우 치우침)
df['mileage'].skew()
로그 함수
- 오른쪽 위로 갈 수록 완만해지는 형태
- 가로축에서 1, 10, 100이 세로축에서 같은 간격(예: 0, 1, 2)
- 데이터에 적용하면 오른쪽을 왼쪽으로 끌어당기는 효과
- 독립변수에 오른쪽으로 크게 떨어져 있는 값이 있는 경우(예: 소득), 로그 함수를 적용해주면 간격을 일정하게 만들어 줄 수 있음
Python 회귀분석과 산점도
- 회귀분석 (R제곱은 0.457)
ols('price ~ mileage', df).fit().summary()
- 산점도
sns.lmplot(x='mileage', y='price', data=df)
Python 로그 함수 적용
- 회귀분석 (R제곱: 0.479)
import numpy as np
ols('price ~ np.log(mileage)', df).fit().summary() - 산점도
df['log_mileage'] = np.log(df['mileage'])
sns.lmplot(x='log_mileage', y='price', data=df)
Box-Cox 변환
- 로그 변환의 일반화
- 일 때는 로그 함수와 같음
from scipy.stats import boxcox
df['mileage_tr'], lambd = boxcox(df.mileage)
lambd - 회귀분석 (R제곱: 0.498)
ols('price ~ mileage_tr', df).fit().summary()
Box-Cox 변환
- 히스토그램
sns.histplot(x='mileage_tr', data=df)
- 산점도
sns.lmplot(x='mileage_tr', y='price', data=df)
변환 함수의 시각화
import matplotlib.pyplot as plt
x = np.linspace(0, 100, 100)
y1 = boxcox(x, lambd)
plt.plot(x, y1, label='Box-Cox')
y2 = np.log(x)
plt.plot(x, y2, linestyle='dashed', label='Log')
plt.legend()