トレジャーデータ(Treasure Data)ブログ

トレジャーデータ(Treasure Data)ブログです。

本サイトは移転しました。新サイトにリダイレクトします。

トレジャーデータで実践「離脱分析」〜 コホート分析と生存時間分析 〜

本記事は移転しました。新サイトにリダイレクトします。

はじめに

ほとんど全ての会員制サービスには,顧客の「入会」と「退会」という概念があります。そして退会(ここでは離脱と呼びます)における分析は,それを防止するという目的において非常に重要です。本記事ではいくつかの「離脱分析」の手法を,トレジャーデータ+スプレッドシートだけで完結でき,かつ誰もが実践できる形でご紹介します。

 

「離脱分析」必要な最低限のデータセット

初めの2回で紹介する手法においては,分析に必要なデータセットはシンプルで汎用的なものです。最低限必要な項目は「ユーザーID」「入会日時」「退会日時」この3つです。また,分析実行時にサービスを継続しているユーザーは退会日時の値は入っていないことになります。

今回は後々の分析にも備えて上記の項目以外に,もう少し多くの情報を持たせたデータ(これを raw_data と呼ぶことにします)を扱っていきます。本データでは「退会日」ではなく「最終アクセス日」を採用し,「2013-01-01」を起点としてそれ以降にアクセスの無かった会員は「退会(is_cancelld=1)」とみなすことにします。また,日付や期間は全て「期(Q=3ヶ月)単位」で扱っていきます。

※ ちなみに上記の会員の姓名や年齢は「なんちゃって個人情報」から簡単にダミー作成することが可能です。

コホート分析

コホート分析は,同じ時期に入会した会員が,時間を追うごとにどれくらい離脱しているのかをテーブルで表示するものです。入会時期によって会員をセグメント分けすることで,入会時期でその後の離脱率に違いがあるのかどうかを見ていくことができます。また離脱時期も,ある時期だけに異常に会員が離脱していれば,それが顕著にあらわれるようになっています。まずは raw_data からコホート分析に必要な集計をかけます。

この集計結果は以下のようになりますが,これをスプレッドシートにインポートし,ピボットテーブルを作り,小計を加えます。

上記のコホートシートでは,X軸に入会時期,Y軸に離脱時期を並べ,セルの値に離脱した人数を示しています。下の行にある「離脱合計」は観測起点(2013-01-01)までに離脱した総数を,「継続合計」には観測起点以後もアクセスがあった会員の総数を表しています。加入時期で会員をセグメント分けした上で継続率(継続合計/当期加入者合計)を求めています。入会時期によって,継続率も異なっていることがわかりますね。

また,離脱時期については2011〜2012年においてどの入会時期の会員も多くなっていることが見受けられます。最終列の「離脱合計」は,離脱時期ごとの合計を表しています。

継続期間テーブル

コホートシートでは,Y軸に「離脱時期」を採用しましたが,替わりに「継続期間」を採用することによって,各々の入会時期の会員がどれくらいの継続期間であるかを一覧することができます。

継続期間,例えば「1Y1Q」は会員期間が1年+3ヶ月であった事を示しています。このテーブルの最後の方の列に着目してください。入会時期によらず,継続期間ごとに会員数を集計してみると,入会から時期を経るごとに,どれ位の割合の会員が離脱していっているのかの以下のような「継続率推移チャート」を作成することができます。

 

この継続率推移チャートは,段差が大きくなっている期間が離脱が多いことを意味しています。また,離脱人数チャートを同時表示することで,どの時期にどかっと離脱したのかを見ることができます。

継続率推移チャートの「違和感」

さて,継続率推移チャートは会員の離脱状況を一目で見ることのできる便利なチャートですが,このチャートにどこか「違和感」を感じないでしょうか?

今回の分析では,分析起点を「2013-01-01」に据えています。例えば「2006-01Q」に加入した会員は,7年間という十分なレンジでこの期間の離脱数を正確に計算することができますが,逆に「2012-4Q」に加入した会員においては,分析起点まで1Q(=3ヶ月)のレンジかないために,全てのユーザーが「継続」(=離脱ゼロ)という扱いになっていまっています。もしあと数年の期間で観測できていれば,それぞれの期間で離脱していく状況になるはずですが,今回は観測を「打ち切って」しまっているためにそれが見えなくなっています。

この違和感の正体は,短期の継続期間においてはそれなりに正確に集計することができても,長期の継続期間では,離脱を観測できる会員数が(最初期に加入した会員のみ)激減してしまうために,継続率は真の値よりも遙かに「大きく」見積もられていることになります。

f:id:doryokujin:20160705145737p:plain

統計的に妥当な継続率推移チャートを得る

それでは,違和感のない継続率チャートを得るためにはどうしたら良いのでしょうか?ここに一つの提案があります。直近加入の会員が将来離脱するであろう期間を統計的に「補間」することで,長期の継続期間でも妥当な値を見積もろうというものです。

生存時間分析

これを実現するための手法が「生存時間分析」になります。

先ほどと同じデータを使って,以下のクエリを実行します:

ここで得られた結果をスプレッドシートにインポートします。今回求められたF列目「km_stat」は Kaplan_Meier(積-極限)推定量でこれは「生存関数」と呼ばれ,その期間までの生存率(継続率)を表しています。

例えば加入から3ヶ月(0Y1Q)での継続率は99.9%,3年3ヶ月(3Y1Q)での継続率は94.9%,7年1ヶ月(7Y1Q)では71.9%となっています。

最後に,生存時間分析で求められた継続率推移チャート(統計的な脈略では生存関数チャートと呼びます)は下図のようになります。先ほどの継続率推移チャートでは求められなかった,期間の長いところでの継続率が妥当に見積もられていることがわかりますね。

実社会における離脱分析の中では,生存時間分析をされているケースはあまり見たことがありませんが,それを行う有効性を感じて頂ければ幸いです。

生存時間分析はなかなかに奥の深い分析です。トレジャーデータユーザーの方で試してみたいという方がいらっしゃいましたらお声かけください!