고급 Apriori 결과 가지치기

Python으로 배우는 Market Basket Analysis

Isaiah Hull

Visiting Associate Professor of Finance, BI Norwegian Business School

활용 예시

교차 프로모션

이 이미지는 교차 프로모션의 예를 보여줍니다.

집계

이 이미지는 집계의 예를 보여줍니다.

Python으로 배우는 Market Basket Analysis

Apriori 알고리즘

리스트의 리스트

이 이미지는 거래 항목의 리스트-오브-리스트 예시를 보여줍니다.

원-핫 인코딩

이 이미지는 거래의 원-핫 인코딩을 보여줍니다.

Apriori 알고리즘

이 이미지는 4개 항목의 일반 집합에 Apriori 알고리즘을 적용하는 모습을 설명합니다.

Python으로 배우는 Market Basket Analysis

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으로 배우는 Market Basket Analysis

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으로 배우는 Market Basket Analysis

Apriori 알고리즘 결과

print(len(data.columns))
4201
print(len(frequent_itemsets))
2328
rules = association_rules(frequent_itemsets)
Python으로 배우는 Market Basket Analysis

연관 규칙

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으로 배우는 Market Basket Analysis

여러 지표로 필터링

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으로 배우는 Market Basket Analysis

상품 묶음 배치

이미지에는 상점 평면도에서 상자가 가방과 함께 배치되고 표지판이 양초와 함께 배치된 모습이 보입니다.

이미지에는 상점 평면도에서 상자가 양초와 함께, 표지판이 가방과 함께 배치된 모습이 보입니다.

이미지에는 상점 평면도에서 상자가 표지판과 함께, 양초가 가방과 함께 배치된 모습이 보입니다.

Python으로 배우는 Market Basket Analysis

집계와 분리

# 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으로 배우는 Market Basket Analysis

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으로 배우는 Market Basket Analysis

매장 평면도 선택

이미지에는 상점 평면도에서 상자가 가방과 함께 배치되고 표지판이 양초와 함께 배치된 모습이 보입니다.

이미지에는 상점 평면도에서 상자가 가방과 함께 배치되고 표지판이 양초와 함께 배치된 모습이 보입니다.

이미지에는 상점 평면도에서 상자가 가방과 함께 배치되고 표지판이 양초와 함께 배치된 모습이 보입니다.

Python으로 배우는 Market Basket Analysis

연습해 봅시다!

Python으로 배우는 Market Basket Analysis

Preparing Video For Download...