EXTRAÇÃO DE REGRAS DE ASSOCIAÇÃO EM UMA BASE

Propaganda
EXTRAÇÃO DE REGRAS DE ASSOCIAÇÃO EM UMA BASE DE DADOS
RELACIONAL
Hélcio Gomes de Souza Filho
TESE
SUBMETIDA
AO
CORPO
DOCENTE
DA
COORDENAÇÃO
DOS
PROGRAMAS DE PÓS-GRADUAÇÃO DE ENGENHARIA DA UNIVERSIDADE
FEDERAL DO RIO DE JANEIRO COMO PARTE DOS REQUISITOS NECESSÁRIOS
PARA A OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIAS EM ENGENHARIA
CIVIL.
Aprovada por:
_______________________________________________________
Prof. Nelson Francisco Favilla Ebecken, D.Sc
_______________________________________________________
Prof. José Murilo Ferraz Saraiva D.Sc.
_______________________________________________________
Prof. Beatriz de Souza Leite Pires de Lima, D.Sc
RIO DE JANEIRO, RJ - BRASIL
MARÇO DE 2004
SOUZA FILHO, HÉLCIO GOMES DE
Extração de Regras de Associação de um
Banco de Dados Relacional [Rio de Janeiro] 2004
VI, 67 p. 29,7 cm (COPPE/UFRJ, M. Sc.,
Engenharia Civil, 2004)
Tese - Universidade Federal do Rio de Janeiro,
COPPE
1. Regras de Associação
2. Banco de Dados Relacional
3. Algoritmo Apriori
I. COPPE/UFRJ
II. Título (série)
ii
Aos meus avós,
José, Elídia,
Alfredo e Rosa.
iii
AGRADECIMENTOS
Ao professor Nelson Ebecken, meu orientador, que com sua experiência e visão
prática possibilitou que este trabalho fosse concluido com sucesso.
À minha amiga Silvana Scofano que me incentivou muito para iniciar o
mestrado.
À funcionária Estela pelo apoio que me deu durante o curso e pela amizade.
A todos os demais funcionários e amigos da COPPE.
iv
Resumo da Tese apresentada à COPPE/UFRJ como parte dos requisitos necessários para a
obtenção do grau de Mestre em Ciências (M. Sc.)
EXTRAÇÃO DE REGRAS DE ASSOCIAÇÃO DE UM BANCO DE DADOS
RELACIONAL
Hélcio Gomes de Souza Filho
Março/2004
Orientador: Nelson Francisco Favilla Ebecken
Programa: Engenharia Civil
Atualmente as empresas estão armazenando uma quantidade grande de dados e
com isso surge a necessidade de se criar procedimentos automatizados para pesquisar estes
dados a fim de descobrir as associações e correlações existentes, porém ocultas. Os
algoritmos de extração de regras de associação constituem uma importante ferramenta para
busca de conhecimento escondido em grandes bases de dados. Nosso trabalho tem o
objetivo de desenvolver uma forma otimizada de extrair as regras de associação utilizando
as facilidades disponíveis nos SGBDs relacionais.
v
Abstract of Thesis presented to COPPE/UFRJ as a partial fulfillment of the requirements
for the degree of Master of Science (M. Sc.)
EXTRACTION OF ASSOCIATION RULES FROM RELATIONAL DATABASES
Hélcio Gomes de Souza Filho
March/2004
Advisor: Nelson Francisco Favilla Ebecken
Department: Civil Engineering
Nowadays the companies are storing a large amount of data and the need of
creating an automated process to search this data appears,
in order to find hidden
associations and correlations existent among them. The algorithms to extract the association
rules are an important tool used to find the hidden knowledge in large databases. Our work
develops a program more efficient to extract the association rules, using the facilities of the
relational DBMSs.
vi
ÍNDICE
1 – INTRODUÇÃO ..............................................................................................9
2 – REGRAS DE ASSOCIAÇÃO .....................................................................12
2.1. Declaração formal do problema ...........................................................13
2.1.1. Decobrindo os grandes conjuntos de itens..................................15
2.1.2. O algoritmo apriori .....................................................................18
2.1.2. O algoritmo de regras de associação aplicado a tabelas ................
relacionais ..................................................................................18
2.2. O problema do item raro ......................................................................21
2.3. O grau de interesse de uma regra .........................................................21
3 – INTEGRAÇÃO DO ALGORITMO DE REGRAS DE ASSOCIAÇÃO
E BANCOS DE DADOS RELACIONAIS .................................................23
3.1. Fontes de dados usadas pelos algoritmos.............................................23
3.2. Estrutura do ambiente de Mineração de Dados....................................24
3.2.1. Implementação fracamente acoplada ..........................................24
3.2.2. Implementação fortemente acoplada ..........................................26
3.3. Representação dos Modelos de Mineração em Bancos de Dados .......26
4 – IMPLEMENTAÇÃO DE UM ALGORITMO DE REGRAS DE
ASSOCIAÇÃO EM UM SGBD RELACIONAL ......................................29
4.1. Pré-processamento ...............................................................................29
4.2. Representação dos dados......................................................................30
4.3. Geração dos grandes conjuntos de itens...............................................31
4.4. Poda......................................................................................................33
4.5. Extração das regras de associação........................................................33
7
4.6. Determinação do grau de interesse de uma regra.................................35
4.6.1. A utilização de critérios objetivos...............................................36
4.6.2. A utilização de critérios subjetivos .............................................37
5 – AVALIAÇÃO DO ALGORITMO IMPLEMENTADO NO SGBD........39
5.1. Geração dos grandes conjuntos de itens...............................................39
5.2. Limitação da quantidade de conjuntos de itens gerados ......................42
5.2.1. Utilizando o suporte mínimo ......................................................42
5.2.2. Utilizando o tamanho máximo dos conjuntos de itens ...............43
5.3. Avaliação do grau de interesse das regras extraídas ............................45
5.3.1. Regras interessantes segundo critérios objetivos........................45
5.3.2. Regras interessantes segundo critérios subjetivos ......................45
5.3.2.1. Determinando os itens que não devem fazer parte das
regras..................................................................................46
5.3.2.2. Determinando a quantidade máxima de itens presentes nas..
regras..................................................................................46
5.3.2.3. Utilizando as impressões gerais do usuário .......................47
5.3.2.4. Utilizando o conhecimento razoavelmente preciso do
usuário...............................................................................48
5.3.2.4. Utilizando o conhecimento preciso do usuário..................49
5.4. A extração de regras que possuem itens raros .....................................49
5.5. Avaliação dos resultados obtidos .........................................................50
6 – CONCLUSÕES.............................................................................................52
REFERÊNCIAS BIBLIOGRÁFICAS .............................................................55
ANEXO I
........................................................................................................57
ANEXO II
........................................................................................................59
8
ANEXO III ........................................................................................................60
ANEXO IV ........................................................................................................61
9
1. INTRODUÇÃO
Os recentes avanços tecnológicos tem permitido às empresas coletar e
armazenar uma grande quantidade de dados referentes às suas atividades. Estes dados
podem esconder conhecimentos valiosos e úteis para apoiar decisões estratégicas. Ao
mesmo tempo, a utilização de computadores tem permitido a extração automática de
conhecimento destes dados.
Estudos indicam que o volume de dados em uma organização dobra a cada
cinco anos. A maioria das organizações não sofre de falta de dados, mas sim de uma
abundância de dados redundantes e inconsistentes difíceis de usar para o suporte à decisão
[19]. Neste contexto as empresas enfrentam o desafio de organizar os seus dados e extrair o
conhecimento que se esconde nesta grande massa de dados.
Está se tornando cada dia mais difícil analisar essa grande quantidade de dados
usando apenas ferramentas OLAP (Online analytical processing), existindo a necessidade
de utilizar um processo automatizado para descobrir padrões desconhecidos nos dados.
Técnicas de mineração de dados têm sido extensivamente estudadas,
especialmente para análise de grandes massas de dados. Um problema típico é que os
algoritmos utilizados na mineração de dados precisam varrer a base de dados mais de uma
vez. Uma forma de otimizar este processo e diminuir a quantidade de dados utilizados, seria
a utilização de uma amostra dos dados, mas esta opção tem a desvantagem de tornar menos
evidente as diferenças sutis entre os dados.
A necessidade de manusear grandes quantidades de dados tem exigido um
maior poder computacional e uma otimização dos programas desenvolvidos. A maioria das
aplicações de mineração de dados, mesmo trabalhando com bancos de dados, utilizam-no
apenas como depósito de dados, extraindo-os diretamente para a memória principal do
computador responsável por executar o algoritmo de mineração de dados. Esta abordagem
limita a quantidade de dados que pode ser usada, forçando as aplicações a filtrar as
informações, e usar apenas parte delas para descobrir padrões desconhecidos. Algumas
aplicações executam dinamicamente consultas em um ambiente cliente / servidor. Neste
caso uma grande quantidade de dados é transferida, logo um tráfego desnecessário é gerado
na rede.
10
A idéia de executar programas que acessam bancos de dados evitando gerar
tráfego desnecessário nas redes, tem sido uma preocupação em muitos SGBDs (Sistemas
Gerenciadores de Banco de Dados). Um exemplo dessas aplicações são os procedimentos
armazenados. Por exemplo, o SQL SERVER 2000, SGBD desenvolvido pela Microsoft,
possibilita a implementação de procedimentos utilizando comandos da linguagem TransactSQL. [7] [9]
Tem havido um grande desenvolvimento de técnicas para integrar as aplicações
de mineração de dados com os SGBDs, implementando parte da aplicação dentro deles.
Estão sendo produzidas aplicações com bancos de dados relacionais, onde se constata que,
sempre que possível, o processamento deve ser incluído em comandos SQL.
A eficiência e o poder de expansão de seus algoritmos são atributos das
aplicações de mineração de dados, o que torna a otimização dos programas um fator
relevante no momento em que for necessário processar uma grande quantidade de dados em
um intervalo de tempo satisfatório. Neste contexto, a utilização de procedimentos, que são
executados dentro dos SGBDs, desempenham um papel importante, porque proporcionam
um redução no tempo de execução e uma diminuição no tráfego de dados em uma rede.
Aplicações de mineração de dados normalmente varrem repetidamente todo o conjunto de
dados e alguns podem ter um grande número de atributos e algumas centenas de milhares
de casos .
O problema que este trabalho visa abordar é representado pela necessidade do
manuseio de uma quantidade cada vez maior de dados em processos de mineração de dados
e pela incapacidade de algumas aplicações atualmente existentes executarem esta tarefa de
uma forma eficiente. Devido às características dos processos de mineração de dados, o uso
da capacidade de processamento fornecida pelos SGBDs é um fator importante na
implementação de uma aplicação, por se tratar do processamento de uma quantidade muito
grande de dados que é lida várias vezes, o tempo de execução é naturalmente uma
preocupação. Visando validar nossos experimentos, utilizamos o SQL SERVER 2000. [7]
[9]
Um conjunto de procedimentos armazenados escritos em Transact-SQL foi
construído, oferecendo integração com o banco de dados. O experimento utilizado foi uma
aplicação para extrair as regras de associação de um banco de dados relacional. Esta técnica
11
é particularmente importante quando tentamos encontrar associações e correlações entre os
dados.
Este trabalho foi organizado da seguinte forma: No capítulo 2, apresentamos
uma visão geral da técnica de descoberta das regras de associação. No capítulo 3
abordamos as implementações dos algoritmos de mineração de dados em relação ao
acoplamento entre aplicação e o banco de dados. No capítulo 4 implementamos uma
aplicação para extração de regras de associação usando uma integração fortemente
acoplada. O capítulo 5 avaliamos o desempenho do algoritmo apresentado no capítulo 4 e
estabelecemos uma comparação entre a implementação fortemente acoplada e uma outra
fracamente acoplada. Finalmente o capítulo 6, onde apresentamos as conclusões e futuros
trabalhos a serem realizados.
12
2– REGRAS DE ASSOCIAÇÃO
O processo utilizado para extrair o conhecimento existente em grandes bases de
dados se chama Mineração de Dados. Este processo deve ser semi-automático, porque
exige a participação do usuário na definição dos dados que serão analisados e na
verificação do conhecimento descoberto, informando se é útil ou não. Este processo visa
extrair de grandes bases de dados, sem nenhuma formulação prévia de hipóteses,
informações desconhecidas, válidas e úteis para a tomada de decisões.
Existem vários modelos de padrões e conhecimentos ocultos em grandes bases
de dados, um destes modelos são as regras de associação.
As regras de associação fazem parte das técnicas de mineração de dados e são
utilizadas para descobrir associações e correlações existentes entre os dados de um grande
banco de dados que atendam a critérios estabelecidos. Estes critérios podem ser objetivos
ou subjetivos e servem para determinar se uma regra de associação encontrada é
interessante ou não.
O conceito de interesse de uma regra de associação freqüentemente depende do
problema que está sendo analisado. Por exemplo, uma regra descoberta pode ser do tipo: se
você tem idade entre 18 e 20 anos e o CEP do seu endereço é 22420-000 (Av. Vieira
Souto), então você possui um carro que custa US$ 50.000,00. Se estivermos tentando
desenvolver uma campanha de marketing para produtos de luxo esta regra é interessante,
mas se estivermos interessados em analisar o problema de fraudes em seguro saúde esta
regra não terá muita importância.
Um exemplo típico de regras de associação é a análise da cesta de mercado.
Esse processo analisa os hábitos de consumo dos clientes descobrindo associações entre
diferentes itens que são colocados nas cestas de compra.
Se pensarmos em todos os itens presentes do estoque da loja, cada item possui
uma variável booleana que representa a sua presença ou ausência na cesta de um
determinado cliente. Caso o item esteja presente na cesta a variável tem o valor 1, caso
contrário o valor é 0. Cada cesta pode ser representada por um vetor booleano formado por
estas variáveis, conforme mostrado na Tabela 1.
13
Cesta
1
2
3
4
5
6
A
1
0
1
1
1
0
B
1
1
1
1
1
1
C
0
1
0
1
1
1
D
1
0
1
0
1
1
E
1
1
1
1
1
0
Tabela 1: Exemplo de uma tabela de transações
Neste exemplo, existem 5 itens no estoque da loja: A, B, C, D e E e as linhas da
tabela mostrada na Tabela 1 representam as compras de cada cliente.
Considerando a regra A, B → C extraída do conjunto de transações dos itens.
Podemos constatar que os itens A, B e C foram comprados juntos em duas das seis
transações (transações 4 e 5). Dizemos que a regra tem suporte (“covarage”) de 0,33 (2/6).
Para encontrarmos as associações existentes entre os dados devemos calcular a
quantidade de vezes que um conjunto de itens aparece nas cestas e comparar o valor
calculado com um limite pré-determinado chamado suporte mínimo. Os conjuntos de itens
que estão presentes em uma quantidade de cestas maior que o valor do suporte mínimo são
considerados grandes conjuntos de itens e serão utilizados para gerar as regras de
associação. Chamaremos de conjunto de itens a todo subconjunto dos itens do estoque.
2.1 Declaração formal do problema.
A declaração formal do problema foi apresentada por AGRAWAL et al [2].
Seja I = I1, I2, ....., Im um conjunto de atributos binários, chamados de itens. Seja T um
banco de dados de transações. Cada transação t é representada como um vetor binário, com
t[k] = 1, se t contém o item Ik, e t[k] = 0 caso não contenha. Há uma linha no banco de
dados para cada transação. Seja X um conjunto de itens em I. Dizemos que a transação t
satisfaz X se para todos os itens Ik em X, t[k] = 1.
No exemplo mostrado na Tabela 1 cada cesta de compra representa uma
transação. Temos então as seguintes transações:
14
T1 = (A,B,D,E)
T2 = (B,C,E)
T3 = (A,B,D,E)
T4 = (A,B,C,E)
T5 = (A,B,C,D,E)
T6 = (B,C,D)
Utilizando a técnica de regras de associação, encontramos implicações da
forma: X → I j, que significa X implica em Ij, onde X é um conjunto composto por alguns
itens de I, e Ij é um item de I que não está presente em X.
Considerando os itens existentes na transação T1 podemos ter, por exemplo, a
seguinte implicação: A → B, onde A é um conjunto de itens do estoque e o elemento B,
presente no conseqüente da implicação, não está presente no antecedente. Não podemos ter
implicações do tipo: A → A ou A → AB.
Dado um conjunto de transações T, estamos interessados em gerar todas as
regras que satisfazem a restrições de dois tipos:
Restrição sintática: neste caso determinamos se um item Ij deve estar contido
ou não nas regras que serão geradas. Esta restrição é subjetiva, pois depende da opinião da
pessoa que irá definir qual é o item que deverá ser ignorado.
Restrição de suporte: esta restrição diz respeito ao número de transações em T
que suportam a regra. O suporte de uma regra é definido como a porcentagem de transações
em T que contém os elementos do seu antecedente e os elementos do seu conseqüente.
O suporte de uma regra de associação é uma medida do grau de interesse da
regra. Estabelecemos um valor chamado suporte mínimo e estaremos interessados apenas
nas regras que possuem um suporte maior que o suporte mínimo determinado. Não existe
um valor fixo para o suporte mínimo, ele vai depender do problema que está sendo
analisado.
15
Outra medida do grau de interesse de uma regra de associação é a confiança. A
regra X → Ij possui fator de confiança 0 ≤ c ≤ 1 se no mínimo c% de transações em T que
contém X também contêm Ij. Usaremos a notação X → I
j
tem o fator de confiança c. A
confiança é probabilidade condicional P(Ij / X), probabilidade de ocorrer Ij dado que
ocorreu X. Temos então:
1. Suporte (X → I j) = P(X ∪ I j)
2. Confiança (X → I j) = P(I j / X)
O problema de extrair regras de associação pode ser decomposto em dois
subproblemas:
1. Gerar todas as combinações de itens que possuem suporte maior que um certo limite
chamado suporte mínimo. Chamamos estas combinações de grandes conjuntos de
itens e as outras são os pequenos conjuntos de itens.
2. Para todos os grandes conjuntos de itens, gerar as regras de associação e calcular os
respectivos valores para a confiança de cada um. Se o valor da confiança for maior
que um limite determinado chamado confiança mínima então a regra satisfaz o
critério do fator de confiança, caso contrário não satisfaz.
2.1.1 Descobrindo os grandes conjuntos de itens
O algoritmo para descoberta dos grandes conjuntos de itens está demonstrado
em [2] e [3]. Para cada transação o algoritmo forma todas as combinações possíveis de itens
e cada combinação representa um conjunto de itens. Cada conjunto de itens possui um
contador associado que armazena o número de transações em que ele aparece.
As primeiras combinações de dados encontradas são formadas por 1 elemento,
e para cada uma é armazenado no contador a quantidade de transações em que eles
aparecem. Depois encontramos as combinações de itens contendo 2 elementos, formando
extensões dos conjuntos já encontrados. Uma extensão de um conjunto de dados é definida
16
da seguinte forma: seja X e Y conjuntos de itens formados por elementos de I. Então X + Y
é dito uma extensão do conjunto de dados X se X ∩ Y = ∅.
A Figura 1 mostra um modelo de algoritmo para descobrir grandes conjuntos de
itens. O parâmetro dbsize é o total de linhas em um banco de dados e o parâmetro
minsuppot é o valor considerado como suporte mínimo para os conjuntos de itens.
O algoritmo executa múltiplos passos sobre o banco de dados. A cada passo os
conjuntos de itens são estendidos e os respectivos suportes calculados. Estes conjuntos de
itens são chamados conjuntos de itens candidatos, porque os seus suportes ainda não foram
comparados com o parâmetro suporte mínimo para determinarmos se são grandes conjuntos
de dados ou não.
Inicialmente existe apenas um conjunto de itens, que é o conjunto vazio. Ao
término de um passo, o suporte para um conjunto de itens candidato é calculado e
comparado com o minsupport para determinar se é um grande conjunto de itens. Ao mesmo
tempo, é determinado se este conjunto de itens deve ser adicionado ao conjunto de dados
que será estendido no próximo passo. O algoritmo termina quando o conjunto fronteira
(Frontier) se torna vazio. O contador de suporte para o conjunto de itens é preservado
quando um conjunto de itens é adicionado ao conjunto fronteira. O conjunto fronteira é
formado pelos conjuntos de itens que serão estendidos.
Na melhor hipótese poderíamos encontrar todos os grandes conjuntos de itens
com apenas um passo. Mas na pior situação serão necessários 2m contadores para todos os
conjuntos de itens que podem ser encontrados em I, onde m é o número de itens em I. Isto
não é apenas impraticável como desnecessário. De fato, é muito provável que poucos
conjuntos de itens grandes contenham mais de l itens, onde l é um valor pequeno.
Uma abordagem melhor é encontrar em apenas k passos os conjuntos de itens
grandes que contêm exatamente k itens. Tendo encontrado alguns conjuntos de itens no késimo passo, precisamos encontrar em k + 1 passos apenas aqueles conjuntos de itens que
possuem um item a mais que os grandes conjuntos de itens já encontrados. Se um conjunto
de itens é pequeno, sua extensão acrescida de apenas um elemento também é pequena.
Dessa forma, o conjunto fronteira para o próximo passo é o conjunto de itens candidatos
determinados no passo corrente com apenas mais um item. Esta alternativa representa outro
extremo, efetuaremos várias leituras sobre a base de dados.
17
Estas duas abordagens ilustram a questão entre o número de passos e o esforço
desperdiçado a fim de gerar conjunto de itens que na verdade são pequenos.
procedure Largeltemsets
begin
let Large set L = 0;
let Frontier set F = {∅};
while F ≠ 0 do begin
—— make a pass over the database
let Candidate set C=0;
forall database tuples t do
forall itemsets f em F do
if t contains f then begin
let Cf = candidate itemsets that are extensions
of f and contained in t;
forall itemsets cf in Cf do
if Cf ∈ C then
Cf.count = cf.count + 1;
else begin
cf.count = 0;
C = C + cf;
end
end
— consolidate
let F = 0;
forall itemsets c in C do begin
if count(c) / dbsize > minsupport then
L = L + c;
If c should be used as a frontier
in the next pass then
F = F + c;
end
end
Figura 1: Modelo de algoritmo para encontrar os grandes conjuntos de itens.
18
2.1.2 O algoritmo apriori
O algoritmo Apriori, demonstrado em [3], é um dos mais conhecidos para
encontrar grandes conjuntos de itens em bancos de dados de transações. Ele utiliza os
conjuntos de itens de tamanho k para gerar os conjuntos de itens de tamanho (k + 1). O
primeiro passo do algoritmo é encontrar os conjuntos de itens com 1 item. Este conjunto é
denominado L1. O conjunto L1 é usado para gerar L2, que representa os conjuntos de itens
com 2 itens e assim por diante até que nenhum conjunto de itens possa ser gerado.
Para reduzir o numero de conjuntos de itens gerados, o algoritmo utiliza uma
propriedade dos grandes conjuntos de itens. Esta propriedade é baseada na seguinte
observação. Por definição, se um conjunto de itens I não satisfaz a condição de suporte
mínimo, então I não é grande, isto é, P(I) < minsupport. Se um item A é adicionado ao
conjunto de itens I, então o conjunto de itens resultante (I ∪ A) não pode ocorrer mais
freqüentemente que I. Portanto, I ∪ A também não é grande, ou seja, P(I ∪ A) <
minsupport.
O primeiro passo do algoritmo é realizar a contagem dos conjuntos de itens
para encontrar os grandes conjuntos de itens de tamanho unitário. Os passos seguintes,
consistem de duas fases. Primeiro, os conjuntos de itens freqüentes Lk-1, encontrados no
passo anterior (k – 1) são utilizados para gerar os conjuntos de itens potencialmente
grandes, os conjuntos de itens candidatos (Ck). Na seqüência, é realizada uma nova busca
no banco de dados, contando-se o suporte de cada candidato em Ck.
A geração dos conjuntos de itens candidatos utiliza como argumento o conjunto
Lk-1. Isto retorna um super conjunto de itens com todos os conjuntos de itens de tamanho k
acrescidos de um item. Se um conjunto de itens X contém o conjunto de itens Y, dizemos
que X é um super conjunto de Y. O próximo passo é excluir todos os conjuntos de itens c ∈
Ck, tal que os conjuntos de itens de tamanho (k – 1) de c não estejam em Lk-1.
2.1.3 O algoritmo de regras de associação aplicado a tabelas relacionais
Uma abordagem para a extração de regras de associação em tabelas relacionais,
tratando dos atributos quantitativos, foi apresentado em [4]. Os algoritmos vistos até agora
foram desenvolvidos para utilizarem tabelas de transações, encontrando associações entre
valores “1” em uma tabela relacional onde todos os atributos são booleanos. Normalmente
19
as tabelas relacionais existentes nos bancos de dados possuem atributos de vários tipos,
estes atributos podem ser quantitativos ou categóricos, e cada atributo da tabela pode
possuir vários valores distintos. A Tabela 2 apresenta um exemplo de tabela relacional com
os dados de alguns alunos.
Matricula
001
002
003
004
005
Idade
15
16
15
17
16
Média
4,5
5
9
4
8
Aprovado
Não
Sim
Sim
Não
Sim
Tabela 2: Exemplo de tabela relacional
As colunas Idade e Média possuem valores quantitativos com muitos valores
distintos e uma forma de trabalhar com estes atributos é primeiramente dividi-los em
intervalos. A coluna Idade será dividida em dois intervalos: de 10 a 15 e de 16 a 20, e a
coluna Média será dividida nos intervalos: de 0 a 5 e de 5,1 a 10.
A tabela com os atributos quantitativos divididos em intervalos ficará conforme
mostrado na Tabela 3.
Matricula
001
002
003
004
005
Idade
10 –|15
16 –| 20
10 –| 15
16 –| 20
16 –| 20
Média
0 –| 5
0 –| 5
5 –| 10
0 –| 5
5 –| 10
Aprovado
Não
Sim
Sim
Não
Sim
Tabela 3: Distribuição dos dados quantitativos em intervalos.
Podemos transformar uma tabela relacional qualquer em uma tabela com
valores booleanos. O valor de um atributo booleano corresponde ao par (atributo1, valor1)
e será “1” se o atributo1 tiver o valor1 no registro original e “0” caso contrário. Então
poderemos utilizar qualquer algoritmo de regras de associação. A tabela transformada
ficará da seguinte forma:
20
Matrícula
10 < Idade ≤ 15
15 < Idade ≤ 20
0 < Média ≤ 5
5 < Média ≤ 10
Aprovado = Sim
Aprovado = Não
001
1
0
1
0
0
1
002
0
1
1
0
1
0
003
1
0
0
1
1
0
004
0
1
1
0
0
1
005
0
1
0
1
1
0
Tabela 4: Tabela relacional transformada em tabela de atributos booleanos.
Há dois problemas com este tratamento simplificado quando se trata de
atributos quantitativos, a criação de intervalos altera o suporte e a confiança dos valores dos
atributos.
Suporte – Se o tamanho definido para os intervalos de um atributo quantitativo
é pequeno, o suporte para algum intervalo pode ser pequeno, então algumas regras
envolvendo este atributo podem não ser encontradas, porque seus suportes estarão abaixo
do suporte mínimo. Se aumentamos o tamanho dos intervalos, diminuímos a quantidade de
intervalos e aumentamos o suporte de cada um deles.
Confiança – Algumas regras podem ter confiança mínima somente quando um
item nos seus antecedentes consistirem de um valor simples (ou um intervalo pequeno).
Esta perda de informação aumenta de forma diretamente proporcional ao tamanho do
intervalo.
Isto cria um impasse, se os intervalos são grandes, algumas regras podem não
satisfazer o critério de confiança mínima; se são pequenos as regras podem não satisfazer o
critério de suporte mínimo.
Este problema pode ser resolvido introduzindo um novo parâmetro chamado
suporte máximo. Para um determinado atributo quantitativo aumentamos o tamanho do seu
intervalo até que o suporte exceda o suporte máximo. Este parâmetro é usado apenas para
determinar o tamanho do intervalo em que serão divididos os valores do atributo, ele não
será utilizado para determinar se um conjunto de itens é grande ou não.
21
2.2 O problema do item raro.
Usando apenas um valor para o suporte mínimo em todo o banco de dados, o
modelo assume que todos os itens são da mesma natureza e/ou tem a mesma freqüência.
Contudo este caso é raro nas aplicações da vida real. Em muitas aplicações, alguns itens
aparecem muito freqüentemente, enquanto outros aparecem raramente. Se determinarmos
um valor alto para o suporte mínimo, aquelas regras que envolvem itens raros não serão
geradas. Para gerar as regras que contenham tanto itens freqüentes como itens raros, temos
que determinar um valor baixo para o suporte mínimo. Isto pode provocar a geração de um
número muito grande de regras. Este problema é chamado de problema do item raro.
Para solucionar este problema é utilizada uma técnica que permite ao usuário
especificar múltiplos suportes mínimos para refletir as naturezas dos itens e suas variadas
freqüências no banco de dados. Na mineração de regras de associação, diferentes regras
precisam satisfazer diferentes suportes mínimos dependendo de quais itens estejam
presentes.[13]
No modelo utilizado neste caso o conceito de regras de associação continua o
mesmo, mas a definição de suporte não. O suporte de um conjunto de itens é expresso em
termos do MIS (minimum item support) dos seus itens. Isto é, cada item no banco de dados
pode ter um suporte especificado pelo usuário. O suporte do conjunto de itens será o menor
MIS de seus itens. Estabelecendo diferentes valores para MIS de diferentes itens, o usuário
efetivamente expressa diferentes requerimentos para o suporte das regras.
Este modelo é mais flexível que o clássico e permite a geração de regras que
incluem os itens raros, sem produzir o grande número de regras que não são interessantes.
2.3 Grau de interesse de uma regra
Uma das questões mais importante da extração de regras de associação é o grau
de interesse das regras. Isto ocorre porque na maioria das situações um grande número de
regras são geradas, mas nem todas são úteis e/ou interessantes. Identificar as regras
interessantes entre todas as que são geradas é difícil para o usuário. Ele precisa de um
procedimento automatizado para ajudá-lo.
22
Estabelecer se uma regra é interessante é difícil, porque diferentes pessoas têm
interesses diferentes e até a mesma pessoa pode mudar de interesse em diferentes períodos
de tempo.
O grau de interesse de um regra pode ser estabelecido usando medidas objetivas
e subjetivas. As medidas objetivas envolvem a análise da estrutura da regra e a
significância estatística, que no caso das regras de associação incluem o suporte e a
confiança. Contudo, verifica-se que estas medidas são insuficientes para determinar se uma
regra é interessante ou não e medidas subjetivas também são necessárias.
As duas principais medidas subjetivas são:
1. Regras inesperadas: neste caso as regras são consideradas inesperadas se são
desconhecidas do usuário ou contradizem o conhecimento que ele possui.
2. Regras úteis: as regras são úteis se o usuário pode tomar alguma decisão baseado
nelas para seu benefício.
Embora as duas medidas sejam importantes, a utilidade é um conceito chave na
maioria das aplicações porque regras úteis permitem ao usuário melhorar o seu trabalho
tomando algumas ações específicas em resposta ao conhecimento descoberto. Contudo
utilidade é um conceito evasivo porque não é possível conhecer o espaço de todas as regras
e as ações ligadas a elas. Um regra pode ser inesperada independentemente de ser útil. As
regras interessantes podem ser classificadas em três categorias:
1. Regras que são inesperadas e úteis.
2. Regras que são inesperadas, mas não são úteis.
3. Regras que são úteis, porém esperadas.
23
3. INTEGRAÇÃO DO ALGORITMO DE REGRAS DE ASSOCIAÇÃO E BANCOS
DE DADOS RELACIONAIS
A promessa dos sistemas de apoio à decisão é explorar os dados corporativos
para proporcionar vantagens competitivas. Contudo, mesmo depois que um DataWarehouse
está criado, é freqüentemente difícil analisar e assimilar os dados. As ferramentas OLAP
foram um importante passo neste sentido, permitindo a visão multidimensional dos dados,
utilizando sofisticadas ferramentas para exibir e consultar os dados.
A mineração de dados promete um grande salto em relação às ferramentas
OLAP, porque descobre automaticamente regras interessantes. Tal funcionalidade será
muito útil em bancos de dados corporativos, que são caracterizados por uma grande
quantidade de dados, e a descoberta das regras de associação será uma das técnicas
utilizada.
3.1 Fontes de dados usadas pelos algoritmos
As aplicações que extraem as regras de associação podem trabalhar com dois
tipos de fontes de dados, cada uma com suas próprias vantagens: arquivos isolados e
SGBDs.
As aplicações têm usado freqüentemente arquivos isolados como fonte de
dados. Mesmo quando os dados operacionais estão armazenados em um SGBD, vários
sistemas extraem parte das informações para usarem no processo de mineração, alguns
deles trabalhando com dados que cabem na memória principal, este fato limita a quantidade
de informação a ser utilizada. Contudo estas implementações oferecem alguma vantagem
relacionada a resultados de desempenho, quando a quantidade de dados não é grande e cabe
toda na memória principal do computador.
A tecnologia de banco de dados tem sido utilizada com sucesso no
processamento de dados de negócios. Empresas têm coletado uma grande quantidade de
informações, utilizando um SGBD para gerenciá-las. Conseqüentemente, é desejável que
tenhamos uma forma fácil e direta de utilizar a mineração de dados aproveitando as
vantagens oferecidas pela tecnologia de banco de dados.
24
3.2 Estrutura do ambiente de Mineração de Dados
Durante muito tempo as pesquisas na área de mineração de dados se
preocuparam com o número de atributos dos dados analisados, e não com a quantidade de
registros. Isto ocorre porque a análise de dados
trabalha com estimativas sobre a
distribuição dos dados. Estas estimativas podem ser determinadas utilizando-se uma
quantidade pequena de dados, no caso uma amostra no lugar do total de dados. Contudo,
trabalhar apenas com uma parte dos dados compromete a precisão das informações obtidas.
Este problema nos leva a duas opções:
1. O desenvolvimento de algoritmos que levem em consideração a utilização de uma
grande quantidade de registros.
2. A restrição do escopo da análise.
Obviamente percebemos que a segunda opção não é interessante, porque é uma
solução que limita as possíveis soluções. Há a necessidade de desenvolver algoritmos de
extração de regras de associação que trabalhem com uma quantidade de dados cada vez
maior e de uma forma rápida e eficiente, faz-se necessário a melhoria da escalabilidade dos
algoritmos.
Os requisitos de escalabilidade levam os algoritmos a se preocuparem com o
fato de os dados não caberem todos na memória principal de uma vez, isto exige que o
algoritmo seja desenvolvido de forma a obter uma boa performance durante a execução.
Neste caso, a tecnologia de SGBD oferece várias funcionalidades que a torna valiosa para a
implementação de aplicações de mineração de dados.
Abaixo mostraremos dois ambientes utilizados para a implementação de
algoritmos de mineração de dados, um fracamente acoplado ao banco de dados e o outro
fortemente acoplado.
3.2.1 Implementação fracamente acoplada.
Neste tipo de implementação, também chamada convencional, os dados e os
algoritmos estão separados. A maioria das atividades de mineração de dados reside fora do
25
controle do SGBD ou os dados não estão armazanados em um Banco de Dados, eles se
encontram em arquivos isolados. Neste tipo de implementação o Banco de Dados serve, na
melhor das hipóteses, como repositório dos dados.
Uma máquina cliente contém a aplicação que é utilizada para a mineração de
dados e os dados armazenados sob um SGBD são lidos linha a linha através de um cursor.
A vantagem desta abordagem é a flexibilidade de programação, visto que o algoritmo de
mineração é implementado completamente no lado da aplicação. Além disso, qualquer
aplicação de mineração de dados pode facilmente passar a utilizar dados sob a gerência de
um SGBD.
Este tipo de implementação provoca um aumento na quantidade de dados que
são trocados entre a aplicação e o SGBD. As redes devem ser usadas desta forma somente
quando a quantidade de dados, a ser minerada, é pequena e a aplicação não é executada
freqüentemente, isto permite que a máquina cliente tenha tempo suficiente para executar a
tarefa sem ultrapassar o limite dos seus recursos e os da rede a qual está conectada.
Em um ambiente como este podem existir várias fontes de dados, como
arquivos isolados e vários bancos de dados, o que o torna mais complexo. Por isso antes de
iniciarmos o processo de mineração há a necessidade de coletar os dados nos respectivos
locais de armazenamento. Por estarem separados, estes dados provavelmente não estarão
integrados e poderão também estar inconsistentes. Neste caso todo o processo de mineração
dos dados englobará uma fase de seleção dos dados, que visa estabelecer quais são as
variáveis importantes para a análise, uma etapa de limpeza dos dados e uma fase de préprocessamento dos dados, a escolha do objetivo do processo, a mineração dos dados
propriamente dita e a interpretação e consolidação do conhecimento descoberto. A fase de
pré-processamento engloba a divisão dos dados quantitativos em intervalos e a estimativa
de valores faltantes.
Outro problema que pode ocorrer em uma implementação como esta é a
utilização de várias aplicações diferentes, cada uma possuindo uma interface diferente. Isto
pode dificultar a utilização de uma aplicação por um usuário que está habituado a usar
outra. Ocorre também uma demora na extração da informação contida nos dados devido a
todos os passos anteriores à extração das regras de associação.
26
3.2.2 Implementação fortemente acoplada
Em uma implementação fortemente acoplada, parte dos algoritmos de
mineração de dados está contida no núcleo do SGBD, através de procedimentos
armazenados e funções definidas pelo usuário. Desta forma, as operações de acesso a
dados, que consomem mais tempo, são implementadas em SQL e executadas no lado
servidor.
A máquina cliente apenas envia a instrução que dará início ao processamento e
fica com a tarefa de visualizar o conhecimento minerado no lado servidor. Neste caso a
aplicação pode se beneficiar das vantagens próprias de um SGBD.
Os SGBDs possibilitam o trabalho com bases de dados grandes, maiores que a
memória principal, uma vez que o SGBD por si só controla o manuseio da informação, a
paginação e o swapping.
Esta implementação permite uma padronização das interfaces dos aplicativos e
se transforma em um ambiente menos complexo que o anterior, e ainda proporciona mais
rapidez na conversão em conhecimento, das regras extraídas.
Outra implementação possível é a chamada caixa preta, aos olhos do usuário, o
algoritmo de mineração é completamente encapsulado dentro do SGBD. A aplicação envia
uma simples requisição solicitando a extração de algum conhecimento e recebe o resultado
final como resposta. Note que se trata também de uma integração fortemente acoplada.
Pode-se até dizer que, do ponto de vista do desempenho, esta é a melhor alternativa, visto
que todos os recursos do SGBD são explorados. A desvantagem potencial é que a
integração é escrava do particular algoritmo de mineração implementado e sabe-se que
nenhum algoritmo de mineração é o mais adequado para todos os conjuntos de dados a
minerar.
3.3 Representação dos Modelos de Mineração em Bancos de Dados
O progresso no desenvolvimento de algoritmos de mineração de dados tem
possibilitado várias implementações de operações eficientemente em grandes bancos de
dados. Isto é certamente uma importante contribuição, mas o principal objetivo é capacitar
os desenvolvedores de aplicações para a construção de modelos de mineração de dados
27
para o uso destes modelos, em uma variedade de tarefas de análise e para compartilhar estes
modelos com outras aplicações.
Dois SGBDs que já oferecem recursos para efetuarmos a Mineração de Dados
são o SQL Server 2000 fornecido pela Microsoft e o Oracle 10g fornecido pela Oracle.
A Microsoft integrou pela primeira vez algoritmos de mineração de dados junto
com banco de dados relacional e aplicações OLAP. O componente do SQL Server 2000
que contem o mecanismo de mineração de dados se chama Analysis Services. Este
componente é mostrado através de uma interface OLE DB DM (OLE DB para Data
Mining).[16]
O OLE DB é uma API, sigla em inglês para interfaces de programação de
aplicativos, padrão desenvolvido pela Microsoft para obter dados de uma grande variedade
de fontes de dados. Uma API é um meio utilizado para comunicação com o SGBD.
A interface OLE DB DM é uma extensão do OLE DB para permitir a
mineração de dados utilizando o SQL Server 2000. Ela permite que as aplicações cliente
examinem e manipulem os modelos de mineração existentes e suas propriedades de uma
forma similar a que é usada para examinar as tabelas. Todos os modelos de mineração são
representados na forma de tabela, com colunas, tipos de dados e metadados, que são
necessários aos algoritmos de mineração de dados.
O mecanismo de mineração de dados está integrado tanto no componente de
serviços de análise do servidor, que inclui também a tecnologia OLAP, quanto no
componente cliente.
O serviço de análise do SQL Server 2000 oferece duas classes de algoritmo: a
classificação e o agrupamento. A classificação utiliza o algoritmo de árvore de decisão e o
algoritmo utilizado no processo de agrupamento é o K-means. A sua principal característica
é agrupar os dados em k grupos, o valor de k é estabelecido pelo usuário.
O produto oferece uma console baseada em uma GUI (interface gráfica de
usuário) completa para administração do modelo de mineração de dados, incluindo a
criação, o treinamento, a possibilidade de percorrer o conteúdo e gerenciar a segurança.
O Oracle Data Mining (OMD) oferece funcionalidades de mineração de dados
embutidas no SGBD da Oracle. A versão em questão é o Oracle Database 10g.
28
O modelo ODM constrói e modela funções que são acessadas através de uma
interface Java ou PL/SQL (APIs) e um cliente de Mineração de Dados. Isto permite uma
infra-estrutura para o desenvolvimento de aplicações que integrem a mineração de dados
com o banco de dados.
O ODM oferece as seguintes implementações:
•
Componentes principais
•
Classificação e regressão
•
Agrupamento
•
Associações
•
Extração de características
•
Mineração de textos
•
Padrões seqüenciais
29
4- IMPLEMENTAÇÃO DE UM ALGORITMO DE REGRAS DE ASSOCIAÇÃO
EM UM SGBD RELACIONAL
Esta implementação tem por objetivo demonstrar a possibilidade de usar um
algoritmo de regra de associação fortemente acoplado a um SGBD, se beneficiando dos
recursos que este sistema oferece, para isto utilizamos o SGBD SQL Server 2000.
Como mostramos anteriormente um algoritmo de regras de associação pode ser
implementado fracamente acoplado ao Banco de Dados, neste caso o algoritmo é executado
fora do SGDB ou a implementação pode ser fortemente acoplada, onde os dados e a
aplicação estão armazenados no núcleo do SGBD. Usamos neste trabalho a segunda
abordagem, o algoritmo foi implementado através de procedimentos armazenados escritos
na linguagem Transact-SQL.
Neste trabalho usamos uma base de dados com 268 transações de clientes de
um mercado, onde os clientes podem escolher entre vários produtos. Cada transação pode
ter um número diferente de itens.
4.1 Pré-processamento
Na maioria das vezes as tabelas relacionais possuem colunas que possuem
valores quantitativos. Se o domínio destas colunas é grande, ocorrerá a geração de um
número muito grande de regras que possuem esta coluna, e poucas ou nenhuma com um
suporte maior que o valor determinado como suporte mínimo. O problema da geração de
regras de associação utilizando tabelas relacionais que possuem colunas quantitativas foi
discutido em [4]. Uma medida necessária é a distribuição dos valores quantitativos em
intervalos, por exemplo a coluna idade pode ser distribuída em faixas etárias.
Entretanto há dois problemas quando criamos intervalos para os valores:
•
O suporte do intervalo aumenta a medida que aumentamos o seu tamanho.
•
A confiança do intervalo diminui quando aumentamos o seu tamanho.
O algoritmo implementado não se preocupa com o processo de criação dos
intervalos para distribuir os dados quantitativos. Este processo é realizado antes da sua
execução, tomando-se o cuidado de definir um tamanho para os intervalos que não acarrete
30
perda de informação, considerando-se as mudanças provocadas no suporte e na confiança
das regras geradas.
4.2 Representação dos dados
Os algoritmos de regras de associação tratam os dados de entrada como se
estivessem contidos em uma tabela de transações que possui apenas valores 0 e 1. Para cada
transação enumera-se os itens que são membros da transação em questão, ou seja os itens
que possuem o valor 1. No caso de uma tabela relacional cada atributo pode possuir valores
diferentes de 0 e 1 e representar vários itens, dependendo da quantidade de valores distintos
que ela possui. Um item é caracterizado pelo par (atributo1, valor1), onde o item1 está
presente quando o atributo1 possui o valor1.
Podemos fazer um mapeamento dos dados de uma tabela relacional e
transformá-la em uma tabela booleana de transações., conforme demonstrado em [4].
Depois de realizada a transformação podemos utilizar qualquer algoritmo conhecido para
extração das regras de associação.
Uma tabela booleana pode, também, ter dois tipos de representação: horizontal
e vertical. Em uma tabela organizada horizontalmente, cada linha possui os itens presentes
nas transações. Na organização vertical cada item é um atributo e os valores são as
transações em que o atributo está presente.
Considerando os dados da Tabela 1 teremos as seguintes tabelas com os seus
dados organizados horizontalmente e verticalmente.
Transação
1
2
3
4
5
6
Itens
ABDE
BCE
ABDE
ABCE
ABCDE
BCD
Figura 2: Dados organizados horizontalmente
31
A
1
3
4
5
B
1
2
3
4
5
6
C
2
4
5
6
D
1
3
5
6
E
1
2
3
4
5
Figura 3: Dados organizados verticalmente
Utilizamos, neste trabalho, os dados organizados horizontalmente.
4.3 Geração dos grandes conjuntos de itens
Os grandes conjuntos de itens são armazenados no banco de dados em uma
tabela. Os grandes conjuntos de itens são encontrados da seguinte forma:
1 – Encontramos todos os conjunto de itens de tamanho K. Estes conjuntos são
chamados de conjuntos candidatos.
2 – Armazenamos em uma tabela os conjuntos de itens candidatos que possuem
suporte maior que o suporte mínimo especificado os demais são excluídos.
3 – Fazemos K = K + 1 e voltamos ao passo 1.
Inicialmente K = 1.
Em [3] encontramos um exemplo de instrução em SQL para gerar conjuntos de
itens candidatos, conforme mostrado na Figura 4.
Para geração dos grandes conjuntos de itens criamos duas tabela. Uma para
armazenar os conjuntos de itens candidatos e outra para armazenar os grandes conjuntos de
itens, conforme mostrados nas Figuras 5 e 6.
32
Insert into Ck
Select p.item1, p.item2, ..., p.itemk-1, q.itemk-1
From Lk-1 p, Lk-1 q
Where p.item1 = q.item1, ...p.itemk-2 = q.itemk-2,
p.itemk-1 < q.itemk-1
Figura 4: Exemplo de comando para gerar conjuntos de itens candidatos
CREATE TABLE [dbo].[CANDIDATOS] (
[ITENS] [varchar] (1000) NULL ,
[ULTIMA] [varchar] (1000) NULL ,
[TAMANHO] [numeric](18, 0) NULL ,
[LINHA] [int] NULL
) ON [PRIMARY]
GO
Figura 5: Tabela de conjunto de itens candidatos
A tabela que armazena os conjuntos de itens candidatos se chama
CANDIDATOS. A coluna ITENS recebe o conjunto de itens, se houver mais de um item
eles estarão separados por vírgula. A coluna ULTIMA armazena o último item do conjunto
de itens. A coluna TAMANHO recebe a quantidade de itens que estão presentes no
conjunto de itens. As linhas em que os conjuntos de itens estão presentes são armazenadas
na coluna LINHA.
Os grandes conjuntos de itens são armazenados na tabela chamada ITEMSET,
que possui as colunas: ITENS, ULTIMA e TAMANHO como a tabela CANDIDATOS.
Além destas colunas esta tabela possui uma coluna SUPORTE que armazena o suporte do
conjunto de itens. Nesta tabela só estarão gravados os conjuntos de itens que possuem
suporte maior que o suporte mínimo estabelecido.
33
CREATE TABLE [dbo].[ITEMSET] (
[ITENS] [varchar] (1000) NULL ,
[SUPORTE] [numeric](18, 0) NULL ,
[ULTIMA] [varchar] (1000) NULL ,
[TAMANHO] [numeric](18, 0) NULL
) ON [PRIMARY]
GO
Figura 6: Tabela de grandes conjuntos de itens
Depois de gerados todos os grandes conjuntos de itens, são excluídos da tabela
CANDIDATOS todos os conjuntos que não foram considerados grandes.
4.4 Poda
Um algoritmo para geração de conjuntos de itens pode gerar uma quantidade
muito grande de conjuntos, o que acarreta a geração de muitas regras. Por este motivo
precisamos encontrar formas de limitar a quantidade de conjuntos que serão gerados. O
programa implementado oferece duas formas de limitar a quantidade de regras geradas.
A primeira é através do tamanho máximo que um conjunto de itens pode ter.
Este parâmetro k também reduz o tempo de processamento, porque depois de gerar os
conjuntos de itens de tamanho k, o programa encerra a tarefa de gerar novos itemsets.
A segunda é através da comparação do suporte dos conjuntos de itens com o
valor do parâmetro suporte mínimo. Se o valor do suporte do conjunto de itens for menor
que o suporte mínimo o conjunto de itens é desprezado.
4.5 Extração das regras de associação
A forma de se obter as regras baseadas nos grandes conjuntos de itens foi
mostrada em [2]. Seja I um conjunto de itens com N itens, as regras formadas a partir dele
são do tipo X → Y, onde X ∈ I, Y ∈ I e X ∩ Y = ∅. O antecedente X da regra é formado
34
por qualquer subconjunto de I com tamanho máximo igual a N – 1 e o conseqüente é
formado pelos elementos de I que não pertencem a X.
Todos os grandes conjuntos de itens estão armazenados em uma tabela do
banco de dados com os respectivos suportes, a tabela ITEMSET, então para cada conjunto
de itens de tamanho N, geramos todas as combinações possíveis contendo 1 item, depois
todas com 2 itens até gerarmos todas as combinações com N – 1 ítens. Estas combinações
são armazenadas na tabela REGRA, mostrada na Figura 7:
CREATE TABLE [dbo].[REGRAS] (
[ANTECEDENTE] [varchar] (450) NULL ,
[CONSEQUENTE] [varchar] (450) NULL ,
[SUPORTE] [numeric](18, 0) NULL ,
[CONFIANCA] [numeric](18, 0) NULL
)
GO
Figura 7: Tabela com as regras geradas.
A tabela que contém as regras se chama REGRAS. Possui as colunas chamadas
ANTECEDENTE e CONSEQUENTE. Significa que o valor contido na coluna
ANTECEDENTE implica no valor do CONSEQUENTE. A coluna SUPORTE contém o
suporte da regra. A coluna CONFIANCA armazena a confiança da regra.
Seja a regra ANTECEDENTE → CONSEQUENTE, então a confiança desta
regra é dada por P(CONSEQUENTE/ANTECEDENTE), ou seja, a probabilidade do
CONSEQUENTE estar presente na regra dado que o ANTECEDENTE está presente.
Uma vez que os grandes conjuntos de itens foram encontrados, é fácil encontrar
regras interessantes. Isto pode ser feito utilizando-se a seguinte equação para calcular a
confiança da regra, onde a probabilidade condicional é expressa em termos do suporte do
conjunto de itens:
35
CONFIANCA(ANTECEDENTE → CONSEQUENTE) =
= P(CONSEQUENTE / ANTECEDENTE) =
= SUPORTE (ANTECEDENTE ∪ CONSEQUENTE) / SUPORTE (ANTECEDENTE)
Figura 8: Cálculo da confiança das regras
No nosso exemplo o suporte de (ANTECEDENTE ∪ CONSEQUENTE) é
igual ao suporte da regra, que já está armazenado na tabela ITEMSET e o mesmo ocorre
com o suporte do ANTECEDENTE.
4.6 Determinação do grau de interesse de uma regra
A determinação do grau de interesse de uma regra de associação é importante
na mineração de dados. Isto significa encontrar quais regras são interessantes para o
usuário. Um algoritmo de extração de regras de associação é capaz de gerar uma
quantidade muito grande de regras e se torna difícil determinar quais regras são
interessantes através de um procedimento manual e sabemos que é necessário criar um
procedimento automatizado.
Sabemos que o grau de interesse de uma regra pode ser medido utilizando-se
critérios objetivos e critérios subjetivos.
Antes de tratarmos dos critérios para determinação do grau de interesse de uma
regra, vamos introduzir o conceito de Regras de Associação Generalizada, que é um
modelo mais geral que o apresentado em [2].
Segundo Srikant et al [21], a mineração de regras de associação generalizadas é
definida como uma implicação da forma X → Y, onde X ⊂ I, Y ⊂ I, X ∩ Y = ∅, e
nenhum item em Y é ancestral de qualquer item de X.
36
4.6.1 A utilização de critérios objetivos
O suporte de uma regra de associação é a probabilidade de ocorrer o
conseqüente dado que ocorreu o antecedente na mesma transação. As regras extraídas estão
armazenadas na tabela REGRAS, da seguinte forma:
ANTECEDENTE
CONSEQÜENTE
SUPORTE
CONFIANÇA
Figura 9: Estrutura da tabela REGRAS
A maioria das consultas efetuadas durante a fase de cálculo do suporte
envolvem operações de agrupamento (GROUP BY) , conforme mostrado na Figura 10.
SELECT ITENS , COUNT(*)
FROM CANDIDATOS
GROUP BY ITENS
Figura 10: Consulta utilizada para calcular o suporte dos conjuntos de itens
Os conjuntos de itens, depois de calculados os suportes, são gravados na tabela
ITEMSET, caso tenham o suporte maior que o valor do suporte mínimo estabelecido. A
tabela ITEMSET armazena os grandes conjuntos de itens, que serão utilizados para gerar as
regras de associação.
O valor da confiança é a probabilidade de ocorrência do antecedente nas
transações que também possuem o conseqüente da regra.
Caso a regra possua o suporte maior que o parâmetro suporte mínimo e
confiança maior que o parâmetro confiança mínima dizemos que se trata de uma regra
interessante. Contudo esta conclusão se baseia apenas em critérios objetivos e este critérios
nem sempre são suficientes para a determinação do grau de interesse de uma regra.
37
4.6.2 A Utilização de critérios subjetivos
A maioria das abordagens para encontrar regras de associação subjetivamente
pede ao usuário para especificar quais tipos de regras são interessantes ou não. O
conhecimento do usuário possui diferentes graus de precisão que são divididos da seguinte
forma:
•
Impressões gerais,
•
Conceitos razoavelmente precisos, e
•
Conhecimento preciso.
Os dois primeiros tipos representam conhecimento vago a respeito dos dados e
o último o conhecimento preciso. Esta divisão é importante porque o ser humano possui
diferentes granularidades de conhecimento.[12]
É importante permitir a especificação de diferentes tipos de conhecimento. Isto
não determina apenas como podemos usar o conhecimento, mas também se podemos usar
todo o conhecimento do usuário. Por exemplo, se um sistema só permite a especificação de
conhecimento preciso, um usuário que só possui conhecimento vago do assunto não poderá
usá-lo.
O nosso trabalho propõe usar a idéia de classe hierárquica , que é o mesmo
usado pelo IAS – Interestingness Analysis System [11] e nas regras de associação
generalizadas [20]. Representamos a hierarquia da seguinte forma:
{uva, pera, maçã} ⊂ Frutas ⊂ Itens de Alimentação
{leite, queijo, manteiga} ⊂ Laticínios ⊂ Itens de Alimentação
{vaca, porco, frango} ⊂ Carnes ⊂ Itens de Alimentação
Frutas, Laticínios, Carne e Itens de Alimentação são classes e uva, pera, maçã,
leite, queijo, manteiga, vaca, porco e frango são itens. Note que nas regras de associação
generalizadas, as classes também podem ser tratadas como itens.
Agora discutiremos como o usuário pode informar os três tipos de
conhecimento.
38
1 - Impressões Gerais: representa que o usuário possui um conhecimento vago
sobre existência de associações entre algumas classes de itens, mas ele não sabe como estes
itens estão associados. Neste caso o usuário informa as classes ou os itens que ele considera
que estão associados, qualquer regra que possua estes itens será considerada em
conformidade com a especificação, e inesperada, tendo em vista que
baseou-se em
impressões gerais que o usuário possui em relação aos dados.
2 – Conceitos razoavelmente precisos: representa os conceitos que o usuário
possui de que pode haver associações entre algumas classes de itens, e ele sabe a direção
das associações, ou seja, ele especifica quais itens fazem parte do antecedente e do
conseqüente das regras interessantes.
3 – Conhecimento preciso: neste caso o usuário acredita em uma determinada
associação. Ele especifica os itens que fazem parte do antecedente e do conseqüente da
regra interessante. Ao contrário dos dois tipos anteriores, neste caso é necessário informar o
suporte e a confiança. Se a regra extraída tiver suporte ou confiança menor que o valor
especificado, a regra é considerada menos em conformidade com a especificação e mais
inesperada, porque possui os valores de suporte e confiança um pouco diferente dos
valores especificados.
A tabela REGRAS permite um pesquisa rápida quando o usuário possui
conhecimento razoavelmente preciso e conhecimento preciso. De posse do antecedente e do
conseqüente informado, pesquisamos a tabela REGRAS e obtemos as regras. No caso de o
usuário possuir apenas impressões gerais sobre os dados, serão informados os itens que
compõem a regra, sem especificar o antecedente e o conseqüente. Para permitir esta
pesquisa alteramos a estrutura da tabela REGRAS, incluindo uma coluna chamada ITENS,
que contem os itens que estão presentes na regra, independente de estarem no antecedente
ou no conseqüente da regra. Os itens contidos na coluna ITENS estarão em ordem
alfabética.
39
5- AVALIAÇÃO DO ALGORITMO IMPLEMENTADO NO SGBD
Esta seção tem por objetivo avaliar o desempenho do algoritmo quanto ao
tempo de execução e a capacidade de gerar regras de associação interessantes. O
desempenho do algoritmo será comparado ao CBA (Classification Based in Associations).
Para esta avaliação utilizamos um arquivo de transações de um mercado. Onde
cada transação corresponde a compra efetuada por um cliente. As transações possuem 80
itens e o arquivo contém o registro de 268 transações.
Os clientes não compram os mesmos itens, abaixo temos uma tabela que mostra
a quantidade de itens que foram comprados juntos e o número de transações que possuem
esta determinada quantidade de itens.
Qtd de itens
2
3
4
5
6
7
8
9
10
11
15
19
28
Total
Qtd de Transações
140
33
50
5
6
8
9
2
4
2
4
2
3
268
Figura 11: Quantidade de transações por quantidade de itens.
A figura 11 nos mostra a quantidade de transações no banco de dados com a
respectiva quantidade de itens. Por exemplo, existem 140 transações com 2 itens.
5.1 Geração dos grandes conjuntos de itens.
As transações presentes no banco de dados são compostas por itens do estoque
do mercado e para cada transação podemos obter os seus subconjuntos. Cada subconjunto
40
encontrado é chamado de conjunto de itens e os que possuem suporte maior que o valor
determinado como suporte mínimo, são chamados de grandes conjuntos de itens.
A quantidade de conjuntos de itens que podem ser gerados com os itens de uma
transação pode ser muito grande. Este valor é dado pela fórmula:
N
Q=∑
n=1
N!____
(n!) (N – n)!
Onde:
Q = quantidade de conjuntos de itens que podem ser formados
N = quantidade de itens da transação
n = quantidade de itens no conjunto de itens
Por exemplo: As transações que possuem 28 itens podem gerar 268.435.455
conjuntos de itens segundo a tabela mostrada no Anexo II.
O gráfico da Figura 12 mostra a quantidade de conjuntos de itens que podem
ser gerados a partir de uma transação com 28 itens. O eixo das abscissas contém a
quantidade de itens presentes no conjunto de itens gerado e o eixo das ordenadas contém a
quantidade de conjuntos de itens gerados.
Para a transação em questão podem ser gerados 28 conjuntos de itens com um
item e um único conjunto com 28 itens. A quantidade de conjuntos de itens gerados
aumenta exponencialmente até chegarmos aos conjuntos de itens com 14 itens, depois
desse valor a quantidade vai diminuindo. Todos estes conjuntos de itens seriam gerados se
determinarmos o valor 0 para o suporte mínimo.
O SQL Server 2000 mantém uma área chamada buffer cache de onde ele lê
páginas de dados que precisam ser recuperados. Os comandos INSERT, UPDATE e
DELETE não produzem os seus resultados diretamente no disco, em vez disso, as
modificações são feitas na cópia dos dados existente no buffer cache. As modificações não
são gravadas em disco até que ocorra um Checkpoint ou a modificação precise ser gravada
em disco para que o buffer possa ser usado para carregar outra página. Checkpoint é o
momento em que o SQL Server 2000 grava em disco os dados que estão no buffer cache.
[7] [9].
41
Qtd de conjuntos de itens gerados
45000000
40000000
Qtd de conjuntos gerados
35000000
30000000
25000000
20000000
15000000
10000000
5000000
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Qtd de itens
Figura 12: Quantidade de conjuntos de itens gerados
O intervalo entre os Checkpoints é inversamente proporcional a quantidade de
modificações efetuadas no banco de dados, significa que quanto mais inclusões, alterações
e exclusões forem efetuadas, menor é o intervalo de tempo em que ocorrerão Checkpoints.
Cada conjunto de itens gerado é inserido na tabela CANDIDATOS e na tabela
ITEMSET, caso se trate de um grande conjunto de itens. Se a quantidade de registros
gravados for muito grande ocorrerá um Checkpoint e isso provoca um Overherd na
aplicação, porque ela é interrompida até que termine a gravação em disco dos dados que
estão no buffer cache.
Percebemos que a quantidade de conjuntos de itens gerados influencia na
performance da aplicação, que pode ficar mais lenta se ocorrerem muitos Checkpoints.
42
A quantidade de conjuntos de itens que são gerados diminui a medida que
aumentamos o valor do suporte mínimo.
5.2 Limitação da quantidade de conjuntos de itens gerados
Como pode ser observado, a geração de conjuntos de itens é um processo que
pode resultar na inclusão de muitos registros nas tabela, e isto provoca a ocorrência de um
Checkpoint. É preciso encontrar uma forma de limitar a quantidade de conjuntos de itens
gerados.
5.2.1 Utilizando o suporte mínimo
Os conjuntos de itens possuem uma propriedade que é utilizada pelo algoritmo
a-priori para limitar a quantidade de conjuntos gerados. A propriedade diz que: se um
conjunto de itens C não é grande, qualquer outro conjunto de itens que contenha C não será
grande também. Baseado nesta propriedade, encontramos todos os conjuntos de itens com
um item e calculamos os seus suportes, os conjuntos que tiverem suporte menor que o
suporte mínimo determinado são descartados.
As transações do nosso exemplo contém 80 itens e a tabela do Anexo I mostra
estes itens e seus respectivos suportes.
Os conjuntos de itens que contêm um item apresentam suporte entre 1 e 49. De
todos estes conjuntos de itens serão considerados grandes aqueles que possuirem suporte
maior que o suporte mínimo determinado.
A determinação do suporte mínimo é importante porque pode limitar a
quantidade de conjuntos de itens com K itens, que participarão na formação dos conjuntos
de itens de tamanho K + 1. Por exemplo, se o valor do suporte mínimo for zero, todos os
itens serão usados para gerar os conjuntos de itens candidatos de tamanho dois, se o suporte
mínimo for dez, trinta e sete conjuntos de itens serão desprezados. No primeiro caso
usaremos 80 conjuntos de itens para gerar os conjuntos candidatos de tamanho dois e no
segundo caso serão 44 conjuntos. Nos conjuntos candidatos aparecerão os itens que estão
nos grandes conjuntos de itens de tamanho um, combinados dois a dois, sem repetição. A
figura 13 mostra a quantidade de conjuntos candidatos de tamanho dois que são gerados
para cada um dos suporte mínimos determinados.
43
Suporte
mínimo
0
5
10
15
20
25
30
35
40
45
50
Quantidade de conjuntos de
tamanho 2 gerados
3160
1378
946
253
78
36
10
3
3
3
0
Figura 13: Quantidade de conjuntos gerados em função do suporte mínimo
Verificamos que a quantidade de conjuntos de itens gerados diminui a medida
aumentamos o valor do suporte mínimo. Este valor deve ser bem dimensionado, pois é um
dos critérios objetivos para determinar o grau de interesse das regras que serão extraídas no
final do processo. Se for escolhido um valor alto deixará de fora as regras que possuem
itens raros.
5.2.2 Utilizando o tamanho máximo dos conjuntos de itens.
No nosso exemplo existem transações que possuem de dois a vinte e oito itens,
por isso os menores conjuntos de itens terão um item e os maiores vinte e oito. Para
verificarmos a influência do tamanho dos conjuntos de itens na geração dos grandes
conjuntos de itens fixamos o valor do suporte mínimo em 2%, o que corresponde a
aproximadamente 6 transações, e verificamos o suporte dos conjuntos de itens gerados.
A tabela do Anexo III nos mostra o total de conjuntos de itens gerados
agrupados pelo suporte. Com base nestes valores verificamos que o suporte diminui quando
aumentamos o tamanho de um conjunto de itens. Na Figura 14 mostramos o maior suporte
que possuem os conjuntos de itens de acordo com a quantidade de itens que eles possuem.
44
Quantidade de itens
Máximo Suporte
1
2
3
4
5
6
7
8
49
21
8
6
6
6
6
6
Figura 14: Máximo suporte dos grandes conjuntos de itens
Fixando o suporte mínimo em 2% produzimos conjuntos de itens com no
máximo 8 itens, acima desse valor os conjuntos de itens gerados não satisfazem o critério
de suporte mínimo.
Na figura 15 mostramos o maior conjunto de itens que pode ser gerado com
suporte mínimo variando de 2% a 10%.
Suporte Mínimo (%) Tamanho do maior conjunto de itens
2
8
3
2
4
2
5
2
6
2
7
2
8
1
9
1
10
1
Figura 15: Maiores conjuntos de itens gerados de acordo com o suporte mínimo
Verificamos que os grandes conjuntos de itens terão no máximo 8 itens, se o
suporte mínimo for 2% e a partir de 8% eles são compostos de apenas 1 item.
A limitação da quantidade máxima de itens que um grande conjunto de itens
pode ter, provoca a limitação, também, do número de passos que o programa precisa
executar para gerá-los. Esta medida melhora a performance do aplicativo, quando
45
utilizamos valores muito baixos para o suporte mínimo, além de produzir regras mais fáceis
de serem analisadas, por conterem uma quantidade pequena de itens.
5.3 Avaliação do grau de interesse das regras extraídas
Depois que obtemos os grandes conjuntos de itens podemos gerar as regras de
associação entre os dados. Como são geradas muitas regras e algumas não são
interessantes, implementamos alguns procedimentos automatizados para ajudar a identificar
as regras consideradas interessantes.
5.3.1 Regras interessantes segundo critérios objetivos
Como vimos anteriormente, os critérios objetivos são o suporte e a confiança da
regra. Inicialmente utilizamos o parâmetro suporte mínimo para limitar a quantidade de
conjuntos de itens que são gerados. Os conjuntos de itens, que possuem suporte menor que
o valor do parâmetro, são descartados porque não são considerados interessantes.
Do mesmo modo que fizemos com o suporte, utilizamos vários valores para a
confiança das regras e avaliamos os resultados obtidos. As regras que não possuem
confiança maior que a confiança mínima são descartadas, pois não são consideradas
interessantes.
Os critérios objetivos são facilmente implementados em um programa de
computador e com sua utilização podemos extrair regras interessantes sem ter nenhum
conhecimento sobre os dados ou sobre o problema que estiver sendo analisado, basta ter
acesso aos dados e conhecer os conceitos de suporte e confiança das regras. Contudo estes
critérios podem produzir muitas regras que não são consideradas interessantes pelo usuário.
5.3.2 Regras interessantes segundo critérios subjetivos
Os critérios subjetivos são obtidos de pessoas que possuem conhecimento
prévio dos dados e do problema que está sendo analisado. Estes critérios podem ser
utilizados antes ou depois da extração das regras de associação. Chamaremos a utilização
dos critérios subjetivos antes da extração das regras de pré-processamento e de pósprocessamento a sua utilização depois de extraídas as regras.
46
Durante o pré-processamento o usuário pode indicar alguns itens que não
devem fazer parte das regras ou a quantidade máxima de itens que as regras podem ter. Na
fase de pós-processamento o usuário baseia-se no conhecimento que possui sobre o
problema em questão.
5.3.2.1 Determinando os itens que não devem fazer parte das regras
Como mostramos anteriormente neste caso o usuário exclui alguns itens da
análise. Este procedimento pode representar uma melhora na performance do programa,
porque diminui a quantidade de conjuntos de itens gerados. Contudo não ocorre nenhuma
alteração nos resultados se o usuário decidir excluir algum item que possua suporte menor
que o suporte mínimo determinado.
Na tabela do anexo I, temos todos os itens que estão presentes nas transações e
seus respectivos suportes. O usuário pode determinas alguns itens dessa relação para serem
excluídos das regras.
Esta medida representa um ganho de velocidade de processamento, porque
diminui a quantidade de conjuntos de itens gerados, e conseqüentemente as inclusões,
alterações e exclusões de registros dentos das tabelas do banco de dados, reduzindo a
quantidade de Checkpoints.
5.3.2.2 Determinando a quantidade máxima de itens presentes nas regras
Geralmente é dificil analisar regras com mais de 6 itens, por isso a limitação da
quantidade de itens das regras é um procedimento importante, porque evita a geração de
regras com muitos itens e ainda otimiza a execução do programa.
Conforme mostrado na Figura 14, percebemos que o suporte dos conjuntos de
itens vai diminuindo em função do aumento da quantidade de itens presentes neles. Na
Figura 16 mostramos um gráfico em que mostra o maior suporte dos conjuntos de dados
com uma determinada quantidade de itens, utilizando como suporte mínimo 2%.
Para os conjuntos de itens com 1 item o maior suporte é 49 e para os conjuntos
de itens de tamanho 8 é 6.
47
Podemos perceber que o suporte dos conjuntos de itens vai diminuindo a
medida que a quantidade de itens vai aumentando. Segundo o critério de suporte os
conjuntos de itens vão se tornando menos interessantes.
60
50
40
30
20
10
0
1
2
3
4
5
6
7
8
9
Figura 16: Gráfico de tamanho dos conjuntos de itens x suporte
No eixo das abscissas encontram-se os tamanhos dos conjuntos de itens e no
eixo das ordenadas o maior valor do suporte.
5.3.2.3 Utilizando as impressões gerais do usuário
Neste caso o usuário sabe que alguns itens estão associados, mas não sabe
quem é o antecedente ou o conseqüente da regra. É necessário selecionar todas as regras
que contenham os itens que o usuário informou. Para cada regra é necessário informar
todos os itens que fazem parte dela, por exemplo, o usuário informa que existem as
seguintes regras e quais itens estão contidos nelas:
Regra 1: Composta pelos itens: White bread, Salty Biscuits e Car mats
Regra 2: Composta pelos itens: Vodka e Sekt
Regra 3: Composta pelos itens: Champagne, Vodka e Lemonade
48
Para obtenção das regras interessantes segundo este critério não é necessário
informar o suporte mínimo, porque o conhecimento que se tem é vago.
As regras interessantes nesse caso podem ser obtidas através de um comando
SQL:
SELECT * FROM REGRAS
WHERE ITENS = ‘Car mats, Salty Biscuits, White bread’
A coluna ITENS contém os itens que fazem parte da regra independente de
estarem no antecedente ou no conseqüente. O itens informados pelo usuário devem escritos
em ordem alfabética e separados por vírgulas. Neste exemplo podemos verificar se a regra
1 é interessante ou não, segundo os critérios do usuário.
5.2.3.4 Utilizando o conhecimento razoavelmente preciso do usuário
Conhecimento razoavelmente preciso do usuário significa que além de
conhecer os itens que fazem parte das regras interessantes, o usuário também sabe a direção
da associação existente entre eles, ou seja, ele sabe qual(is) item(ns) faz(em) parte do
antecedente e do conseqüente das regras.
Utilizando as mesmas regras do item anterior poderíamos ter:
Regra 1: White bread, Salty Biscuits → Car mats
Regra 2: Vodka → Sekt
Regra 3: Champagne → Vodka, Lemonade
Neste caso também não é necessário informar o suporte mínimo das regras.
Para verificarmos o grau de interesse da Regra 2, utilizamos o seguinte comando SQL:
SELECT * FROM REGRAS
WHERE ANTECEDENTE = ‘Vodka’
AND CONSEQUENTE = ‘Sekt’
49
5.2.3.5 Utilizando o conhecimento preciso do usuário
No momento de definir este critério o usuário possui um conhecimento preciso
sobre o problema analisado, ele sabe qual(os) item(ns) faz(em) parte das regras e dos seus
respectivos antecedentes e conseqüentes. A definição deste critério parece com o anterior,
porém é necessário também que o usuário defina o suporte e a confiança mínima das regras
que estão sendo informadas.
Neste caso podemos informar as mesmas regras do item anterior, acrescentando
os valores do suporte e da confiança da regra.
Regra 1: White bread, Salty Biscuits → Car mats (2%, 50%)
Regra 2: Vodka → Sekt (5%, 68%)
Regra 3: Champagne → Vodka, Lemonade (6%, 45%)
Usaremos a Regra 2 também neste exemplo para medirmos o seu grau de
interesse. Escrevemos o seguinte comando SQL:
SELECT * FROM REGRAS
WHERE ANTECEDENTE = ‘Vodka’
AND CONSEQUENTE = ‘Sekt’
AND SUPORTE >= 5
AND CONFIANCA >= 68
Neste caso usamos o sinal >= porque se a regra tiver suporte e confiança
maiores que os valores informados pelo usuário não significa que as regras não são
interessantes, pelo contrário, o seu grau de interesse é maior. Contudo se o suporte ou a
confiança da regra for menor que o valor informado ela será considerada não interessante.
5.3 A extração de regras que possuem itens raros
Uma das soluções propostas para se extrair regras que contenham os itens raros
é a utilização de mais de um valor para o suporte mínimo. O nosso algoritmo só utiliza um
único valor para o suporte mínimo.
50
Para encontrarmos regras que contêm os itens raros definimos os parâmetros
suporte e confiança mínima com o valor zero. Esta medida contudo provoca overhead,
porque provoca a inclusão de muitos registros nas tabelas do banco de dados e a ocorrência
de vários Checkpoints.
A solução utilizada foi determinar um valor para a quantidade máxima de itens
que as regras podem possuir. Este valor foi aumentado até atingir valores que ainda
proporcionaram uma performance satisfatória ao programa.
5.4 Avaliação dos resultados obtidos
Para avaliarmos os resultados obtidos fizemos uma comparação com os
resultados obtidos utilizando-se uma aplicação fracamente acoplada. A aplicação escolhida
foi o CBA (Classification Based in Associations), para a geração das regras de associação e
o IAS (IAS – Interestingness Analysis System) para encontrar regras interessantes segundo
os critérios subjetivos.
O CBA é utilizado para a extração das regras de associação. Utiliza uma
implementação fracamente acoplada, lendo os dados de um arquivo isolado. A aplicação
fortemente acoplada mostrada neste trabalho, apresenta um desempenho semelhante ao do
CBA, quando está extraindo as regras de associação, todas as vezes em que não ocorreu
Checkpoint.
Como dissemos antes, o Checkpoint ocorre quando é realizado um determinado
número de inclusões, alterações ou exclusões nas tabelas. Há várias formas de aumentar o
intervalo entre os Checkpoints [7] [9]. Contudo todas as medidas apenas retardam a sua
ocorrência e aumenta a quantidade de dados que tem que ser transferida do Buffer Cache
para o disco e o tempo necessário para realizar esta tarefa. Por isso a melhor opção, para se
obter uma boa performance é a geração da menor quantidade possível de grandes conjuntos
de itens.
O grau de interesse de uma regra segundo critérios subjetivos, pode ser obtido
utilizando os comandos SQL mostrados anteriormente, ou armazenando-se as informações
fornecidas pelo usuário e criando um procedimento armazenado que leia estas informações
e acesse a tabela REGRAS para permitir que sejam avaliadas mais de uma regra de cada
vez.
51
O aplicativo IAS trabalha com as várias formas de conhecimento que o usuário
possui: impressões gerais, informações razoavelmente precisas e informações precisas.
Podemos analisar várias regras de cada vez. Os dados são gerados pelo CBA e
armazenados em um arquivo isolado, o IAS obtém as informações fornecidas pelo usuário e
extrai as regras consideradas interessantes do arquivo que foi gerado pelo CBA.
As consultas feitas na tabela REGRAS são executadas relativamente rápido,
porque as intruções SELECT não são consideradas pelo sistema para a realização de um
Checkpoint. Elas também podem ser agilizadas com a utilização de índices. Para o caso de
obtermos impressões gerais do usuário, podemos utilizar um índice composto pela coluna
ITENS e para os outros casos um índice contendo o ANTECEDENTE e o
CONSEQÜENTE.
52
6 – CONCLUSÕES
A utilização da mineração de dados e suas técnicas, entre elas as regras de
associação, em aplicações desenvolvidas com forte acoplamento com bancos de dados, vem
sendo muito estudada, em virtude da dificuldade de análise de grandes volumes me dados.
Neste caso a mineração de dados oferece resultados melhores que os métodos estatísticos e
as ferramentas OLAP. O aumento da quantidade de dados armazenados e a necessidade de
analisar estes dados tem sido uma preocupação crescente. O processamento utilizando um
banco de dados relacional de forma a utilizar os seus recursos se apresenta como uma
solução eficiente.
Neste trabalho descrevemos uma técnica importante de mineração de dados, as
regras de associação, mostrando como elas são utilizadas para encontrar regras
interessantes que estão escondidas nos dados. Apresentamos também uma forma de
implementar o algoritmo apriori em um SGBD relacional ao invés de usar arquivos
isolados. Exploramos características específicas do SGBD, oferecendo uma integração
fortemente acoplada entre a técnica de regras de associação e um SGBD relacional.
Abordamos o problema dos atributos quantitativos que possuem um domínio muito grande,
observando o problema e propondo soluções durante o processo todo.
Podemos apontar vários pontos positivos na implementação utilizando SGBD
relacional. A implementação através de procedimentos armazenados escritos em linguagem
Transact-SQL, oferece um alto desempenho no processamento de resultados de consultas, e
embora a aplicação tenha sido desenvolvida no ambiente do SQL Server 2000, com poucas
alterações ela pode ser utilizada em qualquer outro SGBD.
Aplicações desenvolvidas em diversas linguagens poderão utilizar as rotinas
desenvolvidas, precisando apenas enviar comandos para o SGBD iniciar a execução dos
procedimentos armazenados e passar os parâmetros necessários. O processo feito dessa
forma não gera grande tráfego de dados, pois toda a manipulação de dados necessária é
realizada no próprio SGBD, através de comandos SQL, de funções definidas pelo usuário
ou mesmo funções existentes no banco de dados utilizado, retornando para aplicação um
conjunto menor de informações.
Resultados práticos mostraram gargalos de desempenho na execução do
algoritmo em um SGBD, quando comparado com o uso de programas que utilizam
53
arquivos isolados. Isto ocorre devido às características da linguagem SQL oferecida pelos
bancos de dados relacionais e a quantidade de registros que são inseridos. Entretanto
podemos perceber que a mineração de dados em grandes bancos de dados se tornará uma
tarefa de rotina no futuro e que os SGBDs incorporarão novas funcionalidades que ajudarão
no processo, então os servidores de banco de dados desempenharão um papel importante
neste contexto.
A maioria das aplicações existentes para regras de associação utiliza os bancos
de dados apenas como repositório ou utiliza arquivos isolados. As ferramentas oferecidas
pelos SGBDs para mineração de dados apresentam uma performance excelente, mas a
aplicação é escrava do algoritmo utilizado e sabemos que nenhum algoritmo de mineração
de dados consegue atender a todas as necessidades. Uma aplicação fortemente acoplada, se
beneficiando dos recursos oferecidos pelo SGBD, e ao mesmo tempo feita sob medida para
atender a determinada necessidade, também se apresenta como uma boa solução para o
futuro.
É possível que a evolução dos SGBDs atuais e na linguagem SQL, possibilitem
a sua utilização em operações de mineração de dados que sejam efetuadas mais
eficientemente. Por exemplo, disponibilizar comandos que possibilitem obter várias
informações sobre os dados, com apenas uma varredura na base de dados. Além disso, os
bancos de dados orientados a objetos e os SGBDs paralelos oferecem uma grande área a ser
explorada.
Este trabalho possibilita o início de outras pesquisas a serem realizadas nesta
área, as quais poderiam abordar aspectos que não puderam ser contemplados, seja por
limitações da versão atual do SGBD utilizado, seja por alguma característica existente nele,
ou simplesmente pelo grande número de variáveis, que podem ser analisadas. Poderia ser
implementado todos os algoritmos e facilidades oferecidas pelos diversos algoritmos de
regras de associação, de forma a tornar a aplicação mais flexível. Além disso, pesquisas
procurando desenvolver programas fortemente acoplados a banco de dados representa ainda
uma área a ser explorada, principalmente considerando-se que as ferramentas oferecidas
pelos SGBDs não são muito flexíveis.
É interessante que seja realizada uma abordagem típica de database marketing.
O database marketing envolve a transformação da informação existente na base de dados
54
em decisões. Este tipo de experimento determinaria as medidas podem ser adotadas com
base nas regras interessantes que foram extraídas.
Uma futura implementação seria a implementação de um processo
automatizado para determinar o tamanho dos intervalos dos atributos contínuos, baseado
em um suporte máximo que o atributo pode ter. A utilização, também de múltiplos
suportes, para minimizar o problema do item raro. Poderíamos também considerar a
implementação em um banco de dados orientado a objetos. Esta conversão é motivada
pelos benefícios existentes nesta abordagem e pela presença de novas funcionalidades que
representariam um ganho de desempenho consideravelmente maior.
55
REFERÊNCIAS BIBLIOGRÁFICAS
[1] ADAMO, J., “Data Mining for Association Rules and Sequential Patterns – Sequential
and Parallel Algorithms”, 1 ed., New York, Springer-Verlag
[2] AGRAWAL, R., IMIELINSKI, T., SWAMI, A., “Mining Association Rules between
Sets of Items in Large Databases”, ACM SIGMOD Conference on Management
of Data, pp.207-216, Washington DC, May 1993
[3] AGRAWAL, R., SRIKANT, R., “Fast Algorithms for Mining Association Rules”, In
Proc. Of the 20th Int’l Conference on Very Large Databases, Santiago, Chile,
September 1994.
[4] AGRAWAL, R.,SRIKANT, R., “Mining Quantitative Association Rules in Large
Relational Tables”, Proc. Of the ACM-SIGMOD 1996 Conference on
Management of Data, Montreal, Canada, June 1996.
[5] BRADLEY, P. S., FAYYAD, U. M., REINA,C. A., “Scaling Clustering Algorithms to
Large Datases”, In: The fourth International Conference on Knowledge
Discovery and Data Mining, New York, August, 1998.
[6] BRADLEY, P. S., FAYYAD, U. M., REINA,C. A., “Initialization of Iterative
Refinement Clustering Algorithms”, In: The fourth International Conference on
Knowledge Discovery and Data Mining, New York, August, 1998.
[7] GARCIA, M. F., REDING, J., WHALEN, E., et al, Microsoft SQL SERVER 2000
Administrator’s Companion, 1 ed., Redmond, Microsoft Press.
[8] GRAEFE, G., FAYYAD, U., CHAUDHURI, S., “On the Efficient Gathering of
Sufficient Statistics for Classification from Large SQL Databases”, The fourth
International Conference on Knowledge Discovery and Data Mining, New
York, August 1998.
[9] GUNDERLOY, M., JORDEN, J. L., SQL SERVER 2000 A Bíblia, 1 ed., São Paulo,
Makron Books.
[10] HUANG, Y., WU, C., “Mining Generalized Association Rules Using Pruning
Techniques”, In: IEEE International Conference on Data Mining, Maebashi,
Japan, December 2002.
56
[11] LIU, B., HSU, W., MA, Y., “Integrating Classification and Association Rule Mining”,
American Association for Artificial Intelligence, 1998.
[12] LIU, B., HSU, W., CHEN, S. et al , “Analysing the Subjective Interestingness of
Association Rules”, National University os Singapore
[13] LIU, B., HSU, W., MA, YIMING. et al , “Mining Association Rules with Multiple
Minimum Supports”, National University os Singapore
[14] NG, E. K. K., FU, A. W., WANG, K., “Mining Association Rules for Stars”, In:
IEEE International Conference on Data Mining, Maebashi, Japan, December
2002.
[15] OMIECINSKI, E. R., "Alternative Interest Measures for Mining Associations in
Databases" IEEE Transactions on Knowledge & Data Engineering, January
2003.
[16] NETZ, A., Chaudhuri, S., Fayyad, U., et al, “Integranting Data Mining With SQL
Databases: ole dbFOR Data Mining”, Microsoft Corporation
[17] PARTHASARATHY, S., “Efficient Progressive Sampling for Association Rules”, In:
IEEE International Conference on Data Mining, Maebashi, Japan, December
2002.
[18] PYLE, D., “Data Preparation for Data Mining”, 1 ed., San Francisco, Morgan
Kaufmann Publisher
[19] SHEN, Y., ZHANG, Z., YANG, Q., “Objective-Oriented Utility-Based Association
Mining”, In: IEEE International Conference on Data Mining, Maebashi, Japan,
December 2002.
[20] SINGH, H.S., Data Warehouse – Conceitos, Tecnologias, Implementação e
Gerenciamento, 1 ed., São Paulo, Makron Books
[21] SRIKANT, R., AGRAWAL, R., “Mining Generalized Association Rules”,
Proceedings of the 21st VLDB
57
ANEXO I
Relação de itens presentes nas transações com os respectivos suportes
Itens
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Nome
Flash set
Grape juice
Large doll
Milk powder
Orangeade
Puzzle-500p
Port wine
Lens cleaner
Irish whiskey
Baby food A
Toy lorry
water
White bread
Card game
Irish Butter
Oil-brand B
Salty Biscuits
Sherry
Small doll
Red Italian wine
Monopoly game
Brown bread
Car mats
Sekt
Oil filter XYZ
Vodka
White French wine
Spark plugs ABC
Cheddar Cheese
Oil-brand A
Jamaican Rum
Toast
Red German wine
Asti Spumante
Windscreen wipers
Washing-up liquid
Antifreeze
Colour neg. film
Suporte
1.000
1.000
1.000
1.000
1.000
1.000
2.000
2.000
2.000
2.000
2.000
2.000
3.000
3.000
3.000
3.000
3.000
3.000
3.000
4.000
4.000
4.000
5.000
5.000
5.000
5.000
5.000
6.000
6.000
7.000
7.000
7.000
8.000
8.000
9.000
9.000
10.000
10.000
58
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Detergent
Gouda Cheese
Red French wine
Camera A
Tonic water
Battery
Crispbread
Cognac
Color slide film
Battery charger
Cottage cheese
Soap A
White Italian wine
White German wine
B-Beer
Apple juice
Orange juice
Disp. nappies Q
Lime juice
Export
car light bulb H4
Stout
Toilet Paper
Crisps
Scotch whisky
C-Beer
A-Beer
Baby bottle
Milk
Brandy
Cachaca
Disp. nappies P
Crackers
Champagne
Car Types Cherry LiqueurBaby food B
Puzzle-1000p
Mineral water
Cider
Toy car
Cream
Lemonade
59
10.000
10.000
11.000
11.000
11.000
12.000
12.000
12.000
13.000
13.000
14.000
14.000
15.000
15.000
15.000
15.000
15.000
15.000
15.000
16.000
16.000
16.000
16.000
17.000
18.000
19.000
20.000
20.000
20.000
21.000
24.000
25.000
25.000
26.000
27.000
28.000
29.000
31.000
33.000
47.000
48.000
49.000
ANEXO II
Quantidade de conjuntos de itens gerados, para uma transação com 28 itens
Quantidade de itens nos
conjuntos gerados
Quantidade de
conjuntos gerados
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Total
28
378
3.276
20.475
98.280
376.740
1.184.040
3.108.105
6.906.900
13.123.110
21.474.180
30.421.755
37.442.160
40.116.600
37.442.160
30.421.755
21.474.180
13.123.110
6.906.900
3.108.105
1.184.040
376.740
98.280
20.475
3.276
378
28
1
268.435.455
60
ANEXO III
Quantidade de itens
Suporte
Quantidade de conjuntos
de itens
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
3
3
3
4
5
6
7
8
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
24
25
26
27
28
29
31
33
47
48
49
6
7
8
9
10
12
14
21
6
7
8
6
6
6
6
6
2
3
2
3
4
2
4
2
1
7
4
1
1
1
3
1
1
2
1
1
1
1
1
1
1
1
1
57
12
17
3
2
1
1
1
37
1
1
40
36
21
7
1
61
ANEXO IV
Procedimento armazenado para gerar regras de associação
CREATE PROCEDURE G_REGRAS
@MIN_SUP NUMERIC (6,3),
@MIN_CONF NUMERIC (6,3),
@K INT
AS
--***************************************************************
--
CRIAÇÃO DA TABELA CANDIDATOS
--***************************************************************
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CANDIDATOS]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[CANDIDATOS]
CREATE TABLE [dbo].[CANDIDATOS] (
[ITENS] [varchar] (1000) NULL ,
[ULTIMA] [varchar] (50) NULL ,
[TAMANHO] [numeric](18, 0) NULL ,
[LINHA] [int] NULL
) ON [PRIMARY]
CREATE INDEX [IX_CANDIDATOS] ON [dbo].[CANDIDATOS]([TAMANHO]) ON [PRIMARY]
CREATE INDEX [IX_CANDIDATOS_1] ON [dbo].[CANDIDATOS]([LINHA]) ON [PRIMARY]
--***************************************************************
--
CRIAÇÃO DA TABELA ITEMSET
--***************************************************************
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ITEMSET]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ITEMSET]
CREATE TABLE [dbo].[ITEMSET] (
[ITENS] [varchar] (900) NULL ,
[SUPORTE] [numeric](6, 3) NULL ,
[ULTIMA] [varchar] (50) NULL ,
[TAMANHO] [numeric](18, 0) NULL
) ON [PRIMARY]
CREATE INDEX [IX_ITEMSET] ON [dbo].[ITEMSET]([ITENS]) ON [PRIMARY]
62
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[REGRAS]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[REGRAS]
--***************************************************************
--
CRIAÇÃO DA TABELA REGRAS
--***************************************************************
CREATE TABLE [dbo].[REGRAS] (
[ITENS] [varchar] (1000) NULL ,
[ANTECEDENTE] [varchar] (450) NULL ,
[CONSEQUENTE] [varchar] (450) NULL ,
[SUPORTE] [numeric](6, 3) NULL ,
[CONFIANCA] [numeric](6, 3) NULL
)
--***************************************************************
--
DECLARAÇÃO DAS VARIÁVEIS AUXILIARES
--***************************************************************
DECLARE @CONTADOR INT
DECLARE @QTD_COLUNAS INT
DECLARE @QTD_ITENS INT
DECLARE @TABELA VARCHAR(20)
DECLARE @I_SQL NVARCHAR(1000)
DECLARE @QTD_LINHAS INT
DECLARE @IND INT
DECLARE @POS INT
DECLARE @COLUNAS VARCHAR(2000)
DECLARE @ITEM VARCHAR(1000)
DECLARE @ITEMSET VARCHAR(1000)
DECLARE @ULTIMA VARCHAR(1000)
DECLARE @LINHA INT
DECLARE @ITENS varchar(900)
DECLARE @ITENS_AUX varchar(900)
DECLARE @TAMANHO INT
DECLARE @MIN_SUP2 INT
DECLARE @SUPORTE numeric (6,3)
DECLARE @SUPORTE_2 numeric (6,3)
DECLARE @CONFIANCA numeric (6,3)
DECLARE @V_Col001 VARCHAR(25)
DECLARE @V_Col002 VARCHAR(25)
DECLARE @V_Col003 VARCHAR(25)
DECLARE @V_Col004 VARCHAR(25)
DECLARE @V_Col005 VARCHAR(25)
63
DECLARE @V_Col006 VARCHAR(25)
DECLARE @V_Col007 VARCHAR(25)
DECLARE @V_Col008 VARCHAR(25)
DECLARE @V_Col009 VARCHAR(25)
DECLARE @V_Col010 VARCHAR(25)
DECLARE @V_Col011 VARCHAR(25)
DECLARE @V_Col012 VARCHAR(25)
DECLARE @V_Col013 VARCHAR(25)
DECLARE @V_Col014 VARCHAR(25)
DECLARE @V_Col015 VARCHAR(25)
DECLARE @V_Col016 VARCHAR(25)
DECLARE @V_Col017 VARCHAR(25)
DECLARE @V_Col018 VARCHAR(25)
DECLARE @V_Col019 VARCHAR(25)
DECLARE @V_Col020 VARCHAR(25)
DECLARE @V_Col021 VARCHAR(25)
DECLARE @V_Col022 VARCHAR(25)
DECLARE @V_Col023 VARCHAR(25)
DECLARE @V_Col024 VARCHAR(25)
DECLARE @V_Col025 VARCHAR(25)
DECLARE @V_Col026 VARCHAR(25)
DECLARE @V_Col027 VARCHAR(25)
DECLARE @V_Col028 VARCHAR(25)
SET @TABELA = 'cbaform'
SELECT @QTD_COLUNAS = COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABELA
IF @K = 0
BEGIN
SET @K = @QTD_COLUNAS
END
SELECT @QTD_LINHAS = COUNT(*) FROM cbaform
SET @MIN_SUP2 = (@QTD_LINHAS * @MIN_SUP) / 100
SET @MIN_SUP = (@QTD_LINHAS * @MIN_SUP) / 100
IF @MIN_SUP2 < @MIN_SUP
BEGIN
SET @MIN_SUP2 = @MIN_SUP2 + 1
END
DECLARE C_COLUNAS CURSOR FOR
64
SELECT Col001, Col002, Col003,
Col004, Col005, Col006,
Col007, Col008, Col009,
Col010, Col011, Col012,
Col013, Col014, Col015,
Col016, Col017, Col018,
Col019, Col020, Col021,
Col022, Col023, Col024,
Col025, Col026, Col027,
Col028
FROM CBAFORM
SET @CONTADOR = 1
OPEN C_COLUNAS
FETCH NEXT FROM C_COLUNAS
INTO @V_Col001,
@V_Col002,
@V_Col003,
@V_Col004,
@V_Col005,
@V_Col006,
@V_Col007,
@V_Col008,
@V_Col009,
@V_Col010,
@V_Col011,
@V_Col012,
@V_Col013,
@V_Col014,
@V_Col015,
@V_Col016,
@V_Col017,
@V_Col018,
@V_Col019,
@V_Col020,
@V_Col021,
@V_Col022,
@V_Col023,
@V_Col024,
@V_Col025,
@V_Col026,
@V_Col027,
@V_Col028
SET @LINHA = 1
65
WHILE @@FETCH_STATUS = 0
BEGIN
IF @V_Col001 <> '?'
BEGIN
BEGIN TRAN REG_000_1
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col001, @V_Col001, 1, @LINHA)
COMMIT TRAN REG_000_1
END
IF @V_Col002 <> '?'
BEGIN
BEGIN TRAN REG_000_2
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col002, @V_Col002, 1, @LINHA)
COMMIT TRAN REG_000_2
END
IF @V_Col003 <> '?'
BEGIN
BEGIN TRAN REG_000_3
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col003, @V_Col003, 1, @LINHA)
COMMIT TRAN REG_000_3
END
IF @V_Col004 <> '?'
BEGIN
BEGIN TRAN REG_000_4
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col004, @V_Col004, 1, @LINHA)
COMMIT TRAN REG_000_4
END
IF @V_Col005 <> '?'
BEGIN
BEGIN TRAN REG_000_5
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col005, @V_Col005, 1, @LINHA)
COMMIT TRAN REG_000_5
END
IF @V_Col006 <> '?'
BEGIN
66
BEGIN TRAN REG_000_6
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col006, @V_Col006, 1, @LINHA)
COMMIT TRAN REG_000_6
END
IF @V_Col007 <> '?'
BEGIN
BEGIN TRAN REG_000_7
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col007, @V_Col007, 1, @LINHA)
COMMIT TRAN REG_000_7
END
IF @V_Col008 <> '?'
BEGIN
BEGIN TRAN REG_000_8
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col008, @V_Col008, 1, @LINHA)
COMMIT TRAN REG_000_8
END
IF @V_Col009 <> '?'
BEGIN
BEGIN TRAN REG_000_9
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col009, @V_Col009, 1, @LINHA)
COMMIT TRAN REG_000_9
END
IF @V_Col010 <> '?'
BEGIN
BEGIN TRAN REG_000_10
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col010, @V_Col010, 1, @LINHA)
COMMIT TRAN REG_000_10
END
IF @V_Col011 <> '?'
BEGIN
BEGIN TRAN REG_000_11
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col011, @V_Col011, 1, @LINHA)
COMMIT TRAN REG_000_11
END
IF @V_Col012 <> '?'
67
BEGIN
BEGIN TRAN REG_000_12
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col012, @V_Col012, 1, @LINHA)
COMMIT TRAN REG_000_12
END
IF @V_Col013 <> '?'
BEGIN
BEGIN TRAN REG_000_13
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col013, @V_Col013, 1, @LINHA)
COMMIT TRAN REG_000_13
END
IF @V_Col014 <> '?'
BEGIN
BEGIN TRAN REG_000_14
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col014, @V_Col014, 1, @LINHA)
COMMIT TRAN REG_000_14
END
IF @V_Col015 <> '?'
BEGIN
BEGIN TRAN REG_000_15
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col015, @V_Col015, 1, @LINHA)
COMMIT TRAN REG_000_15
END
IF @V_Col016 <> '?'
BEGIN
BEGIN TRAN REG_000_16
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col016, @V_Col016, 1, @LINHA)
COMMIT TRAN REG_000_16
END
IF @V_Col017 <> '?'
BEGIN
BEGIN TRAN REG_000_17
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col017, @V_Col017, 1, @LINHA)
COMMIT TRAN REG_000_17
END
68
IF @V_Col018 <> '?'
BEGIN
BEGIN TRAN REG_000_18
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col018, @V_Col018, 1, @LINHA)
COMMIT TRAN REG_000_18
END
IF @V_Col019 <> '?'
BEGIN
BEGIN TRAN REG_000_19
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col019, @V_Col019, 1, @LINHA)
COMMIT TRAN REG_000_19
END
IF @V_Col020 <> '?'
BEGIN
BEGIN TRAN REG_000_20
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col020, @V_Col020, 1, @LINHA)
COMMIT TRAN REG_000_20
END
IF @V_Col021 <> '?'
BEGIN
BEGIN TRAN REG_000_21
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col021, @V_Col021, 1, @LINHA)
COMMIT TRAN REG_000_21
END
IF @V_Col022 <> '?'
BEGIN
BEGIN TRAN REG_000_22
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col022, @V_Col022, 1, @LINHA)
COMMIT TRAN REG_000_22
END
IF @V_Col023 <> '?'
BEGIN
BEGIN TRAN REG_000_23
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col023, @V_Col023, 1, @LINHA)
COMMIT TRAN REG_000_23
END
69
IF @V_Col024 <> '?'
BEGIN
BEGIN TRAN REG_000_24
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col024, @V_Col024, 1, @LINHA)
COMMIT TRAN REG_000_24
END
IF @V_Col025 <> '?'
BEGIN
BEGIN TRAN REG_000_25
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col025, @V_Col025, 1, @LINHA)
COMMIT TRAN REG_000_25
END
IF @V_Col026 <> '?'
BEGIN
BEGIN TRAN REG_000_26
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col026, @V_Col026, 1, @LINHA)
COMMIT TRAN REG_000_26
END
IF @V_Col027 <> '?'
BEGIN
BEGIN TRAN REG_000_27
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col027, @V_Col027, 1, @LINHA)
COMMIT TRAN REG_000_27
END
IF @V_Col028 <> '?'
BEGIN
BEGIN TRAN REG_000_28
INSERT INTO CANDIDATOS (ITENS, ULTIMA, TAMANHO, LINHA) VALUES
(@V_Col028, @V_Col028, 1, @LINHA)
COMMIT TRAN REG_000_28
END
FETCH NEXT FROM C_COLUNAS
INTO @V_Col001,
@V_Col002,
@V_Col003,
@V_Col004,
@V_Col005,
70
@V_Col006,
@V_Col007,
@V_Col008,
@V_Col009,
@V_Col010,
@V_Col011,
@V_Col012,
@V_Col013,
@V_Col014,
@V_Col015,
@V_Col016,
@V_Col017,
@V_Col018,
@V_Col019,
@V_Col020,
@V_Col021,
@V_Col022,
@V_Col023,
@V_Col024,
@V_Col025,
@V_Col026,
@V_Col027,
@V_Col028
SET @LINHA = @LINHA + 1
END
CLOSE C_COLUNAS
DEALLOCATE C_COLUNAS
SET @I_SQL = 'INSERT INTO ITEMSET SELECT LTRIM(RTRIM(ITENS)), COUNT(*), ULTIMA, TAMANHO
FROM CANDIDATOS GROUP BY ITENS, ULTIMA, TAMANHO HAVING COUNT(*) > ' + STR(@MIN_SUP2)
EXEC sp_executesql @I_SQL
SET @I_SQL = 'DELETE FROM CANDIDATOS WHERE ITENS NOT IN (SELECT ITENS FROM ITEMSET)'
EXEC sp_executesql @I_SQL
SET @CONTADOR = 1
WHILE @CONTADOR < @K
BEGIN
BEGIN TRAN REG_001
SET @I_SQL = 'INSERT INTO CANDIDATOS SELECT C1.ITENS
+STR(@CONTADOR) + ' + 1, C1.LINHA
71
+ '', '' + C2.ITENS, C2.ITENS, '
FROM CANDIDATOS C1, CANDIDATOS C2
WHERE C1.LINHA = C2.LINHA
AND C1.ULTIMA < C2.ITENS
AND C1.TAMANHO = ' + STR(@CONTADOR) +
' AND C2.TAMANHO = 1'
EXEC sp_executesql @I_SQL
COMMIT TRAN REG_001
BEGIN TRAN REG_002
SET @I_SQL = 'INSERT INTO ITEMSET SELECT LTRIM(RTRIM(ITENS)), COUNT(*), ULTIMA, TAMANHO
FRO
CANDIDATOS GROUP BY ITENS, ULTIMA, TAMANHO HAVING COUNT(*) > ' +
STR(@MIN_SUP2) +
' AND TAMANHO = (' + STR(@CONTADOR) + ' + 1)'
EXEC sp_executesql @I_SQL
COMMIT TRAN REG_002
BEGIN TRAN REG_003
IF @CONTADOR > 1
BEGIN
SET @I_SQL = 'DELETE FROM CANDIDATOS WHERE (TAMANHO = ' + STR(@CONTADOR)
+ ')'
EXEC sp_executesql @I_SQL
SET @I_SQL = 'DELETE FROM CANDIDATOS WHERE (TAMANHO = (' + STR(@CONTADOR)
+
' + 1) AND ITENS NOT IN (SELECT ITENS FROM ITEMSET
WHERE TAMANHO = ' + STR(@CONTADOR) + ' + 1))'
EXEC sp_executesql @I_SQL
END
COMMIT TRAN REG_003
SET @CONTADOR = @CONTADOR + 1
END
DECLARE C_ITEMSET CURSOR FOR
SELECT ITENS, SUPORTE, TAMANHO
FROM ITEMSET
WHERE TAMANHO > 1
72
OPEN C_ITEMSET
FETCH NEXT FROM C_ITEMSET
INTO @ITENS, @SUPORTE, @TAMANHO
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRAN REG_005
SET @CONTADOR = 1
WHILE @CONTADOR < @TAMANHO + 1
BEGIN
SET @IND = 1
SET @POS = 1
WHILE @IND < (LEN(@ITENS))
BEGIN
IF SUBSTRING(@ITENS, @IND, 1) = ','
OR @IND = LEN(@ITENS)
BEGIN
IF @POS = 1
BEGIN
SET @ITENS_AUX = SUBSTRING(@ITENS, (@IND + 2), (LEN(@ITENS) @IND + 1)) + ', ' + SUBSTRING(@ITENS, @POS, (@IND - @POS))
END
SELECT @SUPORTE_2 = SUPORTE FROM ITEMSET
WHERE ITENS = SUBSTRING(@ITENS, @POS, (@IND - @POS))
SET @CONFIANCA = (@SUPORTE / @SUPORTE_2) * 100
SET @I_SQL = 'INSERT INTO REGRAS ('
SET
@I_SQL
=
@I_SQL
+
'ITENS,
ANTECEDENTE,
CONSEQUENTE,
SUPORTE,CONFIANCA) VALUES
(''' + @ITENS + ''', ''' + SUBSTRING(@ITENS, @POS, (@IND - @POS)) +''',
''' + SUBSTRING(@ITENS, (@IND + 2), (LEN(@ITENS - @IND
+ 1)) + '''
' + STR(@SUPORTE) + ', ' + STR(@CONFIANCA) + ')'
EXEC sp_executesql @I_SQL
73
END
SET @IND = @IND + 1
END
SET @ITENS = @ITENS_AUX
SET @CONTADOR = @CONTADOR + 1
END
COMMIT TRAN REG_005
FETCH NEXT FROM C_ITEMSET
INTO @ITENS, @SUPORTE, @TAMANHO
END
BEGIN TRAN REG_006
DELETE FROM REGRAS WHERE CONFIANCA <= @MIN_CONF
COMMIT TRAN REG_006
BEGIN TRAN REG_007
UPDATE REGRAS SET SUPORTE = (SUPORTE / @QTD_LINHAS) * 100
COMMIT TRAN REG_007
DEALLOCATE C_ITEMSET
GO
74
Download