LoginSignup
3
2

More than 3 years have passed since last update.

相関ルール apriori

Posted at

kaggleの「Transactions from a bakery」を最近見てたのと、
この本にもちょうど出てたので
https://www.ohmsha.co.jp/book/9784274224010/

相関ルールとaprioriについて軽くメモ

相関ルール

どのような商品がお互いに関連しているのか、それを発見するための手法に「相関ルール」というものがある。

代表例

  • スーパーマーケットのカゴに入っている商品の組み合わせ

  • ある病気に対する依存症

とかこういうものの、関連状況を数字化してみるもの

用語

※スーパーマーケットのカゴの中身で説明

  • 項目:購入する商品

  • 項目セット:項目の集合(ようはカゴの中の商品全体)

  • トランザクションセット:購入した組み合わせ

■トランザクションの例

トランザクションID 項目セット
トランザクション1 りんご, ビール,コメ,鶏肉
トランザクション2 りんご, ビール,コメ
トランザクション3 りんご, ビール
・・・ ・・・

詳しくは書籍参照

apyoriで確認

インストール
pip install apyori
sample.py
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 なので関連性あり。一緒に購入する可能性あるよってことになる。

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2