Apriori 結果の基本的な枝刈り

Python で学ぶマーケットバスケット分析

Isaiah Hull

Visiting Associate Professor of Finance, BI Norwegian Business School

Apriori とアソシエーションルール

  • Apriori はアイテム集合を枝刈り。
    • 最小サポートしきい値を適用。
    • 変更版はアイテム数でも枝刈り可。
    • ただしルール自体は示さない。
  • アソシエーションルール。
    • アイテム集合よりルールがはるかに多い。
    • {Bags, Boxes}: Bags -> Boxes も Boxes -> Bags も可。
Python で学ぶマーケットバスケット分析

アソシエーションルールの計算方法

  • Apriori 結果からルールを計算。
    • 高い nk では列挙が困難。
    • Apriori によるアイテム集合の枝刈りを無効化しかねない。
  • ルール数の削減。
    • mlxtend はルールの枝刈り手段を提供。
    • association_rules() は頻出アイテム、指標、しきい値を受け取る。
Python で学ぶマーケットバスケット分析

アソシエーションルールの計算方法

# Apriori アルゴリズムをインポート
from mlxtend.frequent_patterns import apriori, association_rules

# ワンホット化したノベルティギフトのデータを読み込み
onehot = pd.read_csv('datasets/online_retail_onehot.csv')

# Apriori アルゴリズムを適用
frequent_itemsets = apriori(onehot, 
                            use_colnames=True, 
                            min_support=0.0001)
# アソシエーションルールを計算
rules = association_rules(frequent_itemsets,
                          metric = "support", 
                          min_threshold = 0.0)
Python で学ぶマーケットバスケット分析

枝刈りの重要性

# ルールを表示
print(rules)
                               antecedents  ... conviction
0      (CARDHOLDER GINGHAM CHRISTMAS TREE)  ...      inf
...
79505      (SET OF 3 HEART COOKIE CUTTERS)  ... 1.998496
# 頻出アイテム集合を表示
print(frequent_itemsets)
       support                                           itemsets
0     0.000752                   ( 50'S CHRISTMAS GIFT BAG LARGE)
...
4707  0.000752                  (PIZZA PLATE IN BOX, CHRISTMAS ...
Python で学ぶマーケットバスケット分析

枝刈りの重要性

# アソシエーションルールを計算
rules = association_rules(frequent_itemsets,
                          metric = "support", 
                          min_threshold = 0.001)

# ルールを表示
print(rules)
                   antecedents      conviction  
0  (BIRTHDAY CARD, RETRO SPOT)  ...  2.977444 
1    (JUMBO BAG RED RETROSPOT)  ...  1.247180
Python で学ぶマーケットバスケット分析

ルール集合の探索

print(rules.columns)
Index(['antecedents', 'consequents', 'antecedent support',
       'consequent support', 'support', 'confidence', 'lift', 'leverage',
       'conviction'],
      dtype='object')
print(rules[['antecedents','consequents']])
                   antecedents                  consequents
0    (JUMBO BAG RED RETROSPOT)  (BIRTHDAY CARD, RETRO SPOT)
1  (BIRTHDAY CARD, RETRO SPOT)    (JUMBO BAG RED RETROSPOT)
Python で学ぶマーケットバスケット分析

他指標での枝刈り

# アソシエーションルールを計算
rules = association_rules(frequent_itemsets,
                          metric = "antecedent support", 
                          min_threshold = 0.002)

# ルール数を表示
print(len(rules))
3899
Python で学ぶマーケットバスケット分析

Let's practice!

Python で学ぶマーケットバスケット分析

Preparing Video For Download...