랭킹의 절대좌표 "카테고리 가중치(Category Mapping Probability)"
우리가 사용하는 위도,경도에는 0점이 있습니다. 군대에서 사격연습을 시작하기전에 0점을 맞춥니다.
그 0점이 기준이되어야 나머지 위치가 결정이 되기 때문이죠.
랭킹에도 마찬가지로 0점이 있습니다. 오늘은 그 랭킹의 0점, 즉 절대좌표를 제가 아는 지식과 경험내에서 적어보려고 합니다.
특히 커머스에선 바로 "카테고리 가중치"입니다. CMP(Category Mapping Probabiliy)의 약자로 저랑 오랫동안 함께 일하셨던 아주 숙련된 검색기획자분께서 알려주셨습니다.이 용어의 원천출처는 어딘지는 모르겠으나, 이 용어 CMP가 업계에서 몇몇 회사에서 사용하는 걸 봤습니다. 여기선 그냥 CMP로 쓰겠습니다.
CMP는 제 나름대로 재해석 해보자면, "Categrory Mapping Probability for User's Queries" 표현해 볼 수 있겠습니다. 즉, "사용자 질의에 대한 카테고리 가중치 지표"라고 할 수 있겠네요.
필수 조건
- 상품 Click Log를 이용해서, 질의(Query)별 클릭한 상품의 Category ID를 수집합니다.
이때 Category Depth 중 가장 마지막 Depth로 하는 것이 좋습니다. 그 이유는 가장 기초 랭킹이기 때문에 최대한 심플하게 대부분 상품은 마지막 depth에 위치하기 때문에
나중에 데이터 재활용 측면에서 효율적입니다.

- 수집된 Query와 Category ID에 대해서 집계를 합니다. 보통 Count로 표현합니다.

- 해당 Category ID에 대해서 Count가 낮은 현저하게 낮은 Query들은 버립니다.이는 어뷰징 및 오클릭을 어느정도 걸러내기 위함입니다. 이때 많은 방법들이 있겠지만, 저는 여기서 Atan2를 사용했습니다.
- 최종적으로 count에 대하서 score를 계산하면 됩니다. 여기도 많은 방법들이 있겠으나, 저의 경우는 최대한 심플하기 위해서 Atan2를 그대로 사용했습니다. 이는 랭킹에서 CMP에 가중치를 줄때, atan2값이 1보다 작기 때문에. CMP내에서 큰 차이가 없기 때문에 CMP고유가중치를 지정하여 줄 때
관리적인 측면에선 효율적입니다.
- 추가적으로 기간별로 CMP스코어 가중치를 주는 것이 좋습니다. 한국 커머스 특성상 사계절 트렌드가 자주 바뀌기 때문에 기간별 가중치를 주는 것이 매우 효과적이었습니다.
예를 들어 5월에 "게스"라고 검색했을 때 패딩 카테고리 상품이 상위에 나오는 경우는 없어야겠죠.
예) 최근 7일 = score + 2, 최근 30일 = score + 1
- 추출 예

적용효과
- 아래 예시는 CMP 효과 차이를 비교하기 위한 예시일 뿐, 해당 커머스가 어떤 랭킹을 썼는지는 모릅니다.
- 아래 예시는 대부분의 유저들이 "스킨"을 화장품 "스킨로션"의 스킨을 주로 의미했다는 것을 가정했을 때입니다.
CMP 적용 전

CMP 적용 후

추가 적용
- CMP는 다양한 서비스에 활용이 가능합니다. 앞으로 적용사례를 하나하나 정리해 볼 생각입니다.
이번에는 쉽게 적용 가능한 "카테고리별 인기질의"서비스입니다.

가장 중요한 Simplity
- CMP는 랭킹의 기준이기 때문에 최대한 Simplity를 추구해야 합니다. 왜냐하면 검색랭킹은 여러가지 복합적인 Layer층으로 이루어져 단계적으로 보안점을 쌓아 올려야 제 경험상 유지 관리하기 쉬웠습니다.
CMP의 한계
- CMP가 모든 경우에대한 검색품질을 보장하지 않습니다. 다만 그 기준을 제시하고 그 기준을 활용하여 추가 랭킹레이어에 적용이 가능합니다.
그리고 커머스 카테고리개편에 따른 Category Id 변화가 그 랭킹기준을 변화시켜 서비스에 큰 영향을 주는 고질적인 문제점도 있습니다. 이러한 문제는 추후에 어떻게 해결했는지도 정리 할 예정입니다.