読者です 読者をやめる 読者になる 読者になる

廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

Google アナリティクスデータKPI設計のための可視化。散布図行列で定点観測するエンゲージメント指標を絞り込む。

R Google アナリティクス Graphviz

目的

Webアクセス解析データの可視化を以下の二つに大別するとすると、

  1. 定点観測型:重要な指標の傾向を整理して把握する
  2. 課題発見型:データをある側面から眺めて新たな仮説を立てる

今回やろうとしているのは前者です。

エンゲージメント指標

Webアクセス解析の分野で「エンゲージメント指標」と総称される指標があります。ユーザーがサイトに定着しているか、ユーザーがサイト内でどのように行動しているかを測る指標のことです。

主なエンゲージメント指標には、

  • 直帰率
  • 平均ページビュー(ページ/セッション)
  • 新規率(新規セッション率)
  • 平均滞在時間(平均セッション時間)

があります。

f:id:abrahamcow:20141231121551p:plain
Google アナリティクス『ユーザー サマリー』レポート)

しかし、これらを全部レポーティングして会議などで報告した場合、似たような表やグラフがならび、かえって全体像がつかみにくくなります。
(実際、ぼくは似たような表やグラフを並べて数字の上がった下がったを報告する会議で退屈して寝たことがあります。あのときはすみませんでした。)

エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)

エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)

森藤、あんちべ『エンジニアのための データ可視化[実践]入門 』では、KPI設計の原則として以下のようなことを上げています。(pp.61-64)

  1. 必要最低限のKPIに絞る
  2. 操作可能な変数をKPIにする
  3. 値の変化に対して解釈が一意になるKPIにする

これを参考にKPI設計をやってみましょう。

必要なKPIを絞り込むためには散布図行列

散布図は変数(各指標)間の相関を見るためのものです。

散布図の見方については、

を参考にしてください。

相関が強い変数とは、すなわち「同じような情報を持っている」変数と解釈できます。

同じような情報を持っている指標ならば、ひとつにまとめてしまって問題ありません。

R + Google アナリティクスによる実践

まず代表的なエンゲージメント指標である、直帰率、平均ページビュー(ページ/セッション)、新規率(新規セッション率)、 平均滞在時間(平均セッション時間)のデータを取得します。

これらはすべて割り算値、何かをセッション数(訪問数)で割った値です。

割り算をするのは、相関から「見せかけの回帰」を排除するためです。

詳しくは 直帰率と新規率の相関を調べて新規訪問者が回遊しやすいサイトになっているかチェックする - 廿TT の『見せかけの回帰、擬似相関のシミュレーション』のところをご覧ください。

統計ソフト R から APIGoogle アナリティクスのデータを取得する方法は、
RGoogleAnalytics をいじっている - 廿TT
を参照してください。

library("RGoogleAnalytics")
query <- QueryBuilder()
access_token <- query$authorize()

ここでアクセストークンをコピペ。

#データ取得
ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)

sta <- "2013-05-01" #データ取得開始期間
en <- "2014-12-31" #直近のデータ

query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:yearMonth",  
           metrics = "ga:percentNewSessions,ga:bounceRate,ga:avgSessionDuration,ga:pageviewsPerSession", 
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           #           filter = "",
           access_token=access_token)

dat1 <- ga$GetReportData(query) 
#データ取得完了
plot(dat1[,-1]) #散布図行列
cor(dat1[,-1]) #相関行列

できあった散布図行列、相関行列は下記のようになります。

f:id:abrahamcow:20141231222422p:plain

> round(cor(dat1[,-1]),2)
                    percentNewSessions bounceRate avgSessionDuration pageviewsPerSession
percentNewSessions                1.00       0.88              -0.80               -0.81
bounceRate                        0.88       1.00              -0.94               -0.85
avgSessionDuration               -0.80      -0.94               1.00                0.81
pageviewsPerSession              -0.81      -0.85               0.81                1.00

f:id:abrahamcow:20141231232426p:plain

  • percentNewSessions(新規率)
  • bounceRate(直帰率
  • avgSessionDuration(平均滞在時間)
  • pageviewsPerSession(平均ページビュー)

エンゲージメント指標は様々ありますが、どれも互いに強い相関が出ています。

  • 相関係数の絶対値(目安)
    • 0.7以上:強い相関
    • 0.4から0.7:中程度の相関
    • 0.2から0.4:弱い相関
    • 0.2以下:無視できるくらいの相関

つまりこれらは同じような情報を持っていますので、ひとつにまとめてしまって問題ありません。

平均ページビュー、直帰率、平均滞在時間どうしに相関があるのは当然として、新規率もこれらと強い相関が出ているのは少し意外でした。

これは「多くの新規訪問者に読まれる」→「一見さんはとりあえず1ページ閲覧」ということだと思います。

f:id:abrahamcow:20150101155359p:plain

//	上図のコード(dot言語)
graph {
"新規率" -- "直帰率"[label=正の相関];
"新規率" -- "平均滞在時間"[label=負の相関];
"新規率"--"平均ページビュー"[label=負の相関];
"直帰率"-- "平均滞在時間"[label=負の相関];
"直帰率"--"平均ページビュー"[label=負の相関];
"平均滞在時間"--"平均ページビュー"[label=正の相関];
}

操作可能な変数を選ぶ

このような情報を総合して一つにまとめるための統計的手法も存在します(主成分分析など)。

しかし、指標どうしを組み合わせてまとめてしまうと、解釈が困難になり、実運用への反映が難しくなります。
(もちろん上手に指標どうしを組み合わせることができる方もいらっしゃるでしょうが、ここでは「誤った可視化を避けること」を重視しています。)

「操作可能な変数をKPIにする」という原則にのっとると、複数の指標を組み合わせることはあまりおすすめしません。

値の変化に対して解釈が一意になるKPIにする

上では平均ページビュー(ページ / セッション)、新規率、直帰率をエンゲージメント指標としていましたが、これらは値の変化に対して解釈が一意にならないという欠点があります。

平均ページビュー( = ページビュー数 / セッション数)が増加した場合、サイトを閲覧しまくるヘビーユーザー層が増えたのか、軽くながめるライトユーザー層が減ったのか判断できません。

その欠点を補うために、ぼくが推薦したいのは、色付きテーブル(ヒートマップ)です。

エンゲージメントを測る指標はエンゲージメント「率」だけじゃない。やみくもに割り算値をKPIにするのはよくない。 - 廿TT をご覧ください。

f:id:abrahamcow:20141230135940p:plain

定点観測型のレポーティングをこのような図一つに絞ることで、残った時間を課題発見型の分析にあてることができます。

他の指標は「データをある側面から眺めて新たな仮説を立てる」ために見ればいいのです。

この図の作成は エンゲージメントを測る指標はエンゲージメント「率」だけじゃない。やみくもに割り算値をKPIにするのはよくない。 - 廿TT で、すでにスクリプト化(自動化)しています。

あなたのWeb解析がより楽に、より有益になりますようにお祈りし、散布図行列によるKPI設計をおすすめします。

追記


ぼくとしては特に R にこだわっているつもりはないつもりでした。

「散布図行列で定点観測するエンゲージメント指標を絞り込む」という考え方を伝える目的で書きました。

でも、エクセルで散布図行列作るのめんどうかもしれないです。

散布図行列の作成 with Excel VBA

エクセルの各種機能を使いこなすよりも、R を学んじゃたほうが早いかもしれないです。

個人的には R おすすめです。

質問とかあればコメント欄に書き込んでいただければ答えます……たぶん、答えられる範囲であれば、ある程度は。回答内容に責任はとれません。

追記2

GGally パッケージの ggpairs 関数を使えばよりぱっと見がきれいな(社会人用語では「見た目」のことを「見せ感」という)散布図行列をかんたんに書けることに気づきました。

見せ感がいいほうが喜ばれるので、こちらを使いましょう。

相関係数も一緒に表してくれます。

動作は遅めですが、まあ Google アナリティクスのデータを図示する程度なら問題になることはないでしょう。

library(GGally)
ggpairs(dat1[,-1])

f:id:abrahamcow:20150112073832p:plain

対角線上にならんでいるのはカーネル密度推定による密度プロットです。ヒストグラムをなめらかにしたやつだと思ってください。

この場合は密度プロットとっちゃったほうがすっきりしていいかもしれないですね。

ggpairs(dat1[,-1], diag="blank")

f:id:abrahamcow:20150112074618p:plain