About
home
About Me
home

[ifkakao]추천시스템: 개인화 콘텐츠 푸시 고도화 후기

Category
ifkakao2020
Date
2020/11/20
Writer
ngcf
안녕하세요. EdgeAI를 전공하고 있는 이민경입니다요즘 추천시스템이 재미있어서 개인적으로 공부하고 있어요. 다양한 딥러닝 관련 공부도 하면서 논문들 읽고 재구현하는 것을 좋아해요
Email: blossominkyung@gmail.com
presented by 김성진 Nick. Kakao Machine learning software engineer
카카오 추천팀에서 2019년에 진행했던 개인화 콘텐츠 푸시 고도화 프로젝트를 소개한 발표이다. 누구나 좋아할 콘텐츠를 보냈을 때의 성과와 동일한 성과를 누구나 좋아하는 콘텐츠가 없더라도 꾸준히 내고 싶다. 즉 일반 콘텐츠로도 2.4배 이상의 푸시 클릭률을 달성하고 싶다는 문제를 해결한 과정과 아이디어 및 결과에 대한 내용을 공유하고 있다. 문제를 풀기위해 푸시할 콘텐츠 선정. 유저별 선호도 예측. 발송 모수 설정 및 발송까지의 모든 푸시 과정을 머신러닝 기반 시스템으로 자동화한 프로젝트를 소개하고 있다. 이 프로젝트에서 풀고자 했던 문제와, 그 문제를 해결하기 위한 시스템을 어떻게 설계했는지에 대한 발표이다.
if(kakao)2020 발표영상 링크이다.
Index

1. 개념

개인화 컨텐츠 푸시란 무엇인가.
푸시 - 유저에게 무언가 보냈다.
콘텐츠 푸시 - 유저에게 콘텐츠를 보냈다.
개인화 콘텐츠 푸시 - 유저 개인별로 콘텐츠가 다르게 나갔다.

2. 발표 개요

푸시는 하나의 수단에 불과하다. 비지니스 문제를 풀기 위해 ML을 사용하였고 설계한 시스템을 다음앱에 적용해 본 스토리에 대해 말하고자 한다.

2.1. 문제 & 설계

구체적인 문제를 정의한 후 이를 해결하기 위한 시스템 설계를 발표한다. 따라서 자세한 알고리즘은 다루지 않는다.

2.2. 그렇다면 무얼 풀었나?

푸시라는 매개체를 통해 콘텐츠를 유저에게 보내는 상황이다.

2.3. 그런데 이걸 왜 보내는 걸까?

컨텐츠를 푸시로 보내는 경우 "유저 활성화"가 목적이다.
여기서 유저활성화란?
1.
잘 안쓰는 사람이 쓰도록 만드는 것
2.
이미 쓰는 사람이 더 많이 쓰게 만드는 것
이 중에서 오늘 할 이야기는 1. 잘 안쓰는 사람이 쓰도록 만드는 것이다. 깔아놓고 안쓰는 유저들의 경우 오직 푸시를 통해서만 접근 가능한 유저이다. 방법이 푸시밖에 없다. 그런데 푸시 자체 리스크도 매우 크다. 잘못했다가는 유저들이 알림을 끄고 심지어 앱 삭제까지도 할 수 있다.

2.4. 활성 유저 vs. 비활성 유저

활성상태라는 의미는 이번 주에 한 번 이상 앱에 들어왔다. 따라서 여기서 활성성태 유저는 주 3회 접속과 주 1회 접속한 사람이다. 반면 1주 미접속과 2주 미접속은 비활성 상태,비활성 유저에 해당된다.

2.5. 비활성 기간이 늘어나면?

다음주 접속률 패턴이 다음과 같다.
비활성 기간이 늘어날 수록 다음주 접속률이 현저히 낮아지는 것을 알 수 있다. 비활성 기간이 더 길어지기 전에 유저들을 활성상태로 들어오게 하는 것이 중요하다. 그래서 메인 목표는 비활성 유저를 활성화 시키는 것이다.

2.6. 그런데 이 사람들은 푸시를 거의 클릭하지 않는다?!

이처럼 비활성 기간 늘수록 푸시 클릭률 떨어진다.
정리하자면
이런 상황이고 이건 굉장히 자연스러운 상황이다.

2.7. 그러면 이제 어떻게 해야될까?

누구나 좋아할 콘텐츠를 보내주면 된다!
1.
빅이슈 - 남북정상회담, 대통령 선거 개표방송 등
2.
경사 - 올림픽 금메달, 월드컵 4강 진출 등
누구나 좋아할 콘텐츠는 이처럼 핫한 콘텐츠들이다.
누구나 좋아할 콘텐츠를 푸시로 보내면 일반 콘텐츠에 비해 클릭률이 "평균 2.4배 증가"한다. 또 이는 증가한 만큼 그대로 성과로 이어진다.
여기서 푸시를 보냈을 때 성과가 있었다라는 말은 주간 활성 유저 수(WAU, Weekly Active User)에 기반한다. 이때 WAU란, 일주일 동안 해당 앱을 1회 이상 접속한 사람 수이다.
누구나 좋아할 컨텐츠를 전체 유저에게 보냈을 때 WAU 변화는 다음과 같다.
WAU 자체를 많이 늘리기가 쉽지 않다. 그러나 늘어난 WAU 만큼 어느정도 활성 유저가 증가한다.

2.8. 하지만 누구나 좋아할 컨텐츠는 흔하지 않다ㅠ

희소가치가 떨어지면 빅이슈에서 멀어진다. 이처럼 누구나 좋아할 컨텐츠가 자주 생기진 않지만, 빅이슈가 없어도! 우린 매주 꾸준히 좋은 WAU 성과를 내고 싶다!!!
우리가 풀려고 하는 문제는 "누구나 좋아할 컨텐츠를 보냈을 때의 성과(WAU)를 누구나 좋아할 컨텐츠가 없더라도 꾸준히 내고 싶다." 이다.

2.8. 그렇다면 어떻게 풀었는데??

전략이 나름 있다. 다음 그림으로 설명한다.
누구나 좋아할 컨텐츠는 모두 다 좋아한다.
일반 컨텐츠는 호불호가 나뉠 수 밖에 없다.
그래서 개개인들이 좋아할 만한 컨텐츠를 제공해보자! ⇒ 개인화 전략
전략목표는 일반 콘텐츠로도 누구나 좋아할 컨텐츠를 보냈을 때와 같은 수준의 WAU 증가치 달성!
하지만 WAU를 직접 최적화하기는 어렵다. (WAU 자체를 loss를 가지고 직접 최적화하기는 어렵다.)

2.8. 클릭률 개선치(Proxy metric)

그래서! Proxy metric(대리지표)를 사용한다! WAU 직접 최적화가 어렵기 때문에 이를 대변할 수 있는 따른 메트릭을 내세워서 이를 통해 목표하던 바가 같이 커플링 되서 오른다.
실제로 Proxy metric으로 사용한 클릭률 개선치가 오른 만큼 WAU 수도 같이 증가되었다.
예를 들어 쉽게 설명해본다.
평소 푸시 클릭률이 20과 5이던 두 그룹에 컨텐츠 A를 보냈다.
이러한 결과를 얻을 수 있다. 그럼 클릭률 개선치가 어느정도면 될까?
클릭률 개선치 목표값은? ⇒ 2.4배이다.
앞서말했듯 빅이슈, 경사 등 누구나 좋아할 만한 콘텐츠로 클릭률이 2.4배 개선되는 것을 확인했다.
그렇다면 일반 콘텐츠로 클릭률 개선치 2.4배란 무엇을 의미할까? 각 유저에게 개인화해서 보내는 푸시가 그 유저한테 만큼은 빅이슈! 누구나 좋아할 컨텐츠를 보냈을 때 만큼의 임펙트를 주고 싶다.
정리하자면 전략은 개인화 전략이고, 목표치는 클릭률 개선치 2.4배 달성이다. (개인별로 받는 콘텐츠 푸시가 비록 일반 콘텐츠지만 개인에게는 빅이슈 만큼의 임팩트를 주는 콘텐츠로 선별하여 제공하는 것이 목표이다.)

2.9. 개인화 콘텐츠 푸시 발송 시스템

유저들에게 주 1회. 유저별 다른 타겟팅. 소량발송을 많이 하는 시스템으로 전과정 자동화했다.
콘텐츠 선정
자주 보낸 콘텐츠는 뉴스 콘텐츠로 라이프 사이클은 3-4시간 정도로 짧다.
콘텐츠의 본문 및 제목을 모델링하면 클릭률 예측이 가능한데 이게 너무 낮은 콘텐츠는 버렸다.
유저별 선호도 예측
각 유저가 해당 콘텐츠를 좋아할 만한 정도를 수치화해서 예측한다.
유저별로 발송량 2건의 콘텐츠를 좋아할 만한 정도를 수치화 했을 때,
이처럼 가장 선호도가 높게 나오는 유저에게 해당 콘텐츠를 보낸다.
선호도 예측 방식
1) Contents based - 푸시 자체는 컨텐츠가 만들어진 후 빨리 판단해서 전송해야한다. 그래서 컨텐츠 분석이 많이 요구된다.
Word embedding 등을 이용하여 유저가 소비한 콘텐츠를 통해 유저를 표현
보내야 하는 콘텐츠와 비슷한 성향의 유저를 선택
2) CTR prediction
과거에 유저가 클릭했던 정보를 모델링 하여, 이번에 주어진 콘텐츠를 클릭할 확률을 예측
3) Lookalike
가끔 선호가 확실한 CD 유저를 뽑을 수 있다
해당 컨텐츠에 대한 선호가 확실하게 판단되는 유저군과 유사한 유저군을 찾는 방식
발송량 설정 & 발송
Feedback loop
(처음에는 소량) 발송
유저 반응 확인(클릭률 개선치 체크)
반응 좋으면 발송량 늘려 재발송
반응 나쁘면 재발송 중단
위 과정 반복
평소 푸시 클릭률이 10인 유저 그룹을 대상으로 CTR 개선치 2.4배를 세우면 CTR이 24가 되어야 좋다.
그런데 푸시는 시즌성이 강하다. CTR을 예측하고 선호도가 굉장히 높아도 실제로 유저에게 발송했을 때 아닌 경우가 있다(오차가 크다) 따라서 한 번에 유저들에게 다 보내지 않고 랜덤 샘플링을 통해 소수의 유저에게 먼저 보내보았다.
그랬더니 CTR이 15가 나왔다. 초기 10보다 1.5배 좋아졌지만 목표 클릭률은 24이기 때문에 좋은건지 아닌지 애매하다. 더 늘려서 보내야되나 말아야되나 고민된다.
이러한 문제를 "신뢰 구간" 개념을 이용해서 해결했다.
관측한 클릭률이 15라는 것은 클릭률의 평균이 15라는 것으로 볼 수 있다.
이때 99% 신뢰 구간은 소수 샘플링한 유저군이 속하는 모수 집단의 클릭률이 해당 신뢰구간에 들어올 확률이 99%라는 의미.
목표 클릭률인 24가 신뢰군간에 속하게 된다. 그럼 발송량 늘려서 보내보자!
2배로 유저를 늘려서 보냈더니 표준편차 작아져서 신뢰구간 감소했다.
99% 신뢰구간 보다 목표 클릭률이 더 위에 있다. 그럼 해당 컨텐츠 재발송 중단!
그 외 현실적인 이슈들
비활성 유저 모델링의 어려움
선호도 예측에서 유저 모델링이 필요한데, 비활성 유저들의 경우 로그가 많지 않아서 모델링 어렵다
느린 푸시 피드백 수집 속도 vs 짧은 컨텐츠 수명

3. 개인화 추천 통해 목표 달성