노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
1. 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기
Machine Learning 기반 고객 재방문 유도 시스템
2. 노기태 (nkt12@nexon.co.kr)
넥슨코리아
- 마비노기, 마비노기영웅전, 링토스 세계여행, 마비노기 듀얼 등
넥슨 데브켓 스튜디오의 PC 및 모바일 게임 개발에 참여.
- 넥스트플로어 분석시스템 개발 참여
김대우 (DaeWoo.Kim@microsoft.com)
마이크로소프트
- Technology Evangelist로 근무.
- NIPA의 2016 공개SW 커뮤니티 지원사업에 선정된 OSS 프로젝트의 Founder/Leader.
- 다양한 OSS 기술과 Machine Learning 기술을 연구하고 전파하는 업무 담당.
3. • Machine Learning overview
• 기본 예측 모델 생성 및 예측 수행
• 고객 이탈 방어
• 모바일 게임에서의 고객 이탈
• 이탈 예측 모델링 리서치
• 데이터 탐색
• 재방문 유도 시스템
• Azure ML Studio 모델링
• 실제 게임에 적용하기
• 적용 결과
• 이후 진행 상황
9. 추천 엔진
광고 분석
비즈니스를 위한
날씨/기후 분석
소셜 네트워크 분석
IT 인프라 및 웹
어프리케이션 최적화 문서 탐색
가격 분석
Fraud
detection
이탈 예측 분석
장비 모니터링
지역 기반 추적과
서비스
개인화된 상품 예측
제공
예측 분석을 이용한
기술은 향후 모든
산업에 필요 충분 조건
10. 개발자가 머신러닝을 다루는 패턴
IRIS Data
(뵨사마와 무관한 통계업계의 “Hello World”)
12. Advanced Analytics
Business Intelligence와의 비교
Descriptive
Analytics
Diagnostic
Analytics
Predictive
Analytics
Prescriptive
Analytics
What
happened?
Why did
it happen?
What will
happen?
How can we
make it happen?
Traditional BI Advanced Analytics
21. 고객 이탈 방어
• 데이터마이닝을 이용한 이동통신사 고객 이탈 등급 예측 모형 연구
http://share.ewha.ac.kr/content/?p=000000069639
• 신한카드, 빅데이터 분석으로 ‘고객 이탈 예측 적중률 68.4%’
http://www.ittoday.co.kr/news/articleView.html?idxno=49405
• 데이터마이닝으로 게임 이탈 예측하기
http://www.kocca.kr/knowledge/abroad/indu/__icsFiles/afieldfile/2012/11/05/PredictingCh
urnData-MiningYourGame.pdf
22. 모바일 게임에서의 고객 이탈
• 이탈 시점이 모호.
• 접근성 자체는 용이하나, 이탈의 허들은 낮음.
• 경쟁상품이 엄청나게 많음.
퀄리티 높은 수준의 이탈 예측 모델을 만들기가
쉽지 않을 거라 예상 .
23. 이탈 예측 모델링 리서치
좋은 이탈 예측의 조건 = 최대한 빨리, 최대한 확실하게 이탈 판단.
1. 시점
어느 시점을 기준으로 하여 이탈을 계산할지 판단.
모바일 게임에서의 완전한 이탈을 30일간 접속이 없는 유저라고 가정할 경우
그 전 N일 동안 접속이 없는 유저가 이탈할 확률이 높을지 결정.
가장 중요한 포인트.
특정 일자를 기준으로 7일 이전에 접속한 유저 중
이후 7일 동안 접속기록이 없는 유저를 이탈 유저로 가정.
24. 이탈 예측 모델링 리서치
2. 유저
하루 동안 접속하는 유저는 가입 일을 기준으로도
- 오늘 가입한 유저
- 어제 가입한 유저
- 일주일 전 가입한 유저 …
등 다양한 그룹으로 이루어져 있으며, 이를 판단하는 기준이 있어야 한다.
한 번에 모든 유저를 기준으로 넣을 수도 있겠지만, 이럴 경우 모델링이 복잡해져
퀄리티가 떨어진다.
가입 후 24시간 내에 이탈한 신규 유저.
3~4일 단위로 접속하다 이탈한 라이트 유저.
거의 매일 접속하다 이탈한 헤비 유저.
25. 이탈 예측 모델링 리서치
3. 입력 정보
이탈의 원인이라고 생각되는 정보들, 즉 모델링에 입력할
파라미터를 정한다.
보유 재화, 마지막 진행 스테이지, 랭크, 국가,
누적 플레이 일수, 아레나 정보 등등.
4. 알고리즘
모델링에 사용할 알고리즘을 선택한다.
Classification Algorithms (분류 알고리즘)
26. 데이터 탐색
• 이탈 예측 모델의 기준을 러프하게 정하고,
마비노기 듀얼 세부 데이터 탐색 진행.
• 세부 데이터 탐색을 진행해 보니, 접속 및 이탈 패턴이 예상보다
훨씬 복잡하여 정확한 이탈 기준을 잡기가 상당히 애매 했음.
• 1일차의 이탈률이 엄청 높으며, 복귀 또한 생각보다 장벽이 높지 않아
7일 기준으로 이탈을 잡기에는 무리가 있다고 판단.
27. 재방문 유도 시스템
• 생각을 약간 다르게 생각해서, 이탈을 방지한다기보다는
접속을 유도해 본다고 발상 전환. (그게 그거지만..)
• 데이터를 살펴보니 평균적으로 신규 유저의 70%, 기존 유저의 35%
정도가 오늘 접속 후 내일 접속하지 않는다.
• N일을 기준으로 N+1 일에 접속할 또는 이탈할 확률을 구하는
예측 모델을 개발하기로 정함.
28. Azure ML Studio 모델링
웹사이트에서 손쉽게 사용가능
https://studio.azureml.net/
29. Azure ML Studio 모델링
1. Import Data
ML 교육자료 입력 : 최근 30일간 유저 접속 데이터
30. Azure ML Studio 모델링
2. Select Columns in Dataset
학습에 사용할 컬럼 지정
다음날접속여부, 접속일보유골드, 접속일보유보석, 가입후접속일까지접속일수, 접속일까지구매횟수,
접속일까지구매금액, 접속일까지부스터개봉횟수, 접속일까지PVE횟수, 접속일까지PVP횟수, 국가,
가입일부터접속일까지일수, 접속당일골드입수, 접속당일골드사용, 접속당일보석입수, 접속당일보석사용,
접속당일로그인횟수, 접속당일PVE승리횟수, 접속당일PVE패배횟수, 접속당일PVP승리,
접속당일PVP패배, 접속당일개인상점거래, 접속당일미션, 접속당일스토리, 접속일일자, 접속일요일,
최근로그인일자
31. Azure ML Studio 모델링
3. Split Data
학습 데이터를 8:2로 나눠서, 80%는 학습을 시키고 나머지 20%는
검증에 사용
32. Azure ML Studio 모델링
4. Select Machine Learning Algorithm
교육에 사용될 알고리즘을 선택한다.
선택한 알고리즘은 Two-Class Boosted Decision Tree.
(https://msdn.microsoft.com/library/en-us/Dn906025.aspx )
33. Azure ML Studio 모델링
5. Train Model
예측할 컬럼을 지정하고, 데이터를 학습한다.
예측 컬럼은 nextdayConnect
34. Azure ML Studio 모델링
6. Score Model
학습 시킨 데이터를 수치화 시킨다. (확률화)
35. Azure ML Studio 모델링
7. Evaluate Model
80%로 학습시킨 모델링의 결과가 정확한지 나머지 20%의 데이터로 검증한다.
36. Azure ML Studio Web Service
• Web Service
만들어진 모델링을 Web Api로 배포.
Azure ML 의 가장 큰 장점.
37. 실제 게임에 적용하기
• 지금까지 Azure ML 과 마비노기 듀얼 접속 데이터를 활용하여,
유저 재방문 유도 시스템 모델링을 진행하였고, 이를 활용하여 실제 게임에 적용.
38. 실제 게임에 적용하기
1. 매일 새벽 전일 로그인 유저를 추출하여 Azure ML Model 의
이탈 예측에 사용되는 데이터를 계산하여 데이터 셋을 만든다.
39. 실제 게임에 적용하기
2. 추출된 데이터로 Azure Web Service에 연결, Azure ML Model에 질의하여,
이탈 여부와 확률을 계산 및 기록한다. (C#, Python, R 등 사용)
40. 실제 게임에 적용하기
3. GameDB 에 해당 데이터를 입력한다.
ScroedLabels : 이탈 여부. 0 : 이탈 / 1 : 접속
ScoredProbabilities : 접속 확률 점수. 0~0.49 까지는 이탈, 0.5 ~ 1 까지는 접속으로 판단된다.
sendReward : 보상 지급 여부. 초깃값은 null이며 지급 여부에 따라 1/0 입력.
rewardType : 보상 종류. 골드/카드/젬 등 타입을 약속한 후. 약속된 숫자 값을 입력.
41. 실제 게임에 적용하기
4. GameDB에 입력된 값을 기준으로 GameServer에서 보상을 지급한다.
보상 종류 및 보상조건은 기획자와 협의한다.
대략적으로 이탈 확률이 높으며, 접속 확률도 아리까리한 ScoredProbabilities 값이
0.2 ~ 0.7 정도의 유저에게 지급하는 것이 좋겠다고 판단.
보상을 지급하면서 앞에서 정의한 테이블의 sendReward , rewardType 값을 입력한다.
보상 종류는 10~15 개 정도로 정하고, 보상 종류별로 완전 랜덤하게, 대상 유저에게 지급한다.
(이후 보상 상품별로 클러스터링 하여 재 접속 효과가 높은 아이템 추출)
42. 실제 게임에 적용하기
5. 보상 지급된 유저를 대상으로 보상을 알리는 푸시를 적절한 시각에 발송한다.
43. 적용 결과
• 시스템 적용 초기 전월/전일 대비 최대 10% 내외 정도의 DAU 상승효과.
이후, 평균 4% 정도의 DAU 상승효과가 발생.
• 하지만, 마비노기 듀얼의 경우 푸시 발송을 자주 하지 않았고, 특별한 선물을
배포한 적이 많지 않아, 재방문 유도 시스템 때문이라고 단정 지을 순 없음.
44. 이후 진행 상황
- 랜덤으로 지급한 상품의 선호도를 기반으로 클러스터링 진행.
(최초 13개의 상품을 랜덤으로 지급)
- 여러 기준으로 클러스터링을 진행해 본 결과, ScoredProbabilities를
기준으로 했을 때 가장 이상적인 시뮬레이션 결과가 나옴.
- ScoredProbabilities 기준으로 상품 선호도를 조사하여,
약 4개의 구간으로 나누고, 각각 선호도가 높은 2개의 상품 중 한 개를
랜덤으로 지급하도록 로직 변경.
45. 이후 진행 상황
- 재방문 유도 시스템을 데이터 분석 전문가에게 컨설팅을 받았고.
종속적 구조의 변수들을 수정하여, 중/단기 지표를 투입하면 더 나은 실제적
접속 예측이 가능하다는 피드백을 받았음.
- 교육 데이터 중 누적 수치값을 최근 15일 치 수치값으로 변경.
46. 이후 진행 상황
- 여러 전문가로부터 피드백을 받아 재방문 유도 시스템을 수정 보완하고 있음.
- 그 외 카드 추천 시스템, 채팅 AI 봇 시스템 등을 Azure ML 을 사용하여 개발 중.