R言語とGoogle Analytics API

こんにちは。GMO NIKKO のK.Nです。
私は業務で顧客のGoogle Analyticsを預かることが多いため、
今回はGoogle AnalyticsのAPIとその応用に関してご紹介します。
プログラミング言語は私が業務で使用しているR言語です。


Google AnalyticsのAPIに関して

Google Analyticsに関するAPIは、Core Reporting API、
Multi-Channel Funnels API、Management APIなど複数
存在しますが、今回はCore Reporting APIが対象です。

Core Reporting APIは名前の通り、データのレポート化に
関連するAPIです。Google Analyticsのカスタムレポートが
プログラミングできる、くらいのイメージで捉えていただければ
よいかと思います。

では、具体的にCore Reporting APIに関して調べてみましょう。
下記URLがAPIのリファレンスです。

https://developers.google.com/analytics/devguides/reporting/core/dimsmets

上記リファレンスを開き、「Expand all」のチェックボックスに
チェックを入れると、画面上の全ての項目が開き、まとめてコマンドを確認
することが可能です。

ご存知の通り、Google Analyticsには「指標」「ディメンション」
という概念があります。リファレンスには、「指標」が”Metrics”、
「ディメンション」が”Dimensions”と記載されています。多様な
パラメータをざっと見ていただいたところで、次はRからの
API操作を説明します。


RにおけるGoogle Analytics

R言語は統計・機械学習系のプログラミング言語として知られて
いますが、守備範囲は統計処理だけではありません。
データの下処理やビジュアライズなどの一連の処理を担うことが
可能です。

RのGoogle Analyticsパッケージはいくつか選択肢がありますが、
今回の処理は「RGoogleAnalytics」パッケージを使用します。
このパッケージは、一度Google Analyticsの認証フローを行えば
設定ファイルを保存でき、毎回のブラウザ操作が必要ありません。
多数のGoogle Analyticsアカウントを抱える広告代理店では、
この特徴が非常に活きます。

Rの公式パッケージ置き場CRANのRGoogleAnalyticsページ(2018年5月21日現在、
CRANのリンクが切れているため、アーカイブのリンクを記載します)
https://cran.r-project.org/src/contrib/Archive/RGoogleAnalytics/


簡単なデータ取得と、可視化

では、簡単なデータをAPIで取得し、データをグラフにしてみましょう。
今回はggplot2の強力なグラフ作成スクリプトを見てもらうために少々
凝ったグラフを作りましょう。某アカウントの東京都、埼玉県における
2018年3月・4月の、デバイスごとのセッション数を1日単位でプロットします。

グラフがRのIDE(RStudio)上に表示されました。
どうやら、このアカウントはPCでの利用がほとんどで、土日はアクセスが減る
様子です。Google Analyticsは手軽に条件を重ねてグラフを表示できる
素晴らしいUIなのですが、込み入ったグラフ表示にはやはりグラフライブラリが
欠かせません。


Google Analyticsの目標同士を繋げてみる

今度は応用編です。Google Analyticsの「シーケンス」と「目標」を
利用し、時間差で現れる目標間の関連性を可視化してみましょう。

馴染みのない方へ補足ですが、Google Analyticsの「目標」はサイト内の
ユーザーが起こしたイベント(とあるページまで到達するなど)をカウント
する便利な機能です。達成数を通例に倣ってCV(conversion)と呼び、
「目標」よりも事前に表示されて達成しやすい目標をMCV(micro-conversion)と
呼びましょう。サイト運営者は、MCVを起こす→CVを起こす、という流れを
想定しています。

また、「シーケンス」は行動の順序を設定したセグメントです。
具体的なコードは冗長となるため省略しますが、

########################################
・セグメントA:「とある期間(例:2018年1月1日~2018年1月15日)に
セッションが存在するユーザー」 かつ 「CVを起こしたユーザー」
・成果件数B:とある期間(例:2017年11月1日~2017年11月15日)で
MCVを起こした件数
########################################

このセグメントAと成果件数Bの組み合わせをAPIで集計します。

セグメントA × MCV
2018年1月1日~2018年1月15日 × 2017年11月01日~2017年11月15日
2018年1月1日~2018年1月15日 × 2017年11月16日~2017年11月30日
2018年1月1日~2018年1月15日 × 2017年12月01日~2017年12月15日
……(以後、組み合わせがつづく)

これは単純にループ処理中にAPIの取得を含めれば大丈夫です。
CVは今回2個ありますので、こちらもループ処理で取得しましょう。
当APIには1日あたりの上限が設けられています。上記のように組み合わせの
ループ処理を行うと上限を超える可能性もありますのでご注意ください。

API リクエストの制限と割り当て
https://developers.google.com/analytics/devguides/reporting/core/v3/limits-quotas?hl=ja

こうして取得した結果を全てマージします。さらに、気を利かせて各CVと
MCVの期間の差異を出し、その差異をX軸にとったグラフにしてみましょう。
概念がやや複雑ですが、まずこのグラフはMCVが、CV(目標番号1)、
CV(目標番号2)に対して与えた影響をプロットしています。
折れ線グラフの色は、最終的にCVが起きたタイミング(日付から半月の期間)を
示しており、グラフのY軸は過去のMCVが影響を与えたと考えられている件数を
示しています。

例えば、CV(目標番号1)の赤色の折れ線グラフは、
2018年1月1日~2018年1月15日に起きたCVに対して、
MCVが下記件数の貢献をしているということになります。

########################################
2018年01月01日~2018年01月15日( 直近 ):18件
2017年12月16日~2017年12月31日(0.5ヶ月前):23件
2017年12月01日~2017年12月15日(1.0ヶ月前):34件
########################################


このようにデータの取得を少し工夫をすることで、顧客サイトの新しい側面を
探っていきましょう。餅は餅屋、といえど顧客が気づかなかった発見があるかも
しれませんし、顧客は常識や前提に捉われてしまっているかもしれません。


まとめ

Google Analyticsはマーケターが使うツール、という印象が強いかもしれません。
しかし、エンジニアリングと組み合わせることでより一層強力なツールになり得ます。
顧客は日々Google Analyticsのデータと睨めっこしていて、ダッシュボードは
穴が開くほど見ている可能性も高いはずです。そのため、広告代理店には一歩
踏み込んだ活用が期待されます。

Core Reporting API、ちょっといじってみませんか。