Rのアソシエーションルールで、欲しい条件のデータを抽出する方法 [データサイエンス、統計モデル]
統計の講師をしていて、なるほど!と思う質問を受けることがあります。
せっかくなので、その中からピックアップして紹介できればと思います。
【質問】
アソシエーションルール(マーケットバスケット分析)を行うパッケージに apriori があります。
rules <- apriori(trans_dat, parameter=list(minlen=2, maxlen=3, support=0.2, confidence=0))
ルールの抽出は、inspect(rules) で抽出できますが、膨大なルールが出力される場合があります。
その際、自分が知りたい条件にマッチしたデータだけを抽出することができるか?
【回答】
例1: lift が 2.0以上のルールを抽出する方法
inspect(subset(rules, lift >= 2.0))
subset(inspect(rules), lift >= 2.0) ではないので、注意が必要です。
例2: ルールの文字列マッチの方法
「パン, コーヒー ⇒ 菓子」というルールを抽出したい場合
前提条件は、lhs に格納されます。
結果は、rhs に格納されます。
今、「前提条件として、パン かつ コーヒー を含む」
「結果として、菓子 を含む 」行を抽出したいので、
inspect(subset(res, subset = lhs %ain% c("パン", "コーヒー") & rhs %in% "菓子" ))
で抜き出すことができます。
参考までに、
%in%: 指定した文字列を含むルールを抽出
%ain%: 複数の文字列を指定し、それらを全て含むルールを抽出
%oin%: 複数の文字列を指定し、いずれかの文字列含むルールを抽出
上記の %ain% を %oin% に変更した場合は、
「前提条件として、パン または コーヒー を含む」かつ「結果として、菓子 を含む 」ルールが抽出されます。
inspect(subset(res, subset = lhs %oin% c("パン", "コーヒー") & rhs %in% "菓子" ))
せっかくなので、その中からピックアップして紹介できればと思います。
【質問】
アソシエーションルール(マーケットバスケット分析)を行うパッケージに apriori があります。
rules <- apriori(trans_dat, parameter=list(minlen=2, maxlen=3, support=0.2, confidence=0))
ルールの抽出は、inspect(rules) で抽出できますが、膨大なルールが出力される場合があります。
その際、自分が知りたい条件にマッチしたデータだけを抽出することができるか?
【回答】
例1: lift が 2.0以上のルールを抽出する方法
inspect(subset(rules, lift >= 2.0))
subset(inspect(rules), lift >= 2.0) ではないので、注意が必要です。
例2: ルールの文字列マッチの方法
「パン, コーヒー ⇒ 菓子」というルールを抽出したい場合
前提条件は、lhs に格納されます。
結果は、rhs に格納されます。
今、「前提条件として、パン かつ コーヒー を含む」
「結果として、菓子 を含む 」行を抽出したいので、
inspect(subset(res, subset = lhs %ain% c("パン", "コーヒー") & rhs %in% "菓子" ))
で抜き出すことができます。
参考までに、
%in%: 指定した文字列を含むルールを抽出
%ain%: 複数の文字列を指定し、それらを全て含むルールを抽出
%oin%: 複数の文字列を指定し、いずれかの文字列含むルールを抽出
上記の %ain% を %oin% に変更した場合は、
「前提条件として、パン または コーヒー を含む」かつ「結果として、菓子 を含む 」ルールが抽出されます。
inspect(subset(res, subset = lhs %oin% c("パン", "コーヒー") & rhs %in% "菓子" ))