1. 모델의 성능지표에 대해
만들어진 모델의 성능평가 지표는 단순히 하나가 아니다. 분류 모델과 회귀 모델의 차이점은 물론, 분류 혹은 회귀 모델 중에서도 평가지표가 복수여서 결국 어떤 지표를 사용해 모델을 평가해야하는가 매우 고민이 된다.
이번 포스팅에서 다양한 평가지표를 소개하며, 어떤 때에 어떤 지표를 이용하는 것이 좋은지를 소개하고자 한다.
2. 분류 모델의 성능 평가
분류모델이란 목적변수가 어느 카테고리(예: 병이 있는지 아님 건강한지, 합격인지 불합격인지 등)에 소속되는가를 예측하는 모델이다. 먼저, 분류 모델의 성능 평가에서 사용하는 지표를 살펴보자. 설명을 간략화하기위해 2클래스 분류(목적변수가 A인가 B인가의 2종류)의 예로 살펴보자.
1) 혼동행렬(confusion Matrix)에 대해서
분류모델의 성능지표로써 잘 작성되는 것이 '혼동행렬'이다. 행렬이라고 들으면 어려운 수학을 떠올릴 수 있지만, 그렇게 어렵지 않으므로 안심하길 바란다.
어떤 알고리즘을 사용해 학습용 데이터로부터 예측 모델을 만들어, 검증용 데이터로 모델을 검증하였다고 가정하자.
예측 모델에 검증용 데이터의 특징량을 입력하면, 각 샘플의 클래스(A인가 B)를 예측할 수 있다. 이 예측결과와, 검증용 데이터의 관측 결과를 비교하면 그림 1과 같이 '혼동행렬'을 만들 수 있다.
이 예의 경우, 관측값 A의 데이터는 500개, 관측값 B의 데이터도 500개 합산 1000개가 검증용 데이터가 된다는 것을 알 수 있다.
혹시, 만든 모델이 100% 정확하다면, 좌측 상단(관측값이 A, 예측값도 A)에 500, 우측 하단(관측값이 B, 예측값 A)가 0이된다. 사실, 완벽한 모델은 없기 때문에 오른쪽 상단이나 좌측 하단에 수치가 들어간다.
일반화하자면, 혼동행렬의 주대각성분의 요소는 정확히 클래스 분류된 샘플 수를 표시, 그 외에의 요소는 실제와 다른 클래스로 분류된 샘플 수를 표시한다.
여기서 A를 양성 클래스, B를 음성 클래스, 바르게 예측한 것을 진실(真), 틀리게 예측한 것을 거짓(偽) 으로 표시하면, 그림 1의 혼동행렬을 그림2과 같이 정리할 수 있다.
그림 2에 있는 영어의 첫글자를 따서 간단히 표시하자면, 그림3과 같이 정리할 수 있다.
서적에서는 그림3과 같이 기재되된 혼동행렬이 자주 보이지만, '어느쪽이었더라?'라고 생각하는 경우가 많으므로, 아래와 같이 읽기 쉽게 정리해보았다.
TP : 모델은P(양성 클래스)라고 했지만, 그것은 T(진실真)예요. FP : 모델은P(양성 클래스)라고 했지만, 그것은 F(거짓偽)예요。 TN : 모델은N(음성 클래스)라고 했지만, 그것은 T(진실真)예요。 FN : 모델은N(음성 클래스)라고 했지만, 그것은 F(거짓偽)예요。 |
그럼 그림3을 이용해, 분류 모델의 성능평가를 실시해보자.
2) 분류 모델의 성능 평가 지표
(1) 정밀도(정답률)
정밀도는 모든 샘플링에 대해서 정확히 예측한 비율을 나타낸다.
감각적으로는 이 지표가 가장 알기 쉽다고 생각하지만, 양성 클래스(陽性クラス)와 음성 클래스(陰性クラス)샘플 수에 큰 차이가 있는 경우, 제대로 된 성능을 표시할 수 없는 경우가 있다.
예를 들어, 아래와 같지 극단적인 상황의 정밀도를 구해보자. 관측결과 A의 샘플이 990인 것에 대해, 관측결과 B의 샘플이 10밖에 없다. 이러한 경우, 아무것도 고려하지 않고 A를 예측하여도 정밀도가 99%가 된다.
이와 같이 샘플의 편향이 드물지 않게 나타난다. 예를 들어, 어떠한 불량이 나오지 않는 자동차용의 부품 등, 품질관리가 갖춰진 메이커에서 잘 볼 수 있다.
물론, 샘플에 편향에 있어 99%의 정밀도를 실현한 모델이 훌륭하다고 말할 수 있지만, 정밀도라는 지표에서는 보통 'A'라고 대답하는 어설픈 모델과 정말 좋은 모델을 구별할 수 없다.
즉, 편향된 데이터에 대해서 예측성능을 표시하는 지표로써는 정밀도는 부적합하다는 의미이다.
(2) 적합률
적합률은 양성이라고 예측된 것이 실제로 어느정도 양성이었는지를 표시하는 지표이다.
가짜 양성(;음성임에도 양성으로 판단)이라고 예측한 것을 낮게 억제하고 싶은 경우에 적합률을 이용한다. 예를 들어, 자동 검사기인 제품의 검사를 실시해, 합격품만을 거래처에 출하하는 공정을 생각해보자. 혹시, 불합격품을 합격품으로써 출하해버린다면, 고객처에 실례를 범한 것이 되어버린다. 따라서, 불합격품을 합격품으로 판정해버리면 매우 곤란함으로, 이러한 오판정을 일으키지 않는 모델을 선택하고 싶을 것이다.
불합격품을 합격품으로 판단한 경우(가짜 양성), 분모의 FD의 값을 크게 되어, 즉 적합률이 낮아지므로 접합률이 높은 모델을 채용하는 것이 중요하다.
(3) 재현률
재현률은 실제로 양성의 샘플 중, 어느정도 양성이라고 예측되었는가를 표시하는 지표이다.
가짜 음성(;양성임에도 음성이라고 판단한 경우)이라고 예측하는 것을 억제하고 싶은 경우, 재현율을 이용한다.
건강진단의 예를 생각해보자. 사실 엄청난 병이 있는데, 이상없다고 판정(가짜 음성)해버리면 병이 진행되어 손을 쓸 수 없는 상황까지 갈 가능성이 있다. 따라서, 건강진단에서는 병이 있는 사람을 모두 발견할 필요가 있다. 혹시, 건강한 사람을 병이 있다고 판단해도 재검사하면 될 뿐이다.
(4) F값
적합률과 재현률이 중요한 지표이지만, 모델의 전체상을 파악하지는 못한다. 이 두 개의 지표를 모은 평가 지표가 F값으로, 적합률과 재현률의 합, 곱 평균이다.
F값의 메리트는 적합률과 재현률 모두를 이용하므로, 편향된 데이터에 대해서 정밀도보다 좋은 지표가 된다.
3. 회귀모델의 성능평가
회귀모델을 평가할 때는 실측값과 예측값의 차(; '전차(残差)'라고 말한다.)를 사용한 지표를 사용하는 것이 일반적이다.
일차의 선형회귀 모델에서 전차(残差)를 표시한 것이 [그림4[이다. 일차의 선형회귀모델에서는, 학습용 데이터로부터 회귀 직선(y=a+bx)를 작성하여, 회구식을 만들어 미지의 x에 대해서 y를 예측할 수 있는 모델이다.
[그림4]에 표시된대로, 실측값과 예측값의 차이를 전차라고 말한다. 전차는 양수도 음수도 될 수 있으므로 보탕은 제곱한 값을 고려한다.
또한, 모든 점의 전차의 제곱을 더한 것을 전차을 전차제곱합(残差平方和)이라고 말하는데, 전차제곱의 합이 가장 작아지도록 그려진 직선이 회귀식으로 표현된 직선이다.
이러한 방법을 최소제곱법(最小二乗法)이라고 말한다. 그럼, 회귀 모델의 성능 평가 지표를 살펴보자.
1) 평균 제곱 오차(MSE)
여기서 yi는 실측값, y'i는 예측값이다. MSE는, 오차의 제곱의 평균치로, 학습용 데이터, 검증용 데이터와 함께 MSE가 작으면 모델의 성능이 좋다고 판단할 수 있다.
2) 제곱 평균 제곱근 오차(RMSE)
MSE의 제곱근을 구한 RMSE를 이용하는 경우도 있다.
RMSE모 MSE와 같이, 값이 작은수록 모델의 성능이 좋다고 판단한다.
3) 결정 계수(R2)
회귀 모델에 있어, 가장 자주 사용되는 평가지표가 결정계수이다. '기여율(寄与率)'이라고 불리는 경우도 있다.
여기서, y는 목적변수의 평균값이다. R2는 0부터 1까지의 범위를 가지며, 1에 가까울수록 모델의 성능이 좋다는 의미이다. MSE 혹은 RMSE가 0의 경우, R2는 1이 된다.
일차 선형회귀 모델인 경우, 모든 점이 회귀직선상에 있다면, R2=1이 된다.
4. 과학습과 범화성능
지도 학습인 경우, 잘 발생하는 문제가 과학습이다. '과학습'이란 작성한 모델이 학습용 데이터에 너무 fit되어 학습용 데이터는 높은 정밀도를 보이는 한편, 미지의 검증용 데이터를 예측시키면 정밀도가 낮아지는 것을 의미한다.
즉, 학습용 데이터에만 최적화된 범용성이 없는 상태에 빠진 것이다.
어느정도 학습용 데이터에 대한 정밀도가 좋은 모델을 만들어도, 미지의 데이터는 제대로 예측할 수 없다면 그 모델은 범화성능이 낮다면 가치가 없다.
일반적으로 실제의 데이터를 사용해 머신러닝 모델을 만드는 경우, 계측의 오차나 다양한 노이즈가 존재하고 있는 것을 고려한다면, 정밀도가 100%가 되는 것은 있을 수 없다. 이와 같이, 기여률이 0.9이상인 것은, 실제의 데이터를 분석하는 한 거의 있을 수 없는 숫자라고 생각한다.
따라서, 학습 데이터가 매우 높은 정밀도 또는 기여률이 나왔을 때는 모델 작성이 잘 됐다고 기뻐하는 것이 아니라, 먼저 '무엇이 이상한데?'라고 의심할 필요가 있다.
5. 모델의 성능이 낮아질 경우 대처 방법
이에 대한 내용은 바로 전 포스팅이나 전전 포스팅을 참고해주시길 바란다.
레고 블록을 이용해서 정말 알기 쉽게 설명해주신 포스팅이 있길래 이 포스팅도 함께 공유합니다.
https://tykimos.github.io/2017/05/22/Evaluation_Talk/
참고자료
'IT > AI\ML' 카테고리의 다른 글
[수학/분포] 확률변수 Jensen 부등식의 직감적 이해 (0) | 2020.08.06 |
---|---|
GAN ; PG-GAN(Progressive Growing of GANs) (0) | 2020.07.06 |
[python] 머신러닝의 모델 정밀도 향상에 효과적인 학습곡선과 검증곡선 입문 (0) | 2020.05.25 |
머신러닝 정밀도의 향상을 위해 해야할 것 (0) | 2020.05.24 |
[python] 교차검증(cross validation/クロスバリデーション/交差検証)과 그 방법들 (0) | 2020.05.19 |