카카오맵 리뷰 175만 건을 뜯어 만든 맛집 지도

별점이 아니라 누가 줬는지가 중요하다

by kimdonglin

https://www.jmtguri.com/

카카오맵 8만 개 식당 리뷰를 뜯어 만든 맛집 지도 이야기.


4.8점의 함정

카카오맵에서 별점 4.8을 보고 찾아간 식당이 있다. 리뷰도 많고, 사진도 그럴듯했다. 음식이 나왔을 때 나는 내 미각을 의심했다. 분명 4.8점인데 왜 이런 맛이 나는 걸까. 이런 경험이 한두 번이 아니었다.

그래서 직접 뜯어보기로 했다.


서울과 경기, 84,736개 식당의 리뷰 175만 건을 수집했다. 먼저 카카오맵 별점 4.8 이상인 식당만 따로 봤다. 98.9%가 실제로 괜찮은 곳이었다. 수치만 보면 카카오 별점은 꽤 정확하다.


하지만 전체 식당으로 범위를 넓히면 이야기가 달라진다.



리뷰를 많이 쓰고 변별력 있는 평점을 주는 사람들 — 나중에 '골드 리뷰어'라고 부르게 되는 — 이 한 명도 없는 식당의 33.6%에서 카카오 별점과 실제 분석 점수 사이에 0.5점 이상 차이가 났다. 3개 중 1개는 별점이 실제와 달랐다는 뜻이다. 왜 그런가 봤더니, 칭찬봇이었다. 평균 평점 4.5 이상에 리뷰를 25개 넘게 쓴 사람들 — 뭘 먹어도 최고라고 하는 사람들 — 이 전체 리뷰어의 40%를 넘는 식당이 7,507개, 전체의 9.2%였다. 이런 식당의 카카오 점수는 실제보다 평균 0.48점 높았다.


반대로, 리뷰가 자연스럽고 칭찬봇이 적은 식당은 카카오에서 평균 0.39점 깎여 있었다. 시스템이 좋은 곳을 불이익주고, 부풀려진 곳을 띄워주는 구조다.

별점 자체가 틀린 게 아니다. 별점을 준 사람을 안 보는 게 문제다.



사람을 보는 알고리즘

와인 감별사와 비슷하다. 수천 잔을 마셔본 사람이 "괜찮다"고 한 것과, 생애 첫 와인을 마신 사람이 "최고다"라고 한 건 무게가 다르다. 나는 이 원리를 식당 리뷰에 적용했다.


골드 리뷰어를 정의했다. 리뷰를 50개 이상 쓴 사람 중에서, 평균 평점이 2.5에서 4.2 사이인 사람이다. 많이 먹어봤고, 극단적이지 않은 혀를 가진 사람이다. 처음에는 상한선을 3.8로 잡았는데, 3.8~4.2 구간의 리뷰어도 충분히 변별력이 있다는 데이터가 나와서 4.2로 올렸다 (이 조정 하나로 판정 가능률이 100%로 뛰었다. 변별력은 유지됐다).


각 리뷰어의 가중치는 두 가지로 결정된다. 첫째는 양 — 리뷰를 얼마나 많이 썼는가. 로그 스케일로 100개에서 포화한다. 둘째는 구별력 — 평균 평점이 3.2에 가까울수록 높다. 이 두 값을 곱하면 신뢰도가 나온다. 결과적으로, 리뷰 1개에 평균 5.0인 사람의 가중치는 0.07이고, 리뷰 200개에 평균 3.3인 사람의 가중치는 1.04다. 같은 별점 5점인데 무게가 15배 차이 난다.


칭찬봇은 3단계로 잡아낸다. 평균 4.9 이상이면 리뷰 3개만 써도 탐지되고, 4.7 이상은 7개, 4.5 이상은 25개부터 걸린다. 항상 최고점을 주는 사람의 리뷰에는 구별력이 없다. (이 기준을 잡는 데만 이틀이 걸렸다. 너무 느슨하면 칭찬봇이 살아남고, 너무 빡빡하면 성실한 리뷰어까지 잘려나간다.)


이렇게 만든 점수를 세 축으로 나눠 본다. 첫 번째 축은 가중 긍정률 — 신뢰할 수 있는 리뷰어들 사이에서 긍정 비율이 얼마인지. 75% 이상이면 맛집, 50% 이상이면 괜찮음, 30% 이상이면 보통, 그 아래는 주의. 두 번째 축은 버블 레벨 — 칭찬봇 비율이 40%를 넘거나, 카카오 점수와 분석 점수의 괴리가 0.5 이상이면 경고. 세 번째 축은 데이터 신뢰도 — 유효 표본 수와 골드 리뷰어 수로 판단한다. 하나의 점수가 아니라 세 개의 렌즈로 보는 셈이다.


골드 리뷰어가 충분하지 않은 식당도 많다. 리뷰가 50개 미만이면 골드 리뷰어 기반 분석을 적용할 수가 없다. 그래서 다른 방법을 썼다. 리뷰어가 이 식당에 준 별점에서 그 사람의 평균 평점을 빼는 것이다 (Delta Method). 평소 3.5를 주는 사람이 여기에 5를 줬다면 +1.5. 그 사람 기준으로 이 식당이 특별했다는 신호다. 정확도 87.6%, F1 0.834. 완벽하지는 않다 — 이 숫자에 대해서는 마지막에 다시 이야기하겠다.



8만 개를 뜯었더니

이 알고리즘을 서울과 경기 전체에 돌렸다. 혼자서 426개 동, 570개 읍면동을 전수 조사했다. 분석 완료된 81,679개 식당에서 몇 가지 패턴이 보였다.

불완전한 도구로도 잡아낼 수 있는 것들이 있었다.


호불호가 갈리는 식당이 19.5%였다. 가중 표준편차(σ)가 1.35를 넘는 곳들이다. 흥미로운 건 이 식당들의 별점 분포다. 5점 비율은 합의형과 비슷한데(49.5% vs 52.6%), 1점 비율이 50배다(19.8% vs 0.4%). 중간이 없다. 좋아하는 사람은 극찬하고, 싫어하는 사람은 극혐한다. 호불호가 갈린다는 건 개성이 있다는 뜻이다.

카테고리별로도 패턴이 있었다. 중식이 호불호 비율 31.0%로 가장 높고, 해산물/회(30.4%), 곱창(30.4%)이 뒤를 이었다. 카페는 22.2%로 가장 낮다. 분위기로 먹는 곳은 의견이 덜 갈린다.


이 패턴이 실제로도 맞는지 확인해봤다. 잠실에서 24개 식당을 직접 검증했다. 같은 카카오 4.1점인 식당 두 곳이 있었다. 한 곳은 해산물집 — 골드 리뷰어 0명, 스팸 리뷰 60%, 가중 분석 점수 3.10. 다른 한 곳은 초밥집 — 버블 레벨 깨끗, 골드 리뷰어 있음, 가중 분석 점수 4.43. 같은 별점인데 가중치를 적용하면 1.33점 차이가 난다.

리뷰가 자연스러운 곳은 카카오에서 깎이고(-0.39점), 버블 낀 곳은 띄워진다(+0.48점). 별점만 보면 이 차이가 안 보인다.



데이터로 글을 쓴다는 것

바이브 코딩으로 데이터를 가지고 와서 시각화 하는건 이제 누구나 할 수 있는 일이 되었다. 하지만 그렇게 모아 놓은 데이터를 보여주는게 가치를 전달하는 일일까? 이제는 누구나 양질 데이터를 가지고 올수있다. 이제 그걸 기반으로 본인의 인사이트를 녹인게 더 중요한 시대가 왔다


매거진의 이전글OpenAI의 선택과 Cancel ChatGPT 의미