추천

Recommendation

방법

사용자가 관심 가질 만한 항목을 많은 후보 중에서 골라 앞에 내놓는 과제입니다.

등장 배경

항목이 스무 개일 때는 고르는 것이 문제가 아닙니다. 다 보여 주면 사용자가 훑어서 정합니다. 항목이 8,000개가 되면 사정이 달라집니다.

지현이 템플릿 갤러리 사용 기록을 열어 봤을 때 이 문제가 숫자로 나왔습니다. 템플릿 8,000개 중 상위 20개가 전체 조회의 70퍼센트를 차지하고 있었습니다. 나머지 7,980개는 사실상 없는 것과 같았습니다. 만들어 둔 것의 대부분이 도달하지 못하고 있었던 겁니다.

목록과 검색만으로는 풀리지 않습니다. 검색은 무엇을 찾을지 이미 아는 경우에만 동작합니다. 회의록 정리 템플릿이 있다는 사실을 모르는 사람은 그 단어를 검색창에 넣지 않습니다. 목록은 순서가 고정되면 위쪽 몇 개만 계속 보입니다.

그래서 사용자마다 다른 순서를 만드는 쪽으로 갑니다. 이 사람이 지금까지 무엇을 했는지와 비슷한 사람들이 무엇을 썼는지를 근거로 후보를 골라 앞에 놓는 것입니다.

사용 절차

모델을 고르는 일보다 자리를 정하는 일이 먼저입니다. 같은 제품 안에서도 어디에 놓느냐에 따라 다른 문제가 됩니다.

  1. 자리와 목적을 정합니다. 갤러리 첫 화면에서 무엇을 보여 줄지, 문서를 만든 직후에 무엇을 제안할지, 빈 화면에 무엇을 채울지가 각각 다른 과제입니다. 목적도 함께 적습니다. 클릭을 늘리려는 것인지, 안 쓰던 기능을 쓰게 하려는 것인지에 따라 좋은 추천이 달라집니다.
  2. 신호를 모읍니다. 별점이나 저장처럼 의도해서 남긴 신호와, 클릭이나 머문 시간처럼 저절로 남는 신호가 있습니다. 앞쪽은 정확하지만 적게 모이고 뒤쪽은 많지만 잡음이 섞여서, 뒤쪽을 주로 쓰고 앞쪽을 보정에 씁니다.
  3. 방법을 고릅니다. 셋 중에서 시작합니다.
  4. 차가운 시작을 처리합니다. 새로 온 사용자에게는 쓸 기록이 없고, 새로 올린 항목에는 쓰인 기록이 없습니다. 이 두 경우에 무엇을 보여 줄지 미리 정해 두지 않으면 화면이 비거나 엉뚱한 것이 나옵니다.
  5. 평가합니다. 과거 기록으로 맞혔는지 재는 방식과 A/B 테스트로 실제 효과를 재는 방식을 함께 씁니다. 두 값이 어긋나는 일이 흔하고, 그때는 실제 실험 쪽을 믿습니다.
  6. 규칙을 얹습니다. 이미 쓴 항목은 빼고, 같은 종류만 다섯 개 나오지 않게 섞고, 내보내면 안 되는 항목은 막습니다. 이 규칙이 결과 품질에서 차지하는 몫이 생각보다 큽니다.

3번의 셋은 이렇게 나뉩니다. 인기 기반은 최근 많이 쓰인 것을 그대로 보여 줘서 규칙 몇 줄로 되고 신규 사용자에게도 동작합니다. 콘텐츠 기반은 항목 속성이 비슷한 것을 찾아서 올린 지 하루 된 항목도 추천합니다. 협업 필터링은 나와 비슷하게 행동한 사람들이 쓴 것을 꺼내는데, 기록이 쌓여야 동작하지만 예상 밖의 항목을 찾는 힘이 가장 큽니다.

적합한 상황과 한계

맞는 조건은 둘입니다. 후보 항목이 사용자가 훑기 어려울 만큼 많고, 행동 기록이 쌓이고 있어야 합니다. 항목이 스무 개인 제품에서는 규칙으로 정한 순서가 모델보다 낫습니다.

한계는 다섯입니다.

  1. 차가운 시작 — 신규 사용자와 신규 항목에는 근거가 없습니다. 제품 초기에는 사용자 전체가 신규라 이 문제가 전면에 나옵니다.
  2. 스스로를 확인하는 고리 — 추천된 항목만 클릭되니 다음 학습 데이터도 그쪽으로 쏠립니다. 모델이 자기가 고른 것을 근거로 다시 고릅니다.
  3. 인기 편중 — 이미 많이 쓰이는 항목이 더 추천되고, 앞서 말한 7,980개는 더 묻힙니다. 목적이 긴 꼬리를 살리는 것이었다면 결과가 목적과 반대로 갑니다.
  4. 이유를 대지 못함 — 왜 이것을 골랐는지 설명하기 어렵습니다. 사용자가 이상한 추천을 받았을 때 고칠 실마리도 함께 없습니다.
  5. 평가의 어긋남 — 과거 기록에서 잘 맞히는 모델이 실제 사용자에게는 별 차이를 못 내는 경우가 자주 있습니다.

안 맞는 자리도 있습니다. 한 번만 구매하는 항목, 규정이 순서를 정하는 화면, 사용자가 명확한 의도를 갖고 온 검색 결과입니다. 검색 결과를 사람마다 바꾸면 같은 검색어에 다른 결과가 나와 아까 본 것을 다시 찾지 못합니다.

실무 용례

"일단 최근 많이 쓴 템플릿 순으로 깔고 시작하죠. 모델은 기록 쌓인 다음에요."

규칙 기반으로 먼저 자리를 만들자는 제안입니다.

"추천 클릭률은 올랐는데 유료 전환은 그대로예요."

목적 지표와 실제 지표가 어긋났다는 지적입니다.

"신규 가입자한테는 추천이 빈 화면으로 나옵니다."

차가운 시작 처리를 안 해 뒀다는 뜻입니다.

페이지덱은 갤러리 첫 화면에 이 과제를 붙였습니다. 태오가 협업 필터링을 먼저 만들어 보려 했는데, 지현이 규칙 기반부터 가자고 했습니다. 기록이 아직 얇았고, 무엇보다 목적이 클릭을 늘리는 것이 아니라 묻혀 있는 템플릿을 꺼내는 것이었기 때문입니다.

그래서 인기 기반 절반과 최근 올라온 것 절반을 섞어 깔고 이미 쓴 것을 빼는 규칙만 얹었습니다. 상위 20개의 조회 비중이 70퍼센트에서 41퍼센트로 내려왔습니다. 모델 없이 자리와 규칙만 손본 결과였고, 협업 필터링은 반년 뒤에 다시 보기로 했습니다.

흔한 오해

모델이 좋아지면 추천이 좋아진다고 읽는 경우가 가장 많습니다. 머신러닝 과제로 분류되니 모델 성능이 결과를 정할 것처럼 보입니다. 하지만 결과를 크게 움직이는 것은 어디에 놓았는지와 어떤 규칙을 얹었는지입니다. 이미 쓴 항목을 빼는 한 줄이 모델을 바꾸는 것보다 클릭률을 더 올리는 일이 흔하고, 추천 영역을 화면 위로 올리는 것도 그렇습니다. 모델 성능에 두 달을 쓰기 전에 자리와 규칙을 먼저 봅니다.

개인화와 같은 것으로 읽는 것도 흔합니다. 둘 다 사람마다 다른 것을 보여 주니 겹쳐 보입니다. 하지만 추천은 후보 중에서 고르는 과제이고 개인화는 화면 전체를 사람에 맞추는 설계입니다. 개인화 안에는 추천도 들어가지만 지역에 따라 통화를 바꾸는 일이나 직무에 따라 첫 화면을 다르게 두는 일도 함께 들어갑니다. 추천 모델을 붙였다고 개인화가 된 것은 아닙니다.

자주 헷갈리는 용어

용어무엇을 가리키는가이 과제와의 차이
추천사용자가 다른 사람을 데려오는 단계같은 한국어 표기를 쓰지만 다른 말입니다. 영어로는 referral이고, 항목을 골라 주는 일이 아니라 사용자가 지인을 초대하는 흐름을 가리킵니다
개인화사람마다 다른 내용을 보여 주는 설계범위가 넓습니다. 추천은 후보를 고르는 과제 하나이고, 개인화는 그 과제를 포함해 화면 구성과 문안까지 다룹니다

같이 보면 좋은 페이지

  • 머신러닝

    이 과제가 어느 갈래에 속하는지 먼저 봅니다

  • 분류

    같은 갈래의 다른 과제와 견줘 봅니다

  • 개인화

    이 과제가 쓰이는 더 넓은 설계를 확인합니다

마지막 업데이트 2026-09-16