본문 바로가기

머신러닝

[Machine Learning] 회귀모델의 평가지표 - MSE, MAE, RMSE, R2, OLS (최소자승법; Ordinary Least Squares)

회귀모델을 평가하는 평가지표들(evaluation metrics)

  • MSE (Mean Squared Error) =np.mean(np.square((y_true - y_pred))) 
  • MAE (Mean absolute error) =np.mean(np.abs((y_true - y_pred))) 
  • RMSE (Root Mean Squared Error) =np.sqrt(MSE(y_true, y_pred)) 
  • R-squared (Coefficient of determination) = 
  • 참고
    • SSE(Sum of Squares Error, 관측치와 예측치 차이): 
    • SSR(Sum of Squares due to Regression, 예측치와 평균 차이): 
    • SST(Sum of Squares Total, 관측치와 평균 차이): 
                                                                                       , SSE + SSR

 

평가지표를 이용하는 python

    1. 라이브러리 불러오기
      from sklearn.metrics import  mean_squared_error, mean_absolute_error, r2_score​
    2. 회귀방정식 평가지표 산출하기
      # 회귀방정식 평가지표
      mse = mean_squared_error(y_test, y_pred)
      mae = mean_absolute_error(y_test, y_pred)
      rmse = mse ** 0.5
      r2 = r2_score(y_test, y_pred)​
          
      from sklearn.metrics import mean_absolute_error
      mean_absolute_error(y_test, y_pred)
      - R2 =  값이 1에 가까울 수록 데이터의 설명력을 잘 보여준다고 생각한다.
      - MAE = 단위 유닛이 같으므로 보다 해석에 용이한 장점이 있고, MSE 보다 특이치에 robust합니다.(이상치에 덜 영향을 받는다.) 절대값을 취하기 때문에 모델이 underperformance 인지 overperformance 인지 알 수 없습니다.
                          * underperformance: 모델이 실제보다 낮은 값으로 예측
                          * overperformance: 모델이 실제보다 높은 값으로 예측
      - MSE = MAE와는 다르게 모델의 예측값과 실제값 차이의 면적의 합입니다. 이런 차이로, 특이값이 존재하면 수치가 많이 늘어난다. 
      - RMSE = 오류 지표를 실제 값과 유사한 단위로 다시 변환하여 해석을 쉽게 한다
      - MAPE = MAE를 퍼센트로 변환한 것입니다. MSE보다 특이치에 robust하다.(like as MAE). 추가적으로 모델에 대한 편향이 존재. 0 근처의 값에서는 사용하기 어렵습니다. (np.mean(np.abs((y_true - y_pred) / y_true)) * 100)
      - MPE = MAPE에서 절대값을 제외한 지표. 모델이 underperformance 인지 overperformance 인지 판단 할 수 있다. (np.mean((y_true - y_pred) / y_true) * 100)

회귀문제에서 RMSE가 일반적으로 선호되는 방법이지만, 상황에 맞는 다른 방식을 사용해야 합니다. 특이값이 많은 경우에는 MAE를 사용하는게 좋다.  

OLS

잔차제곱합(RSS: Residual Sum of Squares)를 최소화하는 가중치 벡터를 구하는 방법이다.

OLS는 가장 단순하고 많이쓰는 선형 회귀 모델 추정 방법 이다. 일반적으로 실험이나 관측치에 적용할때 사용한다. 오차의 제곱의 합(MAE)을 최소화 하는 기법으로 회귀계수(B0와 B1)를 추정하는 기법. 즉 근사적으로 구하려는 예측값과 실제 값의 오차의 제곱의 합이 최소가 되는 해를 구하는 방법. Outlier(노이즈)에 취약하며 특징 변수와 샘플 건수에 비례해 계산 비용이 높다.

from statsmodels.formula.api import ols
res = ols('price~sqft_living', data=df).fit()
res.summary()

from statsmodels.formula.api import ols

ols('종속변수 ~ 독립변수', data=df).fit()

 

결과는 .summary() 메소드로 확인할 수 있다.

OLS Regression Results
Dep. Variable:	price	R-squared:	0.493
Model:	OLS	Adj. R-squared:	0.493
Method:	Least Squares	F-statistic:	2.100e+04
Date:	Tue, 08 Jun 2021	Prob (F-statistic):	0.00
Time:	07:13:09	Log-Likelihood:	-3.0027e+05
No. Observations:	21613	AIC:	6.005e+05
Df Residuals:	21611	BIC:	6.006e+05
Df Model:	1		
Covariance Type:	nonrobust		
coef	std err	t	P>|t|	[0.025	0.975]
Intercept	-4.358e+04	4402.690	-9.899	0.000	-5.22e+04	-3.5e+04
sqft_living	280.6236	1.936	144.920	0.000	276.828	284.419
Omnibus:	14832.490	Durbin-Watson:	1.983
Prob(Omnibus):	0.000	Jarque-Bera (JB):	546444.713
Skew:	2.824	Prob(JB):	0.00
Kurtosis:	26.977	Cond. No.	5.63e+03


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 5.63e+03. This might indicate that there are
strong multicollinearity or other numerical problems.

 

위의 모형적합도를 설명해주는 OLS의 결과에 대한 해석은 아래와 같다 

모형적합도

  • R-squared
    • R제곱
    • 모형적합도(혹은 설명력)
    • sqft_living의 분산을 price가 약49%를 설명한다
    • 각 사례마다 sqft_living에 차이가 있다.
  • Adj. R-squared
    • 다중회귀분석에 사용
    • 독립변수의 개수와 표본의 크기를 고려하여 R-squared를 보정
    • 서로 다른 모형을 비교할때는 이 지표가 높은 쪽을 선택한다.
  • F-statistic: 2.100e+04 / Prob (F-statistic): 0.00
    • 회귀모형에 대한 통계적 유의미성 검증 F값 (유의수준 p<0.05)
    • 이 모형은 주어진 표본 뿐 아니라 모집단에서도 의미있는 모형
  • 로그 우도: 종속변수가 정규분포라 가정했을 때 그 우도
    • 로그우도도 R-squared와 마찬가지로 독립변수가 많아지면 증가한다
    • AIC, BIC: 로그우도를 독립변수의 수로 보정한 값 (작을수록 좋다)

회귀계수(Coefficients)

  • Coef : 데이터로부터 얻은 계수의 추정치
  • 절편(Intercept)의 추정치는 -4.358e+04로, sqft_living가 0일 때 price의 값이다.
  • sqft_living의 계수 추정치는 280.6236로 sqft_living가 1 증가할때 마다 price 가 280.6236로 증가한다는 것
    • price = -4.358e+04 + 280.6236 x sqft_living
  • p(>|t|)는 모집단에서 계수가 0일때 현재와 같은 크기의 표본에서 이러한 계수가 추정될 확률 p-value (유의수준 p<0.05 면 통계적으로 유의미하다.)

결과 보고

를 할때 논문 등에서 회귀분석의 결과는 다음 순서대로 보고한다.

  1. 먼저 모형적합도를 보고한다. F 분포의 파라미터 2개와 그 때의 F 값, p-value와 유의수준의 비교를 적시한다.
  2. 들여쓴 블록 price에 대하여 sqft_living로 예측하는 회귀분석을 실시한 결과, 이 회귀모형은 통계적으로 유의미하였다(F(0.00) = 2.100e+04 , p < 0.05).
  3. 다음으로 독립변수에 대해 보고한다.
  4. 들여쓴 블록 sqft_living의 회귀계수는 280.6236로, price에 대하여 유의미한 예측변인인 것으로 나타났다(t(21611) = 144.920, p < 0.05).