2.4 頻出アイテム集合

今、スーパーマーケットで4人のお客さん(f,g,h,i)が、商品a,b,c,dについて以下の通り買い物をしていたとする。

これらの購買データから、3人以上に共通するアイテム集合を求めてみよう。 手順は簡単で、それぞれのお客さんが購入したアイテム集合の全部分集合を求めておき、 それらを合計すればよい。 以下にその方法を示す。

> f=(a+1)*(b+1)*(c+1)*(d+1)
> g=(b+1)*(d+1)
> h=(a+1)*(c+1)*(d+1)
> i=(a+1)*(b+1)*(d+1)
> all=f+g+h+i
> all.show
a b c d + a b c + 2 a b d + 2 a b + 2 a c d + 2 a c + 3 a d + 3 a + b c d + b c +
 3 b d + 3 b + 2 c d + 2 c + 4 d + 4  

上記の結果から、商品a,bを購入していた顧客は2人で、a,c,dを購入した顧客も2人であることがわかる。 さらに、重みが3以上の項を選択するには以下のように termsGE関数を用いればよい。

> all.termsGE(3).show
 3 a d + 3 a + 3 b d + 3 b + 4 d + 4

また、アイテム集合"a b"を含むアイテム集合を選択するにはrestrict関数を、 逆に、アイテム集合"a b"に含まれるアイテム集合を選択 するにはpermit関数を用いればよい。

> all.restrict("a b").show
a b c d + a b c + 2 a b d + 2 a b 
> all.permit("a b").show
2 a b + 3 a + 3 b + 4  

ZDDパッケージには、上記の方法以外にも頻出アイテム集合を列挙し その結果をZDDオブジェクトとして格納する方法がいくつかある。 詳細は、freqpatA関数やlcm関数を参照されたい。