Розширене відсікання результатів Apriori

Маркет-баcкет аналіз у Python

Isaiah Hull

Visiting Associate Professor of Finance, BI Norwegian Business School

Застосування

Крос-промоція

На зображенні приклад крос-промоції.

Агрегація

На зображенні приклад агрегації.

Маркет-баcкет аналіз у Python

Алгоритм Apriori

Списки списків

На зображенні приклад списку списків товарів у транзакціях.

One-Hot кодування

На зображенні one-hot кодування транзакцій.

Алгоритм Apriori

Ілюстрація застосування алгоритму Apriori до набору з 4 товарів.

Маркет-баcкет аналіз у 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']]
Маркет-баcкет аналіз у 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...
Маркет-баcкет аналіз у Python

Результати алгоритму Apriori

print(len(data.columns))
4201
print(len(frequent_itemsets))
2328
rules = association_rules(frequent_itemsets)
Маркет-баcкет аналіз у 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
Маркет-баcкет аналіз у 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
Маркет-баcкет аналіз у Python

Групування товарів

На плані магазину коробки згруповані з сумками, а вивіски — зі свічками.

На плані магазину коробки згруповані зі свічками, а вивіски — із сумками.

На плані магазину коробки згруповані з вивісками, а свічки — із сумками.

Маркет-баcкет аналіз у 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)
Маркет-баcкет аналіз у Python

Правило Чжана

# 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)
Маркет-баcкет аналіз у Python

Вибір плану магазину

На плані магазину коробки згруповані з сумками, а вивіски — зі свічками.

На плані магазину коробки згруповані з сумками, а вивіски — зі свічками.

На плані магазину коробки згруповані з сумками, а вивіски — зі свічками.

Маркет-баcкет аналіз у Python

Давайте потренуємось!

Маркет-баcкет аналіз у Python

Preparing Video For Download...