프로필사진

Odyssey Logbook

[Early project] 리니지 게임 활동 데이터 기반 고객 이탈 예측 모형

다각 2020. 3. 2. 20:26

이 글은 2019년 빅콘테스트에서 챔피언리그의 과제로 제시된
'게임 활동 데이터를 활용한 게임유저 잔존가치를 고려한 고객 이탈 예측 모형"' 개발에 관한 기록입니다.


목차

  1. 고객 이탈 예측 모형
  2. 이탈 예측 모형이 갖춰야 하는 덕목
  3. 문제 정의
  4. 프로젝트에 사용한 모델
  5. 향후 보완점

1. 고객 이탈 예측 모형이란

고객의 이탈 분석에는 두 가지의 방향이 있다. 첫째는 인과 분석이고, 둘째는 예측 분석이다.

 

  • 인과 분석은 이탈 고객의 분석을 통해 원인을 파악하여 그 원인을 제거하는 것이 목적이다. 하지만 데이터는 고객 행동의 결론만을 보여줄 뿐, 정확한 인과는 파악하기는 힘들다. 관측 데이터로는 고객 이탈의 '징후'만 잡아낼 수 있을 뿐이다.
  • 예측 분석이란, 이탈 징후를 보이는 고객을 사전에 알아내는 것이다. 이탈 징후를 보이는 고객에게 적절한 마케팅을 해서 잔존을 유도하는 것이 그 목적이다.

위와 같은 이유로, 데이터를 다루는 사람으로서 예측 분석을 수행한다.

 

2. 이탈 예측 모형이 갖춰야 하는 덕목

    (출처: 단비블로그, 실전 이탈 예측 모델링을 위한 세 가지 고려 사항)

  1. Concept drift를 고려할 것
    : Concept drift란, 기계학습 분야에서 사용하는 용어로, '시간의 지남에 따라 모델링 대상의 통계적 특성이 바뀌는 현상'을 의미한다. 처음에는 잘 맞다가 시간이 지날수록 점점 정확도가 떨어지는 것이다. 즉, 우리의 목적은 '시간의 흐름에 강건한 모델'임을 알 수 있다. 또한, 시간에 따라 대상이 특성이 변하는 것을 모니터링하여, 그 변화를 반영하거나 주기적으로 모델을 재학습하는 작업이 필요하다. 게임에서는 게임 자체의 업데이트뿐만 아니라 캐릭터의 레벨업에 따른 행동 양상의 변화도 있기 때문에 concept drift를 고려해야 한다.
  2. 기대이익을 최대화할 것
    : 고객 이탈 예측 모형을 사용하는 사람들의 최종적인 목적은 '돈을 잘 벌기 위함'에 있다. 즉, 이익을 최대화시키는 게 목적이라는 얘기다. 이것은 '정확하게 예측'하는 것과 조금 다른 맥락이다. 프로모션 비용 대비 기대이익이 큰 고객에게 집중하면 예측 정확도는 낮아질 것이다. 기대이익 작은 고객에 대한 예측은 잘 하지 못하기 때문이다. 하지만 기대이익이 작은 고객에게 들어가는 프로모션 비용을 고려한다면, 기대이익이 큰 고객에 한해서 정확도를 높이는 게 좋다.

 

3. 문제 정의

위에서 논했던 결론을 따라 이탈 예측 모델을 세운다고 할 때, 다음의 사항이 고려되어야 한다.

  1. 무엇을 '이탈'로 정의할 것인가
    : 프로젝트에서는 과거 28일의 활동 데이터로 이후 70일 간의 잔존 예측을 한다. 7일동안 미접속한 유저를 이탈한 유저로 상정한다.
  2. 무엇을 '기대이익'으로 정의할 것인가
    : 예상매출과 잔존시기를 동시에 고려한 식을 주최측에서 제공해주었다. 과적합을 막기 위해 일정 기준이 넘어가면 '비용'으로 계산하고 점수를 깎는다.

 

4. 프로젝트에 사용한 모델

랜덤포레스트와 RNN, LSTM 모델을 사용했다.

  1. 랜덤포레스트
    : 대표적인 분류 모델로, 생존/이탈 이진분류를 시행했다. 시간에 따른 분포 정보를 담도록 데이터를 재가공해 시간의 흐름을 담았고, 그 결과 63%에서 74%로 정확도를 끌어올렸다. (참고 논문: A Time Series Forest for Classification and Feature Extraction)
  2. RNN
    : 시계열 데이터를 다루는 대표적인 모델로, 생존/이탈 이진분류 시에 63%의 정확도를 보였다.
  3. LSTM
    : 시간의 흐름에 강건한 모델로, 생존/이탈 이진분류 시에 74%의 정확도를 보였다.

 

5. 향후 보완점

머신러닝/ 딥러닝 관련해서 수행했던 첫 프로젝트였고, 그만큼 많은 아쉬움이 남는 과제였다. 3가지 정도의 보완점이 눈에 띈다.

  1. 정확도가 아닌 이익의 최대화로 목적을 잡을 것
    : 예상매출과 잔존시기를 동시에 고려한 '기대이익'에 관한 식이 제공되었다. 즉, 예측해야 할 대상이 예상매출과 잔존시기 두 개였는데, 당시 이것을 놓치고 정확도의 향상에 신경을 썼다. 매출 예측 모델과 잔존시기 예측 모델 두 개를 앙상블하여 기대이익을 최대화하도록 모델을 수정해야 한다.
  2. 시스템의 시간의 흐름뿐 아니라 이용자의 시간의 흐름도 고려할 것
    : 이번 과제는 업데이트와 변화가 잦은 '게임'에서 나온 데이터였기 때문에 '시스템'의 시간의 흐름에 초점을 맞춰서 모델을 설계했다. 하지만 이용자의 잔존 일수에 따른 행동 패턴의 변화도 분명히 존재한다. (심지어 다른 업계에서는 시스템의 변화보다 이용자의 패턴 변화가 더 활발할 것이다) 게임에는 '레벨' 시스템이 존재한다. 이것을 이용하여, 같은 레벨의 이용자끼리는 같은 time step에 있다고 전제하고 모델을 학습시켰어도 재밌는 결과가 나올 것 같다.
  3. 특성 추출
    : raw한 데이터에서 뽑을 수 있는 유의미한 특성이 많았다. 한 예시로, 게임 접속 로그를 이용하여 이용자가 어느 시간대에 게임에 접속하는 지를 추출해 학습에 활용하자는 제안을 했었다. 데이터 추출까지는 성공했으나, 당시 지식의 부족으로 categorical한 데이터를 어떻게 feature에 넣어 학습시키는 지를 몰랐고, 이 특성은 제외된 채로 모델 학습이 이루어졌다. 또한, 메모리의 부족으로 더 많은 데이터를 포함시키지 못하기도 했다.

 

정리

첫 프로젝트였던 만큼 실수도 많았고, 그 실수로부터 배울 것도 많은 프로젝트였다. 첫 프로젝트를 실패로 마무리하며, 감사하게도 다음 두 가지의 중요한 사실을 깨달을 수 있었다.

 

  1. 문제 정의의 중요성
    : 보완점 세 가지 사항에서 알 수 있는 결론은 결국 문제 정의가 똑바로 안 되었다는 것이다. 데이터 탐색 이전에 제일 첫 번째로 수행되어야 할 것은 문제 정의임을 잊지 말자. (학습 초기이고 첫 프로젝트라서 문제를 보는 시각이 좁았던 면도 있다)
  2. 시각화의 중요성
    : 데이터를 파악하고 다룰 때, 시각화만큼 강력한 설득 도구는 없다. 과제의 결과와 흐름을 보는 사람들은 코드가 아닌 도표와 그래프를 본다.

이 두가지는 앞으로도 계속 기억해야 할 사항이다.