반응형

 

MRR: Mean reciprocal rank

 
Mean reciprocal rank (MRR) 은 랭킹 모델을 평가하기 위한 가장 간단한 방법중 하나 입니다. MRR은 질의(Q)에 대해 가장 적절한 아이템의 역순위 평균입니다. 역순위란 1을 제안된 리스트에서 적절한 아이템이 나타난 위치의 숫자로 나눈 것을 말합니다. 예를 보시면 쉽게 이해하실 수 있습니다.
Query Proposed Results Correct response Rank Reciprocal rank
cat catten, cati, cats cats 3 1/3
torus torii, tori, toruses tori 2 1/2
virus viruses, virii, viri viruses 1 1
 
Query 는 질의어/검색어이고, Proposed Results는 검색엔진의 결과로 제안된 내용입니다. Correc response는 질의어 입력시 우리가 원하는 제안 내용이고요, Rank는 결과에서 제안 내용이 위치한 순위 입니다. Reciprocal rank 는 1 나누기 Rank의 값 입니다. Mean Reciprocal rank 는 이러한 Reciprocal rank 를 평균한 값입니다. 이 내용을 공식으로 정리하면 아래와 같습니다.
 
 
MRR =  1/|Q|   Sigma i=1 to |Q|   1/rank i
 
따라서, 위 예시에 대한 MRR을 구해보면 아래와 같습니다.

 

MRR= 1/3*(1/2+1/3+1/1)= 11/18 = 0.61111
 
 
MRR의 한계중 하나는 검색 결과 아이템들 중에 하나의 순위만 고려하고 다른 것의 순위들은 무시한다는 것입니다. 따라서, 웹페이지에서 검색 결과를 중요도 순으로 노출하는 것에 대한 성능을 측정하고자 할 경우 MRR은 좋은 지표가 아닙니다. 여러 개의 위치와 중요성을 고려하지 못하기 때문이지요.

 

 

Precision at k

 
Precision at k (P@k) 는 많이 사용되는 또 다른 지표중 하나 입니다. 이 지표는 상위 k개의 문서중에서 연관된 문서의 수로 정의 됩니다.
 
예를 들면, 구글에서 “손 소독제” 를 검색한다고 생각해보겠습니다. 검색 결과 처음 페이지에 나온 10개 문서중에서 8개가 '손 소독제'와 연관된 문서라면 Precision@10(P@10)은 8/10 = 0.8 입니다. 
여러 질의들 Q에 대한 Precision@k를 찾기 위해서는 Q에 있는 각 질문들에 대한 P@k의 평균 값으로 계산할 수 있습니다.

 

P@k는 몇가지 한계점이 있습니다.
가장 중요한 것은 상위 k개 연관된 문서들의 위치를 고려하지 못한다는 것 입니다. 이것은 매우 중요할 수 있습니다. 첫페이지에서 첫번째 문서가 연관된 문서일 경우와 첫페이지에서 마지막 문서가 연관된 문서일 경우는 완전히 다를 수 있습니다. (왜냐하면 첫페이지의 마지막 문서는 실제로 사용자가 보지 못할 수 있기 때문이지요.)  반면에 상위 k개의 결과들이 연관된 문서인지 아닌지만 검토하면 되기 때문에 모델을 쉽게 평가할 수 있습니다.
매우 비슷한 방법으로 정의되면서, 많이 사용되는 평가지표가 바로 recall@k입니다.

 

AP@k

AP@k(Average Precision at k). 앞에서 말씀드린 것처럼 Precision@K에서는 순서를 고려하지 않은 단점이 있었습니다. AP@K는 위치를 고려한 평가 지표입니다. 이말은 추천 리스트중에 높은 위치에 추천한 항목이 더 관심있는 항목으로 해야 좋다라는 가정에서 평가하는 방법입니다. 일반적으로 가정이 맞는 상황이지요. 공식은 아래와 같습니다.  rel(i)는 선호 여부로 0 또는 1입니다. 

 

 

Recall@k

Recall@k(R@k)는 검색 결과로 가져온 k개의 문서들 중에서 얼마나 많은 (적합한) 관련 문서가 있는 가로 계산할 수 있습니다. 즉, Recall@10의 경우, 가져온 10개의 문서중에서 8개가 관련된 문서이고 전체 관련 문서수가 9개인 경우 Recall@10은 8/9입니다.

Precision@k의 경우 가져온 문서 중에서 얼마나 정확한 문서가 많은 가를 중심으로 판단하는 지표라면, Recall@k는 가져와야할 문서 중에서 얼마나 많은 문서를 가져왔는가를 중심으로 판단하는 지표 입니다. 둘다 단점으로는 가져온 위치/순위를 고려하지 못한다는 것 입니다.

 

 

 

nDCG(CG/DCG/nDCG)

 
nDCG는 랭킹 시스템의 학습을 평가하기위해 가장 많이 사용되는 평가지표 입니다. 이전의 평가 지표들과는 달리 nDCG는 문서의 순서와 관련성의 중요성을 고려한 지표입니다. 즉, 추천 리스트의 위쪽에 관련성이 높은 문서가 위치할 수록 높은 값을 갖습니다.
nDCG의 공식적인 정의를 말하기 전에 먼저 두가지 연관 지표에 대해서 소개해 드리겠습니다. 바로 Cumulative Gain (CG) 과  Discounted Cumulative Gain (DCG) 입니다.
Cumulative Gain (CG) 이란 질의 결과로 가져온 각 문서의 연관성 점수를 모두 합친 것을 말합니다.  아래와 같이 정의될 수 있습니다.
 
여기에서는 각 문서의 연관성 점수(보통 상수)는 주어진다고 가정합니다.

 

 

Discounted Cumulative Gain (DCG) 는 CG에 가중치가 부여된 버전입니다. 결과의 위치에 따른 연관성 점수를 적절하게 변환하고자 로그함수를 사용합니다. 이것은 시스템의 성능을 평가할때 상당히 유용한데, 왜냐하면 처음 몇개의 문서들이 좀더 높은 가중치를 갖게되기 때문입니다. 검색 결과의 상위에 노출되는 결과 일수록 더 높은 가중치를 준다는 말은 검색 결과를 평가하는 입장에서 보면 맞는 말인 것 같습니다. DCG는 아래와 같이 정의 됩니다.
 
분모에 로그가 있어서 순서(i)가 커질 수록(추천 리스트의 아래에 위치할 수록) 분모가 커지면 DCG값은 작아집니다. 숫자가 많이 커져도 분모에 로그를 취하기 때문에 단순히 위치로 나눈 값보다는 적당히 커진 분모값이 됩니다.
또 다른 버전도 있습니다.

 

 
Normalized Discounted Cumulative Gain (NDCG) 는 실제 어플리케이션 평가에 더 적합하도록 DCG를 향상시켜서 고안된 것입니다. 가져온 문서들의 집합은 질의나 시스템에 따라 매우 다르기 때문에 nDCG는 DCG의 졍규화된 버전을 이용해서 성능을 평가합니다. 이상적인 시스템의 DCG로 평가하려는 시스템의 DCG를 나누는 것 입니다. 다른 말로 하면, 관련성을 기준으로 리스트 결과를 정렬하고, 해당 위치에서 이상적인 시스템에서 얻어지는 가장 좋은 DCG를 가지고 정규화하는(나누는) 것입니다.
여기서 IDCG는 “ ideal discounted cumulative gain”이고, 아래와 같이 정의합니다.

 

 
nDCG는 인기 많은 평가지표 입니다. 그러나 한계성도 있습니다. 주요 한계중 하나는 검색 결과 중에서 잘못된(연관성 없는) 문서를 가져온 것에 대한 패널티가 없다는 것 입니다. 이 말은 몇 개의 괜찮은 결과를 만드는 질의의 성능을 측정하는 것에 적합하지 않습니다. 특히, 검색 결과로 처음에 나오는 몇 개에만 관심이 있는 경우에는 더욱 적합하지 않습니다.

 

 

참고 문서

 
반응형
반응형

 

Precision@k, Recall@k, MAP는 랭킹 성능평가에서 많이 쓰입니다. Precision@k, P@k, Prec@k, Precision-at-k 등 다양하게 사용됩니다. 간단히 말하면 @k의 의미는 k 번째까지의 예측을 가지고 지표를 산정하는 것을 말합니다. 물론  MRR(Mean Reciprocal, Rank), nDCG(Normalized Discounted Cumulative Gain), DCG 등 다른 Ranking 지표도 있습니다. 이번에는 Precision@k, Recall@k, MAP에 대해서 알아보도록 하겠습니다.

Presion@3라면 3개까지의 예측/제안 결과 중에서 몇 개의 TP(특징 발견이 있다고-관련문서라고 맞춘 경우의 수)와 FP(특징이 발견되었다고-관련문서라고 예측했지만 실제로는 없는 경우의 수)를 가지고 계산할 수 있습니다.  Precision = TP / (TP+FP) 이니까요.

검색 엔진을 예로 들어 보겠습니다. 검색창에 '베이징 올림픽 대한민국'(질의1) 이라고 입력했을 때와 '대한민국 베이징 올림픽'(질의2)이라고 입력했을 때(2가지 질의에 대해서) 관련된 검색 결과를 잘 보여주는지 아닌지 평가한다고 가정해보겠습니다. 예를 드는 것이니 관련된 문서가 5개만 있다고 가정하겠습니다.

다시 말하면 질의에 적합한 문서들과 모델에서 순서대로 제안한 문서들을 가지고 계산할 수 있습니다. 정밀도(Precision)는 가져온 것 중에 얼마나 정확한 것이 많은가 를 측정하는 것이고 재현률(Recall)은 가져와야 할 문서 중에 얼마나 많이 가져왔는가를 측정하는 것입니다.

관련된 문서의 id = 1, 2, 3, 4, 5

질의1이 가져온 문서 id = 9, 2, 1

질의2가 가져온 문서 id = 1, 7, 8

 

@1에 대해서(즉, 가져온 1개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 0 / 1 = 0 = 0%

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 0 / 5 = 0 = 0%

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 1 = 1 = 100%

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2 = 20%

 

@2에 대해서(즉, 가져온 2개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9, 2

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 2 = 0.5

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1, 7

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 2 = 0.5

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2

 

마지막으로 @3에 대해서(즉, 가져온 3개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9, 2, 1

Precision@3 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 2(2하고 1) / 3 = 0.6

Recall@3 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 2 / 5 = 0.4 

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1, 7, 8

Precision@3 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1(1번 문서) / 3 = 0.3 

Recall@3 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2 = 20%

 

@k의 숫자에 따라, 즉, @1, @2, @3에 따라 Precision과 Recall 값이 바뀌는 것을 볼 수 있습니다. 3개 중에서 관련된 문서를 몇 개 가져왔는지 계산하는 것과 10개 중에서 관련된 문서를 몇 개 가져왔는지를 계산하는 것은 당연히 달라져야겠습니다. 이 문서 개수는 기본적으로 검색 결과 첫 화면에 몇 건이 보일 것이냐에 따라 기준이 달라질 것 같습니다.

설명의 편의를 위해서 관련 문서가 동일한 경우로 가정했지만 실제로는 질의별로 관련 문서가 다를 수 있으니 변경해서 산출하면 됩니다.

 

 

Average Precision

위 내용을 이용해서 각 질의에 대한 Average Precision을 구해보면 아래와 같습니다.

Average Precision = (정확한 문서를 가져왔을 경우 Precision 값)의 모든 합 / 정확한 문서를 가져온 횟수

질의 1의 Average Precision => ( 0 + 0.5 + 0.6 ) / 맞은 개수 = 1.1 / 2 = 0.55

질의 2의 Average Precision => (1 + 0.5 + 0.3 ) / 맞은 개수 = 1 / 1 = 1

 

Mean Average Precision(MAP)

mAP는 모델에 대한 성능을 나타냅니다. 즉 모든 테스트 질의 별 Average Precision을 가지고 계산합니다.

질의 별 Average Precision의 총합 / 질의 건수 = (0.55 + 1) / 2 = 0.775

 

같은 방법으로 다른 모델의 테스트 결과를 계산함으로써 다른 모델과 성능을 비교할 수 있습니다.

 

반응형
반응형

ML 실무(Work, Life, Future)

이 글의 목적은 ML 엔지니어가 현업에서 일하면서 겪게 되는 일과 주변 환경, 마주하게 되는 문제, 그리고 해결방법 등의 다양한 경험과 노하우를 공유함으로써 ML 분야에 관심 있는 사람들이 실무에 대한 이해도를 높이고 업무에 적응하는데 도움이 되는 정보를 제공하는 것입니다. 최대한 쉽게 설명할 수 있도록 노력하겠습니다. (이해가 잘 안 되는 부분이나 잘못된 부분이 있으면 댓글, 메일로 알려주세요.)

왜 ML Metric(성능지표)가 필요한가?

이미지 안에 고양이가 들어있는지 아닌지를 구분하는 모델을 만들었다고 생각해봅시다. 잘 만들었다고 자랑하고 싶은데 어떻게 자랑해야 할까요? 쉽게 생각나는 방법이 다른 모델과 비교하는 것입니다. 100 장의 이미지 중에 10장의 고양이 사진이 있는데 내가 만든 모델에서는 10장 모두 찾았고 다른 사람의 모델에서는 9장만 찾았다면 내가 만든 모델이 더 좋은 모델이라고 할 수 있을 것입니다. 내 모델은 10개 중에 10개를 다 찾아서 100%이고, 다른 사람의 모델은 10개 중에 9개만 찾았으니 90% 맞추었다고 할 수 있으니까요. 동의하시나요?
그런데
만약에 내가 만든 모델에서는 100장 중에서 고양이가 있다고 판단한 이미지가 20장이고 다른 사람의 모델에서는 9장이라면 어떨까요? 즉, 내 모델에서는 20장이 고양이가 들어가 있다고 판단했지만 실제로는 10장만 있었고 다른 사람의 모델에서는 9장을 고양이가 들어있다고 판단했고 실제로 9장이 고양이가 들어가 있던 것입니다. 내 모델은 20번 있다고 했는데 10번만 있었으니 50% 맞추었다고 할 수 있고 다른 사람의 모델에서는 9번 있다고 했는데 9번 모두 있었으니 100% 맞추었다고 할 수 있겠네요. 이렇게 생각해보니 다른 사람의 모델이 더 좋은 것 같습니다.
위에서 설명드린 것처럼 단순히 있다/없다로 분류하는 문제에서도 여러 종류의 지표로 그 성능을 평가할 수 있습니다. 이것은 어떤 모델을 선택해서 사용하는 것이 더 좋은지 판단 기준이 되기 때문에 적합한 성능 지표를 산출하고 비교하는 것은 매우 중요합니다. 따라서 분류 문제에 있어서 많이 쓰이는 다양한 성능평가 지표를 알아보고 언제 어떤 지표로 평가/비교하는 게 좋은지 알아보도록 하겠습니다. 그리고 마지막으로는 이해 내용을 확인하는 퀴즈를 풀어보겠습니다. 자 그럼 먼저, 실제 데이터 분류 유형(고양이 있음/없음)과 모델의 추정 분류 경우(고양이가 있다고 추정/없다고 추정한 경우)를 기반으로 각각 발생한 결과수를 정리해서 혼돈 행렬(Confusion Matrix)을 만들어보고 이를 이용한 다양한 성능지표에 대해서 알아보겠습니다.

혼돈 행렬(Confusion Matrix)

위에서 말씀드린 것처럼 혼돈 행렬은 실제 데이터의 분류 유형과 모델의 추정 분류 유형으로 구분됩니다. 그래서 아래와 같은 행렬/표를 만들 수 있습니다.

  추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) TP: True Positive FN: False Negative
실제 분류(고양이 없음) FP: False Positive TN: True Negative

내가 만든 모델의 경우에서 Positive의 의미는 "고양이가 있다"를 나타 냅니다.
TP: True Positive는 모델이 있다고 판단해서 맞은 개수입니다.(실제로 고양이가 있는 이미지를 모델이 있다고 판단한 경우)
FN: False Negative는 모델이 없다고 판단해서 틀린 개수입니다.
FP: False Positive는 모델이 있다고 판단해서 틀린 개수입니다.
TN: True Negative는 모델이 없다고 판단해서 맞은 개수입니다.
"맞추었다"를 True로, "틀렸다"를 False로, "있다"를 Positive로, "없다"를 Negative로 기억하면 좋을 것 같습니다.
위의 표를 앞에서 설명한 '내가 만든 모델'의 결과로 혼돈 행렬을 만들어 보면 아래와 같습니다.

전체 테스트 데이터수 100 건 추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) 10 (모델이 있다고 판단해서 맞은 갯수) 0 (모델이 없다고 판단해서 틀린 갯수)
실제 분류(고양이 없음) 10 (모델이 있다고 판단해서 틀린 갯수) 80 (모델이 없다고 판단해서 맞은 갯수)

처음에 예를 설명하면서 했던 내용들이 깔끔하게 정리되어 보이는 것 같습니다.
(잠시 아래를 보지 말고 '다른 사람이 만든 모델'의 혼돈 행렬을 직접 만들어 보세요.)
'다른 사람이 만든 모델'의 결과로 채워 보면 아래와 같습니다. 9건만 고양이로 분류하고 나머지는 모두 고양이 없음으로 분류한 경우이지요.

  추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) 9 1
실제 분류(고양이 없음) 0 90

자, 지금까지 모델의 출력 결과에 따른 혼돈 행렬을 만들어 보았습니다. 그럼 이제부터는 이 행렬을 이용하여 다양한 성능 지표를 만들어 보겠습니다.

정확도(Accuracy)

말 그대로 모델의 정확도를 나타내는 지표입니다. 그래서 True 부분에 집중해서 계산됩니다. 모델이 맞춘 숫자와 실제 데이터 숫자의 비율로 계산할 수 있습니다. 즉, True로 시작하는 TP와 TN의 합을 전체 추정 개수(또는 총 실제 분류 건수:위의 예시에서는 총 데이터 수 100건)로 나누어 주면 됩니다. 아래는 내가 만든 모델에 대한 Accuracy를 계산한 내용입니다.
내가 만든 모델의 Accuracy = (TP + TN) / 총 실제 분류 건수 = (10 + 80) / 100 = 0.9 (= 90%)
(아래를 보지 말고 다른 사람이 만든 모델의 Accuracy를 계산해 보시지요.)
다른 사람이 만든 모델의 Accuracy = (TP + TN) / 총 실제 분류 건수 = (9 + 90) / 100 = 0.99 (= 99%)
Accuracy 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

정밀도(Precision)

모델이 얼마나 정밀하게 Positive를 찾아내는지 평가하는 지표입니다. 그래서 이 지표는 모델의 Positive 결과에 집중해서 계산됩니다. 즉, 전체 Positive라고 추정한 건수 중에 얼마나 맞추었는지를 평가합니다. 다시 말하면, TP 값을 전체 Positive건수(TP + FP)로 나누어서 계산합니다.
내가 만든 모델의 Precision = TP / (TP + FP) = 10 / (10+10) = 0.5 (= 50%)

(아래를 보지 말고 다른 사람이 만든 모델의 Precision를 계산해 보시지요.)
다른 사람이 만든 모델의 Precision = TP / (TP + FP) = 9 / (9 + 0) = 1 (= 100%)
Precision 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

재현율(Recall)

모델이 얼마나 많은 Positive Case를 찾아내는지 평가하는 지표입니다. 그래서 이 지표는 실제 분류 Case 중 Positive를 집중해서 계산됩니다. 즉, 실제 분류 Positive 건수 중에서 얼마나 많은 건수를 맞추었는지를 평가합니다. 다시 말하면, TP 값을 전체 실제 분류 Positive건수(TP + FN)로 나누어서 계산합니다.
내가 만든 모델의 Recall = TP / (TP + FN) = 10 / (10+0) = 1 (= 100%)
(아래를 보지 말고 다른 사람이 만든 모델의 Recall을 계산해 보시지요.)
다른 사람이 만든 모델의 Recall = TP / (TP + FN) = 9 / (9 + 1) = 0.9 (= 90%)
Recall 관점에서 보면 내가 만든 모델이 더 좋은 성능으로 나타납니다.

F1 Score

일반적으로 정밀도와 재현율이 모두 중요한 경우가 많이 있습니다. 즉, 모델이 정밀하게 Positive를 찾아내는 것도 중요하고 많은 최대한 많은 Positive Case를 찾아내는 것도 중요한 경우이지요. 이러한 경우 사용하는 성능지표가 F1 Score입니다. F1 score는 조화 평균의 일종으로 Precision과 Reacall 값을 이용하여 산출됩니다. 공식은 F1 Score = 2 * (Precision * Recall) / (Precision + Recall)입니다. 이를 바탕으로 각 모델의 F1 Score 값을 만들어 보겠습니다.
내가 만든 모델의 F1 score = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (0.5 * 1) / (0.5+1) = 0.66 (= 66%)
(잠시 아래를 보지 말고 '다른 사람이 만든 모델'의 F1 score를 직접 계산해 보세요.)
다른 사람이 만든 모델의 F1 score = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (1 * 0.9) / (1+0.9) = 0.94 (= 94%)
F1 score 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

성능 지표 선택

위의 지표들을 보면 어떤 것은 '내가 만든 모델'의 성능이 더 좋고 어떤 것은 '다른 사람이 만든 모델'의 성능이 더 좋게 나옵니다. 이런 경우 어떤 모델을 사용해야 할까요? 중간에 F1 Score 설명할 때 말씀드린 것처럼 모델을 사용하는 목적에 맞는 성능 지표를 사용하는 것이 좋습니다. 직설적으로 말씀드리면 무조건 고양이가 있는 사진을 최대한 많이 찾고 싶으면 Recall을, 고양이가 있는 사진만 잘 골라내고 싶은 경우(즉, 고양이가 없는 사진을 있는 것으로 잘못 찾아내는 것을 최소화하는 경우) Precision을, 두 경우 모두 중요할 경우 F1 score를 사용하는 것이 좋겠습니다.
모두 이해하셨나요? 그럼 질문드려보겠습니다. 아래의 질문을 읽고 어떤 성능지표가 적합한지 맞추어 보세요.

1. 제품 생산 라인에서 품질 이상을 발견하는 정상/불량 판정 모델을 만들었다고 가정하겠습니다. 고객의 품질 요구 수준이 많이 높습니다. 그래서 모델이 불량품을 판별하면 생산 라인이 멈추고 해당 불량품과 관련된 라인에서 1시간 전 이후로 생산된 제품에 대해서 전체 수작업 검사를 진행합니다. 이후 불량품을 제거하고 공정을 재시작합니다. 이러한 경우 어떤 성능 지표로 평가하는 것이 좋을 까요? 그 이유는 무엇인가요?
2. 보험 사기를 적발하는 사기 탐지 모델(Frud Detection Model)을 만들었다고 가정하시죠. 이미 고객센터에서 사기로 의심되는 경우 고객에게 전화하거나 데이터 검토를 통해 사기 여부를 검토하는 업무를 하고 있습니다. 그리고 평균 사기 금액이 크기 때문에 회사는 사기로 인한 잘못된 보험금 지출을 최대한 막기 위해 핵심 사업/과제로 추진하는 상황입니다. 이러한 경우 만들어진 모델을 어떤 성능 지표로 평가하는 것이 좋을 까요? 그 이유는 무엇인가요?
3. X-ray, CT 등 이미지 데이터를 분석해서 암 발생(보유) 유무를 판단하는 모델을 만들었다고 가정하시죠. 이 모델을 평가하는데 적합한 성능 지표는 무엇일까요? 선택하신 성능지표가 적합한 이유가 무엇인가요?
힌트: 활용과 해석이 중요합니다.
각 질문에 대한 답과 이유를 이메일이나 댓글로 남겨주시면 제가 생각한 답을 알려드리겠습니다.
theyellowlionking@gmail.com

마지막으로 AUC/Roc Curve에 대해서 알아보겠습니다.

위키 이미지

위의 그림에서 처럼 True Positive rate 와 False Positive rate를 가지고 그려진 그래프를 Roc Curve(Receiver operating characteristic curve)라고 합니다.
Roc Curve 를 그리게 되면 오른쪽아래 지역과 왼쪽 위 지역으로 나누어지는대 이때 오른쪽 아래 지역을 AUC(Area under the curve)라고 합니다. 이 지역이 넓으면 넓을 수록 모델의 성능이 좋은 것을 알 수 있습니다.

https://en.wikipedia.org/wiki/Receiver_operating_characteristic#/media/File:Roc_curve.svg



감사합니다.

1. 높은 품질 수준을 원하기 때문에 모두 찾아내야 하는 Recall이 중요하고요, 잘못 찾아낸 경우 막대한 손해가 있으니 Precision 도 중요합니다. 따라서 F1 Score를 쓰는 게 좋겠네요.
2. 이미 고객센터에서 고객에게 전화를 걸어 확인하는 단계가 있으므로 모델에서 잘못 찾아내도(정상 고객을 사기라고 찾아내도) 고객센터에서 거를 수 있어서 현재는 Precision 이 낮아도 문제가 되지는 않을 것 같습니다. 그리고 사기 보험금 지출을 최대한 막는 것이 핵심 사업이라고 했으니 모든 사기를 탐지해내는 것이 중요합니다. 따라서 Recall을 사용하는 것이 좋겠네요.
3. 이유만 잘 맞으면 모두 정답입니다.

반응형

+ Recent posts