Treasure Data Analytics 第9回 〜Social Gaming Analytics Vol.3: 退会ユーザーに関する分析〜

 

はじめに

前回はチュートリアルの全ステップを通過し,登録に至るまでの状況をファンネル分析で見てきました。

その後,Register (本登録)という(ゲームを通じてたった 1 回の)アクションを経て以降は,ユーザーは日々そのゲームにログインして様々なアクションを取っていきます。

しかしながら登録したその日以降,全くアクセスしなくなってしまうユーザーは実は想像以上にたくさんおり,またその後に数回アクセスしてくれたユーザーも様々な要因で日々ゲームから離れていってしまいます。そういったユーザーの「退会」というアクションに対しては,

  • どのセグメントのユーザーが退会しやすいのか
  • ユーザーの継続期間で,退会のリスクが大きくなるポイントはあるのか
  • システムメンテナンスや障害は退会というアクションに影響を与えるのか

といった様々な観点からこの分析を行い,食い止める施策を見いださねばなりません。

また,日々の登録数にも増して退会数の方が大きければ明らかにそのゲームは衰退の一途をたどっていることになりますので,そのような状況は手遅れになる前に早期の段階で検知すべきです。

特に退会したユーザー(および継続しているユーザー)から導き出される継続(生存)期間に関する分析は「生存時間分析」と呼ばれており次回で集中的に扱うことにします。

さらにユーザーが生涯にお金を払った総額(ゲームへの貢献)を踏まえ, Customer Lifetime Value を算出する(こちらは定義も算出もやや複雑で多様で一意ではありません)ような試みは現在広い分野で行われています。本シリーズでも課金というアクションが加わった時に Customer Lifetime Value について考えることにしましょう。CLV に興味のある方には少し古いですが以下の本をお薦めします。

Customer Lifetime Value (Foundations and Trends(R) in Marketing)

Customer Lifetime Value (Foundations and Trends(R) in Marketing)

 

準備

今回の解析は Register と Login というアクションログさえ取れていれば十分です。以下の様なフォーマットでアクションログが蓄積されていることを前提としています。

どちらも最低限そのイベントが起こった主体であるユーザーのID: "uid" とタイムスタンプ "timestamp" があれば十分です。さらにセグメント毎に比較する場合したい場合を想定して Register の方に「登録のきっかけ」,ここでは motivated_by キーに招待(invitation)かそれ以外(direct_access)の情報を持たせています。他にもこれらのアクションと同時に取得可能なステータスを含ませて置くと有効です。もちろん集計の際に他のアクションテーブルと JOIN する事もできます。

$ td table:tail your_app register  # register アクションテーブルへの tail コマンド
{ "motivated_by": "invitation",    "uid": "01234", "time": 1342110399 } 
{ "motivated_by": "direct_access", "uid": "56789", "time": 1342110413 }
{ "motivated_by": "direct_access", "uid": "03482", "time": 1342110417 }

$ td table:tail your_app login # login アクションテーブルへの tail コマンド
{ "uid": "01234", "time": 1342110399 } 
{ "uid": "56789", "time": 1342110413 }
{ "uid": "56789", "time": 1342110417 }

※ 今回は 2012/01/01〜2012/07/20 の期間におけるデータを生成して使用しています。

 

退会の定義

ソーシャル/オンラインゲームでは明示的な退会手続きが無かったり,そのステップを経ずに二度とアクセスしなくなってしまう事の方が多いので,この「退会」というアクションはこちら側で定義する必要があります。ゲームにもよりますが,現在を起点にして最終ログイン日が 7 〜14 日以上前のユーザーは退会したと考えるのが妥当でしょう。

ここではもう一歩進んで,その妥当な「ユーザーの退会」を定義するための材料としてユーザーがどれくらいの(日にち)間隔でゲームにアクセスしているのかを表す「ログインインターバルの分布」を見てみることにします。

ログインインターバルの分布

ユーザーごとのログインインターバルを「平均的に何日に 1 回の割合でアクセスしているのか」で定義し,以下の式で求めます:

ログインインターバル = 
    { (最終ログイン日) - (登録日) + 1} /(ログインした日数)

ログインした日数は,同じ日の複数回のログインを 1 回とカウントしています。また,1 回しかログインしていないユーザー(登録日に辞めた)は Query 0.1 では対象から外しています。

Query 0.1

f:id:doryokujin:20120722183356p:plain

図1:ログインインターバルの分布と左からの累積分布曲線。全体の80%が 7日以内のインターバルで,全体の 95% が 30日以内のインターバルでログインしています。今回のログインインターバルの分布はポワソン分布にそこまで近い形ではないですが( また x=1 で左打ち切りされています),一般にある時間間隔に到着するユーザーの分布はポワソン分布に従うといわれています。

さて,(現在辞めた人も含めて過去 2  回以上ログインしていた)ユーザーの 80% が平均的に 1 週間以内のインターバルでゲームにアクセスしていることがわかりました。ここではこの 1 週間を基準にすることにし,

ある時点から遡って1週間以内にアクセスしていないユーザーを「退会した」と定義

ことにします。

※ 本来なら平均では無く,ユーザー毎のMaxログインインターバルの分布を見る方が良いのかもしれません。今回はそのような Hive クエリがすぐに思いつきませんでした。

 

退会ユーザーに関する分析

上記の定義より退会ユーザーを特定することができまるようになりました。

まずは調査期間(2012/01/01〜2012/07/20)において,現在既に退会してしまったユーザー数を見ていくことにしましょう。ここでは 2012/07/20 を起点にし,定義に基づいてこれより過去 1 週間以内にログインしていないユーザーを退会したと見なします。

Query 0.2

Result     :
+----------+---------------+-----------+
| dead_cnt | survaival_cnt | dead_rate |
+----------+---------------+-----------+
| 51463    | 4815          | 91.4      |
+----------+---------------+-----------+

6ヶ月以内に登録したユーザーは現在では実に 90% 以上が退会してしまっている現状が見て取れます。ここでさらなる関心は,「ユーザーはどれくらいの期間で辞めてしまうのか?」等になるかもしれませんが,これは次回の「生存時間分析」によって深掘りしていくことにします。

さて,退会してしまったユーザーは現在も継続(生存)しているユーザーと比べて何が違っていたのでしょうか?「退会」というアクションに関して,ここでは以下の 4 つの視点を採用することにします。

  1. ログイン回数 [times]:生涯におけるログイン回数の退会/生存ユーザー間での比較
  2. ログインインターバル [days/times]:先ほどのログインインターバルの退会/生存ユーザー間での比較
  3. 退会日 [yyyy-MM-dd]:退会日をセグメントにした退会ユーザー数分布,および日付毎の退会/登録の比率
  4. 生存時間 [days]:登録から退会するまでの期間(生存時間)に関する分析

今回は前者 3 つを見ていきましょう。

1. ログイン回数

まずは退会/生存ユーザーの双方で生涯のログイン回数の分布を見てみましょう。ここでも同日内の複数回のログインは 1 回と見なします。このログイン回数の分布は主に両者の比較と言うよりも主に退会ユーザーに関して

  • 即日退会ユーザー:退会ユーザーでログイン回数が 1 のユーザー

が全体のどれくらいを占めるかを知る目的が大きいです。即日退会ユーザーは当日登録しただけでゲームを楽しむことなく辞めてしまったユーザーで,退会ユーザーの中でも性質が異なります。結果は以下の様になります。

この即日退会ユーザーは想像以上に多く,下の例の結果では 50% 以上が即日退会ユーザーであることがわかります。

Query 1.1

interval    dead    survival	dead_total	survival_total	rate_dead	rate_survival
1    27,843	2	51,461	4,817	54.1	0.0
2	8,742	257	51,461	4,817	17.0	5.3
3	3,771	152	51,461	4,817	7.3	3.2
4	2,144	117	51,461	4,817	4.2	2.4
5	1,288	105	51,461	4,817	2.5	2.2
...

f:id:doryokujin:20120723045440p:plain

図2:ログイン回数の分布(左)と対称エリアチャート(以降,きのこチャートと呼びます)による退会/生存ユーザーのログイン回数の比較。退会ユーザーに関しては実に 55% 近くが即日退会であることがわかります。一方,生存ユーザーに関してはログイン回数はばらついています。ログイン回数についてはプレイ期間に依存しますのでそれも考慮した分布はログインインターバルとして次に登場します。

2. ログインインターバル

先ほど紹介したログインインターバルについて,今度は退会/生存というユーザーのセグメントで分けて見てみることにしましょう。結果は以下の様になります。

ここでは生存ユーザーの 70% はほぼ毎日ログインしており,その他ほとんども 1 週間以内のインターバルを持っています。一方,退会ユーザーのインターバルに関しては相対的にそれほど短く無い傾向にあったようです。

Query 2.1

interval    dead	survival	dead_total	survival_total	rate_dead	rate_survival
1	3,068	3,189	15,834	4,655	19.4	68.5
2	2,113	555	15,834	4,655	13.3	11.9
3	1,324	217	15,834	4,655	8.4	4.7
4	1,138	128	15,834	4,655	7.2	2.7
5	976	111	15,834	4,655	6.2	2.4
...

f:id:doryokujin:20120723050851p:plain

図3:ログインインターバルの分布(左)ときのこチャート(右)による退会/生存ユーザーのログインインターバルの比較。生存ユーザーの方は 70% のユーザーが毎日ログインし,93% の生存ユーザーが 1 週間以内のインターバルを持っています。

3. 退会日

日付ごとに退会ユーザー数を見ていくことは,メンテナンスやシステムダウンがトリガーとなって退会ユーザー数が増えていないか,または退会アクションと日付にはなんらかの傾向があるのかを知る上で重要です。

さらにこれに登録ユーザー数も併せて見ていくことで,退会/登録ユーザー数の比率を同時に参照でき,これによりゲーム全体でユーザーが増加/減少傾向にあるのか,またその傾向がどれくらいの速度で進行しているのかを知ることができます。

Query 3.1

f:id:doryokujin:20120723061551p:plain

図4:日付毎に見る登録ユーザー数(左)および退会ユーザー数(右)の格子型バブルチャート。ユーザー数の多さをバブルの半径と色で同時に表現しています。登録ユーザー数に関しては,全体的に月始めに多い傾向と3月末に顕著な増加が見られます。一方,退会ユーザー数に関しては特定の2つの日付において多数のユーザーが退会しています。これがメンテナンスやダウンの日付と一致していればそれが原因とわかるが,そうで無い場合は原因の特定が必要です。

f:id:doryokujin:20120723071308p:plain

f:id:doryokujin:20120723071035p:plain

図5:月毎の登録/退会の差(上)および比率(下)のチャート。正の値はその日付に置いて登録ユーザー数が退会ユーザー数を上回っている事を示し,その程度を差(絶対的)と比率(相対的)で表しています。全体的に負の値を占める日付が多く,また上の方の図では3つの日付で大きく退会者ユーザー数が登録ユーザー数を上回っているのが簡単に見て取れます。

f:id:doryokujin:20120723071605p:plain

図6:全日付を通しての登録/退会のの遷移チャート(赤点線)。実線のチャートは 2012/01/01 の登録/退会の差の累積曲線であり,この累積曲線はスタートから徐々に下がり続け,途中一点で大きな負の累積を持つことになります。その後徐々に回復しつつも観測最終点ではトータルで 1000人を超えるのユーザー数を始点の時から失ってしまったことがわかります。

 

このように登録とログインという 2 つのアクションログが取れていれば,退会に関する様々な分析を行う事ができます。次回は生存時間分析を行っていきます。

 

今日はここまで。