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

廿TT

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

(R+Google アナリティクス)バズやキャンペーンの事後の効果を図示する

目的

Webサイトへの訪問数を増やしたいとき、新しいコンテンツを作ったり、広告を打ったりすることがある。

そういう場合、キャンペーンやコンテンツ施策が一時のアクセス増加にとどまらず、波及効果を生んでくれることが望ましい。

その波及効果をなるべくシンプルな方法で視覚化したい。

対象データ

Google アナリティクスからもって来た直近2ヶ月間の当ブログセッション数のデータを使う。

データは、
Google アナリティクスデータ(2014/12/25 - 2015/1/24)
に置いておく。

とりあえず折れ線グラフ

下図は当ブログの直近二ヶ月間のセッション(訪問)数の折れ線グラフ。

f:id:abrahamcow:20150125020253p:plain

#Rのコード
GASS <- read.csv("GASS.csv")
#head(GASS)
#nihongo() macユーザーは日本語のフォントを指定
with(GASS,plot(セッション,type="o",pch=16))
with(GASS,abline(h=1.5*IQR(セッション) + quantile(セッション,3/4),lty=2))

何箇所か飛び抜けてセッションの多い日がある。こういうのを「バズった」(または炎上した)という。

こういう飛び抜けた値も気になることは気になるが、一方でベースラインとしてセッションが増えたか否かは把握しておきたい。

箱ひげ図の折れ線グラフ版を作りたい

飛び抜けた値のことを、外れ値とよぶ。

外れ値の検出でいちばんシンプルな方法はおそらく箱ひげ図だろう。

f:id:abrahamcow:20150125020820p:plain
(点線は「第三四分位数+1.5×四分位範囲」)

with(GASS,boxplot(セッション,ylab="セッション数"))
with(GASS,abline(h=1.5*IQR(セッション) + quantile(セッション,3/4),lty=2))

箱ひげ図では、「第三四分位数+1.5×四分位範囲」を超えたものを外れ値として点で表す。
(「四分位数」などの用語について、エンゲージメントを測る指標はエンゲージメント「率」だけじゃない。やみくもに割り算値をKPIにするのはよくない。 - 廿TT ではもう少していねいに説明しているので、必要に応じて参照して頂ければ幸い。)

これをそのまま折れ線グラフに持ってきて、「第三四分位数+1.5×四分位範囲」を超えたものを外れ値として扱うことにする。

f:id:abrahamcow:20150125015428p:plain
(点線が「第三四分位数+1.5×四分位範囲」)

with(GASS,plot(セッション,type="o",pch=16))
with(GASS,abline(h=1.5*IQR(セッション) + quantile(セッション,3/4),lty=2))

そこで外れ値の前後で期間を区切ってグループ化する関数 punc.R を書いた。

これを使って、外れ値を点で表して、他を線でつなげたグラフを書くとこうなる。

f:id:abrahamcow:20150125021717p:plain

#punc 関数は上記のリンク先からダウンロードしてください。
GASS$term <- punc(GASS$セッション)
GASS$term
library(ggplot2)
library(scales)

theme_set(theme_bw(16,"HiraKakuPro-W3"))

p1 <-ggplot(GASS,aes(x=as.Date(日の指標),y=セッション,group=term))+
  geom_line() +
  geom_point()+
  scale_x_date(labels = date_format("20%y/%m/%d")) +
  scale_y_continuous(labels = comma) +
  labs(x="年/月/日", y="セッション数",title="2014年1月度トラフィック概況(前月比較)")
p1

リボン付き折れ線グラフ

この外れ値の前後で、つまりバズの前後にセッション数の推移の傾向が変化しているか知りたい。

そこでこんなグラフを書いたらどうだろう。

f:id:abrahamcow:20150125022047p:plain

p1 +geom_smooth(method="lm", colour="black", linetype=2, fill="tomato")

点線は最小二乗法による傾向線(Excelでいう線形近似)で、赤っぽい帯がその95%信頼区間。

95%信頼区間というのは、非常に大雑把に言えば「誤差の範囲」を表すもの。

これは非常に雑な説明なのだけれど、信頼区間をうまく説明するのはむずかしい。

「95%の信頼区間」とは、おなじ実験を100回行ったとき、内95回はこの範囲に傾向線がおさまるだろうという区間のこと。

なぜ信頼区間を加えるかというと、期間をくぎったことによって期間ごとにサンプルサイズ(折れ線グラフの点の数)が違うので、傾向線だけでは比較しづらいからだ。

例えば2日間だけ見て、「上昇してますね」と言われたら、「それ昨日と今日だけでしょ? そんなんじゃトレンドはわかんないよ!」と思うだろう。

2日間だけ見た場合と100日間見た場合だったら、後者のほうが信用できる。

信頼区間というのは、そういう「信用できる」度合いを表せる。

サンプルサイズが増えるほど、「誤差の範囲」(=信頼区間の幅)は狭くなる。つまり推定の精度が上がる。

先の図を見れば、

  • バズった後に傾向線のベースラインが上がってること
  • ただしその後若干の減少傾向が見られ、もとの水準まで戻りそうな感じもする

ということがわかる。

理想的には、

  • バズった後にベースラインが上がっていて
  • かつ上昇傾向が継続している

のがいいキャンペーンだろう。

こうやってバズやキャンペーンの事後の効果を把握してはいかがだろうか。

留意点

同じコードはセッション数以外の指標にも使いまわせる。

ただ、Web解析の分野では、指標どうしで割り算をして新たな指標を作りだすことがよく行われる。

直帰「率」とか、新規「率」とか、ページビュー/セッションとか。

それらに対してかたっぱしから線を引っ張っていったら、たぶんいつかは都合のいい結果が生まれる。

「キャンペーンの結果、セッション/ユニークユーザーは上がりました。キャンペーン成功です」とか。

それをやると施策の判断を誤ることになるので、あらかじめ目標を定めた上で視覚化を行って欲しい。

参考文献

統計データの視覚化 (Rで学ぶデータサイエンス 12)

統計データの視覚化 (Rで学ぶデータサイエンス 12)