UIUC CS410 — 텍스트 검색 시스템 평가하기 — F-Measure
CS410 3주차 내용 중 나옴.
검색 시스템 A와 B가 있다고 하자. 전체 문서는 100개가 있고, 이 두 시스템의 검색 성능을 평가하기 위해서 검색을 했는데, 전체 100개의 문서 중 실제로 해당 쿼리와 연관있는 문서는 10개가 있다고 해보자.
A는 3개의 결과를 리턴했는데 확인해 보니 그 중 2개가 실제로 연관있는 문서였고, B는 5개의 결과를 리턴했는데 확인해 보니까 3개가 실제로 연관있는 문서였다. 그럼 어느 시스템이 더 정확한 시스템인가? 결과 3개중 2개가 연관있는 문서였으니 정확도 2/3으로 A가 나은 시스템인가?
System A precision : 2 / 3
System B precision : 3 / 5
아니면 비록 3/5로 전체 리턴결과에 대한 정확성은 A보다 낮지만 전체 관련문서 10개 중 겨우 2개만 찾아낸 A보다 3개를 찾아낸 B가 정확한 시스템인가?
System A recall : 2 / 10
System B recall : 3 / 10
즉 여기서

라고 할 때
Precision = a / ( a + c )
, 그리고
Recall = a / ( a + b )
이다.
이상적인 시스템이라면 precision = recall = 1.0 이 최고. 즉 검색을 했더니 검색엔진이 실제로 존재하는 모든 관련 문서를 리턴하고, 리턴된 내용을 봤더니 실제로 이 문서들이 모든 관련된 문서인 경우.
아무튼 그래서 이 두개의 각각 다른 지표가 있는데, 둘 다 어느 한쪽으로는 맞고 어느 한쪽으로는 뭔가 좀 약한 것 같다. precision은 사용자에게 리턴된 검색결과 중 몇개의 문서가 정말 관련있는 문서였느냐 하는 것이고 recall은 실제로 검색엔진이 색인하고 있는 관련문서 중에 얼마나 많은 문서가 사용자의 검색결과로 리턴되었냐 하는 것이니깐. 그럼 이 두개의 지표를 합쳐서 표시해 주는 방법은 없을까?
그래서 나온게 F-measure. p = precision, r : recall, b : 파라메터(1로 세팅되는 경우가 많음 ) 라고 할 때

이런 식으로 되는데 보면 b를 그냥 1로 세팅해버리면
F1 = 2PR / (P + R)
이라는 식이 나온다. 이게 그냥 여기서만 나오는 거 같지만 아니다. 어엿하게 F1 score라고 해서 통계학에서 binary classification을 할때( 이쪽 아니면 저쪽, 흑백 나누기, 내편니편 나누기 등등 ) 과연 이 결과가 얼마나 정확한지를 측정하기 위한 방법으로 사용된다. (출처 : https://en.wikipedia.org/wiki/F1_score) 심지어는 머신러닝에서도 해당 알고리즘의 정확도를 측정하기 위해 쓰인다? (머신러닝에도 classification이라고 해서 있죠잉~) 역시 모든게 연결되는 게 수학의 장점이자 단점(모르는 걸 찾아보면 고구마 뿌리 나오든 계속 줄줄이 엮여 나오니깐… )
아무튼, 여기서 나올법한 지극히 당연한 질문
왜 그냥 (P + R) / 2 로 해서 산술평균을 안내고 이렇게 복잡하게 해요?이유는 바로 산술평균의 경우 numerator(분자)에 들어가는 factor 중 특정값의 크기가 큰 경우(여기서는 P또는 R) 다른 나머지 값은 결과에 아주 영향을 미치게 되어버리고 평균의 결과값이 factor중 큰 값에 의해 dominated되어버리기 때문이다.
하지만 이것도 항상 이 F-measure를 써야 한다 뭐 이런게 아니고 시스템을 평가하는 데 있어 F-measure가 더 말이 되면 이걸 쓰고 그게 아니라 산술평균이 더 말된다 싶으면 그쪽을 쓰는 거다. CS410들으면서 나오는 거의 모든 수식과 지표에서 듣는게 “it depends”.
이번엔 여기까지.
