背景
昔Web系コンサルをやっていたときKPIツリーとかを習ったんだけどぼくはこれが苦手だった。
例えばあるサイトのコンバージョン(CV)はサイトへの訪問数(SS)×コンバージョンレート(CVR)だからコンバージョンというゴールを増やしたかったら、SSを増やすかCVRを増やすしかない。
こうやって順々に要素を順々に分解していけばコンバージョンを増やす方策をロジカルに考えられますね、というわけ。
でも実際にCVの増減に対して、CVRの変化の寄与とSSの変化の寄与、どっちが大きいんだみたいなことをちゃんと比較してるのはみたことない。
そこでここではそれをやってみようと思う。
計算
2つの異なる時期のCV、CV1とCV2があったとする。
前述のとおり、
である。
CVの増減比は で表せる。
変形すると、
両辺の対数をとると、
となる。
つまり対数をとって考えると、CVの増減量(左辺)が、というSSの増減量と、というCVRの増減量の足し算に分解できる。
実践
これは実際に対数をとったCVの増減比をCVRの変化の寄与とSSの変化の寄与に分解した図です。
黒い折れ線がCVの増減、棒グラフがそれに対するCVRとSSの寄与を示す。
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"))