HOME
home
일하는 방식
home
📠

[데이터 분석] 비지도 기계학습을 이용한 게임 사용자 성향 분석

데이터 분석의 목적과 과정

엔스테이지는 많은 게임을 운영하는 것에 비해 비교적 적은 인력으로 구성되어 있는데요, 이런 상황에서 효율적으로 수익을 내기 위해서는 빠르고 정확한 데이터 분석이 필수적으로 요구됩니다. 이 포스팅에서는 빠르고 정확한 데이터 분석을 위해 사용자의 이용 성향을 기계학습을 통해 자동으로 분류하고 그 결과를 해석하고 개선을 위한 제안을 하는 일련의 과정에 대해서 설명합니다. 분석 대상으로는 엔스테이지에서 운영하고 있는 수많은 게임 중 비교적 규모가 작은 모바일 퍼즐 게임인 슈가랜드를 선정하였고, 해당 게임 사용자에 대해 기계학습을 이용하여 사용자를 분류하고 그 분류 결과에 대한 분석을 진행하였습니다.
데이터를 분석한다는 것 자체로는 별다른 가치가 없습니다. 데이터 분석의 가치는 분석 결과를 통해 새로운 인사이트를 도출하고 그 인사이트가 실제로 서비스의 개선으로 이어져서 새로운 가치가 생겨나는 것에서 나오는 것이죠. 그렇기 때문에 데이터 분석은 항상 이러한 변화를 이끌어낼 수 있는 결론을 포함해야 합니다. 게임 데이터 분석에 이를 적용한다면 게임 서비스에 대한 개선 사항이나 기획에 대한 제안이 뒤따라야 한다는 이야기입니다.
게임 데이터 분석의 전체 과정을 나열하자면 다음의 과정을 생각해 볼 수 있습니다:
분석 주제 선정 및 분석 방법 결정
분석에 필요한 지표 선정
분석에 필요한 지표를 만들어 낼 수 있는 데이터 수집 계획 수립
게임 서비스에서 관련 데이터 수집
수집된 데이터를 적절히 가공하여 분석에 필요한 지표를 생성
생성된 지표를 기반으로 데이터 분석 진행
데이터 분석 결과에 따른 서비스 개선안 도출
개선된 게임 서비스로부터 동일 지표를 다시 수집하여 변화를 확인
이 포스팅에서는 가장 마지막에 있는 변화 확인 부분을 제외한 나머지 부분을 다룹니다.

분석 주제 선정 및 분석 방법 결정

여기서는 어떠한 주제로 게임 데이터를 분석할지를 결정합니다. 저는 슈가랜드 게임의 사용자들을 게임 이용 성향에 따라 분류하고, 각 사용자 그룹의 특성을 파악하여 수익을 증대시킬 수 있는 방법이 있는지를 알아보고자 합니다.
이를 위해 사용자의 서비스 사용 패턴을 자동으로 분류하는 방법으로 비지도 기계학습 알고리즘 중 하나인 K-means를 이용합니다.
비지도 기계학습은 사전에 정답이 알려지지 않은 상태에서 주어진 데이터의 특성만을 활용해 데이터를 그룹화하거나 데이터 사이의 관계를 파악하는 방법입니다.
K-means 알고리즘은 K개의 대표값을 통해 그 대표값 주변의 데이터 포인트를 그룹화하는 기계학습 알고리즘입니다.
현재 이 분석 방법은 초기 단계로, 개별 사용자의 세부적인 행동에 기반한 분석아 아니며 개괄적인 서비스 사용 실적을 기반으로 하기 때문에 개별 사용자의 특성을 반영하는 것은 아닙니다.
여기서는 14일간의 게임 이용 데이터를 기반으로 분석을 진행하기로 합니다.

분석에 필요한 지표 선정

게임 이용 성향에 따라 사용자를 분류하기로 했으니, 게임 이용 성향을 표현할 수 있는 지표를 선정해야 합니다. 여러 가지 지표가 있습니다만, 여기서는 가장 기본적인 지표들을 선정합니다. 해당되는 지표의 예를 들면 아래와 같습니다:
게임 실행 빈도 (흔히 리텐션이라고 말합니다)
일간 세션 수
일간 레벨 플레이 수
총 결제 시도 횟수 및 결제 완료 횟수
사용자의 레벨 진행도 (현재 플레이 가능한 최대 레벨)
보상광고 기능 사용 빈도
게임 재화 사용량

분석에 필요한 지표를 만들어 낼 수 있는 데이터 수집 계획 수립

이전 단계에서 선정한 지표를 생성하기 위해 실제로 필요한 기초 데이터 세트를 결정하는 단계입니다. 엔스테이지는 앱에서 발생하는 사용자 행동 데이터를 빠르게 수집할 수 있는 시스템을 갖추고 있기 때문에, 특정 사용자 행동에 대한 데이터를 수집하여 그 데이터를 집계하는 것으로 지표들을 생성하기로 합니다. 예를 들면 다음과 같은 상황에서 사용자 행동을 기록할 수 있습니다:
앱 최초 실행 (서비스 가입)
게임 세션 시작 (앱 실행시마다)
레벨 플레이 시작
보상광고 기능 사용
게임 재화 사용
더욱 고도화된 분석을 하려면, 위의 기초적인 데이터 뿐만 아니라 각 게임의 기획 의도와 관련된 데이터를 추가로 수집하는 것이 좋습니다. 다만, 사용자가 직접 발생시킬 수 있는 데이터만을 수집할 수 있습니다. (예를 들어, "사용자 이탈" 이라는 행동은 사용자가 명시적으로 서비스를 탈퇴하지 않는 이상 직접 수집할 수 있는 행동 데이터가 아닙니다)
이 과정에서, 개인정보보호 관련 법령 등에 문제되는 부분은 없는지 꼭 확인해야 합니다.

게임 서비스에서 관련 데이터 수집

데이터 수집 계획이 수립되면, 이 계획을 바탕으로 게임 서비스에서 데이터를 수집합니다. 위에서 언급한 대로, 엔스테이지의 데이터 수집 시스템을 통해 게임 코드의 해당되는 부분에서 한두줄의 코드를 넣는 것으로 데이터 수집 기능이 구현되며, 이렇게 변경된 클라이언트를 각 플랫폼별 앱 스토어를 통해 배포하여 실제 데이터를 수집합니다. 단, 클라이언트를 배포하기 전에, 반드시 분석가가 의도한 대로 데이터가 수집되는지 확인해야 합니다. (분석의 기초가 되는 데이터에 문제가 있으면 분석 전체에 문제가 생기기 때문입니다)

수집된 데이터를 적절히 가공하여 분석에 필요한 지표를 생성

수집도니 데이터가 적재된 데이터 웨어하우스로부터 데이터를 조회 및 가공하여 사전에 계획된 분석용 지표를 생성합니다. 엔스테이지는 데이터 웨어하우스로 Google BigQuery를 사용하기 때문에 큰 어려움 없이 SQL을 사용하여 데이터를 조회하고 가공할 수 있었습니다. 필요하다면 다른 도구의 도움을 받아도 됩니다.
Google BigQuery는 Google Cloud Platform의 빅데이터 제품 중 하나로, 대규모의 데이터를 저장하고 SQL을 통해 분석할 수 있는 제품입니다.
필요하다면 이 데이터 가공 과정에서 직접적인 행동만으로 얻어지지 않는 간접적인 행동 데이터를 만들어 낼 수도 있습니다.

생성된 지표를 기반으로 데이터 분석 진행

이제 실제로 분석을 진행할 차례입니다. 앞에서 결정한 대로, 비지도 기게학습 방식 중 하나인 K-means 알고리즘을 이용하여 사용자들을 자동으로 여러 개의 그룹으로 분류합니다. 비자도 기계학습 방식을 사용하는 이유는 사전에 설정된 분류 기준이 존재하는 것이 아니기 때문이며 만약 사전에 설정된 분류 기준이 존재하거나 이미 한 번 수동으로 분류한 내용이 있다면 지도형 기계학습 방식을 사용할 수 있습니다.
K-means 알고리즘을 사용하는 방법은 여러 가지가 있습니다만, 엔스테이지에서는 두 가지 방법을 시도했습니다.
BigQuery ML 을 이용하는 방법:
코드를 몰라도 SQL만으로 기계학습 모델을 만들고 사용할 수 있습니다.
대규모 데이터를 자동으로 병렬처리하기 때문에 데이터가 많아져도 비교적 빠른 속도가 보장됩니다.
데이터 규모가 작아도 초기화 시간이 필요하다는 단점이 있습니다.
Python의 scikit-learn 라이브러리를 이용하는 방법:
Python과 기본적인 기계학습에 대한 개념을 알고 있어야만 사용이 가능합니다.
대규모 데이터를 병렬처리할 방법을 별도로 궁리해야 하는 대신, 별도의 초기화 과정이 없기 때문에 작은 데이터를 처리하는 데에는 효율적입니다.
데이터 및 모델에 대한 완전한 컨트롤이 가능합니다.
여러 번의 실험 결과 현재 분석에 사용되는 데이터의 크기로는 BigQuery ML보다 scikit-learn의 수행 속도가 더 빠르기 때문에 이번 분석에서는 scikit-learn을 이용하기로 합니다.
정답이 없는 비지도 기계학습의 특성상, 여러 가지 설정으로 여러 번의 학습을 진행하고 가장 좋다고 판단되는 결과를 선택해야 하는데, 여기서는 결과 집단별로 특성이 가장 잘 드러나도록 분류를 해 내는 모델을 선택하였습니다. 참고할 사항으로는 K-means 알고리즘은 초기값 설정에 따라서 분류 결과가 달라질 수 있기 대문에 충분한 양의 시도를 해 보는 것이 필요합니다.
이렇게 분류된 사용자 집단의 대표값(centroid)들의 지표 값을 통해 해당 집단의 특성을 분석가가 판단하고, 각 집단의 게임 사용량 정보를 집게합니다. 이를 위해 실제 게임 사용 지표와 연계된 분석을 위해 게임 매출 정보나 사용자별 레벨 진행도 지표 등의 추가 자료를 함께 준비해야 합니다.

데이터 분석 결과 - 사용자 그룹별 특징 분석

클러스터 이름은 분석가가 임의로 붙이는 이름입니다.
Search
cluster_name
users
max_level
time_spent
plays_per_day
sessions_per_day
payments
frequency
rv_per_play
playable_days
interstitial_ads_per_day
payment_initiates
plays_per_session
spins_per_day
booster_per_play
oom_per_play
coin_spent_per_oom
rv_per_oom
coins_spent_per_day
133
139.2406
3744.247
8.425891
1.419372
0.421053
0.30528
0.141309
13.40602
4.65977
0.511278
6.383718
0.941635
0.145785
0.391839
6.312858
0.00188
9.966982
545
611.046
18829.71
13.18262
2.399391
0.003676
0.590033
0.801484
13.95404
10.60451
0.193015
5.729953
0.950107
0.04722
1.067169
0.144786
0.384971
1.765461
967
628.485
120044.2
67.61505
5.288571
0.058031
0.748084
0.049794
12.70984
40.24328
1.058031
24.26136
0.95002
0.014647
0.685343
0.048192
0.039042
2.555753
1165
52.95279
31.01569
2.654381
1.177542
0
0.122216
0.012357
12.29528
1.268953
0.042918
2.15585
0.038678
0.034368
0.108912
0.015231
0.000613
0.129657
1464
36.36817
1482.085
14.73237
1.73007
0.004781
0.515888
0.019894
5.382514
7.415667
0.115437
8.96729
0.959
0.042497
0.051127
0.064608
1.37E-05
0.577543
3280
387.5875
37229.43
18.88229
2.494442
0.028092
0.634198
0.039641
13.79725
11.55652
0.372519
9.061387
0.926797
0.027246
0.668521
0.12379
0.020252
1.5795
5075
100.7669
1054.302
6.271344
1.331376
0.001574
0.178029
0.048643
13.51053
3.281042
0.062561
4.82108
0.964222
0.063148
0.270147
0.096681
0.000885
0.849516
SUM12663
Heavy Payers (0.3%) - 무슨 수를 써서라도 함께 하고 싶은 적극적인 결제 사용자 그룹
다른 집단에 비해 월등히 높은 결제 시도 및 완료 횟수, 매우 적극적인 플레이 성향
Light Payers (1.1%) - 일종의 '찍먹형' 결제 사용자 그룹
다른 집단에 비해 비교적 높은 결제 시도 및 완료 횟수를 보이지만, 게임을 적극적으로 픒레이하지는 않는 그룹
RV Watchers (4.3%) - 보상광고 시청자 그룹
결제는 하기 싫지만, 게임이 막히는 것은 인정할 수가 없는 타입
게임 중 무브 소진 상황을 적극적으로 보상광고를 통해 해결함
그렇다고 게임을 특별히 많이 하는 것은 아닌 것이 중요
분석 당시 레벨 300 이상에서만 무브 소진 상황에서 보상광고를 볼 수 있는 관계로, 비교적 고레벨 사용자로 구성된 그룹
Non-Paying Pushers (7.6%) - 적극적인 무과금(또는 저과금) 사용자 그룹
결제도 하기 싫고, 보상광고도 봐 줄 생각이 없지만 게임은 계속 하고 싶은 사용자
게임을 매우 적극적으로 플레이하는 사용자층으로, 대표 레벨이 가장 높은 그룹
레벨 실패 상황에서 보상 광고의 도움을 받기보다는 재시도를 선택
사용자당 일간 플레이 횟수가 가장 많으며 이로 인해 중간광고(전면광고) 노출 횟수가 가장 많은 그룹
슈가랜드의 중간광고 노출량은 레벨 플레이 횟수에 정비례하는 경향이 있습니다.
Dormant Players (9.2%) - 게임에 대한 흥미가 거의 떨어진 사용자 그룹
결제가 일어나지 않으며, 일간 보너스 재화에도 관심이 없는 사용자
게임에 거의 돌아오지 않는데다가 게임을 실행해도 거의 플레이로 이어지지 않는 사용자 그룹
멀지 않은 시일 내에 이탈할 것으로 예상되는 사용자
New Players (11.6%) - 게임에 유입된 지 며칠 되지 않은 신규 사용자 그룹
Mid Level 또는 Low Level 사용자층으로 분화되기 이전의 상태
Mid-Level Players (25.9%) - 게임을 비교적 안정적으로 플레이하고 있는 것으로 추정되는 사용자 그룹
비교적 양호한 재방문율과 일간 플레이 횟수
Low-Level Players (40.1%) - 게임에 크게 흥미를 느끼지 못하는 것으로 추정되는 사용자 그룹
휴면 유저에 가까운 낮은 재방문율을 보이는 것이 위험요소

데이터 분석 결과 - 사용자 그룹별 매출 기여도

Search
Player Group
Group Revenue Ratio
Users
ARPU Rate (14d)
23.8%
34
7923.2%
7.4%
545
154.2%
4.1%
133
348.7%
2.5%
1464
19.1%
위의 표는 각 그룹의 전체 매출에 대한 기여도와 Mid-Level Players 그룹의 사용자당 가치를 100%로 가정했을 때의 각 그룹의 사용자당 상대적 가치를 나타내는 표입니다. 위의 표에 따르면, 대부분의 매출은 다음의 세 개 사용자 그룹에서 발생합니다:
Heavy Payers
Non-Paying Pushers
Mid-Level Players
다만, 사용자당 가치가 높은 순서는 다음과 같습니다:
Heavy Payers
Light Payers
Non-Paying Pushers
플레이 횟수가 많아 중간광고 노출 수가 많고, 이것이 광고 매출과 직결됩니다.
RV Watchers
현재 보상광고와 중간광고의 RPM이 비슷한 상황이기 때문에 이런 결과가 나왔으며, 보상광고의 RPM이 중간광고의 RPM보다 높을 경우 사용자 가치가 증대될 수 있습니다.
기본적으로 광고매출이 인앱구매 매출의 효과만큼을 내지는 못하지만, 인앱구매를 하는 사용자보다 광고를 통해 수익에 기여하는 사용자가 훨씬 많기 때문에 이러한 수익 구조를 보입니다. 또한 현재 슈가랜드의 광고매출 구조는 중간광고가 절대 다수를 차지하는 구조이기 때문에 플레이 횟수(사실은 그와 비례하는 중간광고 노출 수)가 중요 지표로 부각됩니다.

데이터 분석 결과 - 사용자 레벨별 플레이어 구성비 분석

Search
Title
New Players
Low-Level Players
Mid-Level Players
Dormant Players
RV Watchers
Non-Paying Pushers
Light Payers
Heavy Payers
Total
1311
3107
131
988
6
72
65
0
5680
142
1173
775
73
1
122
41
7
2334
8
494
738
48
4
110
17
7
1426
2
201
572
30
178
125
6
5
1119
0
52
249
6
83
48
1
3
442
1
16
184
3
65
55
2
1
327
0
16
184
4
52
62
0
2
320
0
6
156
2
40
58
0
2
264
0
6
70
4
23
41
0
2
146
0
2
63
2
20
45
0
1
133
0
1
32
1
5
39
0
1
79
0
0
29
0
22
32
0
0
83
0
1
31
0
11
36
1
1
81
0
0
27
0
13
40
0
0
80
0
0
11
1
7
25
0
0
44
0
0
12
0
5
32
0
1
50
0
0
16
3
10
25
0
1
55
슈가랜드 사용자 그룹 및 레벨 구간별 구성비 (절대값)
슈가랜드 사용자 그룹 및 레벨 구간별 구성비 (레벨 구간별 구성비율)
전체적으로 400레벨 이후 사용자가 급감하고, 후반 레벨에는 사용자가 소수의 사용자만이 남아 있는 모양새입니다.
100레벨대에서 사용자가 급감하는 것은 게임 초기에 이탈하는 사용자가 많기 떄문이며, 이는 캐주얼 퍼즐 게임의 일반적인 사용자 흐름입니다.
고레벨로 이동할수록 적극적인 사용자층인 RV Watchers 및 Non-Paying Pusher 그룹의 구성비가 높아집니다. 다른 표현으로는, 다른 그룹의 사용자는 고레벨까지 남아 있지 않는다는 뜻이기도 합니다.
1600레벨을 달성하고 휴면 상태에 들어간 사용자가 소수 보이는 것은 경계할 필요가 있습니다.

데이터 분석 결과에 따른 서비스 개선안 도출

데이터 분석에서 가장 중요한 과정은 분석 결과로 인사이트를 얻고 그것을 실제 서비스에 적용하는 과정입니다. 게임 분석가는 이번 데이터 분석의 결과로 어떻게 하면 서비스를 개선할 수 있을지 고민해야 하고, 게임 분석가가 전문적인 게임 기획자는 아니지만 최소한 기획자가 실제로 서비스에 적용할 기획을 내기 위해 영감을 받을 수 있을법한 내용을 제시해야 합니다.

Low-Level Players 그룹의 사용 지표 개선

가장 큰 상승폭을 보일 여지가 있는 부분은 Low-Level Players 그룹의 사용 지표 개선으로, 사용자 비율이 가장 높습니다.
재방문율 및 방문당 플레이 지표가 Mid-Level Players 그룹 수준으로 개선될 경우 전체 매출이 30% 이상 상승할 수 있는 여지가 있습니다. (물론 그렇게 만드는 게 쉬운 일은 아닙니다)
재방문율 개선을 위한 푸시 알림 기능을 구현하는 것을 제안할 수 있습니다.
방문시 플레이 수를 늘리기 위한 시간 한정 보너스 기능을 추가하는 것을 제안할 수 있습니다.
예를 들어, 세션 시작 후 2~3 레벨 플레이가 지난 후에 20분 정도의 짧은 시간 한정 보너스 기능을 제시하여 세션당 플레이 수를 늘리는 방법을 생각할 수 있습니다.

게임오버 보상 광고 개선

현재 300레벨 이후에만 발생하는 게임오버 보상 광고의 레벨 제한을 대폭 낮출 것을 제안할 수 있습니다.
잠재적인 RV Watchers 그룹이 늘어날 수 있습니다.

RV Watchers 그룹의 게임 플레이 유인

보상광고를 적극적으로 이용하는 RV Watchers 그룹의 세션당 플레이 수를 늘리기 위해 해당 그룹에 대해 플레이 유인책을 제시할 필요가 있습니다. 예를 들면, 15분간 전면광고를 면제해주는 보상광고를 생각할 수 있습니다.
RV Watchers 그룹의 플레이당 보상광고 시청량 대표값이 0.8이며, 이는 해당 그룹의 플레이당 전면광고 노출율과 비슷한 수준입니다.
이 상황에서 플레이 수가 증가하면 전면광고가 노출되지 않더라도 해당 그룹의 광고매출 발생이 증가할 것으로 기대됩니다.
400~499 레벨대의 사용자가 급격하게 사용자가 줄어든 원인에 대한 추가 분석을 진행할 필요가 있습니다.
이번 포스팅에서는 슈가랜드 사례를 통해 데이터 분석의 거의 모든 과정이 어떻게 진행되는지를 알아보았습니다. 게임 서비스에서 데이터 분석은 게임 운영의 성패를 좌우할 수 있는 중요한 업무이며, 엔스테이지처럼 게임 운영을 전문으로 하는 회사에서는 그 중요성이 더더욱 부각되는 업무입니다. 이러한 데이터 분석의 효과를 높이기 위해 엔스테이지에서는 데이터 분석 방법의 다각화와 자동화 등 여러 가지 방법을 시도하고 있으며, 운영 중인 수많은 게임에 적용하여 퍼블리싱되는 게임들이 더 많은 사용자에게 더 좋은 모습으로 다가갈 수 있도록 노력하고 있습니다.
엔스테이지에서는 이런 멋진 여정을 함께하실 크루를 찾고 있습니다. 관심있으신 분은 아래의 채용공고를 참고해 주세요!