큐레이션 요약
개인화된 알림 시스템을 위한 빠른 사고와 느린 사고
reinforcement-learningfeature-storepersonalizationnotification-systemscausal-modelingreal-time-decisioningutility-function
Netflix의 개인화 알림 시스템은 장기적인 메시징 전략을 세우는 느린 정책(Slow Policy)과, 실제 발송 시점에 최적의 콘텐츠를 선택하는 빠른 정책(Fast Policy)으로 분리된다. 느린 정책은 회원별 주간 채널 빈도와 발송 페이싱을 결정하고, 빠른 정책은 해당 범위 안에서 즉각적인 관련성과 참여 가능성이 가장 높은 메시지를 선택한다. 이를 통해 단기 참여율뿐 아니라 알림 피로도와 채널 구독 해지 위험까지 함께 관리한다.
기존 단일 정책 방식의 한계
- 기존 시스템은 단일 알림이 단기간에 유발하는 인과적 효과를 예측해 발송 여부를 결정했다.
- 즉시 시청, 클릭, 앱 방문 같은 단기 지표 최적화에는 효과적이지만, 다음과 같은 장기 영향을 반영하기 어려웠다.
- 반복 발송으로 인한 알림 피로도 증가
- 몇 주에 걸쳐 나타나는 참여도 하락
- 이메일·푸시 수신 거부 가능성 증가
- 지속적인 콘텐츠 시청 습관과 회원 만족도 변화
- 발송 여부와 콘텐츠 순위를 하나의 판단으로 처리했기 때문에, 회원별 주간 발송 빈도는 명시적인 정책이 아니라 일별 의사결정의 부산물이었다.
- 전체 발송량은 모델 점수 임계값으로 조절했지만, 임계값을 바꾸면 발송 빈도뿐 아니라 선택되는 메시지의 품질과 분포도 함께 변했다.
- 결과적으로 회원마다 다른 참여 패턴에 맞춰 발송 빈도와 콘텐츠 선택을 독립적으로 개인화하기 어려웠다.
느린 정책과 빠른 정책의 계층 구조
- 느린 정책(Slow Policy)
- 주간 등 일정한 긴 시간 범위에서 회원별 메시지 계획을 수립한다.
- 채널별 목표 빈도와 시간에 따른 발송 페이싱을 결정한다.
- 장기 참여 패턴과 회원의 메시지 반응을 바탕으로 전략적 결정을 내린다.
- 빠른 정책(Fast Policy)
- 실제 발송 기회가 발생할 때마다 작동한다.
- 느린 정책이 정한 빈도와 페이싱 범위 안에서 가장 관련성 높은 메시지를 선택한다.
- 특정 시점의 콘텐츠 적합성과 단기 참여 가능성을 최적화한다.
- 푸시와 이메일 빈도를 독립적으로 조합한 이산적 행동 공간을 사용하며, 약 100개 수준의 채널별 페이싱 조합을 표현할 수 있다.
장기 효용 함수와 메시지 비용
느린 정책은 회원별 효용 함수를 최대화하는 행동을 선택한다.
U(member, action) = Σ wₖ · Rewardₖ(member, action) − Cost(action)
- 긍정적 신호
- 회원이 알림을 통해 콘텐츠나 기능의 가치를 발견할 가능성
- 알림 이후의 시청, 클릭, 플랫폼 참여 가능성
- 부정적 신호
- 메시지 피로도 증가 가능성
- 특정 채널의 수신 거부 또는 이탈 가능성
- 부정적 피드백은 실제 데이터에서 매우 희소하기 때문에, 이를 모델링하는 것만으로는 충분하지 않다.
- 부정적 비용이 거의 없다고 예측되면 모델이 “가능한 한 많이 발송”하는 정책으로 치우칠 수 있다.
- 이를 방지하기 위해 모든 발송에 공통으로 적용되는 보편적 메시지 비용(universal message cost) 을 추가한다.
- 이 비용은 보상 함수를 오목하고 안정적으로 만들어 과도한 발송 정책을 억제한다.
- 비용의 크기는 온라인 실험과 오프라인 평가 지표를 함께 사용해 경험적으로 조정한다.
빈도와 시간 배분을 분리한 페이싱
- 느린 정책은 평균 발송 빈도뿐 아니라 일주일 동안 메시지를 어떻게 분산할지도 결정할 수 있다.
- 가장 단순한 방식은 균등 무작위 페이싱이다.
- 목표 빈도를 발송 기회별 확률로 변환한다.
- 각 기회마다 확률에 따라 발송 여부를 무작위로 결정한다.
- 개별 발송 시점은 달라질 수 있지만 장기적으로는 목표 발송률을 유지한다.
- 향후에는 다음과 같은 비균등 페이싱도 적용할 수 있다.
- 요일별 발송 패턴
- 회원의 최근 활동 여부에 따른 발송
- 콘텐츠 출시 시점에 맞춘 집중 발송
- 특정 이벤트나 캠페인에 맞춘 일시적 발송 증가
두 정책 간의 비동기 통신
- 느린 정책과 빠른 정책은 저지연 feature store를 통해 연결된다.
- Planner
- 회원별 최적 페이싱 계획을 계산한다.
- 계산된 전략적 의도를 feature store에 저장한다.
- Executor
- 매일 알림 발송 기회가 생기면 저장된 계획을 feature로 읽는다.
- 해당 계획을 제약 조건으로 사용해 실제 발송 여부와 메시지를 결정한다.
- 이 구조에서는 장기 계획 계산과 실시간 메시지 선택을 비동기적으로 분리할 수 있어, 각 정책이 서로 다른 시간 규모의 문제에 집중할 수 있다.
실용적인 결론
개인화 알림 시스템에서는 “무엇을 보낼 것인가”와 “얼마나 자주 보낼 것인가”를 하나의 모델에 맡기기보다 분리하는 것이 효과적이다. 장기 효용과 메시지 피로도를 반영하는 계획 계층을 먼저 만들고, 실시간 선택 계층이 그 계획 안에서 콘텐츠를 고르게 하면 단기 성과와 장기적인 회원 경험을 함께 최적화할 수 있다.
관련 글
큐레이션 요약을 이어서 읽어보세요.