추천 아키텍처

검색어 없이 사용자가 좋아할 아이템을 고른다. 수천만 후보를 후보 생성 → 랭킹 → 재정렬 퍼널로 좁히고, 피드백이 다음 학습으로 돌아온다

추천

  1. 행동 신호 수집 (비활성)

    평점 같은 명시 피드백과 조회 · 클릭 · 찜 · 구매 같은 암묵 피드백을 모아 사용자 × 아이템 상호작용으로 만든다

    analytics 이벤트 토픽에서 상품 행동(노출 · 클릭 · 장바구니 · 주문)을 받아 ClickHouse 행동 테이블에 쌓는 소비자가 있다. 운영 ClickHouse 에는 그 테이블이 아직 없어 쌓인 행동이 없다(2026-10-12 확인)

  2. 점수 보정 (비활성)

    노출이 적은 아이템의 CTR 은 우연에 크게 흔들린다. 신뢰구간 하한이나 사전 분포로 당겨 적은 표본이 1위를 차지하지 않게 한다

    카테고리 베스트 점수는 행동 가중합에 Wilson 하한으로 보정한 CTR 을 곱해 낸다 — 가중합 × ln(1 + Wilson CTR × 100). 최근 30일, 행동 10건 이상인 아이템만 계산한다. 계산은 내부 동기화 호출로만 돌고 운영에는 그 호출을 거는 스케줄이 없다

  3. 후보 생성 (리트리벌) (비활성)

    수천만 아이템에서 수백 개를 recall 위주로 빠르게 뽑는다. 룰 · 콘텐츠 · 협업 · 임베딩 · 위치 소스 여러 개를 합친다

    후보 원천 셋 — 카테고리 베스트, 아이템 협업 필터링(PPMI), 임베딩 ANN 이 구현돼 있다. 운영에서는 셋 다 비어 있다 — Redis 에 사전 계산 목록이 없고 ANN 사이드카에 모델 파일이 없다(2026-10-12 확인)

  4. 랭킹 (비활성)

    후보 수백 개를 풍부한 특징으로 정밀하게 채점한다. 보통 클릭 · 전환 확률을 예측하는 모델이고 precision 이 목표다

    ANN 후보를 ONNX 랭커(Wide & Deep · DLRM)로 다시 점수 매긴다. 사이드카에 랭커 모델이 없어 받은 순서를 그대로 돌려준다(2026-10-12 확인)

  5. 재정렬 · 후처리 (미적용)

    점수 순 목록을 그대로 내지 않고 다양성 · 신선도 · 이미 본 것 · 운영 규칙을 반영해 최종 Top-K 를 만든다

    재정렬 단계는 없다. 폴백으로 목록을 채울 때 이미 고른 아이템을 빼는 중복 제거만 있다

  6. 콜드 스타트 대응 (부분)

    기록이 없는 새 사용자 · 새 아이템 · 새 문맥에 폴백 체인과 탐색으로 첫 추천을 낸다

    개인화 요청은 최근 30일 행동이 기준 미만이면 바로 카테고리 베스트로 넘긴다. 선호 도시 · 카테고리는 90일 행동에서 고르고 없으면 기본값을 쓴다. 판정과 폴백 순서는 요청마다 돌지만 폴백 목적지인 카테고리 베스트가 운영에서 비어 있다

  7. 추천 서빙 (부분)

    무거운 계산은 배치로 미리 하고, 요청 경로에서는 캐시 조회 · ANN · 가벼운 채점만 한다. 퍼널 단계마다 지연 예산이 다르다

    추천 API 셋(카테고리 베스트 · 비슷한 상품 · 개인화)은 engagement 파드에서, ANN 은 사이드카 파드에서 돈다. 사전 계산 목록을 갱신하는 스케줄과 재학습 잡은 배포돼 있지 않다

  8. 추천 평가 (비활성)

    오프라인 지표로 후보를 거르고 온라인 실험으로 판정한다. 로그는 옛 정책이 보여 준 것만 담아 오프라인 지표가 믿기 어렵다

    오프라인 평가는 학습 스크립트 안에만 있고, 온라인 실험 · 밴딧 · 노출 발행은 구현돼 있지만 꺼져 있다