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