Identificar reglas de asociación

Análisis de cesta de la compra en Python

Isaiah Hull

Visiting Associate Professor of Finance, BI Norwegian Business School

Cargar y preparar datos

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)
Análisis de cesta de la compra en Python

Explorar los datos

print(transactions[:5])
[['language', 'travel', 'humor', 'fiction'],
 ['humor', 'language'],
 ['humor', 'biography', 'cooking'],
 ['cooking', 'language'],
 ['travel']]
Análisis de cesta de la compra en Python

Reglas de asociación

  • Regla de asociación

    • Contiene antecedente y consecuente
      • {health} $\rightarrow$ {cooking}
  • Regla con múltiples antecedentes

    • {humor, travel} $\rightarrow$ {language}
  • Regla con múltiples consecuentes

    • {biography} $\rightarrow$ {history, language}
Análisis de cesta de la compra en Python

Dificultad al seleccionar reglas

  • Encontrar reglas útiles es difícil.

    • El conjunto de reglas posibles es grande.
    • La mayoría no son útiles.
    • Hay que descartar la mayoría.
  • ¿Y si nos limitamos a reglas simples?

    • Un antecedente y un consecuente.
    • Sigue siendo difícil, incluso con pocos datos.
Análisis de cesta de la compra en Python

Generar las reglas

 

  • fiction
  • poetry
  • history
  • biography
  • cooking

 

  • health
  • travel
  • language
  • humor
Análisis de cesta de la compra en Python

Generar las reglas

Reglas de ficción Reglas de poesía ... Reglas de humor
fiction->poetry poetry->fiction ... humor->fiction
fiction->history poetry->history ... humor->history
fiction->biography poetry->biography ... humor->biography
fiction->cooking poetry->cooking ... humor->cooking
... ... ... ...
fiction->humor poetry->humor ...
Análisis de cesta de la compra en Python

Generar reglas con 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')]
Análisis de cesta de la compra en Python

Contar las reglas

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

El gráfico muestra el número total de reglas en función del número de ítems únicos.

Análisis de cesta de la compra en Python

Qué viene después

# 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)
Análisis de cesta de la compra en Python

¡Vamos a practicar!

Análisis de cesta de la compra en Python

Preparing Video For Download...