継続率にはいろんな定義がありえる。
ここで計算するのは「ある日に初回訪問したユーザーのうち、x日以内に再訪問したユーザーの割合」のこと。
Googleアナリティクスのディメンション、sessionCount で訪問の回数がわかる。daysSinceLastSession で前回訪問日がわかる。
これから sessionCount = 2 のユーザーを取り出して、daysSinceLastSession を見れば、初回訪問が何日前だったのかわかる。
アイデアはこんな感じ。
sessionCount = 2 のユーザーに対して、下表のようなものをつくり、対角成分の和をとれば、「ある日」に初回訪問して4日以内に再訪問したユーザーの数がわかる。
7日以内継続率は下のように計算する。
library(RGA)library(dplyr)library(pipeR)library(tidyr)library(scales)library(ggplot2)###RGAパッケージでデータ取得### authorize() prof <-list_profiles() dat1 <-get_ga(profile.id = prof$id[1], start.date ="2014-01-01", end.date ="2016-01-31", dimensions ="ga:date,ga:sessionCount,ga:daysSinceLastSession,ga:yearMonth", metrics ="ga:users")###継続率を計算する関数を定義### calc_repeater<-function(dat1,span=7){ df_newusers <-dat1 %>% dplyr::filter(session.count==1)%>% select(-c(session.count,days.since.last.session)) %>% rename(newusers=users) tmp <-dat1 %>% dplyr::filter(session.count==2)%>% spread(days.since.last.session,users,fill=0)%>% select(-c(session.count,year.month)) unique_date<-sort(unique(dat1$date)) N <- length(unique_date) df_repeatUU <-data.frame( date=unique_date[1:(N-span)], repeatUU=sapply(2:(N-span+1),function(i)sum(diag(as.matrix(tmp[i:(i+7),3:(span+2)]))))) left_join(df_newusers,df_repeatUU,by="date") %>% mutate(repeat_rate=repeatUU/newusers)}###計算### repeater <-calc_repeater(dat1)###プロット### ggplot(repeater,aes(x=date,y=repeat_rate))+ geom_line()+ scale_y_continuous(labels=percent)+ scale_x_datetime(date_labels ="20%y/%m")
日によって増減が激しくて KPI としては使いにくいかな、と感じた。せっかく苦労して計算したのに……。
新規訪問者数(ある日に初回訪問したユーザー)、継続訪問者数(ある日に初回訪問したユーザーのうち、7日以内に再訪問したユーザー)、継続率(ある日に初回訪問したユーザーのうち、7日以内に再訪問したユーザーの割合)を並べてみる。
repeater_gg <-gather(repeater,variable,value,-c(date,year.month)) repeater_gg$date <-as.POSIXct(repeater_gg$date,origin="1970-01-01") ggplot(repeater_gg)+ geom_line(aes(x=date,y=value,colour=variable))+ facet_wrap(~variable,scales ="free",nrow =3)
バズに引っ張られて継続率も大きく変動していることがわかる。とはいえバズに引っ張られるのがダメな指標かというと一概にそうとはいえない。
バズが連れてきた人がリピーターになっているからこそ高い数字が出ている。
ただし計算方法の都合上、直近の再訪問を評価しているので、長期的に定着しているのかはわからない。