背景
昔Web系コンサルをやっていたときKPIツリーとかを習ったんだけどぼくはこれが苦手だった。
例えばあるサイトのコンバージョン(CV)はサイトへの訪問数(SS)×コンバージョンレート(CVR)だからコンバージョンというゴールを増やしたかったら、SSを増やすかCVRを増やすしかない。
Image may be NSFW.
Clik here to view.
Clik here to view.

こうやって順々に要素を順々に分解していけばコンバージョンを増やす方策をロジカルに考えられますね、というわけ。
でも実際にCVの増減に対して、CVRの変化の寄与とSSの変化の寄与、どっちが大きいんだみたいなことをちゃんと比較してるのはみたことない。
そこでここではそれをやってみようと思う。
計算
2つの異なる時期のCV、CV1とCV2があったとする。
前述のとおり、
Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.
である。
CVの増減比は Image may be NSFW.
Clik here to view.で表せる。
Image may be NSFW.
Clik here to view.
変形すると、
Image may be NSFW.
Clik here to view.
両辺の対数をとると、
Image may be NSFW.
Clik here to view.
となる。
つまり対数をとって考えると、CVの増減量(左辺)が、Image may be NSFW.
Clik here to view.というSSの増減量と、Image may be NSFW.
Clik here to view.というCVRの増減量の足し算に分解できる。
実践
これは実際に対数をとったCVの増減比をCVRの変化の寄与とSSの変化の寄与に分解した図です。
黒い折れ線がCVの増減、棒グラフがそれに対するCVRとSSの寄与を示す。
Image may be NSFW.
Clik here to view.
201809をベースラインとしてそこからの増減を示している。
0よりおおきければ増加、小さければ減少である。
201901のCV増加なんかはSSの寄与のみに支えられて、CVRはマイナスだったことがわかる。
201909なんかはCVRはほぼ横ばいなので、CVの減少要因はSSの減少に絞られる。
ただし、SSの減少要因はさらにセッション数を様々な方法で層別(ドリルダウン)して調べないとわからない。
上の図を書いたRのコードを貼ります。
なにかの参考になるでしょうか。
library(googleAnalyticsR)library(tidyverse) ga_auth() account_list <- ga_account_list() ga_id <- account_list$viewId[3] gadata <- google_analytics(ga_id, date_range = c("2018-09-01","2019-11-30"), metrics = c("sessions","goal3Completions"), dimensions = c("yearMonth")) logcont <-function(x, n){ cj <- log(x)-log(n-x) be <- c(cj[-1]- cj[1]) lN <- log(n) be2 <- c(lN[-1]- lN[1]) lx <- log(x) be3 <- c(lx[-1]- lx[1])data.frame(CV=be3,SS=be2,CVR=be)} out <- logcont(gadata$goal3Completions,gadata$sessions) out$yearMonth <- gadata$yearMonth[-1] out2 <- gather(out,key,value,-CV,-yearMonth) ggplot(out2,aes(x=yearMonth))+ geom_col(aes(y=value, fill=key))+ geom_line(aes(y=CV, group=1),size=1)+ geom_hline(yintercept =0,linetype=2)+ theme_classic(20)+ theme(axis.text.x = element_text(angle=90),axis.text = element_text(colour="black"))