kaggleの「Transactions from a bakery」を最近見てたのと、
この本にもちょうど出てたので
https://www.ohmsha.co.jp/book/9784274224010/
相関ルールとaprioriについて軽くメモ
##相関ルール
どのような商品がお互いに関連しているのか、それを発見するための手法に「相関ルール」というものがある。
###代表例
-
スーパーマーケットのカゴに入っている商品の組み合わせ
-
ある病気に対する依存症
とかこういうものの、関連状況を数字化してみるもの
##用語
※スーパーマーケットのカゴの中身で説明
-
項目:購入する商品
-
項目セット:項目の集合(ようはカゴの中の商品全体)
-
トランザクションセット:購入した組み合わせ
■トランザクションの例
トランザクションID | 項目セット |
---|---|
トランザクション1 | りんご, ビール,コメ,鶏肉 |
トランザクション2 | りんご, ビール,コメ |
トランザクション3 | りんご, ビール |
・・・ | ・・・ |
詳しくは書籍参照
apyoriで確認
pip install apyori
from apyori import apriori
transactions = [
['apple', 'beer','rice','chiken'],
['apple', 'beer','rice'],
['apple', 'beer'],
['apple', 'peer'],
['milk', 'beer','rice','chiken'],
['milk', 'beer','rice'],
['milk', 'beer'],
['milk', 'peer'],
]
results = list(apriori(transactions))
for item in results:
for data in item:
print(data)
print("----")
frozenset({'apple'})
0.5
[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'beer'})
0.75
[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'beer'}), confidence=0.75, lift=1.0)]
----
frozenset({'chiken'})
0.25
[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'chiken'}), confidence=0.25, lift=1.0)]
----
frozenset({'milk'})
0.5
[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0)]
----
frozenset({'peer'})
0.25
[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'peer'}), confidence=0.25, lift=1.0)]
----
frozenset({'rice'})
0.5
[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'rice'}), confidence=0.5, lift=1.0)]
----
frozenset({'apple', 'beer'})
0.375
[OrderedStatistic(items_base=frozenset({'apple'}), items_add=frozenset({'beer'}), confidence=0.75, lift=1.0), OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'chiken', 'apple'})
0.125
[OrderedStatistic(items_base=frozenset({'apple'}), items_add=frozenset({'chiken'}), confidence=0.25, lift=1.0), OrderedStatistic(items_base=frozenset({'chiken'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'peer', 'apple'})
0.125
[OrderedStatistic(items_base=frozenset({'apple'}), items_add=frozenset({'peer'}), confidence=0.25, lift=1.0), OrderedStatistic(items_base=frozenset({'peer'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'rice', 'apple'})
0.25
[OrderedStatistic(items_base=frozenset({'apple'}), items_add=frozenset({'rice'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'rice'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'chiken', 'beer'})
0.25
[OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'chiken'}), confidence=0.3333333333333333, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'chiken'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333)]
----
frozenset({'milk', 'beer'})
0.375
[OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'beer'}), confidence=0.75, lift=1.0)]
----
frozenset({'rice', 'beer'})
0.5
[OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'rice'}), confidence=0.6666666666666666, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'rice'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333)]
----
frozenset({'chiken', 'milk'})
0.125
[OrderedStatistic(items_base=frozenset({'chiken'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'chiken'}), confidence=0.25, lift=1.0)]
----
frozenset({'chiken', 'rice'})
0.25
[OrderedStatistic(items_base=frozenset({'chiken'}), items_add=frozenset({'rice'}), confidence=1.0, lift=2.0), OrderedStatistic(items_base=frozenset({'rice'}), items_add=frozenset({'chiken'}), confidence=0.5, lift=2.0)]
----
frozenset({'peer', 'milk'})
0.125
[OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'peer'}), confidence=0.25, lift=1.0), OrderedStatistic(items_base=frozenset({'peer'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0)]
----
frozenset({'rice', 'milk'})
0.25
[OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'rice'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'rice'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0)]
----
frozenset({'chiken', 'apple', 'beer'})
0.125
[OrderedStatistic(items_base=frozenset({'apple', 'beer'}), items_add=frozenset({'chiken'}), confidence=0.3333333333333333, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'chiken', 'apple'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'chiken', 'beer'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'rice', 'apple', 'beer'})
0.25
[OrderedStatistic(items_base=frozenset({'apple', 'beer'}), items_add=frozenset({'rice'}), confidence=0.6666666666666666, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'rice', 'apple'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'rice', 'beer'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'chiken', 'rice', 'apple'})
0.125
[OrderedStatistic(items_base=frozenset({'chiken', 'apple'}), items_add=frozenset({'rice'}), confidence=1.0, lift=2.0), OrderedStatistic(items_base=frozenset({'rice', 'apple'}), items_add=frozenset({'chiken'}), confidence=0.5, lift=2.0), OrderedStatistic(items_base=frozenset({'chiken', 'rice'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'chiken', 'milk', 'beer'})
0.125
[OrderedStatistic(items_base=frozenset({'chiken', 'beer'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'milk', 'beer'}), items_add=frozenset({'chiken'}), confidence=0.3333333333333333, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'chiken', 'milk'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333)]
----
frozenset({'chiken', 'rice', 'beer'})
0.25
[OrderedStatistic(items_base=frozenset({'chiken', 'beer'}), items_add=frozenset({'rice'}), confidence=1.0, lift=2.0), OrderedStatistic(items_base=frozenset({'rice', 'beer'}), items_add=frozenset({'chiken'}), confidence=0.5, lift=2.0), OrderedStatistic(items_base=frozenset({'chiken', 'rice'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333)]
----
frozenset({'rice', 'milk', 'beer'})
0.25
[OrderedStatistic(items_base=frozenset({'milk', 'beer'}), items_add=frozenset({'rice'}), confidence=0.6666666666666666, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'rice', 'beer'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'rice', 'milk'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333)]
----
frozenset({'chiken', 'rice', 'milk'})
0.125
[OrderedStatistic(items_base=frozenset({'chiken', 'milk'}), items_add=frozenset({'rice'}), confidence=1.0, lift=2.0), OrderedStatistic(items_base=frozenset({'chiken', 'rice'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'rice', 'milk'}), items_add=frozenset({'chiken'}), confidence=0.5, lift=2.0)]
----
frozenset({'chiken', 'rice', 'apple', 'beer'})
0.125
[OrderedStatistic(items_base=frozenset({'chiken', 'apple', 'beer'}), items_add=frozenset({'rice'}), confidence=1.0, lift=2.0), OrderedStatistic(items_base=frozenset({'rice', 'apple', 'beer'}), items_add=frozenset({'chiken'}), confidence=0.5, lift=2.0), OrderedStatistic(items_base=frozenset({'chiken', 'rice', 'apple'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'chiken', 'rice', 'beer'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)]
----
frozenset({'chiken', 'rice', 'milk', 'beer'})
0.125
[OrderedStatistic(items_base=frozenset({'chiken', 'milk', 'beer'}), items_add=frozenset({'rice'}), confidence=1.0, lift=2.0), OrderedStatistic(items_base=frozenset({'chiken', 'rice', 'beer'}), items_add=frozenset({'milk'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'rice', 'milk', 'beer'}), items_add=frozenset({'chiken'}), confidence=0.5, lift=2.0), OrderedStatistic(items_base=frozenset({'chiken', 'rice', 'milk'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.3333333333333333)]
----
#見方
例えば
frozenset({'apple', 'beer'})
について。
-
0.375 ⇒ 支持度=すべてのトランザクションにおいてどの程度の頻度でこの組み合わせを含むトランザクションがあるかの割合。
-
OrderedStatistic(items_base=frozenset({'apple'}), items_add=frozenset({'beer'}), confidence=0.75, lift=1.0)
これは{apple⇒beer}ということで、具体的にはappleを購入した時にbeerを購入する、という意味。
・confidence=0.75 ⇒ 信頼度=項目Xを購入した場合にどの程度Yも購入されているかを示す割合。
※この例ではappleを購入したときにbeerを購入している割合。(75%になっているということ)
上記の逆パターン{beer⇒apple}
OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'apple'}), confidence=0.5, lift=1.0)
逆パターンで信頼度(confidence)=0.5となっているように、信頼度は一致しないのがふつう。
※こっちはbeerを購入したときに、appleを購入している割合.
リフト値
1を基準にする
・1よりでかい ⇒ 大きいほどXを購入すればYも購入する可能性が高くなる
・1よりちいさい ⇒ 小さいほどXを購入してもYを購入する可能性が低い
・1のばあい ⇒ XとYの購入に関連がない
という感じになってる。
例えば
frozenset({'chiken', 'rice'})
について、この場合どっちでもいいけどリフト値が2.0 なので関連性あり。一緒に購入する可能性あるよってことになる。