R でアソシエーション分析 - arules
R言語の arules を使ってアソシエーション分析を試してみました。
ソースは http://github.com/fits/try_samples/tree/master/blog/20180108/
はじめに
データセット
今回は、適当に作った下記データセット (100行) を使います。
1行が 1つの取引で ,
で区切られたアルファベット群が同時に購入された商品とみなします。(例えば、T,Y,C
なら T と Y と C 商品を同時購入)
data.basket
C,S,M,R T,Y,C P,Y,C,M O,W,L R O,U,R,L P W,C T,O,W,B,C C,T,W,B,Y,F,D ・・・ R,P,S B, B,S B,F C,F,N
インストール
install.packages
で arules をインストールしておきます。
インストール例
> install.packages("arules")
実装
arules の apriori
関数で Apriori アルゴリズムを使ったアソシエーションルールの抽出を行えます。
read.transactions
でデータファイルを transactions オブジェクト化して、apriori の data 引数として使います。
parameter
引数を使って support
(支持度)が 0.05 以上 ※、confidence
(確信度)が 0.7 以上のものを抽出するようにしました。
※ 今回使用するデータセットの件数が 100件なので 0.05 は 5件になる
sample.R
library(arules) args <- commandArgs(TRUE) # データファイルを transactions オブジェクト化 tr <- read.transactions(args[1], format = "basket", sep = ",") # アソシエーションルールの抽出 tr.ap <- apriori(tr, parameter = list(support = 0.05, confidence = 0.7)) # lift 値でソート inspect(sort(tr.ap, by = "lift"))
実行
Rscript で実行してみます。
実行結果(support = 0.05, confidence = 0.7)
> Rscript sample.R data.basket ・・・ lhs rhs support confidence lift count [1] {B,O} => {W} 0.05 0.8333333 3.333333 5 [2] {B,T} => {C} 0.05 1.0000000 2.439024 5 [3] {T} => {C} 0.08 0.8000000 1.951220 8 [4] {N} => {C} 0.10 0.7142857 1.742160 10
補足
なお、当然ながら support や confidence の条件を緩和すると結果数が大きく変わります。
実行結果2(support = 0.03, confidence = 0.5)
> Rscript sample2.R data.basket ・・・ lhs rhs support confidence lift count [1] {B,C,W} => {T} 0.04 0.8000000 8.000000 4 [2] {B,C,F} => {T} 0.03 0.7500000 7.500000 3 [3] {B,C,R} => {T} 0.03 0.7500000 7.500000 3 [4] {F,W} => {T} 0.03 0.6000000 6.000000 3 [5] {B,R,S} => {Y} 0.03 0.6000000 6.000000 3 ・・・ [128] {O,W} => {B} 0.05 0.5000000 1.190476 5 [129] {D,W} => {B} 0.03 0.5000000 1.190476 3 [130] {D,S} => {B} 0.03 0.5000000 1.190476 3