10. Regras de Associação
As Regras de Associação são técnicas de aprendizado não supervisionado que descobrem relações de coocorrência entre itens em uma base de transações. O objetivo é encontrar padrões do tipo “se X, então Y”.
Aplicações
- Análise de cestas de compras em supermercados.
- Recomendação de produtos em sites de e-commerce.
- Controle de evasão escolar e sistemas de recomendação de conteúdo.
Exemplos clássicos:
- Compra de cerveja → compra de fralda.
- Assistir Senhor dos Anéis 1 → assistir Senhor dos Anéis 2 e 3.
Algoritmo Apriori
O Apriori funciona em duas fases:
- Gerar itemsets frequentes — conjuntos de itens com suporte ≥ mínimo definido.
- Gerar regras — a partir dos itemsets, com confiança ≥ mínimo definido.
Fase 1: itemsets frequentes
Começa com itens individuais (tamanho 1). Combina os que passam no suporte mínimo para formar pares (tamanho 2), depois trios (tamanho 3), e assim por diante até não ser possível combinar mais.
Exemplo com 10 transações de mercado:
| Transação | Itens |
|---|---|
| 1 | Café, Pão, Manteiga |
| 2 | Leite, Cerveja, Pão, Manteiga |
| 3 | Café, Pão, Manteiga |
| 4 | Leite, Café, Pão, Manteiga |
| 5 | Cerveja |
| … | … |
Com suporte mínimo = 0,3 (30% das transações):
| Itemset | Suporte |
|---|---|
| Café | 3/10 = 0,3 |
| Pão | 5/10 = 0,5 |
| Manteiga | 5/10 = 0,5 |
| {Café, Pão} | 3/10 = 0,3 |
| {Café, Manteiga} | 3/10 = 0,3 |
| {Pão, Manteiga} | 4/10 = 0,4 |
| {Café, Pão, Manteiga} | 3/10 = 0,3 |
Suporte(X) = Ocorrências de X / Total de registrosFase 2: geração de regras
A partir dos itemsets frequentes, gera-se regras X → Y:
Confiança(X → Y) = Suporte(X ∪ Y) / Suporte(X)Com confiança mínima = 0,8:
| Regra | Confiança |
|---|---|
| Café → Pão | 0,3/0,3 = 1,0 |
| Pão → Café | 0,3/0,5 = 0,6 |
| Pão → Manteiga | 0,4/0,5 = 0,8 |
| Manteiga → Pão | 0,4/0,5 = 0,8 |
| Café → Pão, Manteiga | 0,3/0,3 = 1,0 |
Lift
O Lift mede o quanto a regra é melhor do que o acaso:
Lift(X → Y) = Confiança(X → Y) / Suporte(Y)| Regra | Lift |
|---|---|
| Café → Pão | 1/0,5 = 2,0 |
| Café → Manteiga | 1/0,5 = 2,0 |
| Pão → Manteiga | 0,8/0,5 = 1,6 |
| Café → Pão, Manteiga | 1/0,5 = 2,0 |
Lift > 1 indica associação positiva; quanto maior, mais relevante a regra.
Pré-processamento para o Apriori
Arquivos CSV de transações precisam ser transformados:
- Ler o CSV (sem cabeçalho,
header=None). - Converter para lista e remover valores
NaN(nem toda transação tem o mesmo número de itens). - Usar
TransactionEncoderpara criar uma matriz binária (cada item vira uma coluna).
Implementação em Python
Bibliotecas necessárias:
!pip install mlxtend
from mlxtend.frequent_patterns import apriori, association_rules
from mlxtend.preprocessing import TransactionEncoderTalk is cheap, show me the code:
Bases utilizadas nesta aula (disponíveis no Google Drive): mercado.csv · mercado2.csv · tv_showsAR.csv
Roteiro para a aula de Regras de Associação
1 . Importar as bibliotecas
#biblioteca para gerar gráficos dinâmicos
!pip install plotly --upgrade
#pandas é uma biblioteca que trabalha com a importação de arquivos .csv
import pandas as pd
#numpy é uma biblioteca para a realização de operações em arrays
import numpy as np
#seaborn é uma biblioteca para vizualização de gráficos
import seaborn as sb
#matplotlib é também uma biblioteca para a geração de gráficos
import matplotlib.pyplot as plt
import plotly.express as px
#instalar a biblioteca apriori
!pip install apyori
#importar a biblioteca apriori e association_rules
from mlxtend.frequent_patterns import apriori, association_rules
#biblioteca para ignorar os warnings
import warnings
warnings.filterwarnings('ignore')
2. Colocar os três arquivos passados pelo professor no drive do colab (mercado.csv, mercado2.csv e tv_showsAR.csv)
====Base de dados mercado.csv
3. Importar a base de dados mercado.csv
base_mercado1 = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/Associacao/mercado.csv', header = None)
base_mercado1
base mercado.shape #mostra a quantidade de linhas e colunas
4. Eliminar os valores ausentes (Nan) do arquivo
#transformando a base .csv eliminando os Nan, pois não há todos os itens em cada compra.x
transacoesBm1 = base_mercado1.values.tolist() #transforma para lista
transacoesBm1 = [[item for item in row if pd.notna(item)] for row in transacoesBm1] #elimina os Nan
5. Importar a biblioteca para que o algoritmo APRIORI entenda o formato do arquivo
#biblioteca para transformar o arquivo no formato que o apriori entenda (cada item uma coluna)
from mlxtend.preprocessing import TransactionEncoder
transacoesBm1_te = TransactionEncoder() # para transformar no formato do Apriori
transacoesBm1_te_array = transacoesBm1_te.fit(transacoesBm1).transform(transacoesBm1)
#transforma cada item em uma coluna
transacoesBm1_df = pd.DataFrame(transacoesBm1_te_array, columns=transacoesBm1_te.columns_)
transacoesBm1_df
6. Gerando os itemsets frequentes e as regras
#gerando conjunto de itens frequentes com suporte maior ou igual ao mínimo estabelecido
itemsets_frequentesBm1 = apriori(transacoesBm1_df, min_support=0.3, use_colnames=True)
print(itemsets_frequentesBm1)
print(itemsets_frequentesBm1.sort_values(by='support', ascending=False))
#gerando as regras com confiança mínima = 0.8
regras_bm1 = association_rules(itemsets_frequentesBm1, metric='confidence', min_threshold=0.8)
regras_bm1
#ordenando as regras
regras_bm1 = regras_bm1.sort_values(by='lift', ascending=True)
regras_bm1
================BASE MERCADO 2==============================
1. Caso as bibliotecas já tenham sido importadas, faça a importação da base mercado2.csv
base_mercado2 = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/Associacao/mercado2.csv', header = None)
base_mercado2
2. Eliminar os valores ausentes (Nan) do arquivo
#transformando a base .csv eliminando os Nan
transacoesBm2 = base_mercado2.values.tolist() #transforma para lista
transacoesBm2 = [[item for item in row if pd.notna(item)] for row in transacoesBm2] #elimina os Nan
3. Importar a biblioteca para que o algoritmo APRIORI entenda o formato do arquivo
#biblioteca para transformar o arquivo no formato que o apriori entenda
from mlxtend.preprocessing import TransactionEncoder
transacoesBm2_te = TransactionEncoder() # para transformar no formato do Apriori
transacoesBm2_te_arry = transacoesBm2_te.fit(transacoesBm2).transform(transacoesBm2)
#transforma cada item em uma coluna
transacoesBm2_df = pd.DataFrame(transacoesBm2_te_arry, columns=transacoesBm2_te.columns_)
transacoesBm2_df
4. Gerando os itemsets frequentes e as regras
#gerando conjunto de itens frequentes com suporte maior ou igual ao mínimo estabelecido
itemsets_frequentesBm2 = apriori(transacoesBm2_df, min_support=0.04, use_colnames=True)
print(itemsets_frequentesBm2)
print(itemsets_frequentesBm2.sort_values(by='support', ascending=False))
regras_bm2 = association_rules(itemsets_frequentesBm2, metric='confidence', min_threshold=0.2)
regras_bm2