タイトル通りです。とりあえず動かしてみたい!という願望でやってみました。理解は後からついてくると信じて、まずは手を動かしたいという人向け?の記事です。
読み込むデータの準備
前処理なしのトランザクションデータを{arules}パッケージで読み込む方法 - 六本木で働くデータサイエンティストのブログ にあるデータに1行追加したものを利用します。gistにアップロードしました。
ところでどうやら、CSVの最終行に空行が無いと読み込みエラーになるっぽい?ので、エラーが出たら空行付け足してみてください。
dat_basket.csv
はbasket形式のデータで、dat_single.csv
は同データをsingle形式にしたものです。
データの読み込み
read.transactions
の引数はどうなってるんじゃ?という人は?read.transactions
してみましょう。冷静に読むと丁寧に説明が書かれております。
# load library #### library(arules) # load CSV #### # format = "basket" の場合 mytran_basket <- read.transactions( file = "dat/dat_basket.csv" , format = "basket" , sep = "," , cols = NULL , rm.duplicates = T ) # format = "single" の場合 mytran_single <- read.transactions( file = "dat/dat_single.csv" , format = "single" , sep = "," , cols = c(1,2) , rm.duplicates = T )
生成したtranデータの確認
mytran_basket
もmytran_single
も同じ内容なので、mytran_basket
を使います。
> mytran_basket transactions in sparse format with 10 transactions (rows) and 19 items (columns) > summary(mytran_basket) transactions as itemMatrix in sparse format with 10 rows (elements/itemsets/transactions) and 19 columns (items) and a density of 0.1842105 most frequent items: ビール ソーセージ 柿ピー 牛肉 生野菜 (Other) 4 3 3 3 3 19 element (itemset/transaction) length distribution: sizes 2 3 4 5 1 4 4 1 Min. 1st Qu. Median Mean 3rd Qu. Max. 2.0 3.0 3.5 3.5 4.0 5.0 includes extended item information - examples: labels 1 アイス 2 おむつ 3 こんにゃく
適当にピックアップすると、
transactions in sparse format with 10 transactions (rows) and 19 items (columns)
transactionsは10件あり、品目数は19件と云うことがわかります。dat_basket.csv
は10行だしdat_single.csv
のtransaction-IDは10個なので確かにあってそうです。
most frequent items: ビール ソーセージ 柿ピー 牛肉 生野菜 (Other) 4 3 3 3 3 19
transactionに含まれる品目のうち、最も多いのはビールで次はソーセージで・・・と云うことがわかります。CSVの中を検索すると確かにあっています。
element (itemset/transaction) length distribution: sizes 2 3 4 5 1 4 4 1
transactionの長さとはtransactionに含まれる品目の数だそうで、長さ2と長さ5が1件で長さ3と長さ4が4件だと云うことがわかります。目視で確認すると確かにあっています。
というわけで、ここまでは読み込んだtransactionについての情報でした。
いよいよアソシエーション分析
流れは、apriori関数にデータを突っ込んでrulesを生成→inspectで中身を見る、です。
> mytran_basket.apr <- apriori(mytran_basket, parameter = NULL) Apriori Parameter specification: confidence minval smax arem aval originalSupport maxtime support minlen maxlen target ext 0.8 0.1 1 none FALSE TRUE 5 0.1 1 10 rules FALSE Algorithmic control: filter tree heap memopt load sort verbose 0.1 TRUE TRUE FALSE TRUE 2 TRUE Absolute minimum support count: 1 set item appearances ...[0 item(s)] done [0.00s]. set transactions ...[19 item(s), 10 transaction(s)] done [0.00s]. sorting and recoding items ... [19 item(s)] done [0.00s]. creating transaction tree ... done [0.00s]. checking subsets of size 1 2 3 4 5 done [0.00s]. writing ... [136 rule(s)] done [0.00s]. creating S4 object ... done [0.00s].
[136 rule(s)]
ということで136の相関ルールが抽出されました。inspect
してみましょう。
> inspect( head(sort(mytran_basket.apr,by="support"),15) ) lhs rhs support confidence lift count [1] {柿ピー} => {ビール} 0.3 1 2.500000 3 [2] {じゃがいも} => {牛肉} 0.2 1 3.333333 2 [3] {果物} => {豆腐} 0.2 1 3.333333 2 [4] {果物} => {生野菜} 0.2 1 3.333333 2 [5] {ソーセージ,柿ピー} => {ビール} 0.2 1 2.500000 2 [6] {ソーセージ,ビール} => {柿ピー} 0.2 1 3.333333 2 [7] {果物,豆腐} => {生野菜} 0.2 1 3.333333 2 [8] {果物,生野菜} => {豆腐} 0.2 1 3.333333 2 [9] {生野菜,豆腐} => {果物} 0.2 1 5.000000 2 [10] {チーズ} => {ワイン} 0.1 1 5.000000 1 [11] {チーズ} => {ソーセージ} 0.1 1 3.333333 1 [12] {おむつ} => {ドレッシング} 0.1 1 10.000000 1 [13] {ドレッシング} => {おむつ} 0.1 1 10.000000 1 [14] {おむつ} => {ビール} 0.1 1 2.500000 1 [15] {おむつ} => {生野菜} 0.1 1 3.333333 1 >
とりあえず一行目のこれ↓
lhs rhs support confidence lift count [1] {柿ピー} => {ビール} 0.3 1 2.500000 3
を解釈するには リフト値とは何? Weblio辞書 を読むと良いです。すると、一行目は
- support : 全体の30%が柿ピーとビールを一緒に購入している。
- confidence:柿ピー購入者の100%が柿ピーとビールを一緒に購入している。
- lift:ビールをいきなり購入するよりも、柿ピーを買ってビールを購入する確率が2.5倍大きい。
と解釈できます。ちなみにcountの3をtransactions数の10で割るとsupportとなっています。
おわりに
とりあえず動かすことができたら、support(支持度)・confidence(確信度)・lift(リフト値)について調べて見ると良いかと思われます。自分もまさに調べているところですので参考URLをご参照あれ。併売率・購買率などの用語で調べてもだいたいアソシエーション分析についての記事が見つかるので併せてどうぞ。
参考
- アソシエーション分析(1)
- Working with arules transactions and read.transactions – Learn by Marketing
- 前処理なしのトランザクションデータを{arules}パッケージで読み込む方法 - 六本木で働くデータサイエンティストのブログ
- リフト値とは何? Weblio辞書
- 第2回:アソシエーション分析~「使ってみたくなる統計」シリーズ ~ | ビッグデータマガジン
- 併売率 - Masataka Miki's Blog
- 【第二回】アソシエーション分析:購買分析からレコメンデーション応用まで (1/4):EnterpriseZine(エンタープライズジン)
- バスケット分析(アソシエーション分析) - unoy@wiki - アットウィキ
- アソシエーション分析 - ナンバーズ予想で学ぶ統計学