Regras de Associação
ESTAT0109 – Mineração de Dados em Estatística
Objetivo da Aula
- Compreender o problema da Análise de Cesta de Mercado e o conceito de Regras de Associação no formato SE (Antecedente) \(\rightarrow\) ENTÃO (Consequente).
- Dominar as métricas fundamentais (Suporte, Confiança e Lift) para filtrar e avaliar a força e o interesse dos padrões de afinidade entre itens.
- Entender o funcionamento do Algoritmo Apriori e a estratégia FP-Growth para a mineração eficiente de itemsets frequentes em grandes volumes de dados de transações.
O Problema: Análise de Cesta de Mercado
As Regras de Associação nasceram da necessidade de entender o comportamento de consumo. O problema clássico é a Análise de Cesta de Mercado (Market Basket Analysis).
- Pergunta: Quais itens os clientes tendem a comprar juntos?
- Objetivo: Identificar padrões de afinidade para otimizar layout de loja, criar promoções (ex: “compre X e Y, ganhe desconto”), e planejar o inventário.
- Item: Um produto (ex: Pão, Leite, Fralda).
- Transação: Uma única “cesta de compras” (ex: T1, T2, …).
- Itemset (Conjunto de Itens): Uma coleção de 1 ou mais itens (ex: {Leite, Fralda}).
O Problema: Análise de Cesta de Mercado
Exemplo Base (N=5 Transações)
Vamos usar esta base de dados para todos os nossos cálculos:
| T1 |
1 |
1 |
1 |
0 |
0 |
0 |
| T2 |
1 |
0 |
1 |
1 |
1 |
0 |
| T3 |
0 |
1 |
1 |
1 |
0 |
1 |
| T4 |
1 |
1 |
1 |
1 |
0 |
0 |
| T5 |
1 |
1 |
0 |
1 |
0 |
1 |
| Total (N=5) |
4 |
4 |
3 |
4 |
1 |
2 |
A Regra
Uma Regra de Associação tem o formato SE \(\rightarrow\) ENTÃO:
\[
\text{Antecedente} \rightarrow \text{Consequente}
\] \[
\{X\} \rightarrow \{Y\}
\]
- O Antecedente (X) é um itemset.
- O Consequente (Y) é um itemset.
- Restrição: \(X\) e \(Y\) são disjuntos (\(X \cap Y = \emptyset\)).
- Exemplo: A regra \(\{\text{Cerveja, Fralda}\} \rightarrow \{\text{Pão}\}\) sugere que clientes que compram Cerveja e Fralda também tendem a comprar Pão.
A Regra
O Desafio Computacional
Com \(p\) itens distintos, o número total de regras possíveis é \(3^p - 2^{p+1} + 1\).
- Para 6 itens (nosso exemplo): \(3^6 - 2^7 + 1 = 602\) regras.
- Para 50 itens (mercearia pequena): \(1.125 \times 10^{15}\) (mais de 1 quatrilhão) de regras.
Conclusão: Não podemos avaliar todas. Precisamos de métricas para filtrar e encontrar apenas as regras “fortes” ou “interessantes”.
Métricas Fundamentais
Para uma regra \(\{X\} \rightarrow \{Y\}\), usamos três métricas principais.
1. Suporte (Relevância)
O Suporte mede a frequência ou popularidade de um itemset no banco de dados.
\[
Suporte(X) = P(X) = \frac{\text{Nº de transações contendo o itemset } X}{\text{Total de transações (N)}}
\]
- Suporte da Regra: O suporte de uma regra \(\{X\} \rightarrow \{Y\}\) é o suporte do itemset que contém ambos os lados. \[
Suporte(X \rightarrow Y) = Suporte(X \cup Y) = P(X \cap Y)
\]
Métricas Fundamentais
1. Suporte (Relevância)
Usando nossa tabela (N=5):
- Suporte de 1 item:
- \(Suporte(\{\text{Pão}\}) = 4/5 = 0.8\)
- \(Suporte(\{\text{Leite}\}) = 4/5 = 0.8\)
- \(Suporte(\{\text{Cerveja}\}) = 4/5 = 0.8\)
- \(Suporte(\{\text{Fralda}\}) = 4/5 = 0.8\)
- Suporte de Itemset (2 itens):
- Itemset: \(\{\text{Cerveja, Leite}\}\)
- Ocorrências: T1, T3, T4 (3 transações)
- \(Suporte(\{\text{Cerveja, Leite}\}) = 3/5 = 0.6\)
Métricas Fundamentais
1. Suporte (Relevância)
Usando nossa tabela (N=5):
- Suporte de Itemset (3 itens):
- Itemset: \(\{\text{Cerveja, Leite, Fralda}\}\)
- Ocorrências: T3, T4 (2 transações)
- \(Suporte(\{\text{Cerveja, Leite, Fralda}\}) = 2/5 = 0.4\)
Métricas Fundamentais
2. Confiança (Precisão)
A Confiança mede a probabilidade de o Consequente (Y) aparecer, dado que o Antecedente (X) já apareceu. É uma medida de probabilidade condicional, \(P(Y|X)\).
\[
Confiança(X \rightarrow Y) = P(Y|X) = \frac{Suporte(X \cup Y)}{Suporte(X)}
\]
- Interpretação: “De todas as vezes que X foi comprado, em qual percentual Y também foi comprado?”
Métricas Fundamentais
2. Confiança (Precisão)
Cálculo (Regra: \(\{\text{Cerveja, Leite}\} \rightarrow \{\text{Fralda}\}\))
\[
\begin{aligned}
Confiança(\{\text{Cerveja, Leite}\} \rightarrow \{\text{Fralda}\}) &= \frac{Suporte(\{\text{Cerveja, Leite, Fralda}\})}{Suporte(\text{{Cerveja, Leite}})}\\
&= \frac{2/5}{3/5} = 0.67
\end{aligned}
\]
- Interpretação: “67% dos clientes que compraram Cerveja e Leite também compraram Fralda.”
Métricas Fundamentais
2. Confiança (Precisão)
- A Confiança pode ser enganosa.
- Imagine a regra \(\{\text{Qualquer Coisa}\} \rightarrow \{\text{Pão}\}\).
- Se “Pão” for um item extremamente popular (ex: \(Suporte(\{\text{Pão}\}) = 95\%\)), quase qualquer regra apontando para “Pão” terá uma Confiança alta.
- Isso não significa que o Antecedente “causa” a compra do Pão; significa apenas que o Pão é comprado o tempo todo, independentemente.
- Precisamos de uma métrica que desconte a popularidade do Consequente.
Métricas Fundamentais
3. Lift (Interesse / “Poder de Tração”)
O Lift mede o quão mais (ou menos) provável é que X e Y ocorram juntos do que se fossem estatisticamente independentes. É o “teste” de interesse da regra.
\[
Lift(X \rightarrow Y) = \frac{Confiança(X \rightarrow Y)}{Suporte(Y)} = \frac{P(Y|X)}{P(Y)}
\] Forma alternativa (e simétrica): \[
Lift(X \rightarrow Y) = \frac{P(X\cup Y)}{P(X)P(Y)} = \frac{Suporte(X \cup Y)}{Suporte(X) \times Suporte(Y)}
\]
Métricas Fundamentais
3. Lift (Interesse / “Poder de Tração”)
- Interpretação do Lift:
- Lift = 1: Independência. A ocorrência de X não altera a probabilidade de Y. A regra é inútil.
- Lift > 1: Associação positiva. X e Y aparecem juntos mais do que o esperado. X “puxa” Y. (Interessante!)
- Lift < 1: Associação negativa. X e Y aparecem juntos menos do que o esperado. X “inibe” Y. (Também interessante!)
Métricas Fundamentais
3. Lift (Interesse / “Poder de Tração”)
Cálculo (Regra: \(\{\text{Cerveja, Leite}\} \rightarrow \{\text{Fralda}\}\))
\(Confiança(X \rightarrow Y) = 2/3\)
\(Suporte(Y) = Suporte(\{\text{Fralda}\}) = 4/5\)
\(Lift = (2/3) / (4/5) = (2/3) \times (5/4) = 10/12 \approx 0.833\)
Interpretação: O Lift é menor que 1. Isso significa que clientes que compram {Cerveja, Leite} são, na verdade, um pouco menos prováveis (cerca de 17% menos prováveis) de comprar Fralda do que um cliente aleatório.
Conclusão da Regra: Embora a Confiança de 67% parecesse alta, o Lift nos mostra que esta regra não é acionável e a associação é, na verdade, negativa.
Métricas Adicionais
Para uma análise de nível sênior, Lift, Suporte e Confiança são o mínimo. Duas outras métricas dão uma visão mais completa:
- Leverage (Alavancagem):
- \(Leverage(X \rightarrow Y) = Suporte(X \cup Y) - (Suporte(X) \times Suporte(Y))\)
- O que mede: A diferença absoluta entre a frequência observada de (X e Y) e a frequência esperada se fossem independentes.
- Interpretação: Um valor de 0 indica independência. Um valor positivo indica quantos mais transações (em proporção) contêm X e Y do que o esperado. É útil para medir o impacto em números absolutos, não apenas relativos.
Métricas Adicionais
- Conviction (Convicção):
- \(Conviction(X \rightarrow Y) = \frac{1 - Suporte(Y)}{1 - Confiança(X \rightarrow Y)}\)
- O que mede: O grau de “erro” que a regra faria se a associação não existisse. Mede o quão dependente o Consequente é do Antecedente.
- Interpretação: Uma Convicção alta significa que o Consequente (Y) raramente aparece sem o Antecedente (X). É uma medida de direcionalidade muito mais forte que o Lift.
Classificando as Regras (O Que Fazer)
O objetivo não é apenas encontrar regras, mas classificá-las quanto à utilidade:
- Acionáveis: Regras com bom Suporte, Confiança e Lift > 1. Elas fornecem insights claros que podem ser aplicados (ex: “Coloque o {Achocolatado} perto do {Leite Condensado}”).
- Triviais: Regras que são óbvias para qualquer especialista no domínio (ex: \(\{\text{Caneta}\} \rightarrow \{\text{Caderno}\}\)). Elas validam o modelo, mas não geram insights novos.
- Inexplicáveis: Regras que desafiam a lógica (ex: \(\{\text{Sapatos}\} \rightarrow \{\text{Canetas}\}\)). Podem ser ruído estatístico (baixo Suporte) ou exigir mais pesquisa para serem compreendidas.
O Algoritmo Apriori (Como Fazer)
Ideia do algoritmo
Se um itemset é frequente (passa no limiar de Suporte), todos os seus subconjuntos também devem ser frequentes. (Isso é óbvio: se {Pão, Leite} é frequente, {Pão} tem que ser pelo menos* tão frequente).*
COROLÁRIO (A Poda): Se um itemset é INFREQUENTE (falha no Suporte), todos os seus SUPERCONJUNTOS também serão infrequentes. (Se {Ovos} é infrequente, não precisamos nem calcular* o suporte de {Ovos, Pão} ou {Ovos, Pão, Leite}. Sabemos que eles falharão).*
O Algoritmo Apriori
Etapas do Algoritmo (Join & Prune)
O Apriori funciona “de baixo para cima”, construindo itemsets maiores a partir dos menores.
- Passo 1 (k=1):
- Calcule o Suporte de todos os itens individuais (k=1).
- Poda: Descarte todos os itens que não atingem o
min_suporte. (Se {Ovos} tem \(Suporte=1/5=0.2\) e o min_suporte é 0.3, {Ovos} é podado).
- Passo 2 (k=2):
- Join: Gere itemsets candidatos de 2 itens (C2) apenas com os itens que sobreviveram (L1).
- Poda (Apriori): Se {Ovos} foi podado, o candidato {Pão, Ovos} nem é gerado.
- Poda (Suporte): Calcule o Suporte de C2 e descarte os que não atingem
min_suporte. Os que sobram são L2.
O Algoritmo Apriori
Etapas do Algoritmo (Join & Prune)
- Passo k:
- Join: Gere candidatos C(k) a partir dos frequentes L(k-1).
- Poda (Apriori): Verifique se todos os subconjuntos de (k-1) itens de um candidato C(k) estão em L(k-1). Se não, pode o candidato.
- Poda (Suporte): Calcule o Suporte de C(k) e descarte os infrequentes.
- Fim: O processo para quando não há mais itemsets frequentes a serem gerados.
Uma Alternativa Eficiente: FP-Growth
- Embora o Apriori seja o algoritmo clássico, ele possui um gargalo computacional severo.
O Gargalo do Apriori
O problema do Apriori não é o cálculo do suporte. O problema é a geração de candidatos.
- Explosão Combinatória: O processo de “Join” (juntar L(k-1) para criar C(k)) pode gerar um número astronômico de candidatos que precisarão ter seu suporte contado.
- Múltiplas Varreduras: O Apriori precisa varrer o banco de dados inteiro \(k\) vezes (uma vez para cada nível de itemset). Se \(k=10\), são 10 varreduras.
Para bancos de dados muito grandes ou com padrões longos (ex: compras complexas, sequenciamento de DNA), o Apriori se torna computacionalmente inviável.
A Solução FP-Growth: Comprimir e Dividir
O algoritmo FP-Growth (Frequent Pattern Growth) ataca esses dois gargalos:
- Sem Geração de Candidatos: O FP-Growth não gera itemsets candidatos.
- Apenas 2 Varreduras: Ele varre o banco de dados apenas duas vezes, independentemente do número de itens.
A Grande Ideia: Em vez de varrer o banco de dados repetidamente para testar os itemsets, o FP-Growth comprime o banco de dados inteiro em uma estrutura de dados em árvore (a FP-Tree) e minera essa árvore compacta diretamente na memória.
A Solução FP-Growth: Comprimir e Dividir
Etapa 1: Construindo a FP-Tree (Frequent Pattern Tree)
Varredura 1 (Scan 1):
- Conta o suporte de todos os itens individuais (1-itemsets).
- Descarta os itens infrequentes (abaixo do min_suporte).
Ordenação (Sorting):
- Cria uma “lista de itens frequentes” (F-List) ordenada por suporte (do mais frequente para o menos frequente).
- Por quê? Isso garante que os itens mais comuns fiquem mais próximos da raiz da árvore, maximizando a compressão.
A Solução FP-Growth: Comprimir e Dividir
Etapa 1: Construindo a FP-Tree (Frequent Pattern Tree)
Varredura 2 (Scan 2):
- Lê cada transação, uma por uma.
- Filtra apenas os itens frequentes daquela transação.
- Ordena esses itens de acordo com a F-List.
- Insere a transação ordenada na FP-Tree.
A Solução FP-Growth: Comprimir e Dividir
Etapa 2: Mineração da FP-Tree (Divide and Conquer)
FP-Growth usa uma estratégia de “Dividir e Conquistar”.
- Começa pela Tabela de Cabeçalho, do item menos frequente (no final da lista).
- Para esse item (ex: “Ovos”), ele coleta todos os “caminhos prefixos” que terminam em “Ovos”. Isso forma sua Base de Padrões Condicionais.
- A partir dessa base, ele constrói uma nova FP-Tree Condicional (uma árvore muito menor, apenas para “Ovos”).
- Ele minera recursivamente essa pequena árvore.
- Todos os padrões encontrados (ex: {Pão}, {Pão, Leite}) são combinados com o item original (ex: {Pão, Ovos}, {Pão, Leite, Ovos}).
- Ao quebrar o problema grande (minerar a árvore inteira) em problemas menores (minerar sub-árvores condicionais), o FP-Growth é exponencialmente mais rápido que o Apriori em datasets densos.
Apriori vs. FP-Growth
| Abordagem |
“Gerar e Testar”” (Join & Prune) |
“Dividir e Conquistar” (Pattern Growth) |
| Geração de Candidatos |
Sim (Principal gargalo) |
Não |
| Varreduras no Banco |
\(k+1\) varreduras (lento) |
2 varreduras (rápido) |
| Uso de Memória |
Baixo (só mantém L(k-1)) |
Alto (A FP-Tree precisa caber na memória) |
| Quando Usar? |
Datasets esparsos, simples, ou quando \(k\) é pequeno. |
Datasets densos, grandes, ou com padrões longos. |