모델 적합도 정량화

Python에서 statsmodels로 살펴보는 회귀 소개

Maarten Van den Broeck

Content Developer at DataCamp

브림과 퍼치 모델

브림 이전에 본 브림 질량 대 길이 산점도(추세선 포함).

퍼치 이전에 본 퍼치 질량 대 길이 산점도(추세선 포함).

Python에서 statsmodels로 살펴보는 회귀 소개

결정 계수

"r-squared" 또는 "R-squared"라고도 합니다.

설명 변수로 예측 가능한 반응 변수의 분산 비율

  • 1은 완벽한 적합을 의미합니다
  • 0은 최악의 적합을 의미합니다
Python에서 statsmodels로 살펴보는 회귀 소개

`.summary()`

"R-Squared" 항목의 값을 확인하세요

mdl_bream = ols("mass_g ~ length_cm", data=bream).fit()
print(mdl_bream.summary())
# Some lines of output omitted                          

                            OLS Regression Results                         
Dep. Variable:                 mass_g   R-squared:                       0.878
Model:                            OLS   Adj. R-squared:                  0.874
Method:                 Least Squares   F-statistic:                     237.6
Python에서 statsmodels로 살펴보는 회귀 소개

`.rsquared` 속성

print(mdl_bream.rsquared)
0.8780627095147174
Python에서 statsmodels로 살펴보는 회귀 소개

상관계수의 제곱

coeff_determination = bream["length_cm"].corr(bream["mass_g"]) ** 2
print(coeff_determination)
0.8780627095147173
Python에서 statsmodels로 살펴보는 회귀 소개

잔차 표준 오차(RSE)

이전에 본 브림 질량 대 길이 산점도의 잔차

  • 예측값과 실제 반응값의 "전형적인" 차이
  • 반응 변수와 동일한 단위를 사용합니다.
  • MSE = RSE²
Python에서 statsmodels로 살펴보는 회귀 소개

`.mse_resid` 속성

mse = mdl_bream.mse_resid
print('mse: ', mse)
mse:  5498.555084973521
rse = np.sqrt(mse)
print("rse: ", rse)
rse:  74.15224261594197
Python에서 statsmodels로 살펴보는 회귀 소개

RSE 계산: 잔차 제곱

residuals_sq = mdl_bream.resid ** 2

print("residuals sq: \n", residuals_sq)
residuals sq: 
0      138.957118
1      260.758635
2     5126.992578
3     1318.919660
4      390.974309
    ...
30    2125.047026
31    6576.923291
32     206.259713
33     889.335096
34    7665.302003
Length: 35, dtype: float64
Python에서 statsmodels로 살펴보는 회귀 소개

RSE 계산: 잔차 제곱합

residuals_sq = mdl_bream.resid ** 2

resid_sum_of_sq = sum(residuals_sq)

print("resid sum of sq :",
      resid_sum_of_sq)
resid sum of sq : 181452.31780412616
Python에서 statsmodels로 살펴보는 회귀 소개

RSE 계산: 자유도

residuals_sq = mdl_bream.resid ** 2

resid_sum_of_sq = sum(residuals_sq)

deg_freedom = len(bream.index) - 2

print("deg freedom: ", deg_freedom)

자유도는 관측값 수에서 모델 계수 수를 뺀 값입니다.

deg freedom:  33
Python에서 statsmodels로 살펴보는 회귀 소개

RSE 계산: 비율의 제곱근

residuals_sq = mdl_bream.resid ** 2

resid_sum_of_sq = sum(residuals_sq)

deg_freedom = len(bream.index) - 2

rse = np.sqrt(resid_sum_of_sq/deg_freedom)

print("rse :", rse)
rse : 74.15224261594197
Python에서 statsmodels로 살펴보는 회귀 소개

RSE 해석

mdl_bream의 RSE는 74입니다.

예측된 브림 질량과 실제 브림 질량의 차이는 일반적으로 약 74g입니다.

Python에서 statsmodels로 살펴보는 회귀 소개

평균 제곱근 오차(RMSE)

residuals_sq = mdl_bream.resid ** 2

resid_sum_of_sq = sum(residuals_sq)

deg_freedom = len(bream.index) - 2

rse = np.sqrt(resid_sum_of_sq/deg_freedom)

print("rse :", rse)
rse : 74.15224261594197
residuals_sq = mdl_bream.resid ** 2

resid_sum_of_sq = sum(residuals_sq)

n_obs = len(bream.index)

rmse = np.sqrt(resid_sum_of_sq/n_obs)

print("rmse :", rmse)
rmse : 72.00244396727619
Python에서 statsmodels로 살펴보는 회귀 소개

연습해 봅시다!

Python에서 statsmodels로 살펴보는 회귀 소개

Preparing Video For Download...