검색 품질은 어떻게 평가할까? 정밀도, 재현율부터 nDCG, CTR까지
지난 글에서는 검색이 어떻게 동작하는지 살펴봤습니다. 그렇다면 검색이 "잘" 동작하고 있는지는 어떻게 알 수 있을까요? 사전에 동의어를 하나 추가했을 때 검색이 정말 좋아졌는지, 오히려 나빠졌는지 판단하려면 기준이 필요합니다.
검색 품질 평가는 크게 두 가지로 나뉩니다.
| 구분 | 방법 | 장점 | 단점 |
|---|---|---|---|
| 오프라인 평가 | 사람이 검색 결과의 관련성을 직접 판정 | 정확하고 이유를 알 수 있음 | 사람이 판정해야 해서 규모가 작음 |
| 온라인 평가 | 실제 사용자의 행동 로그로 측정 | 규모가 크고 실제 반응을 반영 | 왜 그런 결과가 나왔는지 알기 어려움 |
이번 글에서는 두 가지를 차례로 정리해 보겠습니다.
1. 오프라인 평가의 출발점: 정답 데이터
오프라인 지표를 계산하려면 먼저 "이 검색어에 이 결과가 맞는가?"에 대한 정답이 있어야 합니다. 보통 사람이 검색 결과를 하나씩 보고 관련성을 판정해서 만듭니다.
판정은 두 가지 방식이 있습니다.
- 이진 판정: 관련 있음(1) / 없음(0)
- 등급 판정: 정확(2) / 부분 일치(1) / 무관(0)처럼 단계를 나눔
여기서 중요한 건 판정 기준을 미리 정해두는 것입니다. 예를 들어 "울 니트" 검색에서 울 혼방 니트는 정확인지 부분 일치인지, 소재 정보가 없는 니트는 어떻게 볼지를 먼저 정해두지 않으면, 사람마다 또는 날마다 판정이 달라져 지표 자체를 믿을 수 없게 됩니다. 판단할 근거가 부족한 경우는 억지로 분류하지 않고 따로 표시해 두는 것도 좋은 방법입니다.
2. 정밀도와 재현율: 정확하게 찾았나, 빠짐없이 찾았나
가장 기본이 되는 두 지표입니다.
- 정밀도 (Precision): 보여준 결과 중 맞는 것의 비율
→ "나온 것 중에 쓸모 있는 게 얼마나 되나?"
- 재현율 (Recall): 찾아야 할 정답 중 실제로 찾아낸 비율
→ "찾아야 할 걸 얼마나 빠짐없이 찾았나?"
정밀도 = 결과 중 맞는 개수 ÷ 보여준 결과 개수
재현율 = 결과 중 맞는 개수 ÷ 전체 정답 개수예시
"울 니트"에 해당하는 상품이 전체 6개 있다고 해보겠습니다. 검색 결과 상위 5개 중 3개가 정답이었다면,
- 정밀도 = 3 ÷ 5 = 0.6
- 재현율 = 3 ÷ 6 = 0.5
두 지표는 분모가 다르다는 것이 핵심입니다. 정밀도는 "보여준 것"이 기준이고, 재현율은 "찾아야 할 것"이 기준입니다.
둘은 보통 반대로 움직입니다
동의어 사전으로 예를 들어보겠습니다.
- "아우터 = 코트 = 패딩 = 점퍼"처럼 넓게 묶으면, 더 많은 상품이 걸리니 재현율은 오르지만, "코트"를 찾는 사람에게 패딩이 섞여 정밀도는 떨어집니다.
- 반대로 좁게 묶으면 엉뚱한 결과는 줄지만 놓치는 상품이 생깁니다.
그래서 둘 중 하나만 보면 안 되고, 함께 확인해야 합니다. 둘을 하나의 숫자로 합친 지표가 F1 점수입니다.
F1 = 2 × 정밀도 × 재현율 ÷ (정밀도 + 재현율)
= 2 × 0.6 × 0.5 ÷ 1.1 ≈ 0.55검색에서는 @K를 붙여 씁니다
사용자는 결과를 끝까지 보지 않기 때문에, 검색에서는 상위 K개만 보고 계산하는 경우가 많습니다.
- Precision@10: 상위 10개 중 정답 비율
- Recall@10: 전체 정답 중 상위 10개 안에 들어온 비율
3. MRR: 첫 번째 정답이 얼마나 위에 있나
MRR (Mean Reciprocal Rank)은 처음으로 정답이 나온 순위에 주목합니다. 정답이 1위면 1점, 2위면 1/2점, 3위면 1/3점을 주고, 여러 검색어의 평균을 냅니다.
| 검색어 | 첫 정답 순위 | 점수 |
|---|---|---|
| 울 니트 | 1위 | 1 |
| 트렌치코트 | 3위 | 1/3 ≈ 0.33 |
| 와이드 슬랙스 | 2위 | 1/2 = 0.5 |
MRR = (1 + 0.33 + 0.5) ÷ 3 ≈ 0.61특정 상품 하나를 찾는 검색(예: 상품명이나 브랜드 검색)처럼 정답 하나만 빨리 찾으면 되는 상황에 잘 맞는 지표입니다.
4. nDCG: 순서와 정도까지 반영하기
정밀도는 순서를 고려하지 않습니다. 상위 5개 중 정답 3개가 1~3위에 있든 3~5위에 있든 똑같이 0.6입니다. 하지만 사용자 입장에서는 정답이 위에 있을수록 훨씬 좋겠죠.
nDCG (normalized Discounted Cumulative Gain)는 이 두 가지를 반영합니다.
- 등급 판정을 쓸 수 있습니다 (정확 2, 부분 1, 무관 0)
- 아래로 갈수록 점수를 할인합니다
계산 방법
- DCG: 각 결과의 관련성 점수를 순위에 따라 할인해서 더합니다.
DCG = Σ 관련성 점수 ÷ log₂(순위 + 1)- IDCG: 같은 결과를 가장 이상적인 순서로 정렬했을 때의 DCG입니다.
- nDCG = DCG ÷ IDCG (0~1 사이 값, 1에 가까울수록 좋음)
예시
상위 5개 결과의 판정이 [정확, 무관, 부분, 무관, 정확]이었다고 해보겠습니다.
| 순위 | 판정 | 점수 | 할인 (log₂(순위+1)) | 기여 |
|---|---|---|---|---|
| 1 | 정확 | 2 | 1 | 2.00 |
| 2 | 무관 | 0 | 1.585 | 0 |
| 3 | 부분 | 1 | 2 | 0.50 |
| 4 | 무관 | 0 | 2.322 | 0 |
| 5 | 정확 | 2 | 2.585 | 0.77 |
| DCG | 3.27 |
이상적인 순서는 점수가 큰 것부터 [정확, 정확, 부분, 무관, 무관]입니다.
IDCG = 2/1 + 2/1.585 + 1/2 = 2 + 1.26 + 0.5 = 3.76
nDCG = 3.27 ÷ 3.76 ≈ 0.87순서가 왜 중요한지 비교해 보기
같은 결과를 순서만 바꿔 [무관, 무관, 부분, 정확, 정확]으로 보여줬다면 어떨까요?
DCG = 0 + 0 + 1/2 + 2/2.322 + 2/2.585 = 0.5 + 0.86 + 0.77 = 2.13
nDCG = 2.13 ÷ 3.76 ≈ 0.57| 결과 순서 | Precision@5 | nDCG@5 |
|---|---|---|
| 정확, 무관, 부분, 무관, 정확 | 0.6 | 0.87 |
| 무관, 무관, 부분, 정확, 정확 | 0.6 | 0.57 |
정밀도는 똑같이 0.6인데 nDCG는 크게 차이가 납니다. 좋은 결과를 위에 보여줬는지를 평가하려면 nDCG가 더 적합하다는 걸 알 수 있습니다. 그래서 랭킹을 평가할 때 가장 널리 쓰이는 지표 중 하나입니다.
5. 오프라인 지표 한눈에 보기
| 지표 | 보는 것 | 언제 쓰나 |
|---|---|---|
| Precision@K | 상위 K개가 얼마나 정확한가 | 엉뚱한 결과가 섞이는지 볼 때 |
| Recall@K | 정답을 얼마나 빠짐없이 찾았나 | 사전 누락으로 놓치는 상품을 볼 때 |
| F1 | 정밀도와 재현율의 균형 | 둘을 한 숫자로 비교할 때 |
| MRR | 첫 정답이 얼마나 위에 있나 | 특정 상품 하나를 찾는 검색 |
| nDCG@K | 좋은 결과가 위에 있는가 (등급 반영) | 랭킹 순서를 평가할 때 |
6. 온라인 평가: 사용자의 행동으로 측정하기
사람이 판정하는 오프라인 평가는 정확하지만, 수많은 검색어를 모두 판정할 수는 없습니다. 그래서 실제 서비스에서는 사용자 행동 로그로 만든 지표를 함께 봅니다.
| 지표 | 계산 | 알 수 있는 것 |
|---|---|---|
| 무결과율 | 결과가 0건인 검색 ÷ 전체 검색 | 사전 누락, 오타, 신조어 |
| CTR (클릭률) | 클릭 수 ÷ 노출 수 | 결과가 관심을 끌었나 |
| CVR (전환율) | 구매 수 ÷ 클릭 수 (또는 검색 수) | 원하는 걸 실제로 찾았나 |
| 재검색률 | 검색 직후 다른 검색어로 다시 검색한 비율 | 첫 결과가 실패했다는 신호 |
| 평균 클릭 순위 | 클릭한 상품의 평균 순위 | 원하는 상품이 아래에 묻혀 있나 |
온라인 지표의 함정
온라인 지표는 해석에 주의가 필요합니다.
- CTR이 높다고 정확한 것은 아닙니다. 썸네일이 예쁘거나 가격이 싸서 클릭했을 수도 있습니다.
- 체류시간이 길다고 좋은 것은 아닙니다. 원하는 걸 못 찾아서 계속 스크롤했을 수도 있습니다.
- 위에 있는 결과는 위에 있다는 이유만으로 더 클릭됩니다. 이를 위치 편향이라고 합니다.
그래서 지표 하나만 보지 않고 여러 지표를 함께 봐야 합니다. 예를 들어 체류시간이 늘었다면, 전환율이 같이 올랐는지 재검색률이 같이 올랐는지를 확인해야 좋아진 건지 나빠진 건지 판단할 수 있습니다.
7. A/B 테스트: 정말 좋아졌는지 확인하기
사전을 바꾸거나 랭킹을 수정한 뒤 지표가 좋아졌다고 해도, 그게 정말 변경 때문인지는 알 수 없습니다. 시즌이 바뀌었거나 할인 행사가 있었을 수도 있으니까요.
그래서 사용자를 무작위로 두 그룹으로 나눠 기존 방식(A)과 새 방식(B)을 동시에 보여주고 지표를 비교하는 A/B 테스트를 사용합니다. 같은 기간, 같은 조건에서 비교하기 때문에 외부 요인의 영향을 줄일 수 있습니다.
8. 오프라인과 온라인을 함께 쓰는 이유
| 오프라인 (nDCG 등) | 온라인 (CTR, CVR 등) |
|---|---|
| 정확도 | 높음 (사람이 판단) |
| 규모 | 작음 |
| 이유 파악 | 가능 |
| 속도 | 판정 시간이 필요 |
온라인 지표로 문제가 있는 검색어를 넓게 찾고
↓
오프라인 판정으로 원인을 정확하게 확인하고
↓
개선한 뒤
↓
A/B 테스트로 실제 효과를 검증합니다마치며
정리하면 검색 품질 평가는 다음 질문들에 답하는 과정입니다.
- 정밀도: 보여준 것 중에 맞는 게 얼마나 되나?
- 재현율: 찾아야 할 걸 얼마나 빠짐없이 찾았나?
- nDCG: 좋은 결과를 위에 보여줬나?
- CTR, CVR, 재검색률: 실제 사용자는 만족했나?
어떤 지표도 혼자서는 완벽하지 않기 때문에, 각 지표가 무엇을 보여주고 무엇을 놓치는지 이해한 상태에서 함께 보는 것이 중요합니다. 그리고 그 모든 지표의 출발점은 결국 일관된 기준으로 만든 정확한 데이터라고 생각합니다.
Comments