목차
아래는 TV, Radio, Social_media로 지불하는 광고비와 이때의 판매량(Sales)에 관한 데이터이다.
어떤 변수가 판매량에 영향을 미치는가에 대해 분석하고자 한다.
1. 라이브러리
- 기본
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
- 통계관련
# Import the statsmodel module.
import statsmodels.api as sm
# Import the ols function from statsmodels.
from statsmodels.formula.api import ols
2. EDA: Y변수인 Sales의 distribution을 visualize해보자
fig = sns.histplot(data['Sales'])
fig.set_title('Distribution of Sales');
---> sales는 25부터 360 정도 사이의 값을 갖는다.
3. 모델 building
1) pairplot
pairplot으로 변수 간에 관계가 있는지 확인해보자.
sns.pairplot(data);
---> TV와 Sales가 가장 강한 선형 관계가 있고, Radio도 있기는 하지만 그 강도가 약하다.
2) OLS 모델만들기
ols formula : Y변수 ~ X변수
ols_formula = 'Sales ~ TV'
ols 함수로 OLS 모델만들기
OLS = ols(formula = ols_formula, data = data)
모델 학습시키기
model = OLS.fit()
결과
model_results = model.summary()
4. Model assumption
이 선형회귀모델의 효용성을 입증하기 위해서 4가지 가설을 확인해야 한다.
1) Linearity assumption
두 변수 사이에 선형 관계가 있는지 확인한다.
sns.scatterplot(x = data['TV'], y = data['Sales']);
----> 충족한다.
2) Normality assumption
오차가 정규분포를 이뤄야한다는 가정이다.
두 가지 그래프로 입증할 수 있다.
우선 잔차는 아래와 같다.
residuals = model.resid
두 그래프를 한 화면에 놓아보자.
fig, axes = plt.subplots(1, 2, figsize = (8,4))
첫 번째 그래프는 히스토그램이다.
sns.histplot(residuals, ax=axes[0])
axes[0].set_xlabel("Residual Value")
axes[0].set_title("Histogram of Residuals")
두 번째 그래프는 qqplot이다.
sm.qqplot(residuals, line='s',ax = axes[1])
axes[1].set_title("Normal Q-Q plot")
tight_layout() 함수로 두 그래프 간 공백을 준다.
plt.tight_layout()
그래프를 띄운다.
plt.show()
----> 정상성도 만족한다는 것을 알 수 있다.
3) Homoscedasticity assumption
잔차가 x 변수의 모든 값에 대해 동일한 분산을 가져야 한다는 것이다.
fitted value와 residuals에 대한 scatterplot을 그리고, y=0 선 하나를 그려서 y=0을 축으로 잔차의 분산이 어떻게 시각화되는지 살펴보자.
# 모델의 예측값, 모델의 잔차에 대한 scatterplot을 그린다.
fig = sns.scatterplot(x = model.fittedvalues, y = model.resid)
fig.set_xlabel("Fitted Values")
fig.set_ylabel("Residuals")
fig.set_title("Fitted Values v. Residuals")
# y=0 선 하나를 그린다.
fig.axhline(0)
#plt.show()
----> 잔차의 분산이 X값에 대해 일치하기 때문에 가정에 맞다.
4) Indepence assumption
각각의 관찰된 값이 모두 독립적으로 상호 영향을 미치지 않기 때문에 가정을 만족한다.
파이썬으로 통계공부하기, 회귀분석 가정 확인하기