エンジニア学生
Wantedly データ分析100本ノック
Wantedly, Inc.
ウォンテッドリーでは、「シゴトでココロオドル人の数」の最大化を目指して開発を行なっています。
その上で、このWantedly Visitでは、「MAU」「応募」「売上」を大きな三つの指標としてサービスを運営しています。
サービスによって、分析指標は異なりますが、今回いくつかのデータ分析の基本パターンについて説明したいと思います。
ベンチャーキャピタリストである、デイブ・マクルーアが成功するビジネスの構築に必要な「5つの要素」の頭文字からその名前をつけたものです。
具体的には、獲得・アクティベーション・定着・収益・紹介です。
Wantedlyでは初期からこれらの指標をKPIとして定め、開発を行ってきました。これらのAARRRを監視するために必要な分析のパターンを今回ご紹介します。また、特に定着はその中でも最重要でサービスの成長の鍵になります。
DAU = Daily Active User, WAU = Weekly Active User, MAU = Monthly Active Userの略です。毎日どれだけのユーザをきているかを見ていける指標で、Webサービスの基本になります。ログインしたユーザだけでカウントするのか、セッションでカウントするのかの二通りがあります。
SELECT
COUNT(DISTINCT user)
FROM
`logs20170519`
一人当たりのユーザのアクセス回数です。一人当たりのユーザのPVをみることもあれば、一人当たり週に何回訪れたかなど日ごとにみる場合もあります。
SELECT
L.cnt,
COUNT(*)
FROM
(
SELECT
COUNT(*) AS cnt,
user
FROM
`logs201705*`
GROUP BY
user
) L
GROUP BY
L.cnt
ORDER BY
L.cnt
アクセスしてからどのくらいのユーザが返ってくきているかを見ます。
ユーザ全てを見て、アクセスした最後の日にちから、返ってきているユーザの分布をみます。
直近1ヶ月アクセスしたユーザがどのくらい返ってきているかの分布はこのように出します。
SELECT
L.day, COUNT(*)
FROM
(
SELECT
user,
DATE_DIFF(CURRENT_DATE(), DATE(MAX(time), '+9'), DAY) AS day
FROM
`log201705*`
GROUP BY
user
) L
GROUP BY
L.day
ORDER BY
L.day
リテンションと似ていますが、週ごとの継続率や、月ごとの継続率など様々な角度でみます。また、継続しているユーザの継続率や、新規ユーザの継続率、課金しているユーザの課金の継続率などなんでも継続率で分解することはよく行います。
SELECT
COUNT(L1.user), COUNT(L2.user), COUNT(L2.user) / COUNT(L1.user)
FROM
(
SELECT
DISTINCT user
FROM
`log201703*`
) L1
LEFT JOIN
(
SELECT
DISTINCT user
FROM
`log201704*`
) L2 ON L1.user = L2.user
登録したが、1ヶ月以上使っていないが、再度戻ってきて利用を始める割合になります。離脱している人全体から割合を出したり、先々月使っていたユーザがどれだけ戻ってきているかなどでも見ることもあります。
社内では、再アクティベーションのことをリザレクションと呼んでいます。1ヶ月間ユーザが使わなくなるとチャーン(churn)、使わなくなったユーザが戻ることをリザレクション(resurrection)、チャーンを減らすことをチャーンリダクション(churn reduction)と言います。
SELECT
SUM(CASE WHEN L2.user IS NULL THEN 1 ELSE 0 END) AS churn,
SUM(CASE WHEN L2.user IS NULL AND L3.user IS NOT NULL THEN 1 ELSE 0 END) AS resurrection,
SUM(CASE WHEN L2.user IS NULL AND L3.user IS NOT NULL THEN 1 ELSE 0 END)/SUM(CASE WHEN L2.user IS NULL THEN 1 ELSE 0 END) AS resurrection_rate
FROM
(
SELECT
DISTINCT user
FROM
`log201703*`
) L1
LEFT JOIN
(
SELECT
DISTINCT user
FROM
`log201704*`
) L2 ON L1.user = L2.user
LEFT JOIN
(
SELECT
DISTINCT user
FROM
`log201705*`
) L3 ON L1.user = L3.user
ウォンテッドリーでいうとコンバージョンは応募になります。どのような経路で応募に至ったのか知ることは重要になります。
サービスによっては購入だったり、申し込みだったり変わるかも知れません。また、登録ユーザの流入経路などもよくみる指標です。
SELECT
referrer, count(*) AS cnt
FROM
(
SELECT
user,
path,
FIRST_VALUE(referrer) OVER (PARTITION BY user, DATE(time, '+9') ORDER BY time ASC) AS referrer
FROM
`log201705*`
) L
WHERE
path = "apply" AND method = "POST"
GROUP BY
referrer
ORDER BY
cnt DESC
利用しているユーザのうちどれだけのユーザが拡散を行っているかを測る指標になります。
流入数 = 拡散数 * 拡散からの流入数となるので、ソーシャル経由の流入数を今回は出してみましょう。バイラル率=ソーシャル経由の流入数/DAUとすることもできるかもしれません。
SELECT
DATE(time, '+9') AS date,
COUNT(*)
FROM
`log201705*`
WHERE
referrer like '%facebook.com/%'
GROUP BY
date
ORDER BY
date
※ サンプルコードは、BigQueryのLogのテーブルに、user (INTEGER), time (TIMESTAMP), referrer, path, methodのデータが入っていることを想定しています。
いかかがでしょうか?
このような分析は、Webサービスでよく行われる分析です。また、実際には、これらの指標に異変がある、もっと伸ばしたい時には、より詳しく基本の指標の変化を知る必要があります。
例えば、MAUは細かく分解しています。具体的には、ある機能ごとのMAUや、MAUがどのように構成されているか(新規なのか、継続なのか、過去のユーザが戻ってきたのか)、キャンペーンの実施日とその日に流入したユーザの継続率などをみることで、ユーザの行動の理解に役立てています。
5/25に第一回データ分析100本ノックを開催します!今回お話したデータ分析の基礎を固めるコースです。今年入社の新卒向けに行いましたが、好評だったので、外部に公開することにしました。
月に10億件ほどのログデータがあり、それらをBigQueryを通じて実際に叩くことができます。Wantedlyのエンジニアは、「ユーザ体験を数字で判断する」ということを普段から行なっており、全員がデータ分析のスキルを持っています。そのノウハウをぜひ体験してみませんか?
興味ある方はぜひご参加ください。(第二回や社会人向けもありますので、日程合わない方も応募お願いします。)