2015年4月25日土曜日

つまずかないR言語入門(アソシエーションルール、バスケット分析)

ようやく、通常の仕事に近い領域が扱えそうになってきた。

「いまさら」といわれそうだが、データマイニングという単語が広く
知られ始めたころに、オムツとビールの話が必ずと言ってよいほど、語られた。

"「商品Aを買うと商品Bも買う」のようなルールを簡潔に、{A}⇒{B}と
表すことにする。相関ルールは、通常X⇒Yの形式で表す。ルールの「⇒」
の左辺を条件部(antecedent: left-hand-side or LHS)、右辺を結論部
(consequent: right-hand-side or RHS)と呼ぶ。最も広く知られている
相関ルールを検出するアルゴリズムはAprioriである。"
同志社大学「R、R言語、R環境・・・・・・」より引用

以来、色々な論文を読んだりしたが、「apriori」という単語が出てきて、
もともとの意味は、「あらかじめ決められた」という意味らしいが、そう
いう文脈で使われたのは理解できたが、さらに調べると、IBMが
開発した、アソシエーションルールの関数であることがわかった。

まず、「arules」というパッケージをインストールする。
いつものように身近なミラーサイト(筆者の場合、TSUKUBA)を選び、

> install.packages("arules")
を実行。

URL 'http://cran.md.tsukuba.ac.jp/bin/windows/contrib/3.1/arules_1.1-6.zip' を試しています
Content type 'application/zip' length 1803031 bytes (1.7 MB)
開かれた URL
downloaded 1.7 MB

パッケージ ‘arules’ は無事に展開され、MD5 サムもチェックされました

ダウンロードされたパッケージは、以下にあります
C:\Users\xxxxx\AppData\Local\Temp\RtmpWs7VDR\downloaded_packages

と表示されインストール成功。

その前に、著作権に問題が起きないように、自分の日常生活でスーパーで
買いそうなアイテムを適当に作成し、basket1.csvtとして、作業フォルダーに
保存しておいた。
---2015年6月7日修正(basket1.csvのデータに空の行が入っていたためイタリック体の部分を以下修正します--

meat,potato,milk,carrot
bread,milk,jam,ham,lettuce
rice,potato,carrot,meat,milk
cheese,ham,beer,potato
cabbage,beef,carrot
juice,water,milk,potato
coffee,milk,bread,butter
beans,tomato,pasta
bread,meat,milk,juice
bread,cabbage,chicken,juice

> library(arules)

> b.bas<-read.transactions(file="basket1.csv",sep=",",format="basket")
以下にエラー asMethod(object) :
can not coerce list with transactions with duplicated items

重複したitemsがあるとのことで、rm.duplicate=TRUEとすることした。

> b.bas<-read.transactions(file="basket1.csv",sep=",",format="basket",rm.duplicate=TRUE)

ここで「apriori」を適用すると

> b.ap<-apriori(b.bas)

Parameter specification:
confidence minval smax arem aval originalSupport support minlen maxlen
0.8 0.1 1 none FALSE TRUE 0.1 1 10
target ext
rules FALSE

Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE

apriori(b.bas) 中で警告がありました:
You chose a very low absolute support count of 1. You might run out of memory! Increase minimum support.

apriori - find association rules with the apriori algorithm
version 4.21 (2004.05.09) (c) 1996-2004 Christian Borgelt
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[22 item(s), 10 transaction(s)] done [0.00s].
sorting and recoding items ... [22 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 done [0.00s].
writing ... [240 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].

> inspect(head(sort(b.ap,by="support"),n=5))
lhs rhs support confidence lift
1 {meat} => {milk} 0.3 1 1.666667
2 {carrot,
meat} => {potato} 0.2 1 2.500000
3 {meat,
potato} => {carrot} 0.2 1 3.333333
4 {carrot,
potato} => {meat} 0.2 1 3.333333
5 {carrot,
meat} => {milk} 0.2 1 1.666667

という結論で、肉を買うと牛乳を買う可能性が高いという結論になった。

それぞれの意味の解釈は次のエントリーで行います。


----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

0 件のコメント:

コメントを投稿