統計ソフト R から Googleアナリティクスのデータを引っぱってこれるパッケージ googleAnalyticsR の使い方は、
にざっと書いた。
サーチコンソールのデータを引っぱってこれるパッケージ searchConsoleR の使い方は、
- [searchConsoleR]要対策キーワードをあぶり出す回帰分析 - 廿TT
- [searchConsoleR]検索クエリとページタイトルのマッチングをはかる - 廿TT
- [searchConsoleR]テキストマイニングことはじめ:検索キーワードの視覚化(ワードクラウド、ワードカウント、共起ネットワーク) - 廿TT
などに書いた。
さて、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))
横軸が検索順位、縦軸が 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 144 http://abrahamcow.hatenablog.com/entry/2017/02/19/163408252 http://abrahamcow.hatenablog.com/entry/2016/09/18/034254355 http://abrahamcow.hatenablog.com/entry/2015/12/19/012545
こんな感じです。
アマゾンアフィリエイトのコーナー
R の使い方と統計の考え方を同時に学べる本としては、最近出た『R で楽しむ統計』がいいような気がします。
- 作者:奥村晴彦,石田基広,市川太祐,高橋康介,高柳慎一,福島真太朗
- 出版社/メーカー:共立出版
- 発売日: 2016/09/08
- メディア:単行本
- この商品を含むブログ (7件) を見る