본문 바로가기

Python/ML

[ML] 모델 평가

모델 평가

머신러닝에서 우리가 모델을 잘 예측했는지 확인하기 위해 여러가지 평가 방법들을 사용한다.

크게 분류와 회귀에서 사용하는 평가 방법들로 나눠볼 수 있다.

 

분류 모델 평가

분류에서는 예측값이 정답값과 맞다 틀리다고 비교할 수 있기 때문에 정확도(accuracy)로 확인한다.

accuracy로 확인하는 방법은 여러가지가 있다. (여기서 y_predict는 X_test를 이용하여 만든 예측값이고 y_test는 정답값이다.)

1. 직접 수식을 작성해보기

(y_predict == y_test).mean()

2. 미리 구현된 알고리즘 사용하기

from sklearn.metrics import accuracy_score

accuracy_score(y_predict, y_test)

3. model.score로 미리 성능을 확인해보기

model.score(X_test,y_test)

 

회귀 모델 평가

회귀는 수치형이므로 예측값이 정답값과 정확히 일치하기란 힘들다. 그래서 오차를 이용하여 모델을 평가지표로 평가해 볼 수 있다.

먼저 기본적인 용어를 설명하자면 (정답값 - 예측값)을 잔차값이라고 하며 음수를 양수로 바꿔주는 것을 절대값(absolute)이라고 한다. 여기서 결정계수를 제외한 모든 평가지표들은 0에 가까울수록 오차값이 적다.

 

오차구하기

error = abs(y_train - y_predict)	# abs는 절대값 absolute의 약자이다.

1. MAE(Mean Absolute Error)

- 잔차의 절대값 평균이다.

mae = abs(y_train - y_predict).mean()

2. MAPE(Mean Absolute Percentage Error)

- 잔차의 절대값 평균을 비율로 나타낸 것이다.

mape =(abs(y_train - y_predict) / y_train).mean()

3. MSE(Mean Squared Error)

- 잔차를 제곱(음수를 양수로 바꿔주기 위해)하여 평균을 낸 값이다.

- 제곱을 하기 때문에 특이치(아웃라이어)에 민감하다.

mse = ((y_train - y_predict) ** 2).mean()

mse = np.square(y_train - y_predict).mean()		# numpy의 square를 이용하여 제곱할 수도 있다.

4. RMSE(Root Mean Squared Error)

- MSE에 루트를 씌운 값이다.

- 오류지표를 실제 값과 유사한 단위로 다시 변환하기 때문에 해석이 다소 용이해진다.

- 가장 많이 사용되는 평가지표이다.

rmse = ((y_train - y_predict) ** 2).mean() ** 0.5

rmse = np.sqrt(mse)		# np.sqrt는 루트를 씌워주는 numpy 함수이다.

5. R-squared (결정계수)

- 분산기반 예측성능 평가이다.

- 다른 MAE, MSE 등과 같은 지표들은 데이터의 scale에 따라 값이 다르지만 R2는 상대적인 성능이 어느정도인지 직관적으로 판단할 수 있다.

- 다른 평가지표들과는 다르게 1에 가까울 수록 오차가 적다.

from sklearn.metrics import r2_score

r2_score(y_train, y_predict)

직관적이고 좋은 MAE가 아닌 RMSE를 주로 쓰는 이유는 RMSE는 큰 오류값 차이(잔차가 크다)에 대해서 크게 패널티를 주는 이점이 있다. 잔차를 제곱하고 다 더한 뒤 루트를 씌웠다는 점이 큰 오류값에 패널티를 크게 주었다.

 

'Python > ML' 카테고리의 다른 글

[ML] 피처 엔지니어링(Feature Engineering)  (0) 2022.11.10
[ML] Bike Sharing Demand  (0) 2022.11.08
[ML] One-Hot-Encoding  (0) 2022.11.03
[ML] GridSearchCV, RandomizedSearchCV  (0) 2022.11.03
[ML] Machine Learning 들어가기  (0) 2022.11.02