ols 라이브러리에서 OLS Regression Results 보고서를 분석해보자.
독립변수(x,feature) : 적절성,
종속변수(y,label) : 만족도
import pandas as pd
df = pd.read_csv('../testdata/drinking_water.csv')
print(df.head())
#상관관계분석: 적절성과 만족도는 관계가 깊다
print(df.corr())
import statsmodels.formula.api as smf
#종속변수 ~ 독립변수
model = smf.ols(formula='만족도 ~ 적절성',data=df).fit()
print(model.summary())
분석결과 | 설명 |
---|---|
no.observations | "Number of observations"으로 총 표본 수 |
DF Residuals | 잔차의 자유도, 전체 표본 수에서 측정되는 변수들(종속변수 및 독립변수)의 개수를 뺀것. 즉, DF Residuals = 표본수 - 종속변수 개수 - 독립변수 개수 |
DF Model | 독립변수의 개수 |
R-squared | 결정계수, 전체 데이터 중 해당 회귀모델이 설명할 수 있는 데이터의 비율, 회귀식의 설명력을 나타낸다. 성능을 나타냄(1에 가까울수록 성능이 좋음) 참고 : https://ysyblog.tistory.com/168 |
Adj. R-squared | 모델에 도움이 되는 데이터에 따라 조정된 결정계수 |
F-statistics | F 통계량으로 도출된 회귀식이 적절한지 볼 수 있음, 0과 가까울 수록 적절한 것 (T값을 거듭제곱) |
Prob(F-statistics) | [pvalue] : F를 이용하여 산출되는 수치로, 회귀식이 유의미한지 판단. (0.05이하일 경우 변수 끼리 매우 관련있다고 판단) 참고 : https://ysyblog.tistory.com/174 |
AIC | 표본의 개수와 모델의 복잡성을 기반으로 모델을 평가하며, 수치가 낮을 수록 좋음 |
BIC | AIC와 유사하나 패널티를 부여하여 AIC보다 모델 평가 성능이 더 좋으며, 수치가 낮을 수록 좋음 |
분석결과 | 설명 |
---|---|
coef(Coefficient) | 회귀계수. [0.025 0.975] 95% 신뢰구간 안에 계수가 존재한다는 것을 확인할 수 있다. |
std err | 계수 추정치의 표준오차(standard error), 값이 작을 수록 좋음 |
t | t-test, 각 변수에 대한 t value(표준오차/기울기). 독립변수와 종속변수 사이의 상관관계, 값이 클 수록 상관도가 큼 |
p-value(P > t) | 모델이 유의한지에 대한 value , 독립변수들의 유의 확률, 0.05보다 작아야 유의미함. 위 모델의 변수들의 p-value를 살펴보면 INDUS, AGE가 0.05보다 크므로 통계적으로 유의하지 않다. 참고 : https://ysyblog.tistory.com/165 |
[0.025 0.975] | 회귀 계수의 신뢰구간 95% |
분석결과 | 설명 |
---|---|
Omnibus | 디아고스티노 검정(D'Angostino's Test), 비대칭도와 첨도를 결합한 정규성 테스트이며 값이 클 수록 정규분포를 따름. |
Prob(Omnibus) | 디아고스티노 검정이 유의한지 판단 (0.05이하일 경우 유의하다고 판단) |
Skew(왜도) | 평균 주위의 잔차들의 대칭하는지를 보는 것이며, 0에 가까울수록 대칭이다. (음수일수록 오른쪽, 양수일수록 왼쪽으로 치우쳐짐) |
Kurtosis(첨도) | 잔차들의 분포 모양이며, 3에 가까울 수록 정규분포이다. (음수이면 평평한 형태, 양수는 뾰족한 형태) |
Durbin - Watson | 더빈왓슨 정규성 검정이며, 잔차의 독립성 여부를 판단. (1.5 ~ 2.5 사이일때 잔차는 독립적이라고 판단하며 0이나 4에 가까울 수록 잔차들은 자기상관을 가지고 있다고 판단) 참고 : https://ysyblog.tistory.com/120 |
Jarque - Bera (JB) | 자크베라 정규성 검정, 값이 클 수록 정규분포의 데이터를 사용했다는 것. |
Cond. No | 다중공선성 검정. 독립변수간 상관관계가 있는지 보는 것이며, 10이상이면 다중공선성이 있다고 판단.참고 : https://ysyblog.tistory.com/122 |
Prob(JB) | 오차의 정규성 |
print('회귀계수 : ',model.params) #0.778
print('결정계수 : ',model.rsquared) #0.5880
print('pvalue: ',model.pvalues) #1.45e-09
#결과 예측
print('예측값 : ',model.predict()[:5])
print('실제값 : ',df.만족도[:5].values)
#시각화
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font',family='malgun gothic')
plt.scatter(df.적절성,df.만족도)
slope,intercept = np.polyfit(df.적절성,df.만족도,1)
plt.plot(df.적절성,df.적절성 * slope + intercept)
plt.show()
# 새로운 데이터 결과 예측
new_df = pd.DataFrame({'적절성':[4,3,1,0,6]})
new_pred = model.predict(new_df)
print(new_pred)