相関ルール - Top Page | 中川研究室

データマイニング &
パターンマイニング
目次
相関ルール
Apriori algorithm
頻出アイテム集合を探す
subset関数
Apriori-Gen関数
相関ルールを探す
FP-growth algorithm
さまざまな手法
列パタンのマイニング:PrefixSpan
相関ルールとは
「目玉商品Aと日用品Bを購入した顧客は、同時に高級品C
も高い確率で購入する」
•A,B,Cのセット商品を発売する
•顧客の便利性を考えて、商品の配置を近づける
{目玉商品A、日用品B}⇒{高級品C}と表現できる
{X}⇒{Y}
定義
{X}⇒{Y}
X, Y
I={i1,i2,…,im}
T
相関ルール
X:前提部, Y:結論部
アイテム集合, ik, k=1,.,mはアイテム、例えば個
別の商品
トランザクション(例えば買い物かごの中身)=
アイテムの集合
support(X)
支持度: support
アイテム集合X含むTの全Tに対する割合
conf(X⇒Y)
確信度: confidence
Xを含むTのうち、Yを含むTの全Tに対する割
合 =support(XUY)/support(X)
価値のある相関ルールを求める
 m種類のアイテムで
m k
k 2  k (2  2)個のルールが存在する
 
m
 Mこのアイテムの中からkこを選ぶ方法=  
k
 
m
 kこのアイテムの各々が前提に来るか、結論に来る
かのわけ方= 2k
 全部のアイテムが前提に集まる場合と、結論に集ま
る場合は、ルールにならないので排除
  2k -2
価値のある相関ルールを求める
 m種類のアイテムで
m k
k 2  k (2  2)個のルールが存在する
 
m
 アイテムが10種類の場合でもルールは約57,000も
ある
 価値のある相関ルールはわずかだけ
 価値のある相関ルールとは
 確信度 conf が高い
 支持度 support が高い
アプリオリアルゴリズム
(Agrawal 1994, VLDB94)
• 最小確信度、最小サポート(min support)を
与えて確信度、サポートがそれ以上の相関
ルールを発見する
support(XUY)>α
support(XUY)/support(X)=conf(X⇒Y) >β
を満たす相関ルールX⇒Yを取り出すのが目的
効率よく探し出すために
 アイテム集合のサポートは単調減であることを使う。
 頻出アイテム集合とは、最小サポート以上のサポートを持つアイテム集合
I  Jならば support(I )  support(J )
{A,B}が頻出アイテム集合でない
↓
{A,B,C}も頻出アイテム集合ではない
 この背反を取ると
{A,B,C}が頻出アイテム集合⇒{A,B}も頻出アイテム集合
 support(XUY)とsupport(X)が必要。
 support(XUY)は最小サポート以上であるので、XUYの部分集合であるXのサポー
トも最小サポート以上( XとY はともに条件なので、XUYは、 X、Y 単独よりも厳し
い条件)
 最小サポート以上の頻出アイテム集合のサポートを求めておけばすべての相関
ルールの確信度を求めることができる
アルゴリズム
1. support(XUY)>αを満たす頻出アイテム集合をすべ
て探し出し、サポートを求める
2. support(XUY)/support(X)>β
を満たす相関ルールを探し出す
(1)が求まれば、それを使うと(2)は簡単
どうやって(1)を効率よくもとめるか
Apriori algorithm
k アイテム集合
k個のアイテムを持つアイテム集合
Lk
頻出kアイテム集合(これらは最小サポート以上を持
つ)以下の2つのフィールドからなる: (1)アイテム集合、
(2) support count
Ck
頻出アイテム集合の可能性のある k アイテム集合:
以下の2つのフィールドからなる (1) アイテム集合 (2)
support count
C’k
TIDs(Transaction ID) のtransactionから生成された
kアイテム集合の候補の集合
頻出アイテム集合を探し出す
{A,B}が頻出アイテム集合でない⇒
{A,B,C}も頻出アイテム集合ではない
• 要素数の少ないサポートから求めていき、最小サ
ポートより少ない集合を含めるものは計算しない
1. データベースをスキャンしCk中の各サポートを計算する
2. Ck中の最小サポートを満足する部分をLkとする
3. LkからCk+1を生成する
Apriori algorithm
L1={頻出アイテム集合}
for ( k=2; Lk-1≠Ø; k++) do
{ Ck= apriori_gen(Lk-1) ; // New candidates
for (all transactions t in D )do
{ Ct = subset(Ck , t) // Candidates contained in t;
for (all candidates c in Ct) do
{c.count++}
};
Lk ={c in Ck | c.count≥ minsup}
}
Answer ∪k Lk
}
Apriori-Gen関数
 結合フェーズ
Lk中から最後の要素だけが異なる二つのアイテ
ム集合を結合して要素数k+1の候補アイテム集
合を作る
 枝狩りフェーズ
結合フェーズで作った候補アイテム集合に対し、
要素数kの部分集合がLkに含まれていないような
候補を除去する
Transaction dataの例
データベース D
TID
item
00001
A,C,D
00002
B,C,E
00003
A,B,C,E
00004
B,E
頻出アイテム集合を計算する例
min support =2
頻出アイテム集合の候補
C1
アイテ
ム集合
{A}
{B}
{C}
{D}
{E}
subset関数
&
minsupport
>=2のものを
選択
頻出アイテム集合
L1
アイテ
ム集合
{A}
{B}
{C}
{E}
頻出アイテム集合の候補
C2
カウン
ト
2
3
3
3
アイテム集合
AprioriGen関数
{A,B}
{A,C}
{A,E}
{B,C}
{B,E}
{C,E}
頻出アイテム集合を計算する例
つづき
頻出アイテム集合の候補
C2
頻出アイテム集合
{A,E}
{B,C}
{B,E}
{C,E}
AprioriGen関数
L2
アイテム集合 subset関数
アイテム
&
{A,B}
集合
minsupport
{A,C}
>=2のものを
選択
{A,C}
頻出アイテム集合の候補
C3
アイテム集合
カウン
ト
2
{B,C} 2
{B,E} 3
{C,E} 2
{B,C,E}
ここだけが
異なる
subset
関数
L3
アイテム集合
カウント
{B,C,E}
2
頻出アイテム集合
頻出アイテム集合C3
{A,B,C}
{A,B,D}
{A,C,D}
頻出アイテム集合の候補L4
{A,B,C,D}
{A,C,D,E}
{A,C,E}
{B,C,D}
要素数3の部分集合
{A,D,E}
が含まれていないので、
{A,C,D,E}は排除
Apriori_Gen(Lk)
{Ck+1=φ;
foreach p,q in Lk such that ( p.item1=q.item1,…,
p.itemk-1=q.itemk-1, p.itemk ≠ q.itemk)
{c=p U q.itemk;
Ck+1=Ck+1U{c}
}
//prune
for (all itemsets c in Ck+1 )do
for(all k subsets s of c )do
{if s not in Lk
then delete c from Ck+1}
}
return Ck+1
}
subset関数
 トランザクションtに含まれる候補アイテム集合を見
つけ出す
例
 t={A,B,C,E}
 SUBSET(C2,t)={{A,B}1、{A,C}2、 {A,E}1、
{B,C}2、 {B,E}3、 {C,E}2} (数字は出現回数)
がsubset関数で生成されるが、そのうち
min support=2以上のものだけを選ぶと
{{A,C}、 {B,C}、 {B,E}、{C,E}}
相関ルールの導出(枝刈り1)
a~  aについて support(a~)  support(a)
support(l )
~
~
conf(a  (l  a )) 
support(a~)
support(l )
conf(a  (l  a)) 
support(a)
conf(a~  (l  a~))  conf(a  (l  a))
a~  { A, B}
a  { A, B, C}
l  { A, B, C , D}
conf({A, B}  {C , D})
conf({A, B, C}  {D})
conf(a~  (l  a~))が最小確信度以上なら ば
conf(a  (l  a))も最小確信度以上であ る
相関ルールの導出:枝刈り2
conf(a~  (l  a~))が最小確信度以上なら ば
conf(a  (l  a))も最小確信度以上であ る
対偶をとる
c  l  a~、 c~  l  aとする
c~  c
conf((l  c~)  c~)が最小確信度未満ならば
conf((l  c)  c)も最小確信度未満であ る
c  {C , D}
c~  {D}
l  { A, B, C , D}
conf({A, B, C}  {D})
conf({A, B}  {C , D})
• {A,B,C}⇒{D}と{A,B,D}⇒{C}のどちらか一方でも
最小確信度未満ならば
• {A,B}⇒{C,D}も最小確信度未満である
FP-growth algorithm
• Apriori algorithm の効率を大きく改善するア
ルゴリズム(J.Han, 1999 SIGMOD)
I = {a1; a2; : : :; am} be a set of items
a transaction database DB = {T1; T2; : :Tn}
 where Ti (i =1,..,n) is a transaction which
contains a set of items in I.
The support1 (or occurrence frequency) of a
pattern A, which is a set of items is the number
of transactions containing A in DB.
A is a frequent pattern if A's support is no less
than a predefined minimum support threshold,
ξ.
FP-treeの定義
• 要素
– one root “null”
– a set of item prefix subtrees as the children of the root
– a frequent-item header table
• Node in the item prefix subtree consists of
– (1)item-name, (2)count, (3)node-link
• frequent-item header table con-sists of
– (1) item-name and (2) head of node-link
例
Item name
Count
Item link
a:3 ----->
FP-tree construction algorithm
Step1:DBをscanし、ξ以上の頻度を持つfrequent item
Fを集め、頻度の降順にソート。
Step2:DBの格要素(transaction)において、それに含ま
れるitemを頻度の降順にソートし、
Step3:
for( each transaction: L) do
{ root のnullノードからスタートして、以下のように
rootにぶら下がる木を作る。ただし、T=rootする;
L=[p|P], pは先頭の要素、Pは残りのリスト;
insert_tree([p|P],T) }
insert_tree([p|P],T)
{
If T has a child N such that N.item-name= p.item-name,
then increment N's count by 1;
else
{ create a new node N, and let its count be 1;
its parent link be linked to T;
its node-link be linked to the nodes with the same
item-name via the node-link structure.
}
If P is nonempty,
then call insert tree(P;N) recursively
}
FP-Treeの木の高さは、ひとつのtransaction
に含まれるitemの個数の最大値
Rootからleafまでの枝(path)において、item
は頻度の降順に並んでいる。
FP-Treeからのルール導出
• Property 3.1 (Node-link property) For any
frequent item ai, all the possible frequent
patterns that contain ai can be obtained by
following ai's node-links,starting from ai's
head in the FP-tree header.
パタンマイニング関数:mine
Header table の中で、一番頻度の低い(つ
まり、一番下の) itemから順にパターンを探
す。
(p:3)の上に来るパタンはpの条件付パタン
ベースと呼ばれ、以下の通り。
 {<f:4; c:3; a:3;m:2>| p}, {<c:1; b:1>| p}
pの上に共通に来るパタンはcのみなので、
抽出されたパタンは (cp:3)だけ。
つづき
mの上には、<f:4; c:3; a:3>,
<f:4; c:3; a:3; b:1> が来るが、共通するパタ
ンは< f:3; c:3; a:3>だけ。
そこで、mine(< f:3; c:3; a:3>|m)を実行する
と(am:3),(cm:3),(fm:3)が得られる。
次に、mine(< f:3; c:3>|am)を実行すると、
(cam:3),(fam:3)が得られる。
さらに(<f:3>|cam)を実行すると、(fcam:3)が
得られる。 以下他のパタンについても同様。
Conditional FP-tree は、条件のitem(例えば1番上の例だと p)のcountに合わせ
る。
パタン・マイニング・アルゴリズム
• Input: FP-tree constructed based on Algorithm 1,using DB and a
minimum support threshold ξ.
• Output: The complete set of frequent patterns.
• Method: Call FP-growth (FP-tree ; null).
Procedure FP-growth (Tree、α )
{
if Tree contains a single path P
then for each combination (denoted as β ) of the nodes in the
path P do
{generate pattern β∪α
[ with support =minimum support of nodes in β]}
else for each ai in the header of Tree do
{generate pattern β= ai ∪α
[ with support = ai :support};
construct 's conditional pattern base;
β‘s conditional FP-tree :Treeβ;
if Tree β≠Ø
then call FP-growth (Treeβ, β) }
}
その他
•
•
•
•
•
分類階層つき相関ルール
数値属性を1個持つ相関ルール
数値属性を2個持つ相関ルール
並列アルゴリズム
視覚化手法
Sequential pattern mining
列パタンのマイニング
抽出対象のデータは要素の列の集合
要素はitemの集合
min_support以上の出現頻度を持つ部分列
をすべて探し出すこと
対象のデータ
 I={i1,i2,….,in}, ijはitem
 Sequenceは順序付きのitem集合の列
 Sequence:S=<s1,s2,…,sl>,要素: Si  I for1  i  l
 Si=(x1,x2,…,xm) xiはIの要素(=item)。 1個しかitemを含まな
い(x)はxと略記

 Sequence:Sの長さ: Sが含むitem数
 length(<(a)(b)>)=length(<ab>)=2, length(<(a b)>)=2
 β(=b1,..,bm) is super-sequence of α(=a1,…,an) (逆にαはβ
のsubsequence)とは 次の条件を満たす1≤j1≤j2≤…. ≤
jn≤mなるサフィックス列が存在すること。
a1  bj1かつa2  bj2 ,.....,an  bjm
 Sequence database: <sid,s>の集合。sidはseqience:sの名前
Sequence databaseの例 :S
Sequence id
Sequence
10
<a(abc)(ac)d(cf)>
20
<(ad)c(bc)(ae)>
30
<(ef)(ab)(df)cb>
40
<eg(af)abc>
Prefix, projection and postfix
 α=<e1,e2,..en>, β=<e1’,e2’,..,em’>, m≤n
 次の条件を満たすとき、βはαのprefix
 (1)ei’=ei for (i≤m-1)
'
 (2) em
 em
 (3)em-e’mの要素はe’mの要素より辞書順で後のもの
 βをαのsubsequenceとするとき、αのsubsequence α’がα
のprojectionであるとは以下のように定義される
 α’はprefix βを持つ
 α’のsuper-sequenceであり、prefixβを持ち、かつαの
subsequenceであるものは存在しない。(α’は上記の条件を持た
す最大の列
Prefix, projection and postfix
 α’=<e1,e2,..,ek>はβ=< e1,e2,..,em-1,e’m>に対するαの
projection.ただし(m≤k)
 このとき列γ=<e’’m,em+1,…,ek>はβに対するαのpostfix
ただし、e’m+ e’’m=em。
'
e
m  em
 つまり α=βγ
 例:α=< (a) (b) (a b c) (f) >
β=< (a) (b) (a b )> γ=<(c) (f) >
 例:<a>,<aa>,<a(ab)>,<a(abc)>は<a(abc)(ac)d(cf)>のprefixだが、
<ab>や<a(bc)>はprefixではない??
prefix <ab> =<(a)(b)> のpostfixは <(_c) )(ac)d(cf)>。2項目の(abc)は
集合だから、いきなり<ab>をprefixにしてもよい。
PrefixSpanの動作
sequence data base:S の例を用いて
ただし、min_support=2
 Step 1: length=1の列パタンを全て求める
 <a>:a, <b>:4, <c>:4, <d>:3, <e>:3, <f>:3
 Step 2:列パタンの分割(辞書順に含むアイテムを
拡大していくように)
 a以外は持たないもの、
 a b以外は持たないもの、
 a b c以外は持たないもの、
 ……
Step 3:列パタンの部分集合を数え上げる
これは、step 2の各結果に対して、projection
を数え上げ、その結果の列パタンに同様の数
え上げを再帰的に繰り返す。
Step 3のSにおける動作例
<a>に対するprojectionのデータベースは
<a(abc)(ac)d(cf)>  <( abc)(ac)d(cf)> (1)
<(ad)c(bc)(ae)>  <(_d)c(bc)(ae)> (2)
<(ef)(ab)(df)cb>  <(_b)(df)cb> (3)
<eg(af)cbc>  <(_f)cbc> (4)
prefix<a>を含むlength=2の列パタン
(min_support=2)は上記の結果のprojection
たちを調べると
 <aa>:2 (1),(2), <ab>:4 (1)(2)(3)(4)
 <(ab)>:2 (1)(3), <ac>:4 (1)(2)(3)(4)
 <ad>:2 (1)(3), <af>:2 (1)(3)
つづき
 Prefix <aa>を持つpostfix subsequence(<aa>-projected
database) は(1)から得られる< (_bc)(ac)d(cf)>だけ。よって、
min_support以上の頻出パタンはここからは生成されない。
よって、このパタンは修了

<ab>-projected databaseからは
<(_c) (ac)d(cf)> (1) , <(_c)a> (1)(2), <c> (1)-(4)
 この結果を再帰的に調べると <(_c)>:2, <(_c)a>:2, <a>:2, <c>:3
(全部書くと<a(bc)>, <a(bc)a>, <aba>, <abc>)
 <(ab)>-projected databaseからは <(_c) (ac)d(cf)>,
<(df)cb>
 この結果を再帰的に調べると <(ab)c>, <(ab)d>, <(ab)f>, <(ab)dc>
 以下同様に全ての列パタンを再帰的に調べ、min_support
以上の列パタンを数え上げる。
例:SからPrefixSpanで得た列パタン
Prefix
Projected postfix
列パタン
<a>
<(abc)(ac)d(cf)>,
<(_d)c(bc)(ae)>,
<(_b)(df)cb>,<(_f)cbc>
<a>,<aa>,<ab>,<a(bc)>,<a(bc)a>,<aba>,<
abc>,<(ab)>,<(ab)c>,<(ab)d>,<(ab)f>,<(a
b)dc>,<ac>,<aca>,<acb>,<acc>,<ad>,<ad
c>,<af>
<b>
<(_c)(ac)d(cf)>, <(_c)(ae)>,
<(df)cb>, <c>,
<b>, <ba>, <bc>, <(bc)>, <(bc)a>, <bd>,
<bdc>, <bf>
<c>
<(ac)d(cf)>, <(bc)(ae)>, <b>,
<bc>
<c>, <ca>, <cb>, <cc>,
<d>
<(cf)>, <c(bc)(ae)>,<(_f)cb>
<d>, <db>, <dc>, <dcb>
<e>
<(_f)(ab)(df)cb>, <(af)cbc>
<e>, <ea>, <eab>, <eac>, <eacb>, <eb>,
<ebc>, <ec>, <ecb>, <ef>,
<efb>,<efc>,<efcb>
<f>
<(ab)(df)cb>, <cbc>
<f>, <fb>, <fbc>, <fc>, <fcb>
PrefixSpanの効率化
 Apriori propertyの利用
 例:<ac>は列パタン(すなわちmin_support以上)だが、
<ad>は列パタンでない(min_support未満)の場合は、両
者を含む<acd>およびそのsuper-sequenceは列パタン
にならないことは明白なので、調べる必要はない。
 Pointer利用によるメモリの効率的使用
 例えば、<a(abc)(ac)d(cf)>の処理では、その部分列が何
回も処理される。
例えば、<a>のprojection:①<(abc)(ac)d(cf)>と、<ab>の
projection:②<(_c) )(ac)d(cf)>。これらが別々にメインメ
モリに格納されることを防ぐために、projection database
には、s①=2(offset), s②=4(offset)を記憶しておけば、
<a(abc)(ac)d(cf)>は1箇所で記憶しておくだけで良い。