Associatieregels identificeren

Market Basket Analysis in Python

Isaiah Hull

Visiting Associate Professor of Finance, BI Norwegian Business School

Data laden en voorbereiden

import pandas as pd

# Load transactions from pandas.
books = pd.read_csv("datasets/bookstore.csv")
# Split transaction strings into lists.
transactions = books['Transaction'].apply(lambda t: t.split(','))
# Convert DataFrame into list of strings.
transactions = list(transactions)
Market Basket Analysis in Python

Data verkennen

print(transactions[:5])
[['language', 'travel', 'humor', 'fiction'],
 ['humor', 'language'],
 ['humor', 'biography', 'cooking'],
 ['cooking', 'language'],
 ['travel']]
Market Basket Analysis in Python

Associatieregels

  • Associatieregel

    • Bevat antecedent en consequent
      • {health} $\rightarrow$ {cooking}
  • Multi-antecedentregel

    • {humor, travel} $\rightarrow$ {language}
  • Multi-consequentregel

    • {biography} $\rightarrow$ {history, language}
Market Basket Analysis in Python

Moeilijkheid van regelselectie

  • Handige regels vinden is lastig.

    • De set mogelijke regels is groot.
    • De meeste regels zijn niet nuttig.
    • Je moet de meeste regels weggooien.
  • Wat als we ons beperken tot simpele regels?

    • Één antecedent en één consequent.
    • Nog steeds lastig, zelfs bij een kleine dataset.
Market Basket Analysis in Python

Regels genereren

 

  • fictie
  • poëzie
  • geschiedenis
  • biografie
  • koken

 

  • gezondheid
  • reizen
  • taal
  • humor
Market Basket Analysis in Python

Regels genereren

Fictie-regels Poëzie-regels ... Humor-regels
fictie->poëzie poëzie->fictie ... humor->fictie
fictie->geschiedenis poëzie->geschiedenis ... humor->geschiedenis
fictie->biografie poëzie->biografie ... humor->biografie
fictie->koken poëzie->koken ... humor->koken
... ... ... ...
fictie->humor poëzie->humor ...
Market Basket Analysis in Python

Regels genereren met itertools

from itertools import permutations

# Extract unique items.
flattened = [item for transaction in transactions for item in transaction]
items = list(set(flattened))
# Compute and print rules.
rules = list(permutations(items, 2))
print(rules)
[('fiction', 'poetry'), 
 ('fiction', 'history'),
 ...
 ('humor', 'travel'), 
 ('humor', 'language')]
Market Basket Analysis in Python

Regels tellen

# Print the number of rules
print(len(rules))
72

De grafiek toont het totaal aantal regels als functie van het aantal unieke items.

Market Basket Analysis in Python

Vooruitblik

# Import the association rules function
from mlxtend.frequent_patterns import association_rules
from mlxtend.frequent_patterns import apriori

# Compute frequent itemsets using the Apriori algorithm
frequent_itemsets = apriori(onehot, min_support = 0.001, 
                            max_len = 2, use_colnames = True)

# Compute all association rules for frequent_itemsets
rules = association_rules(frequent_itemsets, 
                            metric = "lift", 
                             min_threshold = 1.0)
Market Basket Analysis in Python

Laten we oefenen!

Market Basket Analysis in Python

Preparing Video For Download...