SSブログ

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% "菓子" ))

nice!(3)  コメント(0) 
共通テーマ:学問