HOW TO TD(User Engagement)Treasure Data User Engagement

Treasure Data Analytics 第8回 〜Social Gaming Analytics Vol.2: チュートリアルにおけるファンネル分析〜

ホーム » Treasure Data Analytics 第8回 〜Social Gaming Analytics Vol.2: チュートリアルにおけるファンネル分析〜

この記事は最終更新から3年以上が経過しています。最新情報は担当のカスタマーサクセスにご確認ください。

図1:チュートリアルのアクションを表現したファンネルグラフ。入口である step=1 には 8 人の user が流入したのにもかかわらず途中でどんどん離脱していき,出口である step=10 に達した user は user3 のみであることを表しています。また,チュートリアルの出口まで達した user はゲームへの本登録:register が完了したことになります。

今回は図1 のようなチュートリアルアクションに関する分析を行います。前回の続きですのでまだの方は先に前回の記事を読んでおいて下さい。

チュートリアルにはユーザー名登録,アバター選択などいくつものステップを経て登録というコンバージョンに至ります。今回は全 30 のステップを用意し,チュートリアルに入ったユーザーは順番にステップを進んでいくものを想定しています。またチュートリアルを終えた人が本登録: “register” を行う想定となっています。

もちろん入口に入った全てのユーザーが出口まで行ってくれるわけでは無く,途中でどんどん離脱していってしまいます。故にチュートリアルアクションの解析において重要なのは「どのステップが離脱ポイントとなっているか」という部分にあります。ここでは離脱ポイントを見るための解析・可視化手段を併せてファンネル分析と呼ぶことにします。

ファンネル分析を行うにあたって,今回想定されている tutorial ログのフォーマットの一例を以下に記述しておきます。これを行うための fluent_logger や Heroku Addon の説明は第6回を参照してください。

$ td table:tail your_app tutorial
{ 'motivated_by': 'invitation',    'step':  9, 'uid': '01234', 'time': 1342110399 }
{ 'motivated_by': 'direct_access', 'step': 11, 'uid': '56789', 'time': 1342110413 }
{ 'motivated_by': 'direct_access', 'step': 12, 'uid': '56789', 'time': 1342110417 }

このアクションログは “step” という順序を持ったステータスを持ち,ユーザーは必ず入口:step=1 から入り,出口:step=30 に向かって進んでいきます。

また,”motivated_by” はチュートリアルの入口にやってきた動機を表すステータス値で,セグメントとして使用するステータスの例として使用しています。2 種類の値をもち, “invitation” は他ユーザーからのアプリインバイトによってチュートリアルにやってきたユーザー,”direct_access” は他の紹介なしに直接チュートリアルにやってきたユーザーを意味します。

まずはファンネル分析の対象となるアクションのクラスを定義しておきます。これは図1 を言葉で説明した程度の単純なものです。

定義

—–

以下の条件を満たすアクションを「ファンネル分析可能である」と定義する:

  1. “step” などの順序を持ったステータス(順序ステータスと呼ぶ)を持つ。
  2. 明示的な「入口」と「出口」が存在し,アクションは必ず入口から出口へ,順序に従って進行する。
  3. 全てのユーザーはアクションの進行途中で離脱する事ができる。つまり順序ステータス値の増加に伴ってユーザー数(アクセス数)は減少(正しくは単調非増加)する性質を持つ。

—–

ファンネル分析可能なアクションの例は,

  • 「イベント」:途中のいくつかの課題(ステップ)を乗り越えながらゴールへの到達を目指す各イベントのステップ毎の到達ユーザー数についてファンネル分析
  • 「会員登録」: (1) メールアドレス登録→ (2) 住所登録→ (3) クレジット登録→ (4) 登録完了ページへのコンバージョン の各アクセス数についてファンネル分析

など,いくらでも挙げることができます。

ファンネル分析(全ユーザーに対して)

それでは早速上記の Tutorial アクションログに対して step 毎に集計する Hive クエリを書きましょう。いつものようにサンプルクエリへの gist link を貼っておきます。

Query 1.1

step uu prev_uu rate_from_enter rate_from_prev normed_rate_from_prev
1        33,695        33,695        100.00        100.00        0.00
2        32,894        33,695        97.62        97.62        2.44
3        32,375        32,894        96.08        98.42        1.60
4        31,168        32,375        92.50        96.27        3.87
5        27,836        31,168        82.61        89.31        11.97
6        25,335        27,836        75.19        91.02        9.87
7        24,448        25,335        72.56        96.50        3.63
8        23,629        24,448        70.13        96.65        3.47
9        22,819        23,629        67.72        96.57        3.55
10        22,094        22,819        65.57        96.82        3.28
11        21,823        22,094        64.77        98.77        1.24
12        21,388        21,823        63.48        98.01        2.03
13        21,163        21,388        62.81        98.95        1.06
14        20,978        21,163        62.26        99.13        0.88
15        20,817        20,978        61.78        99.23        0.77
16        20,371        20,817        60.46        97.86        2.19
17        11,279        20,371        33.47        55.37        80.62
18        9,147        11,279        27.15        81.10        23.31
19        8,581        9,147        25.47        93.82        6.59
20        8,327        8,581        24.71        97.04        3.05
21        7,706        8,327        22.87        92.53        8.07
22        7,458        7,706        22.13        96.78        3.32
23        6,698        7,458        19.88        89.82        11.34
24        6,472        6,698        19.21        96.62        3.49
25        6,153        6,472        18.26        95.06        5.19
26        5,972        6,153        17.72        97.06        3.03
27        4,272        5,972        12.68        71.53        39.79
28        4,110        4,272        12.20        96.20        3.95
29        3,923        4,110        11.64        95.47        4.75
30        3,653        3,923        10.84        93.12        7.39
図2:チュートリアルの step ごとの到達ユニークユーザー数をはじめとした集計テーブル。

Query1.1 から得られる図1のテーブルには次のカラムが含まれています:

  • step: チュートリアルステップ(1,2…,30 までの順序を持つ)
  • uu: ユニークユーザー数
  • uu_prev: 前ステップでのユニークユーザー数
  • rate_from_enter: 入口(step=1) の uu と比較して,どれくらいの割合のユーザーが生存しているか
  • rate_from_prev: 前ステップ の uu と比較して,どれくらいの割合のユーザーが生存しているか
  • normed_rate_from_prev: 前ステップからの離脱人数を prev_uu で割った値(割合)。この値が高ければ高いほど,前ステップからの離脱が激しいといえる

定義の1つであった,uu は順序ステータスである step 数の増加と共に減少している(厳密には増加しない:単調比減少)性質が,結果テーブルより確認することができます。

ここで,uu は絶対的な値であるのに対し,最後 3 つの rate は相対的な値です。ファンネル分析に関して絶対的な値を用いるのか相対的な値を用いるのかに関しては概ね以下の様に分類できます。

  • 絶対的な値:先月と今月のチュートリアル比較のように uu の値自身も併せて比較しなければならない場合
  • 相対的な値:セグメント毎のチュートリア比較のように uu の値自身は比較対象にならず,離脱状況の相違に興味がある場合

今回紹介する2種のファンネル分析(全体,セグメント別)はともに後者の相対的な値:割合を参照しています。その理由は生存時間分析で用いられる生存曲線とハザード比曲線を模倣して使用しているからです。

早速上記の結果テーブルを可視化してみましょう。

図3:チュートリアルの step を順に並べ,各ステップ生存率を(片側)バーチャートで表したもの。早期 step 4->5, 5->6 で入口 uu の 5% 以上の減少が起こり,中期 step 16->17 で 15% 近い減少が確認できます。また後期 step 26->27 においても顕著な減少が見られます。顕著な減少の原因となっているこれらの step においてはその理由と改善のための解析・アクションを続いて行う必要があります。

図4:図3 のバーチャートを両側に表示したもの。「ファンネル」は元々「じょうご」という意味ですが,この両側バーチャートが必ず下に向かってしぼんでいく形になることからその名前がついています。じょうごの形をより意識すると右のFusion Chart ライブラリのファンネル図のようになります。

さて上記の(片側 or 両側)バーチャートの他にもこのファンネル分析可能なクラスの結果の特徴を良く表現する図を紹介します。これらはセグメントで分けた結果を比較する場合に非常に強力な手段となります。

図5:各step において,step=1 の uu を 100 とした場合の割合をプロットし線でつないだ図。入口からの「生存率」を表すこのグラフは生存時間解析の脈略で「生存曲線」と呼ばれており,図5 はそれを模倣したものです。step 16->17 の段差が大きく,この時点で多くが離脱していること,またこの時点で入口の 50% 以上の人が離脱してしまったことが把握しやすくなっています。

図6:今度は 1 つ前の step と比較しての離脱率を元にした図を描いてみます。図6 はその step に至る前に離脱した人数を前 step の uu で割った値をプロットした図です。図5 で段差が大きかった step ほどこの値が大きくなり,注目すべき離脱ポイントであることがわかります。このように離脱ポイントが山の高さで特定できる意味でこの図は有用です。これも生存時間解析の脈略では「ハザード比(直前まで離脱せずに生存していたユーザーが,続く瞬間に離脱する確率)」に基づくプロットを(確率では無いですが)模倣してみたものです。

ファンネル分析(各セグメントに対して)

次は「入口への流入動機」を表すステータス:”motivated_by” の値をセグメントにしたファンネルを見ていくことにしましょう。今回の例では,チュートリアルの参加が,他ユーザーからインバイトされた場合とそうでない場合では,離脱状況・離脱ポイントに違いがあるのかを確認することを目標にします。

Query 1.2

motivated_by    step        uu        prev_uu        rate_from_enter        rate_from_prev        normed_rate_from_prev
direct_access        1        20,098        20,098        100.0        100.0        0.0
direct_access        2        20,040        20,098        99.7        99.7        0.3
direct_access        3        19,698        20,040        98.0        98.3        1.7
direct_access        4        19,385        19,698        96.5        98.4        1.6
direct_access        5        16,113        19,385        80.2        83.1        20.3
direct_access        6        14,332        16,113        71.3        88.9        12.4
direct_access        7        13,814        14,332        68.7        96.4        3.7
direct_access        8        13,601        13,814        67.7        98.5        1.6
direct_access        9        13,345        13,601        66.4        98.1        1.9
direct_access        10        13,172        13,345        65.5        98.7        1.3
direct_access        11        13,117        13,172        65.3        99.6        0.4
direct_access        12        12,933        13,117        64.3        98.6        1.4
direct_access        13        12,755        12,933        63.5        98.6        1.4
direct_access        14        12,612        12,755        62.8        98.9        1.1
direct_access        15        12,533        12,612        62.4        99.4        0.6
direct_access        16        12,419        12,533        61.8        99.1        0.9
direct_access        17        6,113        12,419        30.4        49.2        103.2
direct_access        18        4,332        6,113        21.6        70.9        41.1
direct_access        19        3,814        4,332        19.0        88.0        13.6
direct_access        20        3,601        3,814        17.9        94.4        5.9
direct_access        21        3,345        3,601        16.6        92.9        7.7
direct_access        22        3,172        3,345        15.8        94.8        5.5
direct_access        23        3,117        3,172        15.5        98.3        1.8
direct_access        24        2,933        3,117        14.6        94.1        6.3
direct_access        25        2,755        2,933        13.7        93.9        6.5
direct_access        26        2,612        2,755        13.0        94.8        5.5
direct_access        27        1,233        2,612        6.1        47.2        111.8
direct_access        28        1,219        1,233        6.1        98.9        1.1
direct_access        29        1,200        1,219        6.0        98.4        1.6
direct_access        30        1,172        1,200        5.8        97.7        2.4

図7:チュートリアルの {“motivated_by”: “direct_access”} ユーザーにおける,step ごとの到達ユニークユーザー数をはじめとした集計テーブル。

motivated_by    step    uu    prev_uu        rate_from_enter        rate_from_prev        normed_rate_from_prev
invitation        1        13,597        13,597        100.0        100.0        0.0
invitation        2        12,854        13,597        94.5        94.5        5.8
invitation        3        12,677        12,854        93.2        98.6        1.4
invitation        4        11,783        12,677        86.7        92.9        7.6
invitation        5        11,723        11,783        86.2        99.5        0.5
invitation        6        11,003        11,723        80.9        93.9        6.5
invitation        7        10,634        11,003        78.2        96.6        3.5
invitation        8        10,028        10,634        73.8        94.3        6.0
invitation        9        9,474        10,028        69.7        94.5        5.8
invitation        10        8,922        9,474        65.6        94.2        6.2
invitation        11        8,706        8,922        64.0        97.6        2.5
invitation        12        8,455        8,706        62.2        97.1        3.0
invitation        13        8,408        8,455        61.8        99.4        0.6
invitation        14        8,366        8,408        61.5        99.5        0.5
invitation        15        8,284        8,366        60.9        99.0        1.0
invitation        16        7,952        8,284        58.5        96.0        4.2
invitation        17        5,166        7,952        38.0        65.0        53.9
invitation        18        4,815        5,166        35.4        93.2        7.3
invitation        19        4,767        4,815        35.1        99.0        1.0
invitation        20        4,726        4,767        34.8        99.1        0.9
invitation        21        4,361        4,726        32.1        92.3        8.4
invitation        22        4,286        4,361        31.5        98.3        1.7
invitation        23        3,581        4,286        26.3        83.6        19.7
invitation        24        3,539        3,581        26.0        98.8        1.2
invitation        25        3,398        3,539        25.0        96.0        4.2
invitation        26        3,360        3,398        24.7        98.9        1.1
invitation        27        3,039        3,360        22.4        90.4        10.6
invitation        28        2,891        3,039        21.3        95.1        5.1
invitation        29        2,723        2,891        20.0        94.2        6.1
invitation        30        2,481        2,723        18.2        91.1        9.8

図8:チュートリアルの {“motivated_by”: “invitation”} ユーザーにおける,step ごとの到達ユニークユーザー数をはじめとした集計テーブル。

図9:実は2 つ以上のファンネルを比較したい場合,図9 のようなメジャーなファンネル図では区別が行いにくいのです。どちらも必ず尻すぼみのじょうごの形となっているので,両者の差の程度が読み取りにくくなっているからです。

図10:そこでチュートリアルにおける擬生存曲線を見てみましょう。2つのセグメントの離脱状況の違いがより鮮明に浮かび上がってきます。例えば,step 16->17 への落差が invitation ユーザーの方が小さく,またその後の生存割合の減少具合も daily_access より小さくて最終的に本登録する(入口からの)割合は大きな違いがある,という事がすぐにわかります。

図11: さらにチュートリアルにおける擬ハザード比曲線を使って離脱インパクトの大きかった step をセグメントごとに確認してみましょう。direct_access の方が step 16->17 の離脱インパクトが大きく,また,step 26->27 においては invitation ユーザーには見られない大きな山がみられます。確かにこの時点では direct_access ユーザーの半数近くがここで離脱してしまっているという大きな離脱ポイントとなっていますが,invitation ではポイントにはなっていません。図6 によってユーザー全体でのファンネル分析でも確認できたこの離脱ポイントは,実は direct_accessユーザーのみによって引き起こされたものであったことがここで判明しました。

最後に

チュートリアルにおけるファンネル分析は他にも週や月といった時間をセグメントに比較するのも有効です。その際には前述した通り各月でのチュートリアル参加人数,離脱人数といった絶対値での比較が可能となります。そういう意味では下のような出発点が揃わない曲線図も加える事ができます。

図12: 絶対値である UU を元に月別の離脱状況を比較するための曲線。今までの生存曲線とは違って初期値 step=1 が異なっている。2012-06 におけるユーザーは 2012-07 のそれより入口にやってユーザー数が多いのにもかかわらず,出口では 2012-07 のユーザー数より少なく,途中でより激しく離脱していることがわかる。

さらにこの解析を進めるためには,各 step におけるユーザーの平均滞在時間を見るのが有効です。チュートリアルのログには各 step,各ユーザーのタイムスタンプがとれているので,ユーザー毎に隣接する step 間でのタイムスタンプの差分をとって集計すれば平均滞在時間がわかります。基本的にチュートリアルはさくさく進むべきものであるものなので,意図せず他より滞在時間の長い step はやや問題があるのかもしれません。次はそいういった部分を掘り下げていくのが良いでしょう。

UserEngagement事務局

ユーザーの皆さまへのお知らせや、Treasure Data UserEngagementのサイト運営を担当する事務局アカウント。 記事にコメントをいただけると中の人が喜びます。
Back to top button