高级 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...