Python 데이터분석 기초 49 - 단회귀분석(선형회귀분석) OLS summary(요약결과) 보는 방법
# 단순선형회귀 모델
# 기본적인 결정론적 선형회귀방법 : 독립변수에 대해 대응하는 종속변수와 유사한 예측값을 출력하는 함수 f(x)(= wx + b)를 찾는 작업이다.
import pandas as pd
df = pd.read_csv('../testdata/drinking_water.csv')
print(df.head(3))
print(df.corr()) # 상관관계 출력
import statsmodels.formula.api as smf
# 적절성이 만족도에 영향을 준다라는 가정하에 모델 생성
model = smf.ols(formula = '만족도 ~ 적절성', data = df).fit() # 종속변수 ~ 독립변수, fit()함수는 학습하는 합수
print(model.summary()) # 생성된 모델의 요약결과를 반환. 능력치 확인
# p-value = Prob (F-statistic): 2.24e-52
# 기울기 = coef : 0.7393
# 표준오차 = std err : 0.038 (모집단에서 표본집단을 추출, 표본평균들의 표준편차)
# 기울기 절편을 구하려면 최소제곱법 이용(패턴이 같으면 최소제곱법은 밀도에 상관없이 동일한 수식을 제공한다.)
# 기울기와 절편은 -> 최소제곱법을 이용해서 구한다. 밀도와 상관없이 패턴이 같다면 같은 추세선이 나타나게 된다.
# 하지만 밀도가 높으면 표준오차가 작다(분산의 설명력이 높다) -> R-squared (결정계수, 설명력) 이 높다.
# P>|t| : 0.05보다 작으면 독립변수로서 의미가 있다.
# R-squared : 0.588 (결정계수, 설명력) x가 종속변수 y의 분산을 설명하는 비율(0~1), 종속변수의 전체 분산으로 설명된 분산(종속변수가 독립변수의 영향을 받은 설명력)을 나눈 값
# Adj. R-squared : 0.586 (다중회귀분석에서는 이것을 이용)
# F값이나 T값이 커지면 p-value는 작아진다. (반비례 관계)
# Omnibus는 무의미성에 대해 수치를 표시한 것이다.
# Durbin-Watson는 변수들 간의 자기상관을 표시
# Prob(JB) : 0.000335 , 숫자가 0에 가까울수록 정규분포에 가깝다.
# Skew : -0.328, 왜도
# Kurtosis : 4.012, 첨도
print('회귀계수 :', model.params)
print('결정계수 :', model.rsquared)
print('유의확률 :', model.pvalues)
print('예측값 :', model.predict()[:5])
print('실제값 :', df.만족도[:5].values)
print()
new_df = pd.DataFrame({'적절성':[4,3,2,1]})
new_pred = model.predict(new_df)
print('예측 결과 :', new_pred.values)
<console>
친밀도 적절성 만족도
0 3 4 3
1 3 3 2
2 4 4 4
친밀도 적절성 만족도
친밀도 1.000000 0.499209 0.467145
적절성 0.499209 1.000000 0.766853
만족도 0.467145 0.766853 1.000000
OLS Regression Results
==============================================================================
Dep. Variable: 만족도 R-squared: 0.588
Model: OLS Adj. R-squared: 0.586
Method: Least Squares F-statistic: 374.0
Date: Tue, 15 Nov 2022 Prob (F-statistic): 2.24e-52
Time: 13:00:37 Log-Likelihood: -207.44
No. Observations: 264 AIC: 418.9
Df Residuals: 262 BIC: 426.0
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 0.7789 0.124 6.273 0.000 0.534 1.023
적절성 0.7393 0.038 19.340 0.000 0.664 0.815
==============================================================================
Omnibus: 11.674 Durbin-Watson: 2.185
Prob(Omnibus): 0.003 Jarque-Bera (JB): 16.003
Skew: -0.328 Prob(JB): 0.000335
Kurtosis: 4.012 Cond. No. 13.4
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
회귀계수 : Intercept 0.778858
적절성 0.739276
dtype: float64
결정계수 : 0.5880630629464404
유의확률 : Intercept 1.454388e-09
적절성 2.235345e-52
dtype: float64
예측값 : [3.73596305 2.99668687 3.73596305 2.25741069 2.25741069]
실제값 : [3 2 4 2 2]
예측 결과 : [3.73596305 2.99668687 2.25741069 1.51813451]
1. p-value = Prob (F-statistic): 2.24e-52
2. 기울기 = coef : 0.7393
3. 표준오차 = std err : 0.038 (모집단에서 표본집단을 추출, 표본평균들의 표준편차)
4. 기울기 절편을 구하려면 최소제곱법 이용(패턴이 같으면 최소제곱법은 밀도에 상관없이 동일한 수식을 제공한다.)
기울기와 절편은 -> 최소제곱법을 이용해서 구한다. 밀도와 상관없이 패턴이 같다면 같은 추세선이 나타나게 된다.
하지만 밀도가 높으면 표준오차가 작다(분산의 설명력이 높다) -> R-squared (결정계수, 설명력) 이 높다.
5. R-squared : 0.588 (결정계수, 설명력) x가 종속변수 y의 분산을 설명하는 비율(0~1), 종속변수의 전체 분산으로 설명된 분종속변수가 독립변수의 영향을 받은 설명력)을 나눈 값
6. Adj. R-squared : 0.586 (다중회귀분석에서는 이것을 이용)
7. F값이나 T값이 커지면 p-value는 작아진다. (반비례 관계)
8. T값은 평균집단 1 - 평균집단2 / 표준오차이다. 기울기가 있으므로 그것을 이용하여 집단 1, 집단 2로 나눌 수 있다. 그것 으로 T값을 구한다.
T-값은 표본 데이터 변동에 비례한 차이의 크기를 측정한다. 다르게 표현하면 T는 계산된 차이를 표준 오차 단위로 나 타낸 것으로, T의 크기가 클수록 귀무 가설에 대한 증거가 크다 즉, 유의한 차이가 있다는 증거가 더 명확한 것.
9. Omnibus는 무의미성에 대해 수치를 표시한 것이다.
10. Durbin-Watson는 변수들 간의 자기상관을 표시
11. Prob(JB) : 0.000335 , 숫자가 0에 가까울수록 정규분포에 가깝다.
12. Skew : -0.328, 왜도
13. Kurtosis : 4.012, 첨도
14. # P>|t| : 0.05보다 작으면 독립변수로서 의미가 있다.

