荷物持ちでも構わない

文系大学4年生からデータサイエンティストを目指して頑張りつつ、書きたいことを書きたいときに書きたいだけ書く、ルール無用雑記ブログ。

MENU

RでGoogleAnalyticsのAPIを使って重回帰分析でCVRを予測してみた

先日、グーグルアナリティクスとRを使ってコンバージョン率(CVR)の高い見込み顧客を発掘する重回帰モデルを作ろうとした結果、グーグルアナリティクスの仕様上それが不可能だと知って断念した、という記事を書いた。

今回は、グーグルアナリティクスのAPIから直接データを収集するという前回とは違う方法でそのリベンジに挑戦してみたので、その方法を記録しておく。

カスタムレポートじゃ物足りない!生のデータで分析がしたい!」という人におすすめの方法である。

前回のあらすじ:グーグルアナリティクスとRで重回帰分析がしたかった

以前同じことに挑戦して断念した話はその過去記事を読んでほしいが、結局何がしたかったのかというと、

コンバージョン率(CVR)を従属変数として、独立変数に、年齢や性別、デバイスカテゴリといったユーザー属性と、流入チャネルやページ/セッション、滞在時間などの行動データを使うことで、

コンバージョンに結びつきやすいのは一体どんな人で、どんなタイミングで、どこから来てどのように行動する人なのか、というのが知りたかったのである。

それでもしコンバージョン率の高い条件がわかれば、その条件を満たすように施策を打つことでコンバージョン率を上げられるのではないか、と考えたのだ。

しかし、グーグルアナリティクスで収集できるデータは、ユーザー属性に関するデータと、行動履歴データはグーグルアナリティクス内部での取得の方法が異なるらしく、これらを串刺しにしたデータを取得することは不可能らしい。

そこで代案として考えたのが、グーグルアナリティクスのユーザーエクスプローラレポートからウェブスクレイピングの技術を使ってデータを収集する方法で、

ユーザーの年齢・性別まではわからないが、これならユーザーの行動データをより詳細に集めることができる。

問題は僕にウェブスクレイピングの技術がないことで、この方法は実質不可能だった。

ここまでが前回の記事でのお話。

RでグーグルアナリティクスのAPIを叩いて直接生データを取得する

その後いろいろ調べてみた結果、RにはグーグルアナリティクスのAPIを利用するためのパッケージが開発されており、これを使えばグーグルアナリティクスに蓄積されたユーザーの行動データを直接取得できることがわかった(ユーザー属性は結局取得できなかったが)。

ということで、RでグーグルアナリティクスのAPIを使って生データを取得するところから、重回帰モデルを作成するまでの一連の流れを解説する。

(参考サイト:RでGoogleAnalyticsからデータを呼び出す方法。と簡単な分析。 | 分析のおはなし。

1.RGoogleAnalyticsパッケージを導入する

RでグーグルアナリティクスのAPIを使うために必要なパッケージである、「RGoogleAnalytics」を最初に導入する。

本来ならinstall.packages()関数を使うところなのだが、なぜかこのパッケージはこの関数からでは導入できないので、配布サイトから直接ダウンロードする。

f:id:messyer813:20180826151222p:plain

上のリンクからRGoogleAnalyticsの配布サイトを開き、左のメニュー欄から「Downloads」をクリックする。

 

f:id:messyer813:20180826151334p:plain

するとバージョンごとのリンクの一覧が出てくるので、最新版(と言っても2013年のものだが)のver.1.4をダウンロードする。

Windowsの場合、上から2番目のzipファイルをダウンロードし、Rのパッケージが入っているフォルダに直接インストールしよう。

2.RGoogleAnalyticsと関連パッケージをRで読み込む

上記の手順でRGoogleAnalyticsパッケージが導入できていれば、Rのlibrary()関数で呼び出せるはずなので、Rを起動して読み込む。

このときついでに、同時に必要になる「RCurl」と「rjson」パッケージも読み込んでおく。

これらのパッケージがインストールできていない人は、同時にインストールする。

library(RGoogleAnalytics)
library(RCurl)
library(rjson)

3.Rでグーグルアナリティクスのデータを取得するため認証を行う

必要なパッケージを読み込んだら、以下の関数を実行する。

まず、QueryBuilder()関数でグーグルアナリティクスのデータを取得するための箱を作る。

そして、QueryBuilder()関数に含まれる関数であるquery$authorize()関数でグーグルアナリティクスの認証を行う。

query <- QueryBuilder()
access_token <- query$authorize()

f:id:messyer813:20180826152928p:plain

query$authorize()関数を実行すると自動的にブラウザが開き認証を求められるので、「Allow」をクリックして認証する。

 

f:id:messyer813:20180826153308p:plain

認証ができたら、アクセストークンを得るため、「Exchange authorization for tokens」ボタンをクリックする。

Authorization code自体は、ここでは必要ないので気にしなくても大丈夫。

 

f:id:messyer813:20180826153728p:plain

「Exchange authorization for tokens」をクリックすると、「Access token」が表示されるので、これを全てコピーする。

ブラウザでの作業が必要なのはここまで。

ここからはRに戻る。

 

> access_token <- query$authorize()
The GA data extraction process required access token. To accept the accesstoken from Oauth 2.0 Playground, you need to follow certain steps in your browser.
This access token will be valid untill an hour only.

Steps to be followed :
1. Authorize your Google Analytics account by providing email and password.
2. On left side of the scrren click on the button 'Exchange authorization code for tokens' to generate the access token.
3. Copy the generated access token and paste it here.Paste the access token here :=>

Rに戻ると、コンソールに上記の英文が表示されているはずなので、先ほどコピーしたアクセストークンをコンソールにペーストする。

これで、グーグルアナリティクスの認証は完了。

以降、Rでグーグルアナリティクスのデータが直接取得できるようになる。

4.Rで取得するグーグルアナリティクスのビューを確認する

参考サイトに従い、以下のコードを実行する。

ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)
ga.profiles

すると、認証したグーグルアナリティクスアカウントで設定してあるビューの一覧が表示される。

f:id:messyer813:20180826155415p:plain

例えば僕の場合はこう。

このブログで使っているグーグルアナリティクスのアカウントを認証しているのだが、「3 Raw Data View」「1 Master View」「2 Test View」の3つは予めグーグルに用意されたデモアカウントで、このブログのアクセス解析データが入っているのは「すべてのウェブサイトのデータ」ビューだ。

番号で言うと4に当たる。この番号は後で使うので覚えておく。

5.グーグルアナリティクスのデータを取得するための条件を指示する

長くなったが、ようやくここからが本番。

Rを使ってグーグルアナリティクスのデータを取得するために、条件を指示する。

query$Init(start.date = "2018-08-19",
                 end.date = "2018-08-25",
                 dimensions = "ga:date,ga:userType,ga:deviceCategory,ga:channelGrouping",
                 metrics = "ga:sessions,ga:bounceRate,ga:avgSessionDuration,
                                  ga:goalConversionRateAll,ga:pageviewsPerSession",
                 sort = "ga:date",
                 #filters="",
                 #segment="",
                 max.results = ,
                 table.id = paste("ga:",ga.profiles$id[4],sep="",collapse=","),
                 access_token=access_token)

手順の3でQueryBuilder()関数を使って作った「query」オブジェクトの箱に指示を入れていくようにコードを書く。

例えば上記のコードなら、

期間は8月19日から8月25日までの1週間。

ディメンションは、日付、ユーザータイプ、デバイスカテゴリ、デフォルトチャネルグループの4つ。

指標は、セッション数、直帰率、平均セッション時間、コンバージョン率、ページ/セッションの5つ。

それらを日付順に並べるように指示している。

手順の4で確認したビューの番号は、「table.id = paste("ga:",ga.profiles$id[4],sep="",collapse=",")」の「4」が該当するので、ここはそれぞれのアカウントごとに対応する番号を入れる。

 

また、ディメンションと指標の名前は正確に記述しないとちゃんと動いてくれないので、以下のサイトを参考に名前を入力する。

Dimensions & Metrics Explorer  |  Analytics Reporting API v4  |  Google Developers

このサイトでは、グーグルアナリティクスのAPIで利用できるすべてのディメンションと指標の名前が調べられるので、ここで必要なものを探そう。

6.Rからグーグルアナリティクスのデータを取得する

ga.data <- ga$GetReportData(query)

手順の5で、データを取得する条件が指示できたら、あとは上記のコードを実行してデータを取得するだけ。

必要があれば、summary()関数で中身を確認しておこう。

ga.data[,1:4] <- data.frame( lapply(ga.data[,1:4], as.factor) )

今回の僕の例では、ディメンションに指定している4つがすべて文字列データとして取得される、というかたぶんディメンションは全て文字列で取得されるため、あとで回帰分析をするときのためにlapply()関数を使ってファクターに変えておく。

7.取得したデータを使って(重)回帰分析をする

ここまで来たら、あとはlm()関数を使って回帰分析をするだけ。

一応例として、コンバージョン率を従属変数とした重回帰分析をするためのコードを示しておくが、僕の持っているデータでは残念ながら独立変数が一つも有意にならなかったので、モデルの作り方をもう少し考える必要がありそうだった。

lmCVR <- lm(goalConversionRateAll ~ userType + deviceCategory +
                      channelGrouping + sessions + bounceRate + avgSessionDuration +
                      pageviewsPerSession,ga.data)

重回帰分析自体の方法だとか、その前にやっておくべき相関係数行列や散布図の作成方法なんかは、調べればすぐにわかることだと思うのでここでは割愛する。

わかりにくいのはRでグーグルアナリティクスのAPIを叩いてデータを取得するところまでだと思うので、そこから先はやりたいようにやってほしい。

まとめ

というわけで、カスタムレポートでは我慢できない分析屋さんのために、RからグーグルアナリティクスのAPIを叩いて直接生データを取得する方法について解説した。

一応この方法で僕が元々やりたかった重回帰分析にほぼ近いことができるようにはなったが、有意な結果にならなかったのでもう少し試行錯誤していいモデルが作れるように考えてみたいと思う。

まあ、正直ここまでしなくてもグーグルアナリティクス単体で事足りるものだとは思うのだが、もしさらに踏み込んだ分析がしたいという場合はこの方法が役に立つはずだ。

サーチコンソールから引っ張ってきたデータと結合させてページごとのデータを作り、クラスター分析でコンテンツをクラスタリングする、などの応用も利く。

というか僕には知識不足すぎてそれぐらいしか思いつかないが、確実にアクセス解析の自由度は上がるはずなので、ぜひ使ってみてほしい。

「やりたいこと」からパッと引ける Google アナリティクス 分析・改善のすべてがわかる本

「やりたいこと」からパッと引ける Google アナリティクス 分析・改善のすべてがわかる本

 
Rによるスクレイピング入門

Rによるスクレイピング入門

  • 作者: 石田基広,市川太祐,瓜生真也,湯谷啓明
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2017/03/27
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (2件) を見る
 
Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

  • 作者: Simon Munzert,Christian Rubba,Peter Meissner,Dominic Nyhuis,石田基広,工藤和奏,熊谷雄介,高柳慎一,牧山幸史
  • 出版社/メーカー: 共立出版
  • 発売日: 2017/06/08
  • メディア: 単行本
  • この商品を含むブログ (1件) を見る