廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

Google アナリティクスとサーチコンソールのデータをマージして使う

統計ソフト R から Google アナリティクスのデータを引っぱってこれるパッケージ googleAnalyticsR の使い方は、

にざっと書いた。

サーチコンソールのデータを引っぱってこれるパッケージ searchConsoleR の使い方は、

などに書いた。

さて、searchConsoleR と googleAnalyticsR がふたつそろった。

こうなると両者のデータをマージして使いたくなるのが人情だろう。
なのでそれをやる。

分析の目的

SEO 対策検討ランディングページ、またはリスティング広告出稿検討ランディングページをあぶり出すことを目的とします。

より具体的にいうと、コンバージョンレート(CVR)が高く、インプレッション(impressions)もそこそこ見込めるわりに、検索順位(position)が低いランディングページをかんたんに抽出することを目的とします。

そのようなページは「伸びしろ」があり、SEO 対策またはリスティング広告出稿で検索結果画面に表示させてやれば、より多くのコンバージョンを稼げると考えます。

ふつう、CVR というとコンバージョン数÷セッション数で考えますが、ここでは(せっかくサーチコンソールのデータと Google アナリティクスのデータをマージして使うので)コンバージョン数÷インプレッションを CVR とします。

データ取得

細かいクエリの意味は googleAnalyticsR の使い方(Version:0.1.0) - 廿TT を参照してください。

グーグル検索経由のセッションに限ってデータを取得しています。

library("googleAuthR")
library("searchConsoleR")
library("googleAnalyticsR")
gar_auth()
#####
#Google アナリティクスデータの取得
account_list <- google_analytics_account_list()
ga_id <- account_list[3,'viewId']
google_seo <- 
  filter_clause_ga4(list(dim_filter("medium", 
                                    "EXACT", 
                                    "organic"),
                         dim_filter("source", 
                                    "EXACT", 
                                    "google")),
                    operator = "AND")
start <- as.character(Sys.Date() - 93)
end <- as.character(Sys.Date())
gadata <-
  google_analytics_4(ga_id,
                     date_range = c(start,end),
                     metrics = c("sessions","goal3Completions"),
                     dimensions = c("landingPagePath"),
                     dim_filters = google_seo,
                     order = order_type(c("sessions"), 
                                        sort_order = "DESC", 
                                        orderType = "VALUE"),
                     max = 20000)

######
#サーチコンソールデータの取得
sc_websites <- list_websites()
scdata <- search_analytics(sc_websites[1,1], 
                           startDate = start, endDate = end,
                           dimensions = c("page"),
                           rowLimit = 20000)

マージ

データハンドリングには dplyr というパッケージを使います。

dplyr に関してはありがたいことに Web 上に山ほど情報があるので、適宜ググってください。

library(dplyr)
scdata <- scdata %>% 
  mutate(landingPagePath=gsub("http://abrahamcow.hatenablog.com","",page))

mergeddata <- left_join(scdata,gadata,by="landingPagePath")

mergeddata2 <- dplyr::filter(mergeddata,goal3Completions>0) %>% 
  arrange(desc(sessions))

コンバージョン数が 0 より大きいランディングページのみ抜き出しています。

区間推定

区間推定の考えかたは (R+Google アナリティクス)エラーバーで信頼下限をプロット - 廿TT にざっと書きました。

区間推定では小さく見積もれば CVR はこれくらい、大きく見積もればこれくらい、という値を分母(この場合インプレッション数)に応じて出すことができます。

区間推定をするためには、信頼水準を決めてやる必要があります。

信頼水準は「同じ実験をくりかえしやったら、このくらいの割合で真の CVR を含むだろう」という値のことです。

伝統的には信頼水準として、95% や 90% が使われることが多いのですが、これは解析者が自由に決めていいものです。

信頼水準を大きくすれば、その区間が真の CVR を含む割合は大きくなりますが、あまり大きくしすぎると「CVR は 0% から
99% の中にあります」というような、「そりゃそうだろ」的な推定しかできません。

信頼水準を小さくとると、ビシッと狭い区間で推定できますが、その区間が「はずれ」である割合も大きくなります。

これはトレードオフの関係にあります。

今回は信頼水準を 50% と設定しました。

CI <-t(mapply(function(x,n)binom.test(x=x,n=n,conf.level = 0.5)$conf.int,
              mergeddata2$goal3Completions,
              mergeddata2$impressions))

mergeddata3 <- mergeddata2 %>% 
  mutate(id=1:n(),lower=CI[,1],upper=CI[,2])

図示

統計グラフの表示には ggplot というパッケージを使います。

これに関しても適宜ググってください。

library(cowplot)
ggplot(mergeddata3,aes(x=position,y=goal3Completions/impressions))+
  geom_pointrange(aes(ymin=lower,ymax=upper))+
  geom_hline(yintercept = 0.001,linetype=2)+
  geom_label(aes(label=id))

f:id:abrahamcow:20170418010554p:plain

横軸が検索順位、縦軸が CVR です。

ラベルの数字はランディングページにふった通し番号です。

ラベルから伸びる棒が信頼区間です。

横に入っている点線は 0.1% のラインです。

「少なく見積もっても CVR 0.1% くらいは欲しい」と考えたとき、CVR が高いわりに検索順位が低いページは 55、52、44 あたりでしょう。

55、52、44 のページの情報だけを取り出すにはこうやります。

dplyr::filter(mergeddata3,id %in% c(55,52,44)) %>% 
  select(id,page)
  id                                                     page
1 44 http://abrahamcow.hatenablog.com/entry/2017/02/19/163408
2 52 http://abrahamcow.hatenablog.com/entry/2016/09/18/034254
3 55 http://abrahamcow.hatenablog.com/entry/2015/12/19/012545

こんな感じです。

アマゾンアフィリエイトのコーナー

R の使い方と統計の考え方を同時に学べる本としては、最近出た『R で楽しむ統計』がいいような気がします。

Rで楽しむ統計 (Wonderful R 1)

Rで楽しむ統計 (Wonderful R 1)