廿TT

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

R による検索キーワードのアソシエーション分析

(追記 10/31)この記事はあまりおもしろくないのでよろしければ
マーケットバスケット分析による検索キーワードのグルーピングと視覚化 - 廿TT
をご覧ください。



対象サイト:http://aaaaushisan.blogspot.jp/
期間:2013年05月26日〜06月26日
対象データ:オーガニック検索トラフィックのキーワード
手法:アソシエーション分析
アソシエーション分析のトランザクション*1:検索キーワードのかけあわせ

Google アナリティクスを使うと自分のサイトに訪れた人がどんなワードで検索してきたのかわかる、こんな風に。

f:id:abrahamcow:20130628231021p:plain


キーワードをスペースでくぎって集計するとこんな感じ。

f:id:abrahamcow:20130628231604p:plain
(出現頻度上位15件まで図示)

このデータを使ってアソシエーション分析をやってみる。

得られたルールから lift が 1 より大きいものだけを抜き出したのがこちら。

   lhs                 rhs                   support confidence      lift
1  {密度}           => {散布図}           0.02010050 0.66666667 16.583333
2  {散布図}         => {密度}             0.02010050 0.50000000 16.583333
3  {重ねる}         => {r}                0.02010050 1.00000000  2.426829
4  {r}              => {重ねる}           0.02010050 0.04878049  2.426829
5  {クリップボード} => {r}                0.03517588 1.00000000  2.426829
6  {r}              => {クリップボード}   0.03517588 0.08536585  2.426829
7  {order}          => {r}                0.03517588 0.77777778  1.887534
8  {r}              => {order}            0.03517588 0.08536585  1.887534
9  {ヒストグラム}   => {r}                0.04522613 0.75000000  1.820122
10 {r}              => {ヒストグラム}     0.04522613 0.10975610  1.820122
11 {r}              => {グラフ}           0.03015075 0.07317073  1.617886
12 {グラフ}         => {r}                0.03015075 0.66666667  1.617886

例えば {密度} => {散布図} の意味は、
「密度」を含むキーワードで検索してぼくのブログにたどり着くときは、「密度 散布図」というかけあわせが多い、
ということ。

まあ、あまりおもしろくない。

ふつう日本語で検索するとき、スペースの数は多くても2個が3個くらいだろう。

「イヌ 女王陛下 スイカの種 朝顔 プログラミング 数学 ☆」とか、そういうふうに検索してくれないとアソシエーション分析はあまり力を発揮しないと思う。

検索キーワードの分析にはもっと別の手法をつかったほうが良さそう、グラフ理論っぽいやつとか。

以下は R のコード。

#下処理として "Analytics すべてのウェブサイトのデータ オーガニック検索トラフィック 20130526-20130626.csv" の最初(ヘッダー)と最後(フッター)はあらかじめ消してある
#棒グラフ

kw <- read.csv(
  "~/Downloads/Analytics すべてのウェブサイトのデータ オーガニック検索トラフィック 20130526-20130626.csv"
  ,stringsAsFactors = FALSE
  )
#スペースでくぎる
kw_l <-strsplit(kw[,1]," ") 
# 1行目の"(not provided)" と201行目の集計行は捨てる
tab1 <-table(unlist(kw_l[2:200]))
tab1 <- sort(tab1,decreasing=TRUE)
#nihongo()
par(las=1, mai = c(0.85, 2.5, 0.68, 0.35))
barplot(tab1[15:1],horiz = TRUE)


#アソシエーション分析

library(arules)
kw1_t<-as(kw_l[2:200],"transactions")
kw1_a <- apriori(kw1_t,parameter = list(
  supp = 0.02, conf = 0.01,target = "rules"))
inspect(SORT(kw1_a, by = "lift"))

参考:
アソシエーション分析(1)
情報システム用語事典:アソシエーション分析(あそしえーしょんぶんせき) - ITmedia エンタープライズ
↑ confidence(信頼度、確信度)、support(支持度)、lift(リフト、リフト値)についての説明がある。
数理統計や確率論をかじった人にとっては、要は
confidence:条件付き確率(の推定値)
support:同時確率(の推定値)
ですな。
つまりアソシエーション分析でいう「相関」と数理統計の「相関」はまったく別ものなのです。
というか、たぶんアソシエーション分析のアルゴリズムを開発した人は統計の専門家じゃないので術語の使い方がまちがってるのだ。

*1:アソシエーション分析のトランザクションGoogleアナリティクスでいう「トランザクション」とは別物です。1トランザクション=レシート1枚分のデータだと思ってもらえればいいんじゃないでしょうか。バナナとキャベツを一緒に買ったときの「バナナ キャベツ」というひとかたまりのことをトランザクションと呼びます。