googleAnalyticsR を使ってコンバージョン経路レポートを集計する関数を書いた。
内部で dplyr を使っています。
アトリビューション分析というのは明確な定義のある用語ではないと思うけど、直接コンバージョンのあったセッションだけでなく、コンバージョンに至るまでに経てきた流入経路や接触した広告も評価してやろう、というようなニュアンスで使われる。
Googleアナリティクスではチャネルの間接的な効果を評価するモデルがいろいろ提供されているアトリビューション モデルの概要 - アナリティクス ヘルプ。
ただ、個人的には各チャネルの貢献度を完全に定量的に評価するのはあまり好みでない。
その理由の一つは、Googleアナリティクスではコンバージョンに至ったユーザーの通ってきたチャネルはわかっても、コンバージョンしなかったユーザーの通ってきたチャネルはわからないという点。
ある媒体に接触することとコンバージョンとの連関は、コンバージョンしたユーザーとコンバージョンしなかったユーザーをくらべてみないとわからないはずだと思う。
また、あるチャネルの貢献度が高く見積もられたとして、そのチャネルを遮断したらその分コンバージョンが減る、とは必ずしも言えない。各チャネルにはある程度冗長性があるはずなので、そのチャネルを遮断したらその分、他のチャネルからのコンバージョンが増えるだけかもしれない。
だから今回は、定性的な解釈を重視したいと思う。
ケーススタディ
実際のデータを用いて集計してみる。
library(dplyr)library(tidyr)library(ggplot2)library(googleAnalyticsR)library(igraph) ga_auth() account_list <- ga_account_list() ga_id <- account_list$viewId[3] mcf_gadata <- google_analytics(id = ga_id, start="2017-01-01", end="2017-05-31", metrics = c("totalConversions"), filters = c("mcf:conversionGoalNumber==003"), dimensions = c("basicChannelGroupingPath","conversionGoalNumber","timeLagInDaysHistogram"), type="mcf")source("https://gist.githubusercontent.com/abikoushi/e3b1a1bd47395405ea46db31afae55ba/raw/9cae73995ab4de1b39565184dbee4d19b73ef409/pathanal.R") out <-pathanal(mcf_gadata, dimension ="basicChannelGroupingPath") ggplot(out$trans_mat,aes(x=to,y=from,fill=trans_prob))+ geom_tile()+ geom_text(aes(label=paste(round(trans_prob*100),"%")))+ scale_fill_continuous(low="white",high="cornflowerblue")
こんなふうにやると、out には次のようなテーブルが入る。
この表(trans_mat)は各経路から次に経路が続く場合に、どれに遷移するかの割合を示していて、行方向に合計してやると100%になる。
例えば、「オーガニック検索 >ダイレクト」というのは、検索経由で来たユーザーが次のセッションでは直接訪問していると解釈できるので、ある種の勝ちパターンと推測できます。
out の中身を詳しくみてみる。
> out $unique_node [1]"Direct""Referral""Organic Search""Social Network"$trans_mat # A tibble: 13 × 3 from to trans_prob <chr><chr><dbl>1 Direct Direct 0.918032792 Direct Organic Search 0.016393443 Direct Referral 0.032786894 Direct Social Network 0.032786895 Organic Search Direct 0.916666676 Organic Search Referral 0.041666677 Organic Search Social Network 0.041666678 Referral Direct 0.666666679 Referral Organic Search 0.1666666710 Referral Referral 0.1666666711 Social Network Direct 0.3076923112 Social Network Referral 0.0769230813 Social Network Social Network 0.61538462$null_node # A tibble: 0 × 2# ... with 2 variables: node <chr>, freq <dbl>$harvest # A tibble: 4 × 2 node harv_prob <chr><dbl>1 Direct 0.50406502 Organic Search 0.88349513 Referral 0.33333334 Social Network 0.5357143$firsttouch # A tibble: 4 × 2 node first_prob <chr><dbl>1 Direct 0.141221372 Organic Search 0.778625953 Referral 0.015267184 Social Network 0.06488550
unique_node はユニークな経路の名前、null_node は他の経路とつながりを持たない、自分だけ単独で存在している経路(今回はなし)、harvest はその経路からコンバージョンに直接至る割合で大きいほど効率がよいと解釈できる。firsttouch はその経路が経路の起点となった割合で、合計すると1になる。そのサイトがどのチャネルに大きく依存しているかを相対的に知ることができる指標です。
これらを組み合わせるとたとえば次のような図も書ける。
g <-graph(rbind(out$trans_mat$from,out$trans_mat$to)) g <- g + vertex(out$null_node$node) E(g)$color <-"grey50" E(g)$width <- out$trans_mat$trans_prob*6 V(g)$size <- out$harvest$harv_prob*100 V(g)$label.cex <-1.5 cols_p = colorRampPalette(c("white","lightpink")) V(g)$color <- cols_p(nrow(out$firsttouch))[order(out$firsttouch$first_prob)] plot(g,edge.curved=TRUE,vertex.label.color ="black", vertex.label.font=2)
丸の大きさが harvest に、色の濃さが firsttouch に対応している。
見るべきポイントはさっき述べたようなダイレクトへの遷移があるかどうかと、自分自身へのびるパスががあるかだと思う。
この場合、オーガニックからオーガニックへのパスがないのが気になる。
サイトを認知しての同じ経路からの再訪問というのがブランド認知の一つの指標になると思う。
そこを行くとソーシャルネットワークは同じソーシャルネットからの再訪でコンバージョンを獲得していて、これはほぼ全面的にデータ解析・統計・機械学習のRSS (@datasci_blogs) | Twitterのおかげですね。
シミュレーション
一応、コンバージョン経路のレポートをシミュレートする関数も書いた。
trans_prob <-rdirichlet(4,rep(0.5,4)) harv_prob <-c(0.7,0.6,0.4,0.2) first_prob <-as.numeric(rdirichlet(1,rep(1,4))) n=1000 K=4 res <-simpath(100,4,trans_prob,harv_prob,first_prob)
> head(res)# A tibble: 6 × 2 path totalConversions <chr><int>11821>3>4>41322342>1852>1>3162>1>4>1>21
経路やセグメントを詳細化していくと有効なデータは少なくなっていくので、シミュレーションしてみて、計算した割合と設定したした確率が安定して同じくらいの数字になるか確かめるのもいいと思う。
アマゾンアフィリエイトのコーナー
Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集
- 作者: Winston Chang,石井弓美子,河内崇,瀬戸山雅人,古畠敦
- 出版社/メーカー:オライリージャパン
- 発売日: 2013/11/30
- メディア:大型本
- この商品を含むブログ (3件) を見る