高度な Apriori 結果の枝刈り

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

Isaiah Hull

Visiting Associate Professor of Finance, BI Norwegian Business School

活用例

クロスプロモーション

クロスプロモーションの例。

アグリゲーション

集約の例。

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

Apriori アルゴリズム

リストのリスト

取引アイテムのリストのリスト例。

ワンホットエンコーディング

取引のワンホット表現。

Apriori アルゴリズム

4 アイテム集合への Apriori の適用図。

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

Apriori アルゴリズム

import pandas as pd
import numpy as np
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
itemsets = np.load('itemsets.npy')
print(itemsets)
[['EASTER CRAFT 4 CHICKS'],
['CERAMIC CAKE DESIGN SPOTTED MUG', 'CHARLOTTE BAG APPLES DESIGN'],
['SET 12 COLOUR PENCILS DOLLY GIRL'],
...
['JUMBO BAG RED RETROSPOT', ... 'LIPSTICK PEN FUSCHIA']]
Python で学ぶマーケットバスケット分析

Apriori アルゴリズム

# One-hot encode data
encoder = TransactionEncoder()
onehot = encoder.fit(itemsets).transform(itemsets)
onehot = pd.DataFrame(onehot, columns = encoder.columns_)
# Apply Apriori algorithm and print
frequent_itemsets = apriori(onehot, use_colnames=True, min_support=0.001)
print(frequent_itemsets)
      support                                           itemsets
0    0.001504                               ( DOLLY GIRL BEAKER)
1    0.002256                         ( RED SPOT GIFT BAG LARGE)
...
428  0.001504  (BIRTHDAY CARD, RETRO SPOT, JUMBO BAG RED RETR...
Python で学ぶマーケットバスケット分析

Apriori の結果

print(len(data.columns))
4201
print(len(frequent_itemsets))
2328
rules = association_rules(frequent_itemsets)
Python で学ぶマーケットバスケット分析

アソシエーションルール

print(rules['consequents'])
0                   (DOTCOM POSTAGE)
                        ... 
9                 (HERB MARKER THYME)
                        ...
234        (JUMBO BAG RED RETROSPOT)
235         (WOODLAND CHARLOTTE BAG)
236    (RED RETROSPOT CHARLOTTE BAG)
237       (STRAWBERRY CHARLOTTE BAG)
238      (CHARLOTTE BAG SUKI DESIGN)
Name: consequents, Length: 239, dtype: object
Python で学ぶマーケットバスケット分析

複数指標でのフィルタリング

targeted_rules = rules[rules['consequents'] == {'HERB MARKER THYME'}].copy()
filtered_rules = targeted_rules[(targeted_rules['antecedent support'] > 0.01) &
                        (targeted_rules['support'] > 0.009) &
                        (targeted_rules['confidence'] > 0.85) &
                        (targeted_rules['lift'] > 1.00)]
print(filtered_rules['antecedents'])
9        (HERB MARKER BASIL)
25     (HERB MARKER PARSLEY)
27    (HERB MARKER ROSEMARY)
Name: antecedents, dtype: object
Python で学ぶマーケットバスケット分析

商品のグルーピング

店内フロアプラン。箱はバッグと、看板はキャンドルと一緒に配置。

店内フロアプラン。箱はキャンドルと、看板はバッグと一緒に配置。

店内フロアプラン。箱は看板と、キャンドルはバッグと一緒に配置。

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

集約と乖離

# Load aggregated data
aggregated = pd.read_csv('datasets/online_retail_aggregated.csv')

# Compute frequent itemsets
onehot = encoder.fit(aggregated).transform(aggregated)
data = pd.DataFrame(onehot, columns = encoder.columns_)
frequent_itemsets = apriori(data, use_colnames=True)

# Compute standard metrics
rules = association_rules(frequent_itemsets)
# Compute Zhang's rule
rules['zhang'] = zhangs_rule(rules)
Python で学ぶマーケットバスケット分析

Zhang のルール

# Print rules that indicate dissociation
print(rules[rules['zhang'] < 0][['antecedents','consequents']])
  antecedents consequents
2       (bag)    (candle)
3    (candle)       (bag)
4      (sign)       (bag)
5       (bag)      (sign)
Python で学ぶマーケットバスケット分析

フロアプランの選定

店内フロアプラン。箱はバッグと、看板はキャンドルと一緒に配置。

店内フロアプラン。箱はバッグと、看板はキャンドルと一緒に配置。

店内フロアプラン。箱はバッグと、看板はキャンドルと一緒に配置。

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

練習しましょう!

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

Preparing Video For Download...