인공지능 AI

[AI/머신러닝] 머신러닝 분류모델 평가지표(Confusion Matrix, Accuracy, Precision, Recall, F1 Score)

Confusion Matrix (오차행렬) 

  실제 참 실제 거짓
예측 참 True Positive False Postive
예측 거짓 False Negative  True Negative

Accuracy (정확도)

\[\frac{TP+TN}{TP+FP+TN+FN} \]

 

 

 

 

 

 

 

Precision (정밀도)

분류기가 참으로 분류한 결과(예측) 중에서 실제 참의 비율

'Precision'의 'P'를 따와서 positive이 분모라고 생각하면 쉽다.

\[\frac{TP}{TP+FP}
\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

Recall (재현율)

실제 참 중에서 분류기가 참으로 분류한 비율

실제 참인 데이터에서 분류가 제대로 된 비율이다.

'Recall' -> 'R'eal Positive이 분모에 들어간다. 

\[\frac{TP}{TP+FN}
\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

F1 Score

Precision과 Recall이 불균형을 이룰때 보통 조화평균을 내기 위해 사용하는 지표. 가중치를 가진 조화평균이라고 할 수 있다.

 

우리가 일반적으로 계산하는 평균이란 것은 산술평균이다.조화평균은 주어진 수들 역수의 산술평균의 역수 값이다. \[H = \frac{1}{\frac{1}{a_{1}}+\frac{1}{a_{2}}+\cdot\cdot\cdot+\frac{1}{a_{n-1}}+\frac{1}{a_{n}}}
\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

즉, 두 수를 계산하는 경우는 이렇게 수식이 정리된다.\[H = \frac{2a_{1}a_{2}}{a_{1}+a_{2}}\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

\[H = \frac{2\cdot Precision\cdot Recall}{Precision+Recall}\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

보통 평균 속력을 구할 때 F score를 자주 사용하는데, Precision과 Recall 중 어느 것에 더 중요도를 두냐에 따라 가중치를 다르게 둔다.

 

두 지표를 모두 동일하게 가중치를 두면 F1 Score이다.(동일하게 가중치가 0.5가 되어 베타값은 1이다.) \[F_{1} = 2\cdot\frac{Precison\cdot Recall}{Precision+Recall}\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

Precision을 더 중요하게 보아서 가중치를 두면 F0.5 Score,Recall을 더 중요하게 보아 가중치를 두면 F2 Score이다. 

 

 

 

예시를 통해 한 번 계산해보자.

 

참과 거짓 데이터가 굉장히 불균형한 데이터인 케이스입니다.

  실제 참 실제 거짓
예측 참 True Positive = 15 False Postive = 15
예측 거짓 False Negative = 5  True Negative = 65

Accuracy = \[\frac{15+65}{15+65+15+5}=0.8\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

Precision = \[\frac{15}{15+15}=0.5\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

Recall = \[\frac{15}{15+5}=0.75\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

F1 Score = \[2\cdot\frac{0.5\cdot 0.75}{0.5+0.75}=0.6\]
<script type="text/javascript" src="https://www.hostmath.com/Math/MathJax.js?config=OK"></script>

 

 

정확도는 0.8이지만 나머지 정밀도, 재현율, F1 Score는 그에 비해 훨씬 낮다는 것을 알 수 있다.

이렇게 불균형한 데이터에서는 Accuracy가 썩 좋은 지표가 아니라는 것을 알 수 있고,

다른 지표들을 함께 써야하는 이유를 알 수 있다.