問題
例えばソーシャルメディアで炎上してたりしたらサイトの訪問(セッション)数は伸びるだろう。
セッション数を定点観測していればなんらかの異常があったときにすぐに対処できる……はずだ。
Googleアナリティクスオタクの私が、毎日見ているたった1つのレポートの、本当の見方を教えよう[第60回] | Googleアナリティクスとは/衣袋教授のGoogleアナリティクス入門講座 | Web担当者Forumでは、サイトの定点観測として「毎日見るのは[ユーザー]>[サマリー]レポートだけ」「いつもと同様の折れ線グラフになっていれば、そこで終わり。それ以上の深入りはしない。」という手法が紹介されている。
ここで述べられていることはただしいと思う。けど、このやり方で気づきにくい小さい「異常」も中にはある。
下図は Googleアナリティクス[ユーザー]>[サマリー]レポートのセッション数です。
Image may be NSFW.
Clik here to view.
なんらかの変化や異常に気づきますか?
このグラフを見て「お、異常だ」と思う人はかなり勘がいいと思う。
ぼくはなにも異常だと思わなかった。
でも実はこの期間は free-share-buttons.com というスパムからのセッションが伸びていたのです。
Image may be NSFW.
Clik here to view.
下図は free-share-buttons.com 経由のセッション数。
Image may be NSFW.
Clik here to view.
こういうのはフィルタ設定したりして除外しておきたい。
free-share-buttons.comリファラスパムをフィルターで排除する方法! | AnalyzeFindOut~アクセス解析を調べる
わずかな変化を見逃さない CUSUM 管理図の紹介
さて、こういう小さい変化にはどうやって気づけばいいだろう。
CUSUM(累積和)管理図が便利です。
CUSUM 管理図とは、
Image may be NSFW.
Clik here to view.
をプロットしたもの。
ここで Image may be NSFW.
Clik here to view.は i日目のセッション数。Image may be NSFW.
Clik here to view.は対象期間の平均セッション数。
RGA パッケージによる実践
R を使って実際に CUSUM 管理図を書いてみます。
# RGA パッケージでデータ取得library(RGA)library(dplyr)library(tidyr)library(ggplot2) authorize() prof <-list_profiles() dat1 <-get_ga(profile.id = prof$id[1], start.date ="2015-06-01", end.date ="2015-07-31", dimensions ="ga:date,ga:channelGrouping", metrics ="ga:sessions")#channelGrouping もついでに出しておく ss <- dat1 %>% group_by(date)%>% summarise(sessions=sum(sessions))%>% mutate(cusum = cumsum(sessions-mean(sessions)))#CUSUM#以下プロット p1 <-ggplot(ss)+ geom_point(aes(x=date,y=cusum))+ geom_line(aes(x=date,y=cusum)) p1
Image may be NSFW.
Clik here to view.
細かいジグザグは7日単位の周期性なのでよいとして、全体に V 字型の傾向が見て取れたら要注意。
Image may be NSFW.
Clik here to view.
セッション数に変化が生じています。
CUSUM 管理図はなにをやってるか。
Image may be NSFW.
Clik here to view.という式を読み解いてみよう。
Image may be NSFW.
Clik here to view.というのは平均からのぶれだ。
Image may be NSFW.
Clik here to view.というのは「1 番目から k番目までを足す」という意味。
平均からのぶれを累積していくことになるので、平均以下の期間が続いていれば下降傾向、平均以上の期間が続いていれば上昇傾向になる。
変化以降セッションが増加しているなら CUSUM 管理図は V 字型、変化以降セッションが減少しているなら ∧ 字型の折れ線グラフになる。
Image may be NSFW.
Clik here to view.
変化点を出して変化の要因をさぐる。
どの時点で変化が生じたか知るには Image may be NSFW.
Clik here to view.の絶対値が最大になるところを見ればよい。
cp <- which.max(abs(ss2$cusum)) p1+geom_vline(aes(xintercept =as.integer(date[cp])),linetype=2,colour="red")
> ss$date[cp][1]"2015-07-12 JST"
変化の要因をさぐるには変化点の前後でセッション数の内訳を見ればよい。
pre <- dat1%>% dplyr::filter(date<date[cp])%>% #変化点前 group_by(channel.grouping)%>% #チャネルグループ毎の summarise(sessions=mean(sessions))#平均セッション数 post <- dat1%>% dplyr::filter(date>=date[cp])%>% #変化点後 group_by(channel.grouping)%>% summarise(sessions=mean(sessions)) channelcompare <-left_join(pre,post,by="channel.grouping")
channelcompare の中身はこうなった。
channel.grouping | 変化前 | 変化後 |
---|---|---|
(Other) | 1.0 | 3.13 |
Direct | 42.6 | 18.04 |
Organic Search | 235.5 | 225.75 |
Referral | 8.8 | 21.37 |
Social | 4.0 | 4.74 |
増加が大きいのは Referral なので、あとは Googleアナリティクスの管理画面から、[集客]>[すべてのトラフィック]>[参照サイト]を見れば冒頭に述べたように free-share-buttons.com からのアクセスが伸びていることに気づける。
アマゾンアフィリエイトのコーナー
『異常検知と変化検知』は、まだちゃんと読んでないけど、おそらくいい本だと思います。
Clik here to view.

- 作者:井手剛,杉山将
- 出版社/メーカー:講談社
- 発売日: 2015/08/08
- メディア:単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
ロングテールSEOのためのパレート図の紹介と RGoogleAnalytics による実践 - 廿TTでも述べたが、品質管理と Web 解析は似ている気がする。
品質管理のほうがデータ分析の歴史が長い分、学ぶところは多いのではないだろうか。
Web 解析のための管理図入門みたいな本があったらおもしろいと思うんだけど。
Clik here to view.

- 作者:永田靖
- 出版社/メーカー:日本経済新聞社
- 発売日: 2006/01
- メディア:新書
- 購入: 2人 クリック: 7回
- この商品を含むブログ (5件) を見る
足し算を Σ で書く方法くらいは知っておいて損はない。
Clik here to view.

- 作者:チャート研究所
- 出版社/メーカー:数研出版
- 発売日: 2003/10
- メディア:単行本
- この商品を含むブログを見る