모델 평가
머신러닝에서 우리가 모델을 잘 예측했는지 확인하기 위해 여러가지 평가 방법들을 사용한다.
크게 분류와 회귀에서 사용하는 평가 방법들로 나눠볼 수 있다.
분류 모델 평가
분류에서는 예측값이 정답값과 맞다 틀리다고 비교할 수 있기 때문에 정확도(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 |