이탈자 예측 모델링 후기
제가 다니고 있는 회사에서 유저이탈 에 관한 연구를 진행하면서 느끼고 있는 몇가지점을 적으려고 합니다.
시작
저희가 이탈자 예측 모델링을 하려는 이유는 되게 많았습니다.
저희가 몇년전에 이탈자 예측 모델링을 하였었고, 그 결과표들을 매일 cs 의 VIP담당자에게 보내는 업무를 하였습니다.
그래서 VIP담당자가 이탈할것같은 사람들을 보고 그 사람들을 위해서 편지를 작성한다던가, 전화를 건다던가, 선물을 보낸다거나 하는 업무를 하였었습니다. 그런데 이게 매일 반복되고 한두명이 아닌 몇십명에서 많게는 몇백명에 사람들에게 보내는 업무여서 결국 담당자가 케어할수 있는 범위를 초과하였고 이에 중단된 프로젝트였습니다.
그러나 AI 기술이 발전되고 마케팅 자동화가 발전되고있는 지금 다시할수 있는 업무라 생각하였습니다.
이에 4개월정도 이탈자 예측 모델링을 구상하였고 배포를 하여 타겟프로모션을 진행하였습니다.
생각보다 복잡한 Concept drift 문제
'Concept drift' 는 기계 학습 분야에서 사용하는 용어로써 '시간이 지남에 따라 모델링 대상의 통계적 특성이 바뀌는 현상'을 의미합니다 (https://en.wikipedia.org/wiki/Concept_drift)
concept drift 문제는 학습 데이터의 라벨링부터 모델의 평가 방법에 이르기까지 전반에 걸쳐 고려해야할 문제입니다.
예를 들어, 고객의 통계적 특성이 매우 빠르게 바뀌는 (그래서 한달 전과 오늘의 고객 패턴이 매우 다른) 서비스가 있다고 가정해 보죠. 만약 이 서비스를 위한 이탈 예측 모델을 만들 때 '고객이 한달 이상 서비스를 이용하지 않는 경우'를 이탈로 정의한다면, 이 정의에 따라 라벨링된 학습 데이터로 학습한 예측 모델은 실전에서 전혀 쓸모가 없을 것입니다. 왜냐하면 이 모델을 학습하기 위해 만드는 학습 데이터는 모델을 실전에 적용하는 시점에서 최소 한달 전 고객의 통계적 특성만 학습할 수 있기 때문입니다. 같은 이유로 인해 예측 모델을 평가할 때는 학습 데이터보다 최소한 한 달이 지난 데이터를 테스트 데이터로 사용해야 합니다. 그렇지 않고 학습 데이터와 같은 기간의 테스트 데이터로만 모델을 평가한다면 (평가 성능은 좋게 나오더라도) 실전에 적용했을 때 좋은 성능을 기대하기 어려울 것입니다.
저희 회사같은 경우 https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8485736 를 참조하여
6개월 이상 이탈한사람들의 75%인 3주로 잡았었습니다.
이렇게 예측모델을 구상하였었는데 막상 예측 모델이 처음에는 잘 맞다가 시간이 지날수록 점점 정확도가 떨어지면서 결국 유명무실해졌었습니다. 이에 저는 Concept 이 잘못되었슴에 모델링 대상이 통계적 특성에 따라가지 못했구나를 느겼습니다.
그리하여 Concept 접근에 대해서 다시 고민해보니 저희 서비스에 대규모 업데이트는 한달에 한번입니다.
그래서 한달 기준으로 다시 확률을 구상하여 보았더니 1주일 이탈한사람들의 80%가 한달도 이탈한다는 수치가 나왔었습니다.
지나친 Data imbalance 문제
저희는 조만간 이탈할 고객들을 대상으로 푸시를 날리지 이미 이탈한 고객들을 대상으로 프로모션을 진행하는걸 목표로 잡지 않았습니다. 이미 이탈한 고객들은 저희 어플을 지웠을테니까요 ㅠㅠ
그래서 저희는 현재 기동한 유저들중에서 일주일 후에 모습을 라벨링하여 예측하였습니다.
이때 그 중간에 오늘을 제외한 하루이상 기동한사람들을 대상으로 라벨링을 하였습니다.
이렇게 했을때 우리가 가졌었던 문제는 바로 Data imbalance 문제였습니다.
이렇게 했을때 우리가 가졌었던 문제는 바로 Data imbalance 문제였습니다.
기동한사람들의 98%는 비이탈자에고 2%가 이탈자일때 데이터가 불균형했었고, 이것을 해결하고자
over sampling 기술인 SMOTE 를 사용하였었습니다.
그러나 Train 뿐만 아니라 Test 데이터 셋도 불균형하기때문에 SMOTE 의 의미는 떨어졌었고,
이것을 해결하기 위해 LDA(Linear discriminant analysis)https://en.wikipedia.org/wiki/Linear_discriminant_analysis
를 사용하였습니다.
사업부 설득의 어려움.
저희가 모델을 개발하고 Bigquery를 통해 업데이트되는 방식을 사용하였었습니다. 그래서 이제 사업부에게 이게 왜 필요하고 우리가 어떻게 해야하는지 설명해야하는 시간이 왔었습니다
그래서 사업부 측에서 저희에게 요구한게 바로 왜 고객이 이탈하느냐 였습니다.
왜 이탈하는지 알아야지 이에 맞추어 보상을 한다는게 클라이언트 부서에서 한 생각이였는데, 이게 되게 어려웠습니다.
왜냐면 예측 모델링은 인과 추론 모델링과 매우 다르기 때문이죠
그래도 일단 상관관계가 무엇인지 말은 해줘야하기 때문에 model 의 feature.importance 와 sharp 를 통한 feature 간의 유의성을 보여주었습니다.
보상 설정의 어려움.
이제 타겟프로모션을 진행하여 조만간 이탈할 사람들을 잡아야 합니다.
이때 보상 종류 및 보상조건을 기획자와 협의하여야 하는데 이때 저희는 고객들의 과금별 보상조건을 달리하여 대상유저에게 지급하게끔 하였습니다.
허나 보상 종류 와 보상조건에 대해서 A/B 테스트를 진행하지 않아서 하나의 보상으로 이탈자가 보상에 영향을 주는지를 파악하려 하였습니다. 그래서 그런지 대상유저들은 보상에 영향을 안받았었고 현재 보상 종류와 보상조건을 여러개 설정하여 A/B 테스트를 진행중에 있습니다.
결론
우리가 생각했었던것보다 모델의 결과라던지 타겟 프로모션의 A/B 테스트 결과가 썩 좋지는 않았습니다. 하지만 여기서 제가 생각했었던건 연구가 실패했네 라는게 아닙니다.
우리가 아는 많은 성공한 서비스들이 처음부터 완벽한 기획과 목표를 갖고 시작하지는 않았습니다. 따라서 전 '좋은 목표 지표를 찾기 전에는 예측 모델링을 하면 안된다!' 라는 교조주의적 주장을 하려는 의도는 없습니다.
그러나 우리가 실전 서비스를 개발하는 단계 혹은 운영과정에서 우리가 놓쳤던건 없었나, 예측대상과 목표가 적절하였는가에 대한 고민이 부족하였던것 같아 아쉬울 따름입니다.