You are on page 1of 68

Técnicas de associação:

algoritmos (parte 2)

Prof. Me. Ricardo Ávila


ricardo.avila@outlook.com.br
CLOSET: An Efficient Algorithm for Mining
Frequent Closed Itemsets

 Utiliza uma representação comprimida do banco de


dados usando uma FP-tree

 Depois da construção da FP-tree utiliza a abordagem de


dividir para conquistar para encontrar os conjuntos de
itens fechados frequentes
FP-Tree

 FP-Tree é uma estrutura de dados compacta para a


mineração eficiente de padrões freqüentes.
 Considere o seguinte banco de dados transacional
(duas primeiras colunas) e suporte = 3:

TID Itens Itens Freqüentes


(Ordenados p/ frequência)
100 f, a, c, d, g, i, m, p f, c, a, m, p
200 a, b, c, f, l, m, o f, c, a, b, m
300 b, f, h, j, o f, b
400 b, c, k, s, p c, b, p
500 a, f, c, e, l, p, m, n f, c, a, m, p
FP-Tree - Observações

 1. Como somente os itens freqüentes serão


importantes na mineração de padrões
freqüentes, é necessário realizar uma varredura
no banco de dados para identificar o conjunto de
itens freqüentes.

 2. O armazenamento do conjunto de itens


freqüentes em uma estrutura compacta pode
evitar varreduras repetidas do banco de dados.

4
FP-Tree - Observações

 3. Se múltiplas transações compartilham um


conjunto de itens freqüentes idêntico, eles podem
ser agrupados em um único conjunto com o
número de ocorrências registrado em uma
variável count.

– É fácil verificar se dois conjuntos são idênticos se os


itens freqüentes de todas as transações estão
ordenados conforme uma ordem fixada.

5
FP-Tree - Observações

 4. Se duas transações compartilham um prefixo


comum, conforme uma ordenação dos itens
freqüentes, as partes compartilhadas podem ser
agrupadas utilizando uma única estrutura de prefixo,
desde que a variável count seja computada
corretamente.

– Se os itens freqüentes estão ordenados de forma


decrescente de valores de freqüência, existem melhores
chances de que mais prefixos possam ser compartilhados.

6
FP-Tree - Execução

 1. Primeira varredura no banco de dados para obter


a lista ordenada L dos itens freqüentes:
– L = <(f:4), (c:4), (a:3), (b:3), (m:3), (p:3)>

TID Itens Itens Freqüentes


(Ordenados)

100 f, a, c, d, g, i, m, p f, c, a, m, p

200 a, b, c, f, l, m, o f, c, a, b, m

300 b, f, h, j, o f, b

400 b, c, k, s, p c, b, p

500 a, f, c, e, l, p, m, n f, c, a, m, p
7
FP-Tree - Execução

 2. Criação da raiz, nomeada com null.

root

TID Itens Itens Freqüentes (Ordenados)

100 f, a, c, d, g, i, m, p f, c, a, m, p
200 a, b, c, f, l, m, o f, c, a, b, m
300 b, f, h, j, o f, b
400 b, c, k, s, p c, b, p
500 a, f, c, e, l, p, m, n f, c, a, m, p
FP-Tree - Execução

 3. Nova varredura do BD, transação por transação:

Item Início da lista de nodos

f root
c
a f:1
b
m c:1
p
a:1
TID Itens Itens Freqüentes (Ordenados)

100 f, a, c, d, g, i, m, p f, c, a, m, p
m:1
200 a, b, c, f, l, m, o f, c, a, b, m
300 b, f, h, j, o f, b
400 b, c, k, s, p c, b, p p:1
500 a, f, c, e, l, p, m, n f, c, a, m, p 9
04/02/2018
FP-Tree - Execução

 3. Nova varredura do BD, transação por transação:

Item Início da lista de nodos

f root
c
a f:2
b
m c:2
p
a:2
TID Itens Itens Freqüentes (Ordenados)

100 f, a, c, d, g, i, m, p f, c, a, m, p b:1
m:1
200 a, b, c, f, l, m, o f, c, a, b, m
300 b, f, h, j, o f, b
m:1
400 b, c, k, s, p c, b, p p:1
500 a, f, c, e, l, p, m, n f, c, a, m, p
04/02/2018
FP-Tree - Execução

 3. Nova varredura do BD, transação por transação:

Item Início da lista de nodos

f root
c
a f:3
b b:1
m c:2
p
a:2
TID Itens Itens Freqüentes (Ordenados)

100 f, a, c, d, g, i, m, p f, c, a, m, p b:1
m:1
200 a, b, c, f, l, m, o f, c, a, b, m
300 b, f, h, j, o f, b
m:1
400 b, c, k, s, p c, b, p p:1
500 a, f, c, e, l, p, m, n f, c, a, m, p 11
04/02/2018
FP-Tree - Execução

 3. Nova varredura do BD, transação por transação:

Item Início da lista de nodos

f root
c
f:3 c:1
a
b b:1
m c:2 b:1

p
a:2 p:1
TID Itens Itens Freqüentes (Ordenados)

100 f, a, c, d, g, i, m, p f, c, a, m, p b:1
m:1
200 a, b, c, f, l, m, o f, c, a, b, m
300 b, f, h, j, o f, b
m:1
400 b, c, k, s, p c, b, p p:1
500 a, f, c, e, l, p, m, n f, c, a, m, p 12
04/02/2018
FP-Tree - Execução

 3. Nova varredura do BD, transação por transação:

Item Início da lista de nodos

f root
c
f:4 c:1
a
b b:1
m c:3 b:1

p
a:3 p:1
TID Itens Itens Freqüentes (Ordenados)

100 f, a, c, d, g, i, m, p f, c, a, m, p b:1
m:2
200 a, b, c, f, l, m, o f, c, a, b, m
300 b, f, h, j, o f, b
m:1
400 b, c, k, s, p c, b, p p:2
500 a, f, c, e, l, p, m, n f, c, a, m, p 13
04/02/2018
FP-Tree - Análise

 2 varreduras do banco de dados:


1. Contar itens frequentes
2. Gerar a FP-tree

 O custo para inserir uma transação Trans na FP-


Tree é O(|Trans|), onde |Trans| é o número de
itens freqüentes em Trans.

14
FP-Tree - Análise

 Dado um banco de dados transacional DB e um suporte mínimo


minSup, sua FP-Tree correspondente contém toda a informação
necessária para a mineração de padrões freqüentes no DB
(completeness).

 Sem considerar a raiz, o tamanho de uma FP-Tree é limitado ao


total de ocorrências dos itens freqüentes no DB e a altura é
limitada pelo maior número de itens freqüentes em uma transação
(compactness).

 Diferentemente do método Apriori-like que pode gerar um número


exponencial de candidatos no pior caso, sob nenhuma
circunstância uma FP-Tree com um número exponencial de
nodos será gerada.

15
Seja o seguinte arquivo de dados e a respectiva FP-tree (minsup=2)

null

TID Itens na c:4 e:1


transação
100 c, e, f, a, d
e:3 f:1 a:1
200 e, a
300 c, e, f
a:1
400 c, f, a, d f:3

500 c, e, f
d:1
a:1

d:1
Lista de itens frequentes (minsup=2) TID Itens
100 c, e, f, a, d
f_list = <c:4, e:4, f:4, a:3, d:2>
200 e, a
300 c, e, f
400 c, f, a, d
500 c, e, f

 Os frequent closed itemsets podem ser divididos


em 5 subconjuntos não sobrepostos:
– Os subconjuntos que contém d
– Os subconjuntos que contém a mas não d
– Os subconjuntos que contém f mas não a nem d
– Os subconjuntos que contém e mas não f, a nem d
– Os subconjuntos que contém somente c
Os subconjuntos que contém d
d-conditional
FP-tree original
sup(d) = 2
null
TDB|d = <cefa, cfa> null

sup(cefad) = 1
c:4 e:1 sup(cfad) = 2 c:2

e:3 f:1 a:1


e:1 f:1

a:1
f:3 a:1
f:1

d:1
a:1
a:1

d:1
cfad é um frequent closed itemset
Os subconjuntos que contém a mas não d

a-conditional null
FP-tree original

null c:2 e:1

c:4 e:1
e:1 f:1

e:3 f:1 a:1 f:1


sup(a) = 3

a:1 TDB|a = <cef, cf, e>


f:3 Nenhum tem suporte
igual ao de a:
d:1
a:1 sup(cefa) = 1
sup(ea) = 2
sup(cfa) = 1 , então
d:1 a é um frequent closed itemset
a-Conditional

f_list_a = <c : 2, e : 2, f : 2>

 Os frequent closed itemsets podem ser


divididos em 3 subconjuntos não sobrepostos:
 Os subconjuntos que contém af mas não d
null
 Os subconjuntos que contém ae mas não d nem f
 Os subconjuntos que contém ac mas não d, e ou f

af:2 c:2 e:1


ac:2 ae:2 minsup=2
null
null null

c:2 e:1 f:1


TDB|ea = <c>
c:2 c:1
e:1 f:1

ae é um frequent closed itemset. af:2 e ac:2 não são


porque tem o mesmo suporte que cfad:2, que é um CFI
Os subconjuntos que contém f mas não a nem d

f-conditional null
FP-tree original

null
c:4
sup(f) = 4

c:4 e:1
TDB|f = <ce, c>
e:3

a:1
sup(cef) = 3
e:3 f:1
sup(cf) = 4

a:1
f:3 cf é frequent closed itemset, pois
sup(f) = sup(cf)
d:1
a:1
cef é frequent closed itemset, pois
não é subconjunto de qquer itemset
d:1 encontrado com suporte idêntico.
Os subconjuntos que contém e mas não f, a nem d

FP-tree original e-conditional


null null
sup(e) = 4

c:4 e:1
TDB|e = <c> c:3

e:3 f:1 a:1 sup(ce) = 3

a:1 ce não é frequent closed itemset, pois


f:3 sup(ce) = sup(cef) que é FCI

d:1 e é frequent closed itemset, pois o


a:1
seu suporte é 4 e não 3

d:1
Os subconjuntos que contém somente c

Não é necessário pesquisar no c-Conditional Database


pois c é um Subconjunto de cf, que é um frequent closed
itemset com o mesmo suporte de c.
Resumo
Mineração de Padrões Sequenciais

Agrawal, R.; Srikant, R., "Mining sequential patterns".


Proceedings of the Eleventh International Conference on
Data Engineering, pp.3-14, 1995
MP-Sequenciais

 Mineração de Padrões
– Quais itens são comprados juntos em uma transação?

 Mineração de Padrões Sequenciais


– Quais itens são comprados em sequência, mas em
ocasiões diferentes?

26
MP-Sequenciais

• Suporte mínimo:
– Relativo a quantidade de clientes em relação ao
número total de clientes
– Diferente do apriori que considera a quantidade total
de transações

• Comparando
– MP:
•Ocorrência do item ÷ número de transações
– MP-Sequencial:
•Número de clientes com a transação ÷ número total de clientes

27
MP-Sequenciais

 Problema:
1. Dado uma base de dados D com transações, quais
as associações das transações dos clientes com o
passar do tempo?

28
MP-Sequenciais

• Definições:
– Conjunto de Itens: itens comprados ao mesmo tempo (na
mesma transação)
– Sequência: sequência de conjuntos de itens
– Sequência máxima: Não está contida em nenhuma outra
sequência.
• Exemplos:
– <(3) (4,5) (8)>
– <(3) (4,5) (8)> está contido em <(7) (3,8) (9) (4,5,6) (8)>
– A sequência <(3) (5)> não está contida em <(3,5)>

Notação: O que está entre parênteses representa uma transação e


os números representam os itens comprados. A ordem das
transações é da esquerda para a direita 29
MP-Sequenciais

 Problema:
1. Dada uma base de dados D com transações, quais
as associações das transações dos clientes com o
passar do tempo?
2. Dado D, mineração de padrão sequencial é
encontrar as sequências máximas entre todas as
sequências que tem certo suporte mínimo.
3. Ex:
comprador Sequencia Padrões sequenciais
1 (30) (90) (minsup=25%)
2 (10, 20) (30) (40, 60, 70) (30) (90)
3 (30, 50, 70) (30) (40, 70)
4 (30) (40, 70) (90)
5 (90)
30
MP-Sequenciais

 Relembrando o suporte
– MP:
Ocorrência do item ÷ número de transações
– MP-Sequencial:
Número de clientes com a transação ÷ número de clientes

31
Fases

 Sort
 Litemset
 Transformação
 Sequencia
 Maximal

32
Sort

 Ordenar a base de dados por ID do comprador e


por data da transação;
 Realizado de forma simples por um comando
SQL;

33
Sort

Arquivo original Após o sort

ID Data Itens ID Data Itens


comprador comprador
1 25/03/93 30 1 25/03/93 30
1 30/03/93 90 1 30/03/93 90
2 10/06/93 10, 20 2 10/06/93 10, 20
5 12/06/93 90 2 15/06/93 30
2 15/06/93 30 2 20/06/93 40, 60, 70
2 20/06/93 40, 60, 70
3 25/06/93 30, 50, 70
3 25/06/93 30, 50, 70
4 25/06/93 30
4 25/06/93 30 4 30/06/93 40, 70
4 30/06/93 40, 70 4 25/07/93 90
4 25/07/93 90 5 12/06/93 90

34
Fases

• Sort
• Litemset
• Transformação
• Sequencia
• Maximal

35
Litemset

• Encontrar o conjunto de todos os l-itemsets


(itemsets frequentes).

• Passos:
1. Agrupar dados por ID;
2. Gerar itemsets frequentes;

36
Litemset – Agrupamento

ID Data Itens
comprador
1 25/03/93 30
1 30/03/93 90
2 10/06/93 10, 20
2 15/06/93 30
2 20/06/93 40, 60, 70
3 25/06/93 30, 50, 70
4 25/06/93 30
4 30/06/93 40, 70
4 25/07/93 90
5 12/06/93 90

ID comprador Itens
1 <(30) (90)>
2 <(10, 20) (30) (40, 60, 70)>
3 <(30, 50, 70)>
4 <(30) (40, 70) (90)>
5 <(90)>
37
Litemset – encontrar os conjuntos frequentes

ID comprador Itens
1 <(30) (90)>
2 <(10,20) (30) (40,60, 70)>
3 <(30, 50, 70)>
4 <(30) (40, 70) (90)>
5 <(90)>

Considerando minsup = 2, os conjuntos frequentes são:

(30), (40), (70), (90) e (40,70)

38
Fases

• Sort
• Litemset
• Transformação
• Sequencia
• Maximal

39
Transformação

• Em uma transformação de sequência de um


comprador:
– Cada transação é substituída pelo conjunto de todos
os l-itemsets contidos na transação;

• Passos:
1. Transformação (considera minSup)
2. Mapeamento;

40
Transformação – suporte mínimo

ID comprador Itens
1 <(30) (90)>
2 <(10,20) (30) (40, 60, 70)>
3 <(30, 50, 70)>
4 <(30) (40, 70) (90)>
5 <(90)>

ID comprador Itens
1 <{(30)} {(90)}>
2 <{(30)} {(40), (70), (40 , 70)}>
3 <{(30),(70)}>
4 <{(30)} {(40), (70), (40, 70)} {(90)}>
5 <{(90)}>
Transformação – Mapeamento

ID comprador Itens
1 <{(30)} {(90)}>
2 <{(30)} {(40), (70), (40 70)}>
3 <{(30), (70)}>
4 <{(30)} {(40), (70), (40 70)} {(90)}>
5 <{(90)}>
Mapa
Item Símbolo

(30) 1
ID Itens
(40) 2
comprador
1 〈{1} {5}〉 (70) 3
2 〈{1} {2, 3, 4}〉 (40 70) 4
3 〈{1, 3}〉
4 〈{1} {2, 3, 4} {5}〉 (90) 5
5 〈{5}〉
42
Fases

• Sort
• Litemset
• Transformação
• Sequencia
• Maximal

43
Sequencia

 Usa o conjunto de l-itemsets para encontrar as


sequências máximas desejadas.
Conta todas as l-sequencias, incluindo as não máximas;
Ex.: AprioriAll

44
Fases

• Sort
• Litemset
• Transformação
• Sequencia
• Maximal

45
Maximal

 Encontrar as sequências máximas entre as


sequências frequentes.

46
Maximal

l-sequências
〈{1} {5}〉 Mapa
〈{1} {2, 3}〉
Item Símbolo
〈{1}〉

(30) 1
(40) 2
(70) 3
(40 70) 4
l-sequências
〈(30) (90)〉 (90) 5
〈(30) (40 70)〉

47
Exemplo de algoritmo: AprioriAll

 A cada fase gera as k-sequências frequentes


1. Recebe os dados da fase de transformação para
inicializar o 1-sequência

 Base de exemplo (diferente da anterior):


 Suporte mínimo: 2

Base de Dados 1-sequencia Suporte


〈{1 5} {2} {3} {4}〉 〈1〉 4
〈2〉 2
〈{1} {3} {4} {3 5}〉
〈3〉 4
〈{1} {2} {3} {4}〉 〈4〉 4
〈{1} {3} {5}〉 〈5〉 4
〈{4} {5}〉

48
AprioriAll

Gera os candidatos
da próxima fase
Verifica o suporte
mínimo passando
pelo banco

49
AprioriAll

 Continuando com o exemplo para gerar


2-sequências frequentes: gera os candidatos

2-sequencia
〈1 1〉 〈2 5〉 〈4 4〉
1-sequencia Suporte 〈1 2〉 〈3 1〉 〈4 5〉
〈1〉 4 〈1 3〉 〈3 2〉 〈5 1〉
〈2〉 2 〈1 4〉 〈3 3〉 〈5 2〉
〈3〉 4 〈1 5〉 〈3 4〉 〈5 3〉
〈4〉 4 〈2 1〉 〈3 5〉 〈5 4〉
〈5〉 4 〈2 2〉 〈4 1〉 〈5 5〉
〈2 3〉 〈4 2〉
〈2 4〉 〈4 3〉

50
AprioriAll

Gera os candidatos
da próxima fase
Verifica o suporte
mínimo passando
pelo banco

51
AprioriAll

 Verifica o suporte mínimo para as 2-sequências


(Passando pelo banco):
 Retira as que não possuem o suporte mínimo:

2-sequencia Suporte
Base de Dados 〈1 2〉 2
〈1 3〉 4
〈{1 5} {2} {3} {4}〉
〈1 4〉 3
〈{1} {3} {4} {3 5}〉 〈1 5〉 3
〈2 3〉 2
〈{1} {2} {3} {4}〉
〈2 4〉 2
〈{1} {3} {5}〉 〈3 4〉 3
〈{4} {5}〉 〈3 5〉 2
〈4 5〉 2
52
AprioriAll

Gera os candidatos
da próxima fase
Verifica o suporte
mínimo passando
pelo banco

53
AprioriAll

 Continuando com o exemplo para gerar


3-sequências frequentes , inicialmente gera as 3-
sequências candidatas

54
AprioriAll

2-sequencia Suporte
〈1 2〉 2
〈1 3〉 4
〈1 4〉 3
〈1 5〉
〈2 3〉
〈2 4〉
3
2
2
?
〈3 4〉 3
〈3 5〉 2
〈4 5〉 2

55
AprioriAll

2-sequencia Suporte
〈1 2〉 2 〈5 2 1〉
〈1 3〉 4
?
〈1 4〉 3
〈1 5〉 3
〈2 3〉 2
〈2 4〉 2
〈3 4〉 3 〈1 2 5〉
〈3 5〉 2 ?
〈4 5〉 2

56
AprioriAll
São candidatas as 3-sequências em que as 3 sequencias de 2 itens
que a formam são frequentes
Ex: 〈1 2 3〉 é candidata porque 〈1 2〉, 〈1 3〉 e 〈2 3〉 são frequentes

2-sequencia Suporte
〈1 2〉 2 3-sequência
〈1 3〉 4 〈1 2 3〉
〈1 4〉 3 〈1 2 4〉
〈1 5〉 3 〈1 3 4〉
〈2 3〉 2 〈1 3 5〉
〈2 4〉 2 〈1 4 5〉
〈3 4〉 3 〈2 3 4〉
〈3 5〉 2 〈3 4 5〉
〈4 5〉 2
57
AprioriAll

Gera os candidatos
da próxima fase
Verifica o suporte
mínimo passando
pelo banco

58
AprioriAll

 Agora sim! Vamos ao banco!

Base de Dados 3-sequencia Suporte


〈{1 5} {2} {3} {4})〉 〈1 2 3〉 2
〈{1} {3} {4} {3 5})〉 〈1 2 4〉 2
〈{1} {2} {3} {4})〉 〈1 3 4〉 3
〈{1} {3} {5})〉 〈1 3 5〉 2
〈{4} {5})〉 〈1 4 5〉 1
〈2 3 4〉 2
〈3 4 5〉 1
59
AprioriAll

Gera os candidatos
da próxima fase
Verifica o suporte
mínimo passando
pelo banco

60
AprioriAll

Continuando com o exemplo para gerar


4-sequências frequentes:

3-sequencia Suporte
〈1 2 3〉 2 4-sequencia
〈1 2 3 4〉
〈1 2 4〉 2
〈1 3 4〉 3
〈1 3 5〉 2
〈2 3 4〉 2

61
AprioriAll

Gera os candidatos
da próxima fase
Verifica o suporte
mínimo passando
pelo banco

62
AprioriAll

 Contando com o banco:

Base de Dados

〈{1 5} {2} {3} {4}〉


4-sequencia Suporte
〈{1} {3} {4} {3 5}〉 〈1 2 3 4〉 2
〈{1} {2} {3} {4}〉
〈{1} {3} {5}〉
〈{4} {5}〉

63
AprioriAll- sequências máximas
L4
〈1 2 3 4〉 Passos forward
C3 Remove as sequências
〈1 2 3〉 que são sub-sequência
〈1 2 4〉 de outra sequência
〈1 3 4〉
〈1 3 5〉
〈2 3 4〉
Máximas
〈1 2 3 4〉
L2
〈1 2〉
〈1 3〉
〈1 4〉
〈1 5〉
〈2 3〉
〈2 4〉
〈3 4〉
〈3 5〉
〈4 5〉
64
AprioriAll
L4
〈1 2 3 4〉 Passos forward
L3 Remove as sequências
〈1 2 3〉 que são sub-sequência
〈1 2 4〉 de outra sequência
〈1 3 4〉
〈1 3 5〉
〈2 3 4〉 Sub-sequências
Máximas
L2 〈1 2 3 4〉
〈1 2〉
〈1 3〉
〈1 4〉
〈1 5〉
〈2 3〉
〈2 4〉
〈3 4〉
〈3 5〉
〈4 5〉

65
AprioriAll
L4
〈1 2 3 4〉 Passos forward
L3 Remove as sequências
〈1 3 5〉 que são sub-sequência
L2 de outra sequência
〈1 2〉
〈1 3〉
〈1 4〉 Sub-sequências
Máximas
〈1 5〉 〈1 2 3 4〉
〈2 3〉
〈1 3 5〉
〈2 4〉
〈3 4〉
〈3 5〉
〈4 5〉

66
AprioriAll
L4
〈1 2 3 4〉 Passos forward
L3 Remove as sequências
〈1 3 5〉 que são sub sequência
L2 de outra sequência
〈4 5〉

Máximas
〈1 2 3 4〉
〈1 3 5〉
〈4 5〉

67
Referências

 Agrawal, R.; Srikant, R., Mining sequential patterns. Proceedings of


the Eleventh International Conference on Data Engineering, pp.3-14,
1995.

 Jiawei Han, Jian Pei, and Yiwen Yin. Mining Frequent Patterns
without Candidate Generation , ACM-SIGMOD, 2000.

 Jian Pei, Jiawei Han e Runying Mao. CLOSET: An Efficient Algorithm


for Mining Frequent Closed Itemsets. ACM-SIGMOD DMKD
workshop, 2000.

You might also like