📌 선형회귀분석의 가정 충족 조건
- 선형성 : 독립변수(feature)의 변화에 따라 종속변수도 일정 크기로 변화해야 한다.
- 정규성 : 잔차항(오차항)이 정규분포를 따라야 한다.
- 독립성 : 독립변수의 값이 서로 관련되지 않아야 한다.
- 등분산성 : 그룹간의 분산이 유사해야 한다. 독립변수의 모든 값에 대한 오차들의 분산은 일정해야 한다.
- 다중공선성 : 다중회귀 분석 시 두 개 이상의 독립변수 간에 강한 상관관계가 있어서는 안된다.
💡 선형성
- 독립변수(feature)의 변화에 따라 종속변수도 일정 크기로 변화해야 한다.
sns.regplot(x=fitted, y=residual, lowess=True, line_kws={'color':'red'})
plt.plot([fitted.min(), fitted.max()], [0,0])
plt.show()

💡 정규성
- 잔차항(오차항)이 정규분포를 따라야 한다.
Q-Qplot으로 확인하거나 shapiro검정 등을 통해 확인할 수 있다.
import scipy.stats
ssz = scipy.stats.zscore(residual)
(x,y),_= scipy.stats.probplot(ssz)
sns.scatterplot(x=x, y=y)
plt.plot([-3,3],[-3,3], '--', color='blue')
plt.show()
print('정규성 : ', scipy.stats.shapiro(residual))

💡 독립성
- 독립변수의 값이 서로 관련되지 않아야 한다. 잔차가 자기상관(인접 관측치와 독립이어야 함)이 있는지 확인하기
- 자기상관은 Durbin-Watson 지수 d 를 이용하여 검정한다.
d 값은 0~4 사이에 나오며 2에 가까울수록 자기상관이 없이 독립이며, 독립인 경우 회귀분석을 사용할 수 있다.
💡 등분산성
- 그룹간의 분산이 유사해야 한다. 독립변수의 모든 값에 대한 오차들의 분산은 일정해야 한다.
sns.regplot(x=fitted, y=np.sqrt(np.abs(ssz)), lowess=True, line_kws={'color':'red'})
plt.show()

💡 다중공선성
- 다중회귀 분석 시 두 개 이상의 독립변수 간에 강한 상관관계가 있어서는 안되기 때문에 VIF지수를 출력하여 확인한다.
- VIF지수가 10 이상이면 다중공선성이 있다고 판단, 1 주변에 있다면 다중공선성이 없어 모형을 신뢰할 수 있다고 판단할 수 있다.
from statsmodels.stats.outliers_influence import variance_inflation_factor
print(variance_inflation_factor(advdf.values, 1))
print(variance_inflation_factor(advdf.values, 2))
vifdf = pd.DataFrame()
vifdf['vif_value'] = [variance_inflation_factor(advdf.values, i) for i in range(1, 3)]
print(vifdf)
