SlideShare une entreprise Scribd logo
1  sur  59
Livia Fonseca Fracalanza




Mineração de Dados voltada para Recomendação no Âmbito de
                                Marketing de Relacionamento




                                          Dissertação de Mestrado

              Dissertação apresentada como requisito parcial para
              obtenção do título de Mestre pelo Programa de Pós-
              Graduação em Informática da PUC-Rio.

                           Orientador: Prof. Marco Antonio Casanova




                                                     Rio de Janeiro
                                                      Maio de 2009
Livia Fonseca Fracalanza



Mineração de Dados voltada para Recomendação no
           Âmbito de Marketing de Relacionamento




      Dissertação apresentada como requisito parcial para
      obtenção do título de Mestre pelo Programa de Pós-
      Graduação em Informática da PUC-Rio. Aprovada pela
      Comissão Examinadora abaixo assinada.



                              Prof. Marco Antonio Casanova
                                                  Orientador
                                                   PUC-Rio

                                   Prof Antonio Luz Furtado
                                                   PUC-Rio

                               Profª. Karin Koogan Breitman
                                                    PUC-Rio

                                 Prof. José Eugenio Leal
                            Coordenador Setorial do Centro
                              Técnico Científico - PUC-Rio



                           Rio de Janeiro, 02 de abril de 2009.
Todos os direitos reservados. É proibida a reprodução total
ou parcial do trabalho sem autorização da universidade, da
autora e do orientador.



                             Livia Fonseca Fracalanza
Bacharel em Informática com ênfase em Análise de
Sistemas graduada pela Pontifícia Universidade
Católica do Rio de Janeiro em julho de 2006.
Atualmente trabalha gerenciando projetos e participa
no desenvolvimento de softwares de Business
Inteligence.




                                     Ficha Catalográfica


              Fracalanza, Livia Fonseca

                  Mineração de dados voltada para
              recomendação no âmbito de marketing de
              relacionamento / Livia Fonseca Fracalanza
              ; orientador: Marco Antonio Casanova. –
              2009.
                  59 f. : il. (col.) ; 30 cm

                  Dissertação          (Mestrado        em
              Informática)–Pontifícia         Universidade
              Católica do Rio de Janeiro, Rio de Janeiro,
              2009.
                   Inclui bibliografia

                  1. Informática – Teses. 2. Market
              basket analysis. 3. Mineração de dados. 4.
              Problema do clique máximo. I. Casanova,
              Marco Antonio. II. Pontifícia Universidade
              Católica do Rio de Janeiro. Departamento
              de Informática. III. Título.
Agradecimentos

Agradeço à minha família pelo apoio de sempre, por torcerem por mim e pelo
amor incondicional.


Todos os meus amigos foram muito importantes nessa fase da minha vida, mas
em especial gostaria de agradecer ao João Rafael Peixoto Leite, amigo desde
graduação, pois sem seu incentivo, paciência e carinho, este trabalho não teria
começado e hoje o título de mestre ainda seria um sonho.


Agradeço ao meu orientador, Marco Antonio Casanova, por entender o quão
difícil é estar no mercado de trabalho louco e acelerado e ao mesmo tempo
decidir fazer mestrado. Obrigada por ter acreditado na minha capacidade, pela
paciência e pela orientação.


Por último, porém não menos importante, obrigada a todos os meus
companheiros da Stone Age Tech pelo apoio moral e incentivo.
Resumo
     Fracalanza, Livia Fonseca; Casanova, Marco Antonio; Mineração de
     Dados voltada para Recomendação no Âmbito de Marketing de
     Relacionamento. Rio de Janeiro, 2009. 57p. Dissertação de Mestrado -
     Departamento de Informática, Pontifícia Universidade Católica do Rio de
     Janeiro.


Cross-selling é uma estratégia de vendas de produtos baseada em uma análise
das compras passadas de um cliente ou nas compras passadas de outros clientes
com o mesmo perfil. O algoritmo mais conhecido para análise da cesta de
compras de um cliente é conhecido por market basket analysis. Este trabalho
aborda a descoberta de padrões seqüenciais em grandes bases de dados e tem por
objetivo apresentar um algoritmo eficiente que transforma o problema da cesta
de compras em um problema de clique máximo. Primeiramente, os dados de
entrada são transformados em um grafo e o problema da descoberta do clique
máximo é resolvido revelando as relações mais recorrentes entre os itens em
questão. Os experimentos apresentados na dissertação demonstram a eficiência
do algoritmo em grandes volumes de dados.




Palavras-chave
1. Informática – Teses; 2. Market basket analysis, 3. mineração de dados 4.
problema do clique máximo
Abstract
     Fracalanza,     Livia     Fonseca;     Casanova,       Marco     Antonio;.
     Recommendation based on Data Mining for Relationship Marketing.
     Rio de Janeiro, 2009. 57p. MSc. Dissertation - Departamento de
     Informática, Pontifícia Universidade Católica do Rio de Janeiro.


Cross-selling is a strategy to recommend products to customers based on their
past purchases or the purchases of other customers with the same profile. The
best known algorithm for the analysis of a client shopping basket is known in the
literature as market basket analysis. This dissertation discusses the discovery of
sequential patterns in large databases and aims at implementing an efficient
algorithm that transforms the shopping cart problem into a maximum clique
problem. First, input data is transformed into a graph and maximum cliques are
detected to discover the most frequent relationship between the items on the
transaction. The dissertation also includes experiments that evaluate the
efficiency of the algorithm for large data volumes.




Keywords
1. information science – thesis; 2. Market basket analysis; 3. data mining; 4.
maximum clique problem
Sumário

1 Introdução                              10
1.1. Motivação                            11
1.2. Objetivos                            11
1.3. Trabalhos Relacionados               12
1.4. Organização do Trabalho              13


2 Mineração de Dados                      15
2.1. Processo de Busca de Conhecimento    15
2.2. Tipos de Predição                    17
2.2.1. Classificação                      17
2.2.2. Segmentação                        18
2.2.3. Regressão                          18
2.2.4. Associação                         18
2.3. Técnicas de Mineração de Dados       18
2.3.1. Algoritmo Genético                 19
2.3.2. Redes Neurais                      19
2.3.3. Árvores de Decisão                 19
2.3.4. Regras de Associação               19
2.3.5. Análise de Vizinhança              20
2.4. Aplicações                           20


3 Market Basket Analysis - MBA            21
3.1. Marketing de Relacionamento          22
3.2. Regras de Associação                 23
3.3. Algoritmos de MBA                    24
3.3.1. Artificial Immune System           25
3.3.2. Set-oriented Mining                25
3.3.3. Algoritmo Apriori                  26
3.4. Implementação baseada em Grafo       27
3.4.1. Conceitos de Grafos                27
3.4.2. Montando a Matriz de Adjacências   29
3.4.3. Buscando a Clique de Tamanho Máximo         29


4 Testes e Resultados                              31
4.1. Descrição do Ambiente de Testes – Protótipo   31
4.2. Testes                                        34


5 Conclusão e Trabalhos Futuros                    40
5.1. Conclusões                                    40
5.2. Trabalhos Futuros                             41


6 Referências                                      43


7 APÊNDICE A – Código da Implementação             45
Lista de figuras



Figura 1 Etapas para descoberta de conhecimento                                 16
Figura 2 Iteratividade entre Funcionalidades, Técnicas e Algoritmos de Mineração de
     Dados                                                                      17
Figura 3 Exemplo de iteração do algoritmo AIS                                   25
Figura 4 Exemplo de iteração do algoritmo SETM                                  26
Figura 5 Exemplo de iteração do algoritmo Apriori                               27
Figura 6 Exemplo de clique máxima                                               28
Figura 7 Protótipo: escolha do conector ODBC                                    32
Figura 8 Protótipo: Autenticação no ODBC                                        32
Figura 9 Protótipo: Escolha da base de dados                                    33
Figura 10 Protótipo: Inclusão de filtro na consulta                             33
Figura 11 Protótipo: Exibição das informações relevantes                        34
1 Introdução


1
Introdução




      A digitalização da sociedade juntamente com a difusão da Internet e a
globalização trazem a necessidade de maior agilidade e rapidez para os processos de
negócio, principalmente no que se refere aos sistemas de tomada de decisão. Além
disso, podemos observar um aumento significante na quantidade de dados armazenados
pelas empresas, pois as informações assumiram um papel indispensável e vital para a
sobrevivência das empresas no mercado.

       Entretanto, é necessária a existência de processos que possibilitem extrair destes
dados o conhecimento necessário para a gestão e a tomada de decisões, caso contrário
são apenas um conjunto de dados que não trazem nenhum benefício para a corporação.
Nesse sentido, surgem os sistemas do tipo data warehouse – ou armazém de dados –
para auxiliar no armazenamento dos dados e facilitar a análise para a tomada de
decisões. Estes passam a ser realidade, principalmente, nas grandes corporações.

      Data warehouse é um termo amplamente utilizado nos dias de hoje para definir
um ambiente de sistemas de informação que tem por objetivo auxiliar os usuários de
níveis gerenciais. É uma “fotografia” dos dados em determinando período de tempo,
integrados por uma combinação de tecnologias e orientados a assunto. Composto por
uma coleção de tecnologias de suporte a análise de decisão, tem por responsabilidade o
armazenamento dos dados que ao longo do tempo se proliferaram. A análise dos dados
contidos em uma data warehouse é realizada por vários tipos de ferramentas, sendo
OLAP (On Line Analytical Processing) a mais simples e mais utilizada.

      A tecnologia em questão compreende Sistemas Gerenciadores de Banco de
Dados com visões relacionais ou multidimensionais dos dados, facilidades para acesso
dos dados, arquitetura cliente-servidor, interfaces gráficas de usuários, dentre outras.

      Com o aumento do volume de dados nas empresas e a diminuição do tempo para
resposta às mudanças, o uso da data warehouse se fez necessário para atender à
necessidade de integração dos sistemas voltados para o nível gerencial com dados que
nunca ou raramente são alterados. Os sistemas transacionais do nível operacional lidam
com os dados “ativos” espelhando as operações de negócio da empresa. Os dados
estáveis da data warehouse ajudam a compor séries históricas, apoiando o trabalho de
análise ao longo de determinado período.
1 Introdução                                                                       11


      Geralmente, os dados armazenados em uma data warehouse são apenas
consultados, sendo agregados para fins de estudo e tomadas de decisão. As aplicações
que utilizam esses dados são classificadas como sistemas de informação gerencial,
sistemas de informação para executivos ou sistemas de suporte à decisão. Além disso, é
possível a manipulação de grandes quantidades de dados armazenadas a fim de
encontrar padrões implícitos entre os mesmos, possibilitando a previsão de
informações/situações futuras.


1.1.
Motivação

      O mercado de business intelligence, ao qual as data warehouse pertencem, está
em grande e constante expansão fomentando a pesquisa e desenvolvimento de
ferramentas melhores e mais sofisticadas.

      Cabe ressaltar que a chave do processo de busca de conhecimento é a mineração
de dados (ou data mining), entendida como tarefas e técnicas dedicadas à exploração de
grandes quantidades de dados à procura de regras de associação, relacionamentos
entre variáveis, classificação de itens, dentre outras atividades.

      Do ponto de vista de negócio, os padrões que, eventualmente, estão escondidos
entre uma grande quantidade de dados podem ser extremamente valiosos e úteis. Nas
empresas, cada vez mais os diferentes setores procuram por ferramentas que possam
auxiliá-los a maximizar os ganhos e minimizar as perdas.

      Por exemplo, a aplicação prática de mineração de dados no cenário de CRM
(Customer Relationship Management) é bastante interessante, uma vez que as
empresas estão aumentando o foco no cliente, conhecendo-o individualmente com o
intuito de oferecer-lhe mais produtos, cada vez mais adequados e até mesmo
personalizados.

      Dentro deste contexto, a eficiência e eficácia da adesão de novos clientes e da
fidelidade dos antigos dependem do sucesso do processo de descobrimento de padrões,
incluindo a mineração de dados.


1.2.
Objetivos

      Este trabalho tem por objetivo estudar e propor melhorias em algoritmos de
recomendação de produtos com o intuito de auxiliar na descoberta de padrões de
consumo e, assim, melhorar a relação das empresas com seus clientes.

      Para atingir o objetivo central, duas etapas serão seguidas:
1 Introdução                                                                          12


        Estudar o processo de descoberta de conhecimento em data warehouses;
        Executar testes com grandes volumes de dados.


1.3.
Trabalhos Relacionados

      Para encaminhar o problema de recomendação de produtos, inúmeras soluções
têm sido propostas. Esta seção apresenta brevemente alguns trabalhos relacionados
que serviram de inspiração e fontes de informação para o desenvolvimento desta e
dissertação.

      Em   [11] são discutidas as oportunidades de se construir um melhor
relacionamento    com    clientes,   aumentando     a   frequência   das    compras    e
consequentemente aumentando o lucro. Para que seja possível identificar padrões e
possibilitar a recomendação de produtos e serviços é de suma importância para as
operações de venda manter o histórico das transações com o máximo de detalhes
possível, como quantidade, valores, tipo de pagamento, as respostas aos estímulos de
marketing, etc. Suas análises ficam facilitadas com a utilização de técnicas de mineração
de dados, como regras de associação, que buscam automaticamente padrões nos
dados, gerando modelos de comportamento. Neste trabalho, cada cliente é classificado
com uma pontuação (score) que representa a probabilidade de resposta positiva ao
estímulo posto no modelo, auxiliando o profissional de marketing a focar mais
precisamente no público alvo de suas campanhas.

      Santos [12] descreve a aplicação das técnicas de mineração de dados na gestão
de relacionamento com clientes. Como estudo de caso, foi apresentado um sistema
desenvolvido com o intuito de apoiar as decisões na área de vendas, auxiliando na
recomendação de produtos que viessem a ser de interesse do consumidor em questão.
O usuário escolhe um ou mais produtos que serão confrontados com um ou mais
produtos também à escolha do usuário e, assim, o sistema tenta determinar regras de
associação entre os itens selecionados. Ao concluir, o autor comenta que as regras de
associação são uma técnica de mineração de dados de simples implementação, mas
fornece conhecimentos importantes sobre os hábitos dos clientes.

      Adomavicius e Tuzhilin [14] fazem uma pesquisa sobre o estado da arte de
sistemas de recomendação e chegam à conclusão de que, mesmo tendo avançado
muito nessa última década, esse tipo de sistema ainda apresentam limitações que
precisam ser superadas. Dentro desse contexto, ações como melhoria na modelagem
dos itens e usuários, incorporação de informação contextual no processo de
recomendação suporte à sugestões por multicritérios e a criação de um sistema mais
flexível e menos invasivo são apontadas como sendo as principais.
1 Introdução                                                                         13


      Burke [15] define três tipos de sistemas de recomendação: (i) sistemas
colaborativos são aqueles em que as recomendações são baseadas nas preferências
dos outros usuários; (ii) sistemas baseados no conteúdo são aqueles que classificam as
informações baseados em aprendizado de máquina e sugerem baseados nas escolhas
anteriores do usuário; (iii) sistemas baseados no conhecimento (knowledge-based
systems) dos usuários oferecem produtos que atendem aos requisitos do usuário, como
cidade, preferências por comida, entre outros. Além disso, é esclarecido que sistemas de
recomendação precisam ser inicializados com grandes quantidades de dados, pois caso
contrário as previsões e sugestões não serão eficientes como esperado. Com isso,
confronta-se o problema de que, quando há muitos usuários com hábitos conhecidos, o
sistema não é tão útil; mas, se estiver com uma grande quantidade de itens avaliados,
pode não ser preciso para um usuário em particular. Sistemas baseados no conteúdo
apresentam um problema parecido: bons classificadores “aprendem” depois que muitos
itens foram avaliados e alguns procuram resolver esse problema fazendo uso de
algoritmos classificadores baseados na similaridade com os dados da vizinhança,
causando a limitação de sugerir itens que sejam similares aos itens previamente
avaliados. Nessa linha, e baseado em uma série de exemplos de protótipos, o autor
defende os sistemas de recomendação baseados em conhecimento como sendo mais
valiosos que os outros, pois sua recomendação não depende das avaliações de usuários
e suas tomadas de decisão são independentes do gosto do mesmo. Mas, além disso,
discute em cima de um de seus exemplos (FindMe) que sistemas híbridos de
recomendação podem ser criados combinando diferentes técnicas.

      Middleton et al. [16] defendem que os sistemas de recomendação podem ajudar
na melhoria das buscas na Internet, onde existe uma grande quantidade de páginas com
dados não-estruturados e onde, neste cenário, as ferramentas de busca são efetivas
apenas quando as páginas atendem às chaves das consultas explicitamente. No
decorrer do artigo, os autores descrevem o sistema Quickstep, criado utilizando
ontologias durante o processo de profiling e, baseados nos testes, concluem que os
resultados dos usuários que usaram o sistema com ontologias foram mais precisos,
recomendando itens que atendiam mais aos interesses dos usuários e que não eram
diretamente sugeridos.


1.4.
Organização do Trabalho

      Este trabalho está organizado da seguinte forma. O Capitulo 2 apresenta o
conceito de Mineração de Dados, cenário no qual esta pesquisa se enquadra. O Capitulo
3 detalha melhor a técnica Market Basket Analysis, foco deste estudo. O Capitulo 4
descreve o protótipo criado para testar a técnica de Market Basket Analysis e apresenta
1 Introdução                                                                         14


os resultados dos testes. Por fim, o Capítulo 5 apresenta as conclusões e indica algumas
linhas de pesquisa a serem desenvolvidas a partir do conteúdo exposto neste trabalho.
2 Mineração de Dados


2
Mineração de Dados




        A mineração de dados, ou data mining, é uma das principais etapas do processo
de busca de conhecimento. Este conceito é utilizado para identificar técnicas avançadas
de análise dos dados, que podem ou não utilizar a inteligência artificial, refinando os
dados em busca de padrões nos dados através de um modelo do mundo real. Essas
técnicas são apenas uma parte do processo de busca de conhecimento dentro de um
banco de dados, em que o objetivo maior é obter regras e padrões que se aplicam aos
dados.

        Normalmente, as técnicas de mineração de dados são aplicadas em dados
armazenados em uma data warehouse (DW) ou em um data mart, mas também é
possível aplicá-las em dados operacionais. Os resultados da mineração de dados podem
ser usados em tomadas de decisão, em gerenciamento de informações, controle de
processo, dentre outros. Sua aplicação pode ser em um processo de verificação onde o
usuário tenta provar sua hipótese acerca da relação entre os dados ou como um
processo de descoberta de padrões, fazendo uso de técnicas como redes neurais,
algoritmos genéticos, regras de associação, árvores de decisão, regressão, entre outros.


2.1.
Processo de Busca de Conhecimento (KDD)

        O avanço da tecnologia tanto no âmbito do hardware quanto do software permitiu
que a capacidade de armazenamento e processamento de dados crescesse em
velocidade muito grande. A análise manual ou semi-automática de grandes volumes de
dados tornou-se impraticável, prejudicando a tomada de decisão. Nesse sentido, a
aplicação de métodos que facilitem este processo se faz muito importante nos dias de
hoje.

        O processo de busca de conhecimento em banco de dados também é conhecido
como KDD – Knowledge Discovery and Data Mining, cujo objetivo segundo Fayyad et. al
[4] “(...) é a extração de conhecimento de alto nível a partir de dados de baixo nível
disponíveis em grandes bancos de dados (...) processo não trivial de identificação, a
partir de dados, de padrões que sejam válidos, novos, potencialmente úteis e
compreensíveis (...)”. Em outras palavras, o KDD é o processo de extração de
conhecimento de grandes bases de dados, convencionais ou não.
2 Mineração de Dados                                                                      16


        Fayyad et. al [4] divide o processo de KDD em seis passos:

  i.     Preparação dos Dados: consiste em incluir o conhecimento relevante para a
         aplicação além de definir quais as metas que o processo precisa atingir.

  ii.    Limpeza dos Dados: consiste em retirar os dados que possam distorcer a
         análise. Assim, utiliza estratégias para remover ruídos, tratar atributos perdidos e
         até mesmo métodos de transformação para diminuir o número de variáveis
         envolvidas no processo, visando com isto melhorar o desempenho do algoritmo
         de análise.

 iii.    Seleção de Dados: consiste em escolher sobre qual conjunto ou subconjunto de
         dados em que o processo será aplicado.

 iv.     Data Mining: consiste em decidir qual tarefa de data mining será aplicada para
         atingir os objetivos do processo e qual a melhor técnica a ser utilizada (ver seção
         3).

  v.     Incorporação do conhecimento anterior: consiste em interpretar o modelo
         descoberto a fim de verificar sua acuracidade em busca de melhorias,
         possibilitando o retorno para qualquer etapa anterior do processo, retirando
         padrões redundantes ou irrelevantes.

 vi.     Interpretação dos resultados: neste ponto o resultado obtido é incorporado ao
         sistema possibilitando a tomada de ações baseadas no conhecimento ou
         documentando-os e relatando-o às partes interessadas.

        Em particular, o passo da mineração de dados utiliza técnicas de inteligência
artificial que procuram relações de similaridade ou discordância entre dados com o
objetivo de encontrar, automaticamente, padrões, anomalias e regras, focando em
transformar dados, aparentemente ocultos, em informações úteis para a tomada de
decisão ou avaliação de resultados.




                       Figura 1 Etapas para busca de conhecimento
2 Mineração de Dados                                                                  17


2.2.
Tipos de Predição

      Por tipos de predição entende-se os tipos de relacionamento que estabelecemos
entre os dados para a obtenção de conhecimento. Sabendo a que resultado se deseja
chegar, é fácil identificar a tarefa de mineração que mais auxiliará o processo de busca
de uma solução para o problema. Para atender aos objetivos e gerar resultados
esperados, há uma coleção de técnicas que podem ser utilizadas; cada técnica possui
ainda uma gama de algoritmos que irão, efetivamente, manipular os dados. A Figura 2 a
seguir, extraída de [20], ilustra a iteratividade entre funcionalidades, técnicas e
algoritmos de mineração de dados.


      O resto desta seção discute tipos de predição de dados.




      Figura 2 Iteratividade entre Funcionalidades, Técnicas e Algoritmos de
                                Mineração de Dados

2.2.1.
Classificação

      Categorizar os clientes de acordo com seu perfil de compras é um exemplo de
tarefa de classificação. Um modelo de classificação é criado e os atributos dos registros
(no caso do exemplo acima, clientes) são analisados de acordo com as condições e
2 Mineração de Dados                                                                  18


características das classes pré-determinadas pelo modelo. Caso esses atributos casem,
o registro é então classificado na classe em que melhor se encaixa.


2.2.2.
Segmentação

       Essa tarefa é mais conhecida como clustering e se diferencia da classificação
porque não pressupõe a existência de classes pré-definidas. Os registros são agrupados
de acordo com a semelhança nos seus atributos, segmentando-os em clusters
(subgrupos homogêneos) baseando-se no princípio de que os registros classificados em
um grupo devem ser homogêneos entre si, e que os grupos devem ser heterogêneos
entre si.


2.2.3.
Regressão

       Estimar um acontecimento ou um padrão não é uma tarefa simples. Esse é o
objetivo da regressão: prever padrões para uma variável de valor contínuo, com base
nos outros atributos disponíveis e nas outras ocorrências disponíveis para análise.


2.2.4.
Associação

       Através da associação é possível identificar transações que sempre ocorrem em
conjunto. Na literatura também é conhecida como grupos de afinidade ou análise de
cesta. O exemplo clássico da literatura é o MBA (Market Basket Analysis), que busca
encontrar padrões nos produtos em um carrinho de compras através de regras de
associação. Esse estudo auxilia as lojas a encontrar a melhor maneira de organizar seus
produtos, de modo que a disposição deles nas prateleiras estimule as compras dos
clientes.


2.3.
Técnicas de Mineração de Dados

       As técnicas de mineração de dados são os fundamentos computacionais que
possibilitam a construção dos algoritmos que realizarão a busca por padrões nos dados.
Diversas técnicas podem ser utilizadas para atender a uma tarefa de mineração de
dados. Entretanto, cada técnica possui características específicas e é necessário ter o
conhecimento do funcionamento e do objetivo das mesmas para interpretar os
resultados obtidos.

       No resto desta seção listamos algumas técnicas de mineração de dados.
2 Mineração de Dados                                                                  19


2.3.1.
Algoritmo Genético

      Simulando o processo natural da evolução, os algoritmos genéticos (AG’s) têm por
objetivo realizar a busca e a otimização da descoberta de padrões. Diferentemente dos
métodos convencionais de mesmo objetivo, os AG’s trabalham simultaneamente em
conjuntos de soluções diferentes, realizando pesquisas adaptativas nos dados        [20],
modelando uma solução para um problema específico em estruturas de dados que são
semelhantes a um cromossomo. Operadores são aplicados recombinando essas
estruturas, gerando assim novas combinações de regras de associação.

      Essa técnica é utilizada na classificação e na segmentação de dados, formulando
hipóteses sobre a dependência dos atributos dos dados; com operadores de mutação e
cruzamento desenvolvem várias mutações para a solução do problema. Ao longo do
tempo, o algoritmo tende a “aprender” e a se aperfeiçoar, de maneira que somente as
soluções com maior poder de acerto na previsão são aceitas.


2.3.2.
Redes Neurais

      A técnica de Redes Neurais é bastante utilizada em tarefas de classificação,
regressão e segmentação. Os dados são trabalhados com base no funcionamento do
cérebro humano, aprendendo a tomar decisões baseadas nas experiências anteriores –
nas instâncias anteriores dos dados. Os neurônios do cérebro são representados por
nodos que estão conectados em outros nodos por sinapses, formando uma rede de
processamento. Os valores das entradas são multiplicados nos neurônios pelos pesos
de suas sinapses, conforme vão caminhando na rede. Ao final, temos a classificação ou
a previsão da entrada.


2.3.3.
Árvores de Decisão

      As árvores de decisão têm como objetivo principal dividir as instâncias em classes.
Cada nó da árvore testa o domínio de uma variável da entrada e o redireciona para o nó
seguinte. Cada sub-árvore representa o resultado de um teste e a folha é a classificação
que aquele registro recebeu. Ao final, cada nó terminal terá os registros da entrada que
se adéquam às regras regidas por esse nó, representando assim, uma classe.


2.3.4.
Regras de Associação

      Basicamente, as regras de associação são definidas por uma correlação
estatística entre alguns atributos da entrada com o objetivo de descobrir relações que
2 Mineração de Dados                                                                  20


ocorrem em comum dentro de um conjunto de dados. Cada registro é visto como uma
transação e cada variável como um item dessa transação, deixando subentendido que a
presença de um item implica necessariamente na presença de outro na mesma
transação. Esse conceito será mais detalhado na Seção 3.1


2.3.5.
Análise de Vizinhança

       Através de uma função definida para determinar a “distância“ entre duas
instâncias, ou seja, de uma função para identificar um conjunto de registros que estão
próximos por determinada característica, essa técnica é empregada em análise de
prognósticos e não para descoberta de conhecimento. Não é muito explorada na
literatura.


2.4.
Aplicações

       Além da aplicação no campo dos profissionais de marketing, auxiliando na busca
de padrões para melhorar o processo de recomendação e alavancar as vendas, as
técnicas de data mining podem ser utilizadas em: (i) redes de telecomunicações, para
evitar fraudes em ligações pré- ou pós-pagas, detecção de falhas, dimensionamento de
sistemas; (ii) saneamento básico, detectando fraudes em ligações de água; (iii)
monitoramento ambiental, para prevenção de desequilíbrios; (iv) na indústria, prevendo a
demanda, planejando a produção; (v) na educação, auxiliando na identificação da
evasão escolar; (vi) na medicina, atuando no diagnóstico e prevenção de doenças,
fraudes de plano em planos de saúde; (vii) no comércio, definindo o perfil do consumidor,
segmentando o mercado, sugestão de produtos, entre vários outros campos de atuação;
(viii) no âmbito financeiro, ajudando no combate as fraudes de cartão de crédito, análise
de investimentos e de crédito.
2 Mineração de Dados


3
Market Basket Analysis - MBA




      Market basket analysis (MBA) ou, em português, análise da cesta de compras, é
uma técnica de data mining que faz uso de regras de associação para identificar os
hábitos de compra dos clientes, fornecendo uma visão da combinação de produtos
dentro das cestas de compras dos clientes analisados. Conhecer o perfil de compra do
público-alvo é muito importante para aumentar o potencial de recomendação, ajudando a
melhorar as vendas.

      O termo cesta, normalmente, se aplica a uma única ordem de compra. No entanto,
a análise admite outras variações como, por exemplo, todas as compras de um
determinado cliente. O caso clássico citado na literatura é o da rede de supermercados
americana, WalMart. Foi descoberta a relação de compra entre uma marca de fraudas e
uma marca de cerveja, quando as compras eram realizadas por homens nas sextas-
feiras ao fim do dia. A análise da relação mostrou que as esposas pediam para os
maridos trazer as fraudas para o fim-de-semana quando saíssem do trabalho e eles
aproveitavam e levavam a cerveja para relaxar durante os dois dias sem trabalho. Tendo
esse precioso conhecimento em mãos, o gerente decidiu colocar as fraudas perto das
cervejas e com isso as vendas aumentaram ainda mais, pois os homens que não
compravam cerveja passaram a comprar.

      A entrada de dados para essa técnica é um conjunto de transações
correspondendo a compras de vários clientes. As transações são representadas em uma
tabela onde cada linha corresponde a uma venda e cada coluna a um produto adquirido.
A cesta de compras de um cliente é composta por itens que foram adquiridos na mesma
compra, ignorando-se a quantidade e o preço de cada item.

      Apesar de a nomenclatura market basket analysis evocar uma imagem de
carrinhos de compras e supermercados, cabe mencionar que existem outras áreas em
que essa abordagem pode ser empregada como, por exemplo, análise de compras em
cartão de crédito, análise de padrões em chamadas telefônicas, análise de compra de
serviço telefônico, dentre outras aplicações.
3 Market Basket Analysis – MBA                                                        22


3.1.
Marketing de Relacionamento

      No varejo, a maior parte das compras é realizada por impulso. A técnica de Market
Basket Analysis dá pistas a cerca do que um cliente poderia ter comprado se alguma
sugestão interessante lhe fosse feita.

      Em um primeiro momento, pode-se considerar que esta técnica tem aplicações na
reorganização da localização dos itens dentro de uma loja, bem como promoções para
estimular a compra. Entretanto, é possível também comparar resultados entre filiais ou
entre grupos de clientes em lugares demográficos distintos ou analisar as compras em
função da época do ano. Assim, caso se observe que uma regra vale em uma loja, mas
não prevalece em nenhuma outra, é porque há algo de interessante com esta que a
torna tão diferente das outras. Investigar essas diferenças pode render algumas
sugestões úteis para melhorar as vendas da companhia.

      Marketing de relacionamento pode ser definido como “uma estratégia de
marketing que visa construir uma relação duradoura entre cliente e fornecedor, baseada
em confiança, colaboração, compromisso, parceria, investimentos e benefícios mútuos”
[20] onde os clientes importantes precisam receber atenção contínua. É importante ter
uma relação duradoura e de confiança com os consumidores, conhecendo-os a fim de
cativá-los ainda mais, estimulando o consumo de mais e novos produtos e serviços com
o objetivo da organização conquistar uma fatia maior do mercado.

      Atualmente, as empresas estão se conscientizando da necessidade e da
importância de intensificar o foco no marketing de relacionamento para crescer e se
manter no mercado [21]. Administrar o relacionamento com o cliente ajuda a empresa a
adquirir vantagem competitiva frente à concorrência. Apesar de muito investimento ainda
ser feito na conquista de novos clientes, já existe uma percepção maior de que é
possível melhorar a rentabilidade vendendo produtos e serviços para os clientes atuais.

      O termo cross-selling é traduzido na literatura como “venda casada de produtos” e
tem por definição a prática de vender produtos ou serviços adicionais para um cliente já
conquistado, objetivando o aumento das vendas. Nesse contexto, a técnica de market
basket analysis baseia-se na chave cliente-item para identificar a cesta de compras com
os N itens que aparecem juntos mais frequentemente em transações. A partir do
conhecimento das cestas mais frequentes, torna-se fácil partir para o cross-selling,
sugerindo itens que possam ser de interesse de um cliente com determinado perfil de
compra identificado.
3 Market Basket Analysis – MBA                                                      23


      Em resumo, para auxiliar nas tomadas de decisão em aplicações de marketing, o
MBA é uma técnica poderosa que suporta a implementação de estratégias de cross-
seling.


3.2.
Regras de Associação

      A análise de compras e registros de produtos tipicamente usa regras de
associação representando os padrões de relacionamento encontrados entre os itens de
dados do conjunto analisado. Em bases de dados onde os registros são transações,
estas regras são conhecidas como regras de associação transacionais, enquanto no
caso de bases de dados onde os registros representam clientes, contas, produtos,
serviços e outros, as mesmas envolvem múltiplos atributos e, por isso, são chamadas de
regras de associação multidimensional.

      No âmbito da venda casada de produtos, ou cross-selling, as regras de
associação permitem que uma loja possa recomendar o produto B para um cliente
comprando o produto A, uma vez que ela conhece a regra, por exemplo, de que 30%
dos seus clientes que compram A também compram B. Assim, o cliente é incentivado a
comprar mais produtos, que eventualmente possam interessá-lo, baseado em
características de consumo de compras anteriores no sistema,. Assim, não só a
quantidade de vendas é maximizada, mas também a quantidade de vendas de
determinado produto.


      Regras de associação foram introduzidas em [25] da seguinte forma. Sejam I = {i1,

i2, ..., im} um conjunto de m itens distintos e D uma base de dados formada por um
conjunto de transações, onde cada transação T é composta por um conjunto de itens tal
que T ⊆ I. Uma regra de associação é uma expressão do tipo X → Y onde X ⊆ I, Y ⊆ I, X
≠ Ø, Y ≠ Ø e X ∩ Y = Ø, ou seja, tanto o antecedente (X), quanto o conseqüente (Y) de
uma regra de associação podem ser formados por conjuntos contendo um ou mais itens,
mas não podem ser vazios e são conjuntos independentes já que não possuem itens em
comum. Por exemplo:


              {Cerveja, Faldas} → {Leite}
              {Cerveja, Leite} → {Fraldas}
              {Fraldas, Leite} → {Cerveja}
              {Cerveja} → {Fraldas, Leite}
              {Leite} → {Cerveja, Fraldas}
              {Fraldas} → {Cerveja, Leite}
3 Market Basket Analysis – MBA                                                        24


      A importância de uma regra de associação pode ser medida em termos de suporte
e confiança. O suporte de uma regra determina com qual frequência uma regra é
aplicada a um conjunto de dados, ou seja, a probabilidade do primeiro termo da
implicação ser verdade. Já a confiança de uma regra determina o quão frequente os
itens em Y aparecem nas transações que contém X. No exemplo anterior, a
probabilidade de um cliente comprar cerveja e fraldas (ou seja, o termo X ser verdadeiro)
é referida como o suporte, enquanto a probabilidade condicional de um cliente comprar
leite, dado que comprou cerveja e fralda, é referida como a confiança.

      O problema da mineração de regras de associação consiste em encontrar todas
as regras de associação que possuam suporte e confiança maiores ou iguais,
respectivamente, a um suporte mínimo (SupMin) e uma confiança mínima (ConfMin),
especificados pelo usuário.

      De fato, por muito tempo, a busca por regras de associação foi de interesse
exclusivo de aplicações que lidassem com informação de cestos de compra (market
baskets), o que levou esta técnica a ser comumente chamada de market basket analysis
(MBA).

      No entanto, podemos ver que regras de associação podem ser extraídas de
qualquer base de dados onde existam relacionamentos implícitos entre os diferentes
atributos. A utilidade destas regras não está somente na geração de novo conhecimento,
mas também na confirmação de regras de negócio que são utilizadas, mas que nunca
foram comprovadas. Sendo assim, regras de associação aplicam-se a diversas áreas de
negócio como, por exemplo, estudo dos acessos a computadores, busca de novos
clientes, recenseamento de população e análise de informação médica, dentre outros.

      A descoberta de padrões através da análise das regras de associação é um
importante para suporte à tomada de decisão. Com essas informações, um gestor pode
identificar novas oportunidades de negócio, conhecer melhor seus clientes e seus perfis
de compra, identificar produtos que influenciam na venda de outros, além de diversas
outras informações que podem aumentar sua competitividade no mercado.


3.3.
Algoritmos de MBA

      Os primeiros algoritmos a serem utilizados na descoberta de regras de associação
foram o artificial immune system (AIS) [23][24] e o set-oriented mining (SETM) [22]. Na
maioria dos estudos mais recentes o algoritmo Apriori tem sido bastante utilizado, bem
como suas variações. Nas subseções a seguir alguns desses algoritmos são explorados.
3 Market Basket Analysis – MBA                                                       25


3.3.1.
Artificial Immune System

       A técnica utilizada pelo artificial immune system (AIS) gera e conta conjuntos de
itens à medida que são lidas as transações da base de dados. Para cada transação,
determinam-se quais dos maiores conjuntos encontrados na transação anterior também
se encontram na transação corrente e novos conjuntos de itens são gerados
estendendo-se esses conjuntos com itens deste registro. A desvantagem é que este
método gera e conta desnecessariamente conjuntos de itens que são considerados
pequenos. A figura a seguir ilustra o seu funcionamento.




                     Figura 3 Exemplo de iteração do algoritmo AIS

       A primeira passagem do algoritmo na base de dados faz a busca por cestas de
apenas um item contando quantas vezes estes se repetem nas transações, ignorando
aqueles que ocorrem apenas uma vez. A segunda passagem na base busca por cestas
com dois itens, contando quantas vezes estes aparecem juntos nos registros varridos.
Neste exemplo, a última passada encontra cestas de três itens, que são a maior cesta
possível com frequencia maior que um. Assim, o algoritmo tem como solução o conjunto
{2,3,5}.


3.3.2.
Set-oriented Mining

       Assim como o AIS, o set-oriented mining (SETM) gera os conjuntos de itens
candidatos no momento em que está passando pelas transações da base de dados.
Entretanto, a contagem só é realizada no final da varredura da base. O identificador da
transação é guardado junto com o conjunto candidato em uma estrutura sequencial. Ao
fim da leitura de todos os registros, o tamanho do conjunto de itens mais frequente é
determinado pela agregação da estrutura sequencial. Além de ter a mesma
desvantagem do AIS, para cada conjunto candidato, existem vários valores de tamanho
calculados. A figura a seguir ilustra os passos do algoritmo.
3 Market Basket Analysis – MBA                                                        26




                  Figura 4 Exemplo de iteração do algoritmo SETM

      No SETM, a primeira passagem na base de dados resulta na frequencia de
ocorrência de cada item nas transações, assim como no exemplo anterior baseado no
AIS. Entretanto, a segunda varredura na base tem como resultado uma lista com as
combinações de pares de produtos onde cada combinação recebe o identificador da
transação de onde foi extraída. Assim, teremos combinações repetidas com
identificadores diferentes como a cesta {1,3} que neste exemplo ocorre na transação 100
e na 300. A última passagem na base revela as cestas de três itens e a solução
encontrada é aquela que aparece em mais transações. Com isso, também temos o
conjunto de itens {2,3,5} como resultado da aplicação do SETM nesse conjunto de
registros.


3.3.3.
Algoritmo Apriori

      Este algoritmo foi a primeira ferramenta para descoberta de regras de associação
em bases de dados com grandes volumes. Várias modificações foram propostas para
melhorar sua eficiência e algoritmos similares foram propostos [26][27][28], introduzindo
regras mais expressivas.

      Primeiramente, o algoritmo identifica os itens que fazem parte de cada uma das
transações. Em seguida, o algoritmo determina as regras de associação entre estes
itens, selecionando as associações que ocorrem com mais frequência (ou maiores) no
conjunto de transações em questão. O maior conjunto de itens candidato da passagem
anterior é levado para próxima iteração, gerando outros conjuntos com tamanho maior
que 1. Por fim, o algoritmo elimina os conjuntos gerados que tem um subconjunto que
não é o maior.

      Com base nos conjuntos de itens mais frequentes as regras de associação que
atendem aos valores mínimos de suporte e confiança são geradas. Como resultado,
3 Market Basket Analysis – MBA                                                       27


todos os conjuntos de itens frequentes são descobertos, produzindo todas as regras de
associação que respeitam esses limites.




                   Figura 5 Exemplo de iteração do algoritmo Apriori

      Assim como nos exemplos anteriores, a primeira passada do algoritmo Apriori na
base de dados resulta na listagem da frequencia dos itens nas transações (cestas de um
item apenas). Na passada seguinte, a lista gerada contem as cestas de dois itens com
as respectivas frequencias. Destas cestas apenas as mais freqüentes serão
consideradas e, assim, as cestas com três itens já são preparadas para o último passo,
que irá somente então contabilizar as cestas mais frequentes relacionadas na etapa
anterior. Com isso, o resultado obtido é a cesta de itens {2,3,5}.


3.4.
Implementação baseada em Grafo

      O objetivo da abordagem baseada em grafos é possibilitar a manipulação de
informações de bases de dados de grandes volumes.

      Nesta seção serão descritos os passos básicos do algoritmo baseado em grafos,
que chamaremos de Graph-based Market Basket Analysis (GMB). Inicialmente serão
introduzidos conceitos de grafos importantes para o entendimento do algoritmo. Em
seguida, será abordado o princípio da implementação do algoritmo.


3.4.1.
Conceitos de Grafos

      Uma maneira de condensar as informações das relações entre itens é criar uma
estrutura de grafo que as represente. Um grafo é definido por um par G = (V,E), onde V é
um conjunto finito de vértices e E representa um conjunto de arestas que ligam os
vértices, de forma que E⊆[V]². No caso do market basket analysis, cada vértice
representa um item e a aresta representa a relação encontrada entre dois itens. A
frequência com que dois itens aparecem juntos em uma mesma transação, ou registro, é
representada por valores associados às arestas, resultando em um grafo com
3 Market Basket Analysis – MBA                                                       28


ponderação nas arestas. O objetivo desse tipo de representação é realizar a análise do
ponto de vista das relações entre os itens e não da relação entre as transações como
alguns estudos de associação abordam [18].


      Definimos como G1=(V1, E1) um subgrafo de G=(V,E) onde V1⊆V e E1⊆E. O
subgrafo G1 é considerado completo se houver uma aresta para cada par de vértices, ou
seja, cada vértice é adjacente a todos os outros vértices. Definimos como clique de G um
subgrafo completo de G. O clique máximo é o maior clique encontrado no grafo, ou seja,
nenhum outro clique o contém. Sendo assim, o problema do clique máximo consiste em
determinar o tamanho do maior clique de G. Entende-se por tamanho a cardinalidade do
conjunto de vértices do subgrafo em questão, sendo representado por ω(G).

      Para exemplificar o problema do clique máximo, a figura a seguir apresenta um
grafo G, onde V={1,2,3,4,5} e E={(1,2),(1,3),(1,4),(1,5),(2,3),(3,4),(4,5)}. Os nós
destacados em vermelho são os nós que formam o clique máximo desse conjunto de
vértices, que possui tamanho 4.




                          Figura 6 Exemplo de clique máximo


      Se um peso for atribuído a cada aresta, então o subgrafo é conhecido como um
subgrafo ponderado e o seu peso é definido pela soma dos pesos das arestas.

      No escopo de market basket analysis, achar o clique máximo significa achar o
conjunto de itens que mais aparecem juntos nas relações analisadas. Nas bases usadas,
os registros não são transações e, por isso, o objetivo da aplicação do algoritmo é
encontrar as associações existentes entre os atributos (variáveis) de cada registro. O
3 Market Basket Analysis – MBA                                                          29


peso das arestas do clique ponderado indica a frequência com que as variáveis
representadas pelos vértices ligados por ele aparecem juntas em um registro.

      O GMB evita assim várias passadas na base de dados, típicas de algoritmos como
o Apriori

      Após o término da execução do GMB, o analista de negócios pode começar a por
em prática a estratégia de cross-selling, pois tem em mãos as relações e as respectivas
frequencias entre as variáveis selecionadas para estudo.


3.4.2.
Montando a Matriz de Adjacências

      O primeiro passo do algoritmo é montar a matriz de adjacências que irá
representar o grafo ponderado, considerando apenas os atributos selecionados pelo
usuário como o objetivo do estudo.

      A matriz de adjacências foi implementada como uma lista encadeada de objetos
representando os produtos (atributos do registro) da transação e cada produto possui a
lista de relacionamentos com outros produtos e a quantidade de vezes que esses
produtos aparecem juntos nos registros. Sendo assim, os atributos são os vértices do
grafo e as relações entre os atributos são representadas pelas arestas que os ligam.

      Para cada registro da base de dados, o algoritmo percorre atributo por atributo
montando as relações entre os mesmos. Sendo assim, a cada atributo ak, é feita a
verificação se este já está representado na matriz de adjacências. Se não estiver, então
uma nova entrada é criada para representá-lo. O próximo passo é então percorrer todos
os atributos ai restantes na transação, preenchendo a lista de relacionamentos entre

esses produtos e, caso uma nova relação de ak com ai seja identificada, ai é adicionado

à lista de relações de ak com contador de frequencia inicializado com 1. No caso dessa
relação ter sido identificada em uma transação anterior, o contador é acrescido de 1.


3.4.3.
Buscando a Clique de Tamanho Máximo

      O grupo de interesse comum ou a cesta de produtos mais recorrente nas
transações é representada pelo clique máximo do grafo. Em francês, a expressão la
clique é definida como o grupo de indivíduos que partilham interesses em comum.
Encontrar o clique de tamanho máximo significa encontrar o maior grupo de interesses
em comum possível. Quando o grafo em questão é um grafo ponderado, o clique com
maior peso corresponde ao grupo de interesses em comum que se repete mais
frequentemente.
3 Market Basket Analysis – MBA                                                          30


      Na seção 3.4.2 foi apresentado como o conjunto de registros com seus atributos
podem ser transformados em uma matriz de adjacências representando um grafo. Neste
sentido, podemos dizer que o problema da cesta de compras pode ser transformado no
problema do clique máximo (PCM).

      Convém observar que encontrar o clique máximo em um grafo é um problema NP-
dificil. A seguir descrevemos então um algoritmo simples para computar o clique máximo.

      O clique máximo é inicializado como sendo o clique vazio e seu peso é definido
com valor negativo. Além disso, uma lista que representa o clique “candidato” e seu
respectivo peso também são inicializados da mesma maneira.


      A cada passada n na lista de adjacências, o atributo an é adicionado ao clique

candidato e, para cada atributo ai restante, verifica-se a existência de relacionamento
com todos os atributos já adicionados ao clique candidato. Se houver relacionamento
entre os atributos, ou seja, se ai está presente na lista de relacionamentos de todos os
atributos incluídos no clique candidato, significa que são vértices ligados por uma aresta.
Sendo assim, ai também é adicionado ao clique candidato e o peso do mesmo é

atualizado. Caso ai não se relacione com algum dos outros nós, então ai não faz parte do
clique e o processamento passa para o próximo atributo.

      Com o término do processamento do clique candidato, seu peso é comparado ao
peso do clique máximo e, se for maior, então o clique candidato passa a ser a solução
até que outro clique de maior peso seja encontrado ou até que todo vértice da lista de
adjacências tenha sido visitado. As funções FindTheMaximalClique e Find_Clique
transcritas no Apêndice A realizam esse processamento no protótipo desenvolvido.
4 Testes e Resultados


4
Testes e Resultados




      Para o desenvolvimento deste trabalho, as estruturas e tecnologia das bases
utilizadas para os testes do algoritmo desenvolvido são proprietárias da Stone Age Tech.
Todos os campos da base de dados são automaticamente definidos como chaves. Uma
vez construída a base, todos os campos podem ser utilizados como chaves de consulta.
Não existem mais limitações sobre as consultas que podem ser feitas, nem a
necessidade de se pedir que sejam construídas novas agregações ou cubos de análise
dos dados.

      Todo atributo (ou variável) pode ser cruzado com qualquer outro, dando assim
total liberdade para o usuário. Há a possibilidade de se extrair qualquer tipo de
informação dos dados disponíveis.

      O gerenciador faz uso de algoritmos de compressão de dados reduzindo a
necessidade de espaço em disco em 80%. A base de dados final ocupa, em média, 20%
do espaço ocupado pelos acervos originais e, com isso, bases de dados que antes
requeriam equipamentos de armazenamento avançados e custosos podem agora ser
disponibilizadas   em   discos   rígidos   de computadores    pessoais   comuns. Essa
característica da base de dados facilitou o desenvolvimento deste trabalho, que investiga
mineração de dados em bases com grandes volumes de informação, tanto em relação
ao número de registros quanto à quantidade de variáveis.

      Para que aplicações possam acessar sistemas gerenciadores de banco de dados
diferentes de maneira transparente, independente da linguagem e da base de dados, foi
criado um padrão de acesso a esses sistemas que define interfaces de acesso de
maneira que não seja necessária a utilização de métodos específicos de cada base,
denominado ODBC - Open Data Base Conectivity.

      A utilização de um conector (driver) ODBC específico para a base de dados que
se deseja utilizar permite que as informações sejam obtidas utilizando-se a linguagem
SQL - Structured Query Language.


4.1.
Descrição do Ambiente de Testes – Protótipo

      Para testar a eficiência e a eficácia do algoritmo proposto, foi desenvolvido em
Delphi um protótipo de testes que, por permitir a escolha de quaisquer conectores
4 Testes e Resultados                                                               32


ODBC, é genérico a qualquer tipo de base e não somente às bases com a tecnologia da
Stone Age Tech.

      Inicialmente, o conector ODBC desejado é escolhido dentre a lista disponibilizada
como mostra a figura a seguir.




                     Figura 7 Protótipo: escolha do conector ODBC

      Para o acesso aos dados serem disponibilizados, é necessário entrar com nome
de usuário e senha válidos na tela de autenticação que será exibida logo após o clique
no botão Conectar.




                        Figura 8 Protótipo: Autenticação no ODBC
4 Testes e Resultados                                                               33


      Uma vez conectado, a lista de bases será exibida para o usuário, que deve
escolher com qual deseja trabalhar. Em seguida, o usuário deve solicitar a listagem das
variáveis disponíveis para cruzamento. Neste protótipo estão sendo exibidas todas as
variáveis da base. Entretanto, para os estudos contemplados neste trabalho apenas as
variáveis discretas serão utilizadas.




                      Figura 9 Protótipo: Escolha da base de dados

      O usuário escolhe as variáveis sobre as quais deseja estudar as relações de
associação e solicita a execução do comando. Se desejar realizar algum filtro nos
registros da base em questão, os critérios precisam ser digitados no campo filtro antes
do comando de execução, como mostra a figura a seguir.




                   Figura 10 Protótipo: Inclusão de filtro na consulta
4 Testes e Resultados                                                               34


      Durante o processamento, informações como a consulta (query) definida, tempo
de execução pelo ODBC em milissegundos, total de registros considerados na consulta
e o tempo para montar a matriz de adjacências representando as relações encontradas
são exibidas.




                Figura 11 Protótipo: Exibição das informações relevantes

4.2.
Testes

      Os testes foram realizados sobre uma base, denominada Vendas, que possui
25.119.414 registros e 197 variáveis. Apenas 81 dessas variáveis foram utilizadas nos
testes, pois apenas estas são discretas, ou seja, com domínio de valores pré-definidos.
Esta base contém as informações de abordagens de marketing para pessoas que já são
clientes e para pessoas que ainda não são clientes de uma instituição financeira, como:
os produtos a que são elegíveis, as restrições de elegibilidade a campanhas (de acordo
com o CPF dos clientes), algumas informações cadastrais, dentre outros.

      Para o primeiro caso de teste, foram selecionadas:


• 2 variáveis que representam produtos da empresa proprietária da base de dados

• 2 variáveis que indicam se é a primeira vez que aquele CPF foi indicado para adquirir
   esses produtos, respectivamente

• 1 variável que indica se o CPF é de uma pessoa que já é cliente da instituição ou que
   ainda não é, e
4 Testes e Resultados                                                               35


• 1 variável com a quantidade de vezes que esse CPF foi abordado em uma campanha
   de marketing.

      Analisando os padrões encontrados pelo algoritmo (ver Quadro 1), verifica-se que
as relações mais recorrentes estão entre os registros que representam pessoas que

• não são clientes ainda


• foram abordados mais de 4 vezes por uma campanha de marketing

• são elegíveis a campanhas por mala-direta e telemarketing e

• normalmente não é a primeira vez que se tornaram elegíveis aos produtos
   selecionados para a análise.

      Com isso, pode-se concluir que os indivíduos desta base já foram inúmeras vezes
abordados para adquirirem os produtos CITIMAX e CITICARD e, mesmo assim, não
aderiram à campanha. Tendo essas informações, os analistas perceberam que precisam
repensar o modelo de abordagens desses possíveis clientes e/ou a eficiência das
campanhas que estão sendo realizadas, buscando tem mais sucesso com menos
abordagens.

Query: SELECT "CITIFINANCIA", "FX AB", "CITI MAX", "CITICARD", "CITICARD N", "CITIMAX
N" FROM "CREDICARDCITI_CITI_VENDAS" WHERE SEXO = 'F' OR SEXO = 'M'
Query execution time = ms 74515
Total de registros: 318383
Lendo os registros... Por favor, aguarde...
Cálculo das relações durou 57985ms ...
 ************************************
Produto : CITIFINANCIA_NAO
Adjacências:
FX_AB_NAO: 286581 -> CITI_MAX_NAO: 173888 -> CITICARD_NAO: 245837 ->
CITICARD_N_NAO: 286649 -> CITIMAX_N_NAO: 250698 -> CITI_MAX_ELEG_MD_TLMK: 112761 -
> CITICARD_ELEG_MD_TLMK: 40812 -> CITIMAX_N_PRIMEIRA: 35951 -> FX_AB_4_OU_MAIS:
65 -> FX_AB_3: 1 -> FX_AB_2: 1 -> FX_AB_1: 1
 ************************************
Produto : FX_AB_NAO
Adjacências:
CITIFINANCIA_NAO: 1243649 -> CITI_MAX_NAO: 191441 -> CITICARD_NAO: 270110 ->
CITICARD_N_NAO: 318315 -> CITIMAX_N_NAO: 278179 -> CITI_MAX_ELEG_MD_TLMK: 126874 -
> CITICARD_ELEG_MD_TLMK: 48205 -> CITIMAX_N_PRIMEIRA: 40136 -> CITIFINANCIA_SIM:
129475
 ************************************
Produto : CITI_MAX_NAO
Adjacências:
CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITICARD_NAO: 176691 ->
CITICARD_N_NAO: 191472 -> CITIMAX_N_NAO: 191472 -> CITICARD_ELEG_MD_TLMK: 14781 ->
CITIFINANCIA_SIM: 24995 -> FX_AB_4_OU_MAIS: 83 -> FX_AB_3: 1 -> FX_AB_2: 1
 ************************************
Produto : CITICARD_NAO
Adjacências:
CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITI_MAX_NAO: 559633 ->
CITICARD_N_NAO: 270159 -> CITIMAX_N_NAO: 232936 -> CITI_MAX_ELEG_MD_TLMK: 307142 -
> CITIMAX_N_PRIMEIRA: 37223 -> CITIFINANCIA_SIM: 129475 -> FX_AB_4_OU_MAIS: 156 ->
FX_AB_2: 1
 ************************************
4 Testes e Resultados                                                          36


Produto : CITICARD_N_NAO
Adjacências:
CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITI_MAX_NAO: 559633 ->
CITICARD_NAO: 503094 -> CITIMAX_N_NAO: 278237 -> CITI_MAX_ELEG_MD_TLMK: 307142 ->
CITICARD_ELEG_MD_TLMK: 93524 -> CITIMAX_N_PRIMEIRA: 40146 -> CITIFINANCIA_SIM:
129475 -> FX_AB_4_OU_MAIS: 156 -> FX_AB_3: 1 -> FX_AB_2: 1 -> FX_AB_1: 1
 ************************************
Produto : CITIMAX_N_NAO
Adjacências:
CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITI_MAX_NAO: 559633 ->
CITICARD_NAO: 503094 -> CITICARD_N_NAO: 278237 -> CITI_MAX_ELEG_MD_TLMK: 307142 ->
CITICARD_ELEG_MD_TLMK: 93524 -> CITIFINANCIA_SIM: 129475 -> FX_AB_4_OU_MAIS: 83 ->
FX_AB_3: 1 -> FX_AB_2: 1 -> FX_AB_1: 1
 ************************************
Produto : CITI_MAX_ELEG_MD_TLMK
Adjacências:
CITIFINANCIA_NAO: 112761 -> FX_AB_NAO: 126874 -> CITICARD_NAO: 93468 ->
CITICARD_N_NAO: 126911 -> CITIMAX_N_NAO: 86765 -> CITICARD_ELEG_MD_TLMK: 33443 ->
CITIMAX_N_PRIMEIRA: 40146 -> CITIFINANCIA_SIM: 129475 -> FX_AB_4_OU_MAIS: 156 ->
FX_AB_1: 1
 ************************************
Produto : CITICARD_ELEG_MD_TLMK
Adjacências:
CITIFINANCIA_NAO: 40812 -> FX_AB_NAO: 48205 -> CITI_MAX_ELEG_MD_TLMK: 33443 ->
CITICARD_N_NAO: 48224 -> CITIMAX_N_NAO: 45301 -> CITI_MAX_NAO: 14781 ->
CITIFINANCIA_SIM: 24995 -> CITIMAX_N_PRIMEIRA: 2923 -> FX_AB_4_OU_MAIS: 17 ->
FX_AB_3: 1 -> FX_AB_1: 1
 ************************************
Produto : CITIMAX_N_PRIMEIRA
Adjacências:
CITIFINANCIA_NAO: 35951 -> FX_AB_NAO: 40136 -> CITI_MAX_ELEG_MD_TLMK: 40146 ->
CITICARD_NAO: 37223 -> CITICARD_N_NAO: 40146 -> CITIFINANCIA_SIM: 4195 ->
CITICARD_ELEG_MD_TLMK: 2923 -> FX_AB_4_OU_MAIS: 156
 ************************************
Produto : CITIFINANCIA_SIM
Adjacências:
FX_AB_NAO: 31734 -> CITI_MAX_ELEG_MD_TLMK: 14150 -> CITICARD_NAO: 24322 ->
CITICARD_N_NAO: 31734 -> CITIMAX_N_NAO: 27539 -> CITIMAX_N_PRIMEIRA: 4195 ->
CITI_MAX_NAO: 17584 -> CITICARD_ELEG_MD_TLMK: 7412
 ************************************
Produto : FX_AB_4_OU_MAIS
Adjacências:
CITIFINANCIA_NAO: 65 -> CITI_MAX_ELEG_MD_TLMK: 36 -> CITICARD_NAO: 48 ->
CITICARD_N_NAO: 65 -> CITIMAX_N_PRIMEIRA: 10 -> CITI_MAX_NAO: 29 -> CITIMAX_N_NAO:
55 -> CITICARD_ELEG_MD_TLMK: 17
 ************************************
Produto : FX_AB_3
Adjacências:
CITIFINANCIA_NAO: 1 -> CITI_MAX_NAO: 1 -> CITICARD_ELEG_MD_TLMK: 1 ->
CITICARD_N_NAO: 1 -> CITIMAX_N_NAO: 1
 ************************************
Produto : FX_AB_2
Adjacências:
CITIFINANCIA_NAO: 1 -> CITI_MAX_NAO: 1 -> CITICARD_NAO: 1 -> CITICARD_N_NAO: 1 ->
CITIMAX_N_NAO: 1
 ************************************
Produto : FX_AB_1
Adjacências:
CITIFINANCIA_NAO: 1 -> CITI_MAX_ELEG_MD_TLMK: 1 -> CITICARD_ELEG_MD_TLMK: 1 ->
CITICARD_N_NAO: 1 -> CITIMAX_N_NAO: 1
 Clique máxima pelo peso total:
 - FX_AB_4_OU_MAIS
 - CITIMAX_N_PRIMEIRA
 - CITICARD_ELEG_MD_TLMK
 - CITI_MAX_ELEG_MD_TLMK
 - CITIMAX_N_NAO
 - CITICARD_N_NAO
4 Testes e Resultados                                                                 37


 - CITICARD_NAO
 - CITI_MAX_NAO
 - FX_AB_NAO
 - CITIFINANCIA_NAO
2676826

                 Quadro 1 Relações encontradas para o caso de teste 1

      Para o caso de teste 2, foram utilizadas as variáveis, presentes na base de
Vendas:


• sexo

• faixa de vezes que o CPF foi abordado em uma campanha


• indicador de restrição do CPF para uma campanha

• indicador se o CPF já é de um cliente e


• estado civil

      O propósito do experimento foi descobrir as relações entre tais variáveis,
verificando quais características aparecem mais vezes nos registros da base Vendas.

      A consulta ao banco de dados foi realizada em 65547ms (≈ 66 segundos) e a
matriz de adjacência com as relações entre os valores dos atributos foi montada em
32625ms (≈ 33 segundos). Como foi realizado um filtro selecionando apenas os registros
do sexo masculino e feminino (existem registro com valor de sexo “não informado” e
“ignorado”, apenas 318.383 registros foram analisados.

      O clique encontrado tem nós com valor 1 para faixa de abordagem (ou seja, o
CPF foi abordado apenas 1 vez em campanhas de marketing), sexo feminino, sem
restrições ao CPF e com indicador de que este CPF ainda não se tornou cliente da
instituição. Com essas informações o analista pode inferir que as mulheres que não
possuem restrição às campanhas para seus CPFs foram abordadas apenas uma vez e
não responderam bem à campanha realizada, já que não se tornaram clientes. Assim, foi
possível preparar mais campanhas buscando abordar novamente as pessoas que ainda
não se tornaram clientes e que foram abordados apenas uma vez.

      O Quadro 2 apresenta a consulta realizada sobre a base de dados, todas as
relações encontradas entre as variáveis selecionadas pelo usuário e os valores
encontrados como pertencentes ao clique.

Query: SELECT "IND CPF", "CITIFINANCIA", "FX AB", "ESTCIVIL", "SEXO" FROM
"CREDICARDCITI_CITI_VENDAS" WHERE SEXO = 'F' OR SEXO = 'M'
Query execution time = ms 65547
Total de registros: 318383
Lendo os registros... Por favor, aguarde...
4 Testes e Resultados                                                                38


Cálculo das relações durou 32625ms ...
 ************************************
Produto : IND_CPF_-_NAO
Adjacências:
CITIFINANCIA_-_NAO: 279334 -> FX_AB_-_NAO: 310155 -> ESTCIVIL_-_NAO: 310223 -> SEXO_-
_F: 170677 -> SEXO_-_M: 139546 -> CITIFINANCIA_-_SIM: 30889 -> FX_AB_-_4_OU_MAIS: 65 ->
FX_AB_-_3: 1 -> FX_AB_-_2: 1 -> FX_AB_-_1: 1
 ************************************
Produto : CITIFINANCIA_-_NAO
Adjacências:
IND_CPF_-_NAO: 1070386 -> FX_AB_-_NAO: 286581 -> ESTCIVIL_-_NAO: 286649 -> SEXO_-_F:
158326 -> SEXO_-_M: 128323 -> IND_CPF_-_PROP_RECENTE: 26916 -> FX_AB_-_4_OU_MAIS: 65 ->
FX_AB_-_3: 1 -> FX_AB_-_2: 1 -> FX_AB_-_1: 1
 ************************************
Produto : FX_AB_-_NAO
Adjacências:
IND_CPF_-_NAO: 1070386 -> CITIFINANCIA_-_NAO: 731554 -> ESTCIVIL_-_NAO: 318315 ->
SEXO_-_F: 175513 -> SEXO_-_M: 142802 -> CITIFINANCIA_-_SIM: 77973 -> IND_CPF_-
_PROP_RECENTE: 26916
 ************************************
Produto : ESTCIVIL_-_NAO
Adjacências:
IND_CPF_-_NAO: 1070386 -> CITIFINANCIA_-_NAO: 731554 -> FX_AB_-_NAO: 493827 -> SEXO_-
_F: 175553 -> SEXO_-_M: 142830 -> CITIFINANCIA_-_SIM: 77973 -> IND_CPF_-_PROP_RECENTE:
26916 -> FX_AB_-_4_OU_MAIS: 103 -> FX_AB_-_3: 1 -> FX_AB_-_2: 1 -> FX_AB_-_1: 1
 ************************************
Produto : SEXO_-_F
Adjacências:
IND_CPF_-_NAO: 1070386 -> CITIFINANCIA_-_NAO: 731554 -> FX_AB_-_NAO: 493827 ->
ESTCIVIL_-_NAO: 175553 -> CITIFINANCIA_-_SIM: 17227 -> IND_CPF_-_PROP_RECENTE: 5720 ->
FX_AB_-_4_OU_MAIS: 103 -> FX_AB_-_1: 1
 ************************************
Produto : SEXO_-_M
Adjacências:
IND_CPF_-_NAO: 139546 -> CITIFINANCIA_-_NAO: 128323 -> FX_AB_-_NAO: 142802 ->
ESTCIVIL_-_NAO: 142830 -> CITIFINANCIA_-_SIM: 77973 -> IND_CPF_-_PROP_RECENTE: 26916 -
> FX_AB_-_4_OU_MAIS: 26 -> FX_AB_-_3: 1 -> FX_AB_-_2: 1
 ************************************
Produto : CITIFINANCIA_-_SIM
Adjacências:
IND_CPF_-_NAO: 30889 -> FX_AB_-_NAO: 31734 -> ESTCIVIL_-_NAO: 31734 -> SEXO_-_M: 14507 -
> SEXO_-_F: 17227 -> IND_CPF_-_PROP_RECENTE: 5720
 ************************************
Produto : IND_CPF_-_PROP_RECENTE
Adjacências:
CITIFINANCIA_-_NAO: 7315 -> FX_AB_-_NAO: 8160 -> ESTCIVIL_-_NAO: 8160 -> SEXO_-_M: 3284
-> CITIFINANCIA_-_SIM: 845 -> SEXO_-_F: 4876
 ************************************
Produto : FX_AB_-_4_OU_MAIS
Adjacências:
IND_CPF_-_NAO: 65 -> CITIFINANCIA_-_NAO: 65 -> ESTCIVIL_-_NAO: 65 -> SEXO_-_F: 39 ->
SEXO_-_M: 26
 ************************************
Produto : FX_AB_-_3
Adjacências:
IND_CPF_-_NAO: 1 -> CITIFINANCIA_-_NAO: 1 -> ESTCIVIL_-_NAO: 1 -> SEXO_-_M: 1
 ************************************
Produto : FX_AB_-_2
Adjacências:
IND_CPF_-_NAO: 1 -> CITIFINANCIA_-_NAO: 1 -> ESTCIVIL_-_NAO: 1 -> SEXO_-_M: 1
 ************************************
Produto : FX_AB_-_1
Adjacências:
IND_CPF_-_NAO: 1 -> CITIFINANCIA_-_NAO: 1 -> ESTCIVIL_-_NAO: 1 -> SEXO_-_F: 1
 Clique máxima pelo peso total:
 - FX_AB_-_1
 - SEXO_-_F
4 Testes e Resultados                                                  39


 - ESTCIVIL_-_NAO
 - FX_AB_-_NAO
 - CITIFINANCIA_-_NAO
 - IND_CPF_-_NAO
2140775

                Quadro 2 Relações encontradas para o caso de teste 2
5 Conclusão e Trabalhos Futuros                                                     40


5
Conclusão e Trabalhos Futuros




5.1.
Conclusões

      Esta dissertação abordou conceitos de data mining voltado para marketing de
relacionamento, propondo uma implementação da técnica de market basket analysis
baseada na estrutura de grafo.

      Para contextualizar o problema, inicialmente foram discutidos tópicos importantes
relacionados à mineração de dados, bem como o processo de busca de conhecimento,
os tipos de predição de informação e as técnicas mais utilizadas atualmente para
descobrimento de padrões em dados armazenados em bancos de dados.

      Maior foco foi dado à técnica de market basket analysis, pois, ao fazer uso de
regras de associação, esta técnica caracteriza-se como uma ótima escolha para
solucionar problemas no escopo de marketing de relacionamento, tais como venda
casada e up-selling. Neste cenário, foi proposto um algoritmo que encontra as relações
mais recorrentes entre os produtos (variáveis) nas compras (registros) registradas na
base de dados.

      A fim de realizar testes que mensurassem o desempenho do algoritmo
desenvolvido, um protótipo de aplicação foi criado, permitindo que o usuário escolha a
base em que irá realizar os estudos e as variáveis que deseja cruzar a fim de descobrir
as relações existentes entre as variáveis. Sendo assim, este trabalho ainda apresenta
testes e resultados obtidos através da utilização do algoritmo proposto.

      Como principal contribuição do trabalho, podemos apontar a implementação de
um algoritmo para data mining capaz de descobrir relações entre atributos dos registros
de uma base de dados. A principal barreira enfrentada por tais implementações está na
dificuldade de encontrar informação relevante, e em volume suficientemente grande,
para estudar a eficiência do algoritmo em descobrir regras de associação referentes aos
dados. No caso deste trabalho, as bases de dados utilizadas são reais e com qualidade
e tamanho satisfatórios para uma análise mais apurada do retorno da solução proposta.

      Como segunda contribuição, podemos ressaltar a generalidade do protótipo
desenvolvido, que pode ser aplicado a qualquer estrutura e tecnologia de base de dados,
através do uso de conector ODBC para realizar as consultas aos dados disponíveis.
5 Conclusão e Trabalhos Futuros                                                    41


5.2.
Trabalhos Futuros

     Como sugestões de trabalhos futuros, podemos enumerar:


         •   Identificação dos atributos discretos

             No processo de descoberta das relações entre os atributos de um
             registro, só faz sentido trabalhar com aqueles que possuem domínio
             previamente conhecido, ou seja, atributos que sejam discretos. Sendo
             assim, é interessante apresentar para o usuário apenas as variáveis que
             sejam desse tipo, o que não foi realizado neste trabalho devido à uma
             limitação do conector ODBC utilizado.


         •   Investir na visualização gráfica das informações descobertas

             A visualização do relacionamento entre os atributos em termos de
             imagens facilita a compreensão por parte do usuário e permite análises
             mais rápidas e intuitivas que o estudo das regras de associação
             descobertas. É interessante que um trabalho futuro explore a parte de
             visualização, buscando outros componentes que permitam a visualização
             do grafo de maneira mais limpa e que suporte grafos com grandes
             quantidades de nós e relações.


         •   Trabalhar com outras estruturas de dados

             Este trabalho fez uso apenas de bases de dados de propriedade da Stone
             Age Tech, que não trabalha com tabelas como os bancos de dados
             convencionais, mas com uma estrutura colunar. Ao trabalhar com uma
             base de dados convencional, seria possível identificar se a estrutura da
             base influencia o desempenho final do algoritmo.


         •   Estudo comparativo entre algoritmos

             A proposta dessa dissertação foi uma implementação da técnica de
             market basket analysis, utilizando-se os conceitos de grafos ponderados a
             fim de encontrar as relações mais frequentes, ou seja, o clique máximo do
             grafo. Como trabalho futuro complementar a este, pode-se sugerir a
             construção de outros algoritmos que tenham o mesmo princípio de regras
             de associação, como por exemplo, o Apriori, com o objetivo de realizar
             comparações de tempo de resposta e de acuracidade das informações
             sobre as relações.


         •   Incluir medidas de interesse como suporte e confiança
5 Conclusão e Trabalhos Futuros                                                  42


             A introdução de medidas, como suporte e confiança, permite que os
             padrões descobertos sejam ordenados ou classificados de acordo com o
             grau de interesse associado aos mesmos. Além disso, essas medidas
             podem ser usadas para guiar ou restringir o espaço de busca, melhorando
             a eficiência da mesma ao eliminar conjuntos de regras de associação que
             não satisfaçam as condições predeterminadas.

         •   Acrescentar outras abordagens para descoberta do clique máximo

             Na literatura existem algumas abordagens diferentes para a solução
             problema do clique máximo. A título experimental, o estudo e a
             implementação de novas técnicas é sugerido como trabalho futuro
             complementar ao proposto por esta dissertação.
6 Referências


6
Referências




   [1]   SANDRI. A.; Detecção e Prevenção de Fraudes utilizando Inteligência
         Artificial.             2006.                Disponível            em
         <http://br.geocities.com/andresandri/artigos/IA/Deteccao_Prevencao_Fr
         aude_IA.doc> Acesso em Junho de 2008.
   [2]   PASSINI, S.R.R; TOLEDO, C.M.T; Mineração de Dados para Detecção
         de Fraudes em Ligações de Água. 2002. Disponível em
         <http://www.inf.furb.br/seminco/2002/artigos/Passini-seminco2002-
         6.pdf> Acesso em Junho de 2008.
   [3]   RABELO, E;. Avaliação de Técnicas de Visualização para Mineração de
         Dados, 2007. Dissertação de Pós-Graduação, Universidade Federal de
         Maringá.      Disponível       em        <http://www.din.uem.br/pos-
         graduacao/mestrado-em-ciencia-da-computacao/dissertacoes> Acesso
         em Junho 2008.
   [4]   Fayyad, U.; Shapiro, P. G.; Smyth, P.; Knowledge Discovery and Data
         Mining: Towards a Unifying Framework. Menlo Park, Calif.: AAAI Press;
         Cambridge, Mass.: MIT Press, 1996. 611p.
   [5]   FERRO, M., LEE, H. D.; O Processo de KDD – Knowledge Discovery in
         Database para Aplicações na Medicina, 2001.
   [6]   ROMÃO, W.; Descoberta de Conhecimento Relevante em Banco de
         Dados sobre Ciência e Tecnologia. Dissertação de Pós-Graduação,
         Universidade Federal de Santa Catarina, 2002.
   [7]   Information    Drivers    Company,     Inglaterra.  Disponível   em
         <http://www.information-drivers.com/market_basket_analysis.php>.
         Acesso em julho 2008.
   [8]   Direct Magazine, “Match 'Em Up” Outubro 2006. Disponível em
         <http://directmag.com/disciplines/crm/marketing_match_em>, Acesso
         em julho 2008.
   [9]   VELOSO, M. S. A. Regras De Associação Aplicadas A Um Método De
         Apoio Ao Planejamento De Recursos Humanos. Dissertação de
         Mestrado, Universidade do Porto.
   [10] TAN, P., STEINBACH, M., KUMAR, V., Introduction to Data Mining.
        Person Addison Wesley Education Press Inc. Boston, 2005.
   [11] AZEVEDO, L. V. Maximizando o valor do relacionamento com o cliente:
        Data Mining e CRM. 2003.
   [12] SANTOS, J. G.; Mineração De Dados Aplicada à Gestão De
        Relacionamento com Clientes. Espaço Científico, Santarém V.6, n.1/2,
        p.29-36, 2005.
   [13] NOGUEIRA, C. F.; Metodologia de Valorização de Clientes, utilizando
        Mineração de Dados. Dissertação de Pós-graduação em Engenharia
        Civil da Universidade Federal do Rio de Janeiro, 2004.
6 Referências


   [14] ADOMAVICIUS, G., TUZHILIN, A.; Toward the Next Generation of
        Recommender Systems: A Survey of the State-of-the-Art and Possible
        Extensions. IEEE Transactions On Knowledge And Data Engineering,
        VOL. 17, No. 6, Junho 2005.
   [15] BURKE, R; Knowledge-based Recommender Systems. University of
        California, Irvine.
   [16] MIDDLETON, S. E., ROURE, D., SHADBOLT, N.; Captuiring knowledge
        of User Preferences: Ontologies in Recommender Systems. University
        of Southampton. October 22-23, 2001, Victoria, British Columbia,
        Canada.
   [17] TAN, P.; STEINBACH, M.; KUMAR, V.; Introduction to Data Mining.
        Pearson Addison Wesley 2006.
   [18] LIU, F.; LU, Z; LU, S., Mining Association Rules Using Clustering,
        Intelligent Data Analysis,5, 2001, pp.309-326.
   [19] CAVIQUE, L. Graph-based structures for the Market Baskets Analysis.
        24 2004, pp.233-246.
   [20] LIMEIRA, Tânia m. V. Administração das comunicações em Marketing.
        In: DIAS, S. R. Gestão de marketing. São Paulo: Saraiva, 2003. p. 301.
   [21] Bretze Marketing de Relacionamento 2004, Aumentando a
        Rentabilidade do Cliente com Database Marketing. Disponível em
        www.bretzke-marketing.com.br/textos/artigos01.htm. Acesso em janeiro
        de 2009.
   [22] HOUTSMA, M., SWAMI, A. Set-oriented mining for association rules in
        relational databases. Twente Univ., Enschede; Data Engineering, 1995.
        Proceedings of the Eleventh International Conference on p. 25-33.
   [23] DIPANKAR, D., Artificial Immune System and Their Aplications.
        Springer-Verlag 1999.
   [24] DASGUPTA, D., Ji, Z., González, F., Artificial Immune System (AIS)
        Research in the Last Five Years. IEEE 2003.
   [25] AGRAWAL, R., IMIELINSKI, T., SRIKANT, R., Mining Association Rules
        between Sets of Items in Large Databases, Proc. of the ACM SIGMOD
        Intl. Conf. on Management of Data, Washington, Estados Unidos, 1993,
        207–216.
   [26] C. Borgelt, An Implementation of the FP-growth Algorithm, Workshop
        Open Source Data Mining Software, OSDM'05, Chicago, IL, 1-5.ACM
        Press, USA, 2005.
   [27] S. Brin, R. Motwani, J.D. Ullman and S.Tsur, Dynamic Itemset Counting
        and Implication Rules for Market Basket Data, in Proceedings of the
        1997 ACM SIGMOD Conference, Tucson, Arizona, 1997, pp.255-264.
   [28] J. Han, J. Pei, Y. Yin, “Mining frequent patterns without candidate
        generation”, Proceedings of the 2000 ACM SIGMOD International
        Conference on Management of Data, Dallas, Texas, United States, 1-
        12, 2000
7 Apêndice A


7
APÊNDICE A – Código da Implementação




Unit Main – Main.pas

(*******************************************************************************
*      PONTIFICIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO - PUC-RIO
*
* Programa de Pós-Graduação em Informática - Mestrado
*
* Programa apresentado como requisito parcial para o cumprimento dos créditos da
* cadeira de Projeto Final de Programação (INF 2102).
*
* Aluna: Livia Fonseca Fracalanza
* Matricula : 0621292
* Orientador: Prof. Marco Antonio Casanova
*******************************************************************************)
unit Main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, RzGrids, RzShellDialogs, StdCtrls, RzLabel, Mask, RzEdit,
 RzBtnEdt, ExtCtrls, LogView, OleCtrls, SHDocVw,
 MBAObject, DB, ADODB, CheckLst, RzLstBox, RzChkLst;

type
  TFMain = class(TForm)
   Panel3: TPanel;
   Splitter1: TSplitter;
   WebBrowser1: TWebBrowser;
   Panel1: TPanel;
   Panel2: TPanel;
   Panel4: TPanel;
   BtnMaximalCliqueByWeight: TButton;
   RzOpenDialog1: TRzOpenDialog;
   BtnGraphGenerator: TButton;
   BtnMaximalCliqueByAverage: TButton;
   RzLabel1: TRzLabel;
   BtnConnect: TButton;
   BtnDisconnect: TButton;
   cbDriversList: TComboBox;
   RzLabel2: TRzLabel;
   cbBases: TComboBox;
   RzLabel3: TRzLabel;
   ODBCConnect: TADOConnection;
   Button1: TButton;
   edtFilter: TEdit;
   Filtro: TLabel;
   Button2: TButton;
   Memo1: TMemo;
   Label1: TLabel;
7 Apêndice A


  VarListBox: TRzCheckList;
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  procedure btnPrintClick(Sender: TObject);
  procedure FileEdtButtonClick(Sender: TObject);
  procedure BtnMaximalCliqueByWeightClick(Sender: TObject);
  procedure BtnGraphGeneratorClick(Sender: TObject);
  procedure BtnMaximalCliqueByAverageClick(Sender: TObject);
  procedure BtnConnectClick(Sender: TObject);
  procedure BtnDisconnectClick(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
 private
  MBAObj : TMBAObj;
  FFilePath : string;
  recset : _Recordset;

   procedure ReadFile;
   procedure GetDriversList;
   procedure PrintRelations;
   procedure PrintMaximalClique;
   procedure DisconnectODBC;
  public
// FLogViewer : TLogViewer; // Main log info
  end;

var
 FMain: TFMain;

implementation
{$R *.dfm}

uses
// StrUtils, // for AnsiStr functions
  Registry,
  LoginForm,
  WINGRAPHVIZLib_TLB; // to use GraphViz to draw Graph gif

(******************************************************************************)
procedure TFMain.FormCreate(Sender: TObject);
begin
  //Create Log Object
  CreateLogObject;
  FLogViewer.LogUpdate (' *** Início da execução do programa *** ');

 GetDriversList;

  VarListBox.MultiSelect := TRUE;
end;
(******************************************************************************)
procedure TFMain.FormDestroy(Sender: TObject);
begin

  // Destroy Log Object
  FLogViewer.LogUpdate (' *** Encerrando a execução do programa *** ');
  If Assigned (FLogViewer) then
    FreeAndNil (FLogViewer);
end;
(******************************************************************************)
procedure TFMain.GetDriversList;
7 Apêndice A


var
 reg : TRegistry;
 List : TStrings;
begin
 reg := TRegistry.Create;
 List := TStringList.Create;
 try
   reg.RootKey := HKEY_LOCAL_MACHINE;
   reg.OpenKey ('SOFTWAREODBCODBC.INI', False);
   reg.GetKeyNames (List);

    cbDriversList.Items.Assign (List);
  finally
    reg.Free;
    List.Free;
  end;
end;
(******************************************************************************)
(******************************************************************************)
procedure TFMain.btnPrintClick(Sender: TObject);
begin
  PrintRelations;
end;
(******************************************************************************)
(*******************************************************************************
* Procedure: PrintRelations
* Descrição: Procedure passa pelos nós da lista de adjacência imprimindo a rela-
            ção existente entre os mesmos e a quantidade de vezes em que essa
            relação acontece.
*
*******************************************************************************)
procedure TFMain.PrintRelations;
var
  i, j : Integer;
  Produto : TProduct;
  PAdj : TProduct;
  ws : string;
begin
// Memo1.Lines.Clear;

 for i := 0 to MBAObj.FAdjList.Count-1 do
  begin
    ws := '';

    Produto := TProduct(MBAObj.FAdjList.Objects[i]);
    Memo1.Lines.Add(' ************************************ ');
    Memo1.Lines.Add('Produto : ' + MBAObj.FAdjList.Strings[i]);
    Memo1.Lines.Add('Adjacências: ');

    for j := 0 to Produto.List.Count-1 do
      begin
       PAdj := TProduct(Produto.List.Objects[j]);
       ws := ws + PAdj.ID + ': ' + IntToStr(PAdj.Qtd) + ' -> ';
      end;
    Memo1.Lines.Add(Copy(ws,0, length(ws)-3));
   end;
end;
(******************************************************************************)
procedure TFMain.FileEdtButtonClick(Sender: TObject);
begin
7 Apêndice A


 if RzOpenDialog1.Execute then
   FFilePath:= RzOpenDialog1.FileName;

// FileEdt.Text:= FFilePath;

 //Create MBA Object
 if Assigned (MBAObj) then
   MBAObj.Destroy;

 MBAObj := TMBAObj.Create;

 // Read the Transaction File and Set the Adjacent List, constructing the Graph
 ReadFile;

  //Print the relations at the list of adjacencies
  PrintRelations;
end;
(******************************************************************************)
(*******************************************************************************
* Procedure: ReadFile
* Descrição: Lê cada linha do arquivo texto, representando uma transação e chama
*           a função FillAdjList para computar a relação de adjacência dos
*           ítens da transação.
*
* AE : -
* AS : -
*******************************************************************************)
procedure TFMain.ReadFile;
var
   MatrixFile : TextFile;
   TransactionLine: string;
   PList : TStringList;
   i : integer;
begin
  if not FileExists(FFilePath) then
    begin
      ShowMessage ('O Arquivo informado não existe.');
      FLogViewer.LogUpdate ('Erro: O Arquivo informado não existe.');
      exit;
    end;

 Memo1.Lines.Clear;
 i := 0;
 try
   AssignFile(MatrixFile, FFilePath);
   Reset(MatrixFile);

  Plist := TStringList.Create;
  PList.Delimiter := ';';
  while not Eof(MatrixFile) do
   begin
     Readln(MatrixFile, TransactionLine);

     Memo1.Lines.Add('Lendo Transação ' + IntTOStr(i+1));
     Memo1.Lines.Add(TransactionLine);
     Memo1.Lines.Add(' ----------------- ');

     PList.DelimitedText := TransactionLine;

     MBAObj.FillAdjList (PList, 0);
7 Apêndice A



        inc(i);
      end;
    FLogViewer.LogUpdate (IntToStr(i) + ' transações lidas.');
  finally
    CloseFile(MatrixFile);
// FreeAndNil (MatrixFile);
  end;
end;
(******************************************************************************)
(*******************************************************************************
* Procedure: BtnGraphGeneratorClick
* Descrição: Procedure que implementa o clique do botão de criação da imagem do
*           grafo de acordo com as informações da lista de adjacências.
*
*******************************************************************************)
procedure TFMain.BtnGraphGeneratorClick(Sender: TObject);
var
  Dot: IDot;
  Image: IBinaryImage;
  ImageFileName: string;
  Path : string;
  Data : widestring;
  i, j : Integer;
  Vertex, Adjc : TProduct;
begin
  Memo1.Lines.Clear;
  Memo1.Lines.Add('graph G');
  Memo1.Lines.Add('{');
  Memo1.Lines.Add('label=" Grafo de Transações "');
  Memo1.Lines.Add('node [color=pink, style=filled]');

 for i := 0 to MBAObj.FAdjList.Count-1 do
  begin
    Vertex := TProduct(MBAObj.FAdjList.Objects[i]);
    if MBAObj.FMaximumCliqueList.IndexOf(Vertex.ID) >= 0 then // Node is a part of the
Maximal Clique
      begin
        Memo1.Lines.Add(Vertex.ID + ' [color=yellow]');
      end;

     for j := 0 to Vertex.List.Count-1 do
      begin
        Adjc := TProduct(Vertex.List.Objects[j]);
        if Vertex.ID < Adjc.ID then
          begin
            Memo1.Lines.Add(Vertex.ID + ' -- ' + Adjc.ID + ' [label = ' + IntToStr(Adjc.Qtd) +
', color=green]');
          end;
      end;
    end;
  Memo1.Lines.Add('}');

// Print the Graph
  Data := Memo1.text;
  Path := ExtractFilePath(paramStr(0));
  ImageFileName := Path + 'Graph_image.gif';

 Dot := CoDOT.Create;
 Image := Dot.ToGIF(Data);
7 Apêndice A


  Image.Save(ImageFileName);
 WebBrowser1.Navigate('file:///' + Path + 'Graph_image.gif');
end;
(******************************************************************************)
procedure TFMain.BtnMaximalCliqueByWeightClick(Sender: TObject);
begin
  MBAObj.FindTheMaximalClique (M_WEIGHT);

  PrintMaximalClique;
end;
(******************************************************************************)
procedure TFMain.BtnMaximalCliqueByAverageClick(Sender: TObject);
begin
  MBAObj.FindTheMaximalClique (AVERAGE);

  PrintMaximalClique;
end;
(******************************************************************************)
procedure TFMain.PrintMaximalClique;
var
  i : Integer;
begin
  // Se foram identificados nós que formam uma clique máxima, imprime a mesma
  if MBAObj.FMaximumCliqueList.Count > 0 then
  begin
    Memo1.Lines.Add (' Clique máxima pelo peso total: ');
    for i := 0 to MBAObj.FMaximumCliqueList.Count -1 do
      begin
        Memo1.Lines.Add(' - '+ MBAObj.FMaximumCliqueList[i]);
      end;
    Memo1.Lines.Add(FloatToStr(MBAObj.FMaxCliqueWeight));
  end
  else
    Memo1.Lines.Add(' -> Não existe uma Clique.');
end;
(******************************************************************************)
procedure TFMain.BtnConnectClick(Sender: TObject);
var
  ConnectStr,
  DriverName : string;
  List      : TStrings;
begin
  if cbDriversList.ItemIndex < 0 then
    begin
      ShowMessage ('Por favor, selecione um Driver ODBC!');
      exit;
    end;

 if FrmLogin.ShowModal <> mrOK then
   exit;

  DriverName := cbDriversList.Text;
  ConnectStr := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source='
          + DriverName;
  (* connect *)
  try
    ODBCConnect.ConnectionString := ConnectStr;
    ODBCConnect.Open (FrmLogin.UserName, FrmLogin.Password); // ('ADMCAMP',
'THORAN'); //
7 Apêndice A


     List := TStringList.Create;
     try
       if ODBCConnect.Connected then
         ShowMessage ('Conectado!')
       else
         begin
          ShowMessage ('Conexão falhou!');
          Exit;
         end;

       ODBCConnect.GetTableNames (List, False);
       cbBases.Items.Assign (List);
     finally
       List.Free;
     end;

      BtnConnect.Enabled := false;
//     Button1.Enabled := true;
      BtnDisconnect.Enabled := true;
  except
    on E : EADOError do
      begin
       ShowMessage (E.Message);
       DisconnectODBC;
      end;
    on E : Exception do
      begin
       ShowMessage ('Conexão Simba falhou : ' + E.Message);
       DisconnectODBC;
      end;
  end;
end;
(******************************************************************************)
procedure TFMain.BtnDisconnectClick(Sender: TObject);
begin
  DisconnectODBC;
end;
(******************************************************************************)
procedure TFMain.DisconnectODBC;
begin
  ODBCConnect.Close;
  BtnConnect.Enabled := true;
// Button1.Enabled := false;
  BtnDisconnect.Enabled := false;
  VarListBox.Clear;
end;
(******************************************************************************)
procedure TFMain.Button1Click(Sender: TObject);
var
  List      : TStrings;
begin
  if not ODBCConnect.Connected
  then
    begin
      ShowMessage ('Dataset desconectado!');
      Exit;
    end;

 if cbBases.ItemIndex < 0
 then
7 Apêndice A


  begin
   ShowMessage ('Por favor, selecione um dataset!');
   Exit;
  end;

 List := TStringList.Create;
 VarListBox.Clear;

 try
   ODBCConnect.GetFieldNames (cbBases.Text, List);
   VarListBox.Items.Assign (List);
 finally
   List.Free;
 end;
end;

procedure TFMain.Button2Click(Sender: TObject);
var
 queryStr,
 DataSetName,
 VarListStr : String;
 Ix, Jx    : Integer;
 SelList    : Array of String;
 SelCount       : Integer;
 timestep     : DWORD;
 FilterStr : String;
 FullRecovery : boolean;
 columnsList : array of string;
 RecLine       : TStringList;
 auxStr      : String;
begin
 if cbBases.ItemIndex < 0 then
   begin
     ShowMessage ('Por favor, selecione um dataset!');
     Exit;
   end;

 SelCount := VarListBox.ItemsChecked;
 if SelCount = 0 then
   begin
     ShowMessage ('Por favor, selecione pelo menos uma variável!');
     Exit;
   end;

 SetLength (SelList, SelCount);
 SetLength (columnsList, SelCount);
 Jx := 0;

 DataSetName := cbBases.Text;
 with VarListBox do
  begin
    for Ix := 0 to Count - 1 do
     begin
       if ItemChecked[Ix] then
         begin
           SelList[Jx] := Items.Strings[Ix];

         if VarListStr <> '' then
           VarListStr := VarListStr + ', ';
7 Apêndice A


          VarListStr := VarListStr + #34 + SelList[Jx] + #34;
          Inc (Jx);
        end;
      end;
  end;
 FilterStr := '';

 if edtFilter.Text <> '' then
   FilterStr := ' WHERE ' + edtFilter.Text;

 queryStr := 'SELECT ' + VarListStr + ' FROM "' + DataSetName + '"' + FilterStr;
 Memo1.Lines.Add('Query: ' + queryStr);
 try
   timestep := GetTickCount();
   recset := ODBCConnect.Execute (queryStr);
   timestep := GetTickCount() - timestep;
   Memo1.Lines.Add('Query execution time = ms ' + IntToStr (timestep)
            + #13 + #10
            + 'Total de registros: ' + IntToStr(RECSET.RecordCount));
 except
   on E : EADOError do
     begin
      ShowMessage (E.Message);
      Exit;
     end;
   on E2 : Exception do
     begin
      ShowMessage ('Query failed : ' + E2.Message);
      Exit;
     end;
 end;

 try
   for Jx := 0 to SelCount - 1 do
    columnsList [Jx] := SelList[Jx];

  Jx := 0;

  RecLine := TStringList.Create;
  RecLine.Delimiter := ';';

  // Create MBA Object
  if Assigned (MBAObj) then
    MBAObj.Destroy;

  MBAObj := TMBAObj.Create;

  Memo1.Lines.add ('Lendo os registros... Por favor, aguarde...');
  timestep := GetTickCount();
  repeat
    Inc (Jx);
    auxStr := '';

   for Ix := 0 to recset.Fields.Count - 1 do
    begin
      auxStr := auxStr + columnsList [Ix] + '_' + trim(recset.Fields[Ix].Value) + ';';
    end;

   RecLine.DelimitedText := Copy(auxStr, 1, length(auxStr)-1);
7 Apêndice A


   MBAObj.FillAdjList (RecLine, 0);

    recset.Move (1, EmptyParam);
   until recset.EOF;
 except
   on E : Exception do
    begin
     ShowMessage ('Load result exception : ' + E.Message);
    end;
 end;
 timestep := GetTickCount() - timestep;
 Memo1.Lines.add ('Cálculo das relações durou ' + IntToStr (timestep) + 'ms ...');
 // ShowMessage ('Result Count = ' + inttostr(Jx));
 PrintRelations;
end;

end.


Unit MBAObject – MBAObject.pas

(*******************************************************************************
*      PONTIFICIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO - PUC-RIO
*
* Programa de Pós-Graduação em Informática - Mestrado
*
* Programa apresentado como requisito parcial para o cumprimento dos créditos da
* cadeira de Projeto Final de Programação (INF 2102).
*
* Aluna: Livia Fonseca Fracalanza
* Matricula : 0621292
* Orientador: Prof. Marco Antonio Casanova
*******************************************************************************)
unit MBAObject;

interface

uses
 SysUtils, Variants, Classes;

const
 M_WEIGHT = 1;
 AVERAGE = 2;

const
 INITIALWEIGHT = -999999999;

type
  TProduct = class(TObject)
   ID : string;
   Qtd : Integer;
   List : TStringList;
  private
   //
  public
   constructor Create;
   destructor Destroy;
  end;

type
7 Apêndice A


  TMBAObj = class
   private
    AdjList     : TStringList; // Has the relations between the elements of all the
transactions
    MaximumCliqueList : TStringList; // Represent the Maximum Clique found
    MaxCWt         : Double;

   function DestroyAdjList : Integer;
   function getResultAdjList: TStringList;
   function getMaximumCliqueList: TStringList;
  public
   constructor Create;
   destructor Destroy;

   procedure FillAdjList (Line : TStringList; Start : Integer);
   function Find_Clique(var Clique: TStringList; var Weight: Double; Criteria: Integer):
boolean;
   function FindTheMaximalClique(Criteria: Integer): boolean;

   property FAdjList : TStringList read getResultAdjList;
   property FMaximumCliqueList : TStringList read getMaximumCliqueList;
   property FMaxCliqueWeight : double read MaxCWt;
  end;

implementation
(******************************************************************************)
constructor TMBAObj.Create;
begin
  // Initialize List of Adjacencies
  AdjList := TStringList.Create;

  //Initialize the List that will have the Maximal Clique
  MaximumCliqueList := TStringList.Create;
end;
(******************************************************************************)
destructor TMBAObj.Destroy;
begin
  if Assigned(AdjList) then
    DestroyAdjList;

  if Assigned(MaximumCliqueList) then
    FreeAndNil (MaximumCliqueList);
end;
(******************************************************************************)
function TMBAObj.DestroyAdjList : Integer;
var
  i : Integer;
  prod : TProduct;
begin
  if Assigned (AdjList) then
    begin
      for i := AdjList.Count-1 downto 0 do
        begin
         if Assigned (AdjList.Objects[i]) then
           begin
             prod := TProduct(AdjList.Objects[i]);
             FreeAndNil(prod);
           end;
        end;
      FreeAndNil (AdjList);
Dissertação de mestrado_livia_versao_final
Dissertação de mestrado_livia_versao_final
Dissertação de mestrado_livia_versao_final
Dissertação de mestrado_livia_versao_final

Contenu connexe

En vedette

Nrcar interactive dyslipidaemia_poster
Nrcar interactive dyslipidaemia_posterNrcar interactive dyslipidaemia_poster
Nrcar interactive dyslipidaemia_poster
Elsa von Licy
 

En vedette (10)

Spyrogrip mantel isolatsioon
Spyrogrip mantel isolatsioonSpyrogrip mantel isolatsioon
Spyrogrip mantel isolatsioon
 
Kerst Kaart
Kerst KaartKerst Kaart
Kerst Kaart
 
PHD_diplom
PHD_diplomPHD_diplom
PHD_diplom
 
Porfolio 12
Porfolio 12Porfolio 12
Porfolio 12
 
Mspark, aug 16 trends monitor
Mspark,  aug 16 trends monitor Mspark,  aug 16 trends monitor
Mspark, aug 16 trends monitor
 
Certificates
CertificatesCertificates
Certificates
 
Las ventajas de ser invisible
Las ventajas de ser invisibleLas ventajas de ser invisible
Las ventajas de ser invisible
 
Nrcar interactive dyslipidaemia_poster
Nrcar interactive dyslipidaemia_posterNrcar interactive dyslipidaemia_poster
Nrcar interactive dyslipidaemia_poster
 
US Wine Industry Part 5 of 7
US Wine Industry Part 5 of 7US Wine Industry Part 5 of 7
US Wine Industry Part 5 of 7
 
Strategic Infrastructure: Steps to Operate and Maintain Infrastructure Effici...
Strategic Infrastructure: Steps to Operate and Maintain Infrastructure Effici...Strategic Infrastructure: Steps to Operate and Maintain Infrastructure Effici...
Strategic Infrastructure: Steps to Operate and Maintain Infrastructure Effici...
 

Similaire à Dissertação de mestrado_livia_versao_final

COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...
COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...
COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...
Leonardo Sepulcri
 
ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC.
ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC. ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC.
ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC.
Maurício Mau
 

Similaire à Dissertação de mestrado_livia_versao_final (20)

GESTÃO DE PROJETOS ÁGEIS: UMA ANÁLISE DOS PRINCIPAIS PORTAIS DE CONTEÚDO NA I...
GESTÃO DE PROJETOS ÁGEIS: UMA ANÁLISE DOS PRINCIPAIS PORTAIS DE CONTEÚDO NA I...GESTÃO DE PROJETOS ÁGEIS: UMA ANÁLISE DOS PRINCIPAIS PORTAIS DE CONTEÚDO NA I...
GESTÃO DE PROJETOS ÁGEIS: UMA ANÁLISE DOS PRINCIPAIS PORTAIS DE CONTEÚDO NA I...
 
Principios do Design de Interfaces aplicados a Busca
Principios do Design de Interfaces aplicados a BuscaPrincipios do Design de Interfaces aplicados a Busca
Principios do Design de Interfaces aplicados a Busca
 
Revisitando a Web 2.0 sob a ótica dos 4C's
Revisitando a Web 2.0 sob a ótica dos 4C'sRevisitando a Web 2.0 sob a ótica dos 4C's
Revisitando a Web 2.0 sob a ótica dos 4C's
 
ESTUDO DE CASOS SOBRE A APLICAÇÃO DA WEB SEMÂNTICA NAS REDES SOCIAIS
ESTUDO DE CASOS SOBRE A APLICAÇÃO DA WEB SEMÂNTICA NAS REDES SOCIAISESTUDO DE CASOS SOBRE A APLICAÇÃO DA WEB SEMÂNTICA NAS REDES SOCIAIS
ESTUDO DE CASOS SOBRE A APLICAÇÃO DA WEB SEMÂNTICA NAS REDES SOCIAIS
 
LIVRO PROPRIETÁRIO - CENÁRIOS DE TECNOLOGIA DA INFORMAÇÃO
LIVRO PROPRIETÁRIO - CENÁRIOS DE TECNOLOGIA DA INFORMAÇÃOLIVRO PROPRIETÁRIO - CENÁRIOS DE TECNOLOGIA DA INFORMAÇÃO
LIVRO PROPRIETÁRIO - CENÁRIOS DE TECNOLOGIA DA INFORMAÇÃO
 
Monografia de Trabalho de Graduação apresentada ao Centro de Informátic...
Monografia  de  Trabalho  de  Graduação  apresentada ao Centro de  Informátic...Monografia  de  Trabalho  de  Graduação  apresentada ao Centro de  Informátic...
Monografia de Trabalho de Graduação apresentada ao Centro de Informátic...
 
419_O-modelo-de-redes-colaborativasivas.pdf
419_O-modelo-de-redes-colaborativasivas.pdf419_O-modelo-de-redes-colaborativasivas.pdf
419_O-modelo-de-redes-colaborativasivas.pdf
 
Orientação Profissional Trabalho de Conclusão
Orientação Profissional Trabalho de ConclusãoOrientação Profissional Trabalho de Conclusão
Orientação Profissional Trabalho de Conclusão
 
A eficácia do uso dos métodos de previsão quantitativos x métodos qualitativo...
A eficácia do uso dos métodos de previsão quantitativos x métodos qualitativo...A eficácia do uso dos métodos de previsão quantitativos x métodos qualitativo...
A eficácia do uso dos métodos de previsão quantitativos x métodos qualitativo...
 
COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...
COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...
COMPREENDENDO A COMPUTAÇÃO AUTONÔMICA NO AMBIENTE DE TECNOLOGIA DA INFORMAÇÃO...
 
Modelo de pre projeto de monografia
Modelo de pre projeto de monografiaModelo de pre projeto de monografia
Modelo de pre projeto de monografia
 
Dissertação google inc act on general strike suzart Attain to cpf 051 812 95...
Dissertação  google inc act on general strike suzart Attain to cpf 051 812 95...Dissertação  google inc act on general strike suzart Attain to cpf 051 812 95...
Dissertação google inc act on general strike suzart Attain to cpf 051 812 95...
 
Tcc - Work control
Tcc - Work controlTcc - Work control
Tcc - Work control
 
Wellington Vasconcelos - Priorização de requisitos
Wellington Vasconcelos - Priorização de requisitosWellington Vasconcelos - Priorização de requisitos
Wellington Vasconcelos - Priorização de requisitos
 
O papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-modernoO papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-moderno
 
TDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data ScienceTDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data Science
 
2010: Computação Natural e Aplicações
2010: Computação Natural e Aplicações2010: Computação Natural e Aplicações
2010: Computação Natural e Aplicações
 
ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC.
ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC. ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC.
ESTUDO PARA FUTURA IMPLANTAÇÃO DO PACOTE DE APLICATIVOS BROFFICE.ORG NO TRE-SC.
 
Ii seminário big data brasil
Ii seminário big data brasilIi seminário big data brasil
Ii seminário big data brasil
 
Aula 00 (1)
Aula 00 (1)Aula 00 (1)
Aula 00 (1)
 

Dernier

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Dernier (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

Dissertação de mestrado_livia_versao_final

  • 1. Livia Fonseca Fracalanza Mineração de Dados voltada para Recomendação no Âmbito de Marketing de Relacionamento Dissertação de Mestrado Dissertação apresentada como requisito parcial para obtenção do título de Mestre pelo Programa de Pós- Graduação em Informática da PUC-Rio. Orientador: Prof. Marco Antonio Casanova Rio de Janeiro Maio de 2009
  • 2. Livia Fonseca Fracalanza Mineração de Dados voltada para Recomendação no Âmbito de Marketing de Relacionamento Dissertação apresentada como requisito parcial para obtenção do título de Mestre pelo Programa de Pós- Graduação em Informática da PUC-Rio. Aprovada pela Comissão Examinadora abaixo assinada. Prof. Marco Antonio Casanova Orientador PUC-Rio Prof Antonio Luz Furtado PUC-Rio Profª. Karin Koogan Breitman PUC-Rio Prof. José Eugenio Leal Coordenador Setorial do Centro Técnico Científico - PUC-Rio Rio de Janeiro, 02 de abril de 2009.
  • 3. Todos os direitos reservados. É proibida a reprodução total ou parcial do trabalho sem autorização da universidade, da autora e do orientador. Livia Fonseca Fracalanza Bacharel em Informática com ênfase em Análise de Sistemas graduada pela Pontifícia Universidade Católica do Rio de Janeiro em julho de 2006. Atualmente trabalha gerenciando projetos e participa no desenvolvimento de softwares de Business Inteligence. Ficha Catalográfica Fracalanza, Livia Fonseca Mineração de dados voltada para recomendação no âmbito de marketing de relacionamento / Livia Fonseca Fracalanza ; orientador: Marco Antonio Casanova. – 2009. 59 f. : il. (col.) ; 30 cm Dissertação (Mestrado em Informática)–Pontifícia Universidade Católica do Rio de Janeiro, Rio de Janeiro, 2009. Inclui bibliografia 1. Informática – Teses. 2. Market basket analysis. 3. Mineração de dados. 4. Problema do clique máximo. I. Casanova, Marco Antonio. II. Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. III. Título.
  • 4. Agradecimentos Agradeço à minha família pelo apoio de sempre, por torcerem por mim e pelo amor incondicional. Todos os meus amigos foram muito importantes nessa fase da minha vida, mas em especial gostaria de agradecer ao João Rafael Peixoto Leite, amigo desde graduação, pois sem seu incentivo, paciência e carinho, este trabalho não teria começado e hoje o título de mestre ainda seria um sonho. Agradeço ao meu orientador, Marco Antonio Casanova, por entender o quão difícil é estar no mercado de trabalho louco e acelerado e ao mesmo tempo decidir fazer mestrado. Obrigada por ter acreditado na minha capacidade, pela paciência e pela orientação. Por último, porém não menos importante, obrigada a todos os meus companheiros da Stone Age Tech pelo apoio moral e incentivo.
  • 5. Resumo Fracalanza, Livia Fonseca; Casanova, Marco Antonio; Mineração de Dados voltada para Recomendação no Âmbito de Marketing de Relacionamento. Rio de Janeiro, 2009. 57p. Dissertação de Mestrado - Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro. Cross-selling é uma estratégia de vendas de produtos baseada em uma análise das compras passadas de um cliente ou nas compras passadas de outros clientes com o mesmo perfil. O algoritmo mais conhecido para análise da cesta de compras de um cliente é conhecido por market basket analysis. Este trabalho aborda a descoberta de padrões seqüenciais em grandes bases de dados e tem por objetivo apresentar um algoritmo eficiente que transforma o problema da cesta de compras em um problema de clique máximo. Primeiramente, os dados de entrada são transformados em um grafo e o problema da descoberta do clique máximo é resolvido revelando as relações mais recorrentes entre os itens em questão. Os experimentos apresentados na dissertação demonstram a eficiência do algoritmo em grandes volumes de dados. Palavras-chave 1. Informática – Teses; 2. Market basket analysis, 3. mineração de dados 4. problema do clique máximo
  • 6. Abstract Fracalanza, Livia Fonseca; Casanova, Marco Antonio;. Recommendation based on Data Mining for Relationship Marketing. Rio de Janeiro, 2009. 57p. MSc. Dissertation - Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro. Cross-selling is a strategy to recommend products to customers based on their past purchases or the purchases of other customers with the same profile. The best known algorithm for the analysis of a client shopping basket is known in the literature as market basket analysis. This dissertation discusses the discovery of sequential patterns in large databases and aims at implementing an efficient algorithm that transforms the shopping cart problem into a maximum clique problem. First, input data is transformed into a graph and maximum cliques are detected to discover the most frequent relationship between the items on the transaction. The dissertation also includes experiments that evaluate the efficiency of the algorithm for large data volumes. Keywords 1. information science – thesis; 2. Market basket analysis; 3. data mining; 4. maximum clique problem
  • 7. Sumário 1 Introdução 10 1.1. Motivação 11 1.2. Objetivos 11 1.3. Trabalhos Relacionados 12 1.4. Organização do Trabalho 13 2 Mineração de Dados 15 2.1. Processo de Busca de Conhecimento 15 2.2. Tipos de Predição 17 2.2.1. Classificação 17 2.2.2. Segmentação 18 2.2.3. Regressão 18 2.2.4. Associação 18 2.3. Técnicas de Mineração de Dados 18 2.3.1. Algoritmo Genético 19 2.3.2. Redes Neurais 19 2.3.3. Árvores de Decisão 19 2.3.4. Regras de Associação 19 2.3.5. Análise de Vizinhança 20 2.4. Aplicações 20 3 Market Basket Analysis - MBA 21 3.1. Marketing de Relacionamento 22 3.2. Regras de Associação 23 3.3. Algoritmos de MBA 24 3.3.1. Artificial Immune System 25 3.3.2. Set-oriented Mining 25 3.3.3. Algoritmo Apriori 26 3.4. Implementação baseada em Grafo 27 3.4.1. Conceitos de Grafos 27 3.4.2. Montando a Matriz de Adjacências 29
  • 8. 3.4.3. Buscando a Clique de Tamanho Máximo 29 4 Testes e Resultados 31 4.1. Descrição do Ambiente de Testes – Protótipo 31 4.2. Testes 34 5 Conclusão e Trabalhos Futuros 40 5.1. Conclusões 40 5.2. Trabalhos Futuros 41 6 Referências 43 7 APÊNDICE A – Código da Implementação 45
  • 9. Lista de figuras Figura 1 Etapas para descoberta de conhecimento 16 Figura 2 Iteratividade entre Funcionalidades, Técnicas e Algoritmos de Mineração de Dados 17 Figura 3 Exemplo de iteração do algoritmo AIS 25 Figura 4 Exemplo de iteração do algoritmo SETM 26 Figura 5 Exemplo de iteração do algoritmo Apriori 27 Figura 6 Exemplo de clique máxima 28 Figura 7 Protótipo: escolha do conector ODBC 32 Figura 8 Protótipo: Autenticação no ODBC 32 Figura 9 Protótipo: Escolha da base de dados 33 Figura 10 Protótipo: Inclusão de filtro na consulta 33 Figura 11 Protótipo: Exibição das informações relevantes 34
  • 10. 1 Introdução 1 Introdução A digitalização da sociedade juntamente com a difusão da Internet e a globalização trazem a necessidade de maior agilidade e rapidez para os processos de negócio, principalmente no que se refere aos sistemas de tomada de decisão. Além disso, podemos observar um aumento significante na quantidade de dados armazenados pelas empresas, pois as informações assumiram um papel indispensável e vital para a sobrevivência das empresas no mercado. Entretanto, é necessária a existência de processos que possibilitem extrair destes dados o conhecimento necessário para a gestão e a tomada de decisões, caso contrário são apenas um conjunto de dados que não trazem nenhum benefício para a corporação. Nesse sentido, surgem os sistemas do tipo data warehouse – ou armazém de dados – para auxiliar no armazenamento dos dados e facilitar a análise para a tomada de decisões. Estes passam a ser realidade, principalmente, nas grandes corporações. Data warehouse é um termo amplamente utilizado nos dias de hoje para definir um ambiente de sistemas de informação que tem por objetivo auxiliar os usuários de níveis gerenciais. É uma “fotografia” dos dados em determinando período de tempo, integrados por uma combinação de tecnologias e orientados a assunto. Composto por uma coleção de tecnologias de suporte a análise de decisão, tem por responsabilidade o armazenamento dos dados que ao longo do tempo se proliferaram. A análise dos dados contidos em uma data warehouse é realizada por vários tipos de ferramentas, sendo OLAP (On Line Analytical Processing) a mais simples e mais utilizada. A tecnologia em questão compreende Sistemas Gerenciadores de Banco de Dados com visões relacionais ou multidimensionais dos dados, facilidades para acesso dos dados, arquitetura cliente-servidor, interfaces gráficas de usuários, dentre outras. Com o aumento do volume de dados nas empresas e a diminuição do tempo para resposta às mudanças, o uso da data warehouse se fez necessário para atender à necessidade de integração dos sistemas voltados para o nível gerencial com dados que nunca ou raramente são alterados. Os sistemas transacionais do nível operacional lidam com os dados “ativos” espelhando as operações de negócio da empresa. Os dados estáveis da data warehouse ajudam a compor séries históricas, apoiando o trabalho de análise ao longo de determinado período.
  • 11. 1 Introdução 11 Geralmente, os dados armazenados em uma data warehouse são apenas consultados, sendo agregados para fins de estudo e tomadas de decisão. As aplicações que utilizam esses dados são classificadas como sistemas de informação gerencial, sistemas de informação para executivos ou sistemas de suporte à decisão. Além disso, é possível a manipulação de grandes quantidades de dados armazenadas a fim de encontrar padrões implícitos entre os mesmos, possibilitando a previsão de informações/situações futuras. 1.1. Motivação O mercado de business intelligence, ao qual as data warehouse pertencem, está em grande e constante expansão fomentando a pesquisa e desenvolvimento de ferramentas melhores e mais sofisticadas. Cabe ressaltar que a chave do processo de busca de conhecimento é a mineração de dados (ou data mining), entendida como tarefas e técnicas dedicadas à exploração de grandes quantidades de dados à procura de regras de associação, relacionamentos entre variáveis, classificação de itens, dentre outras atividades. Do ponto de vista de negócio, os padrões que, eventualmente, estão escondidos entre uma grande quantidade de dados podem ser extremamente valiosos e úteis. Nas empresas, cada vez mais os diferentes setores procuram por ferramentas que possam auxiliá-los a maximizar os ganhos e minimizar as perdas. Por exemplo, a aplicação prática de mineração de dados no cenário de CRM (Customer Relationship Management) é bastante interessante, uma vez que as empresas estão aumentando o foco no cliente, conhecendo-o individualmente com o intuito de oferecer-lhe mais produtos, cada vez mais adequados e até mesmo personalizados. Dentro deste contexto, a eficiência e eficácia da adesão de novos clientes e da fidelidade dos antigos dependem do sucesso do processo de descobrimento de padrões, incluindo a mineração de dados. 1.2. Objetivos Este trabalho tem por objetivo estudar e propor melhorias em algoritmos de recomendação de produtos com o intuito de auxiliar na descoberta de padrões de consumo e, assim, melhorar a relação das empresas com seus clientes. Para atingir o objetivo central, duas etapas serão seguidas:
  • 12. 1 Introdução 12 Estudar o processo de descoberta de conhecimento em data warehouses; Executar testes com grandes volumes de dados. 1.3. Trabalhos Relacionados Para encaminhar o problema de recomendação de produtos, inúmeras soluções têm sido propostas. Esta seção apresenta brevemente alguns trabalhos relacionados que serviram de inspiração e fontes de informação para o desenvolvimento desta e dissertação. Em [11] são discutidas as oportunidades de se construir um melhor relacionamento com clientes, aumentando a frequência das compras e consequentemente aumentando o lucro. Para que seja possível identificar padrões e possibilitar a recomendação de produtos e serviços é de suma importância para as operações de venda manter o histórico das transações com o máximo de detalhes possível, como quantidade, valores, tipo de pagamento, as respostas aos estímulos de marketing, etc. Suas análises ficam facilitadas com a utilização de técnicas de mineração de dados, como regras de associação, que buscam automaticamente padrões nos dados, gerando modelos de comportamento. Neste trabalho, cada cliente é classificado com uma pontuação (score) que representa a probabilidade de resposta positiva ao estímulo posto no modelo, auxiliando o profissional de marketing a focar mais precisamente no público alvo de suas campanhas. Santos [12] descreve a aplicação das técnicas de mineração de dados na gestão de relacionamento com clientes. Como estudo de caso, foi apresentado um sistema desenvolvido com o intuito de apoiar as decisões na área de vendas, auxiliando na recomendação de produtos que viessem a ser de interesse do consumidor em questão. O usuário escolhe um ou mais produtos que serão confrontados com um ou mais produtos também à escolha do usuário e, assim, o sistema tenta determinar regras de associação entre os itens selecionados. Ao concluir, o autor comenta que as regras de associação são uma técnica de mineração de dados de simples implementação, mas fornece conhecimentos importantes sobre os hábitos dos clientes. Adomavicius e Tuzhilin [14] fazem uma pesquisa sobre o estado da arte de sistemas de recomendação e chegam à conclusão de que, mesmo tendo avançado muito nessa última década, esse tipo de sistema ainda apresentam limitações que precisam ser superadas. Dentro desse contexto, ações como melhoria na modelagem dos itens e usuários, incorporação de informação contextual no processo de recomendação suporte à sugestões por multicritérios e a criação de um sistema mais flexível e menos invasivo são apontadas como sendo as principais.
  • 13. 1 Introdução 13 Burke [15] define três tipos de sistemas de recomendação: (i) sistemas colaborativos são aqueles em que as recomendações são baseadas nas preferências dos outros usuários; (ii) sistemas baseados no conteúdo são aqueles que classificam as informações baseados em aprendizado de máquina e sugerem baseados nas escolhas anteriores do usuário; (iii) sistemas baseados no conhecimento (knowledge-based systems) dos usuários oferecem produtos que atendem aos requisitos do usuário, como cidade, preferências por comida, entre outros. Além disso, é esclarecido que sistemas de recomendação precisam ser inicializados com grandes quantidades de dados, pois caso contrário as previsões e sugestões não serão eficientes como esperado. Com isso, confronta-se o problema de que, quando há muitos usuários com hábitos conhecidos, o sistema não é tão útil; mas, se estiver com uma grande quantidade de itens avaliados, pode não ser preciso para um usuário em particular. Sistemas baseados no conteúdo apresentam um problema parecido: bons classificadores “aprendem” depois que muitos itens foram avaliados e alguns procuram resolver esse problema fazendo uso de algoritmos classificadores baseados na similaridade com os dados da vizinhança, causando a limitação de sugerir itens que sejam similares aos itens previamente avaliados. Nessa linha, e baseado em uma série de exemplos de protótipos, o autor defende os sistemas de recomendação baseados em conhecimento como sendo mais valiosos que os outros, pois sua recomendação não depende das avaliações de usuários e suas tomadas de decisão são independentes do gosto do mesmo. Mas, além disso, discute em cima de um de seus exemplos (FindMe) que sistemas híbridos de recomendação podem ser criados combinando diferentes técnicas. Middleton et al. [16] defendem que os sistemas de recomendação podem ajudar na melhoria das buscas na Internet, onde existe uma grande quantidade de páginas com dados não-estruturados e onde, neste cenário, as ferramentas de busca são efetivas apenas quando as páginas atendem às chaves das consultas explicitamente. No decorrer do artigo, os autores descrevem o sistema Quickstep, criado utilizando ontologias durante o processo de profiling e, baseados nos testes, concluem que os resultados dos usuários que usaram o sistema com ontologias foram mais precisos, recomendando itens que atendiam mais aos interesses dos usuários e que não eram diretamente sugeridos. 1.4. Organização do Trabalho Este trabalho está organizado da seguinte forma. O Capitulo 2 apresenta o conceito de Mineração de Dados, cenário no qual esta pesquisa se enquadra. O Capitulo 3 detalha melhor a técnica Market Basket Analysis, foco deste estudo. O Capitulo 4 descreve o protótipo criado para testar a técnica de Market Basket Analysis e apresenta
  • 14. 1 Introdução 14 os resultados dos testes. Por fim, o Capítulo 5 apresenta as conclusões e indica algumas linhas de pesquisa a serem desenvolvidas a partir do conteúdo exposto neste trabalho.
  • 15. 2 Mineração de Dados 2 Mineração de Dados A mineração de dados, ou data mining, é uma das principais etapas do processo de busca de conhecimento. Este conceito é utilizado para identificar técnicas avançadas de análise dos dados, que podem ou não utilizar a inteligência artificial, refinando os dados em busca de padrões nos dados através de um modelo do mundo real. Essas técnicas são apenas uma parte do processo de busca de conhecimento dentro de um banco de dados, em que o objetivo maior é obter regras e padrões que se aplicam aos dados. Normalmente, as técnicas de mineração de dados são aplicadas em dados armazenados em uma data warehouse (DW) ou em um data mart, mas também é possível aplicá-las em dados operacionais. Os resultados da mineração de dados podem ser usados em tomadas de decisão, em gerenciamento de informações, controle de processo, dentre outros. Sua aplicação pode ser em um processo de verificação onde o usuário tenta provar sua hipótese acerca da relação entre os dados ou como um processo de descoberta de padrões, fazendo uso de técnicas como redes neurais, algoritmos genéticos, regras de associação, árvores de decisão, regressão, entre outros. 2.1. Processo de Busca de Conhecimento (KDD) O avanço da tecnologia tanto no âmbito do hardware quanto do software permitiu que a capacidade de armazenamento e processamento de dados crescesse em velocidade muito grande. A análise manual ou semi-automática de grandes volumes de dados tornou-se impraticável, prejudicando a tomada de decisão. Nesse sentido, a aplicação de métodos que facilitem este processo se faz muito importante nos dias de hoje. O processo de busca de conhecimento em banco de dados também é conhecido como KDD – Knowledge Discovery and Data Mining, cujo objetivo segundo Fayyad et. al [4] “(...) é a extração de conhecimento de alto nível a partir de dados de baixo nível disponíveis em grandes bancos de dados (...) processo não trivial de identificação, a partir de dados, de padrões que sejam válidos, novos, potencialmente úteis e compreensíveis (...)”. Em outras palavras, o KDD é o processo de extração de conhecimento de grandes bases de dados, convencionais ou não.
  • 16. 2 Mineração de Dados 16 Fayyad et. al [4] divide o processo de KDD em seis passos: i. Preparação dos Dados: consiste em incluir o conhecimento relevante para a aplicação além de definir quais as metas que o processo precisa atingir. ii. Limpeza dos Dados: consiste em retirar os dados que possam distorcer a análise. Assim, utiliza estratégias para remover ruídos, tratar atributos perdidos e até mesmo métodos de transformação para diminuir o número de variáveis envolvidas no processo, visando com isto melhorar o desempenho do algoritmo de análise. iii. Seleção de Dados: consiste em escolher sobre qual conjunto ou subconjunto de dados em que o processo será aplicado. iv. Data Mining: consiste em decidir qual tarefa de data mining será aplicada para atingir os objetivos do processo e qual a melhor técnica a ser utilizada (ver seção 3). v. Incorporação do conhecimento anterior: consiste em interpretar o modelo descoberto a fim de verificar sua acuracidade em busca de melhorias, possibilitando o retorno para qualquer etapa anterior do processo, retirando padrões redundantes ou irrelevantes. vi. Interpretação dos resultados: neste ponto o resultado obtido é incorporado ao sistema possibilitando a tomada de ações baseadas no conhecimento ou documentando-os e relatando-o às partes interessadas. Em particular, o passo da mineração de dados utiliza técnicas de inteligência artificial que procuram relações de similaridade ou discordância entre dados com o objetivo de encontrar, automaticamente, padrões, anomalias e regras, focando em transformar dados, aparentemente ocultos, em informações úteis para a tomada de decisão ou avaliação de resultados. Figura 1 Etapas para busca de conhecimento
  • 17. 2 Mineração de Dados 17 2.2. Tipos de Predição Por tipos de predição entende-se os tipos de relacionamento que estabelecemos entre os dados para a obtenção de conhecimento. Sabendo a que resultado se deseja chegar, é fácil identificar a tarefa de mineração que mais auxiliará o processo de busca de uma solução para o problema. Para atender aos objetivos e gerar resultados esperados, há uma coleção de técnicas que podem ser utilizadas; cada técnica possui ainda uma gama de algoritmos que irão, efetivamente, manipular os dados. A Figura 2 a seguir, extraída de [20], ilustra a iteratividade entre funcionalidades, técnicas e algoritmos de mineração de dados. O resto desta seção discute tipos de predição de dados. Figura 2 Iteratividade entre Funcionalidades, Técnicas e Algoritmos de Mineração de Dados 2.2.1. Classificação Categorizar os clientes de acordo com seu perfil de compras é um exemplo de tarefa de classificação. Um modelo de classificação é criado e os atributos dos registros (no caso do exemplo acima, clientes) são analisados de acordo com as condições e
  • 18. 2 Mineração de Dados 18 características das classes pré-determinadas pelo modelo. Caso esses atributos casem, o registro é então classificado na classe em que melhor se encaixa. 2.2.2. Segmentação Essa tarefa é mais conhecida como clustering e se diferencia da classificação porque não pressupõe a existência de classes pré-definidas. Os registros são agrupados de acordo com a semelhança nos seus atributos, segmentando-os em clusters (subgrupos homogêneos) baseando-se no princípio de que os registros classificados em um grupo devem ser homogêneos entre si, e que os grupos devem ser heterogêneos entre si. 2.2.3. Regressão Estimar um acontecimento ou um padrão não é uma tarefa simples. Esse é o objetivo da regressão: prever padrões para uma variável de valor contínuo, com base nos outros atributos disponíveis e nas outras ocorrências disponíveis para análise. 2.2.4. Associação Através da associação é possível identificar transações que sempre ocorrem em conjunto. Na literatura também é conhecida como grupos de afinidade ou análise de cesta. O exemplo clássico da literatura é o MBA (Market Basket Analysis), que busca encontrar padrões nos produtos em um carrinho de compras através de regras de associação. Esse estudo auxilia as lojas a encontrar a melhor maneira de organizar seus produtos, de modo que a disposição deles nas prateleiras estimule as compras dos clientes. 2.3. Técnicas de Mineração de Dados As técnicas de mineração de dados são os fundamentos computacionais que possibilitam a construção dos algoritmos que realizarão a busca por padrões nos dados. Diversas técnicas podem ser utilizadas para atender a uma tarefa de mineração de dados. Entretanto, cada técnica possui características específicas e é necessário ter o conhecimento do funcionamento e do objetivo das mesmas para interpretar os resultados obtidos. No resto desta seção listamos algumas técnicas de mineração de dados.
  • 19. 2 Mineração de Dados 19 2.3.1. Algoritmo Genético Simulando o processo natural da evolução, os algoritmos genéticos (AG’s) têm por objetivo realizar a busca e a otimização da descoberta de padrões. Diferentemente dos métodos convencionais de mesmo objetivo, os AG’s trabalham simultaneamente em conjuntos de soluções diferentes, realizando pesquisas adaptativas nos dados [20], modelando uma solução para um problema específico em estruturas de dados que são semelhantes a um cromossomo. Operadores são aplicados recombinando essas estruturas, gerando assim novas combinações de regras de associação. Essa técnica é utilizada na classificação e na segmentação de dados, formulando hipóteses sobre a dependência dos atributos dos dados; com operadores de mutação e cruzamento desenvolvem várias mutações para a solução do problema. Ao longo do tempo, o algoritmo tende a “aprender” e a se aperfeiçoar, de maneira que somente as soluções com maior poder de acerto na previsão são aceitas. 2.3.2. Redes Neurais A técnica de Redes Neurais é bastante utilizada em tarefas de classificação, regressão e segmentação. Os dados são trabalhados com base no funcionamento do cérebro humano, aprendendo a tomar decisões baseadas nas experiências anteriores – nas instâncias anteriores dos dados. Os neurônios do cérebro são representados por nodos que estão conectados em outros nodos por sinapses, formando uma rede de processamento. Os valores das entradas são multiplicados nos neurônios pelos pesos de suas sinapses, conforme vão caminhando na rede. Ao final, temos a classificação ou a previsão da entrada. 2.3.3. Árvores de Decisão As árvores de decisão têm como objetivo principal dividir as instâncias em classes. Cada nó da árvore testa o domínio de uma variável da entrada e o redireciona para o nó seguinte. Cada sub-árvore representa o resultado de um teste e a folha é a classificação que aquele registro recebeu. Ao final, cada nó terminal terá os registros da entrada que se adéquam às regras regidas por esse nó, representando assim, uma classe. 2.3.4. Regras de Associação Basicamente, as regras de associação são definidas por uma correlação estatística entre alguns atributos da entrada com o objetivo de descobrir relações que
  • 20. 2 Mineração de Dados 20 ocorrem em comum dentro de um conjunto de dados. Cada registro é visto como uma transação e cada variável como um item dessa transação, deixando subentendido que a presença de um item implica necessariamente na presença de outro na mesma transação. Esse conceito será mais detalhado na Seção 3.1 2.3.5. Análise de Vizinhança Através de uma função definida para determinar a “distância“ entre duas instâncias, ou seja, de uma função para identificar um conjunto de registros que estão próximos por determinada característica, essa técnica é empregada em análise de prognósticos e não para descoberta de conhecimento. Não é muito explorada na literatura. 2.4. Aplicações Além da aplicação no campo dos profissionais de marketing, auxiliando na busca de padrões para melhorar o processo de recomendação e alavancar as vendas, as técnicas de data mining podem ser utilizadas em: (i) redes de telecomunicações, para evitar fraudes em ligações pré- ou pós-pagas, detecção de falhas, dimensionamento de sistemas; (ii) saneamento básico, detectando fraudes em ligações de água; (iii) monitoramento ambiental, para prevenção de desequilíbrios; (iv) na indústria, prevendo a demanda, planejando a produção; (v) na educação, auxiliando na identificação da evasão escolar; (vi) na medicina, atuando no diagnóstico e prevenção de doenças, fraudes de plano em planos de saúde; (vii) no comércio, definindo o perfil do consumidor, segmentando o mercado, sugestão de produtos, entre vários outros campos de atuação; (viii) no âmbito financeiro, ajudando no combate as fraudes de cartão de crédito, análise de investimentos e de crédito.
  • 21. 2 Mineração de Dados 3 Market Basket Analysis - MBA Market basket analysis (MBA) ou, em português, análise da cesta de compras, é uma técnica de data mining que faz uso de regras de associação para identificar os hábitos de compra dos clientes, fornecendo uma visão da combinação de produtos dentro das cestas de compras dos clientes analisados. Conhecer o perfil de compra do público-alvo é muito importante para aumentar o potencial de recomendação, ajudando a melhorar as vendas. O termo cesta, normalmente, se aplica a uma única ordem de compra. No entanto, a análise admite outras variações como, por exemplo, todas as compras de um determinado cliente. O caso clássico citado na literatura é o da rede de supermercados americana, WalMart. Foi descoberta a relação de compra entre uma marca de fraudas e uma marca de cerveja, quando as compras eram realizadas por homens nas sextas- feiras ao fim do dia. A análise da relação mostrou que as esposas pediam para os maridos trazer as fraudas para o fim-de-semana quando saíssem do trabalho e eles aproveitavam e levavam a cerveja para relaxar durante os dois dias sem trabalho. Tendo esse precioso conhecimento em mãos, o gerente decidiu colocar as fraudas perto das cervejas e com isso as vendas aumentaram ainda mais, pois os homens que não compravam cerveja passaram a comprar. A entrada de dados para essa técnica é um conjunto de transações correspondendo a compras de vários clientes. As transações são representadas em uma tabela onde cada linha corresponde a uma venda e cada coluna a um produto adquirido. A cesta de compras de um cliente é composta por itens que foram adquiridos na mesma compra, ignorando-se a quantidade e o preço de cada item. Apesar de a nomenclatura market basket analysis evocar uma imagem de carrinhos de compras e supermercados, cabe mencionar que existem outras áreas em que essa abordagem pode ser empregada como, por exemplo, análise de compras em cartão de crédito, análise de padrões em chamadas telefônicas, análise de compra de serviço telefônico, dentre outras aplicações.
  • 22. 3 Market Basket Analysis – MBA 22 3.1. Marketing de Relacionamento No varejo, a maior parte das compras é realizada por impulso. A técnica de Market Basket Analysis dá pistas a cerca do que um cliente poderia ter comprado se alguma sugestão interessante lhe fosse feita. Em um primeiro momento, pode-se considerar que esta técnica tem aplicações na reorganização da localização dos itens dentro de uma loja, bem como promoções para estimular a compra. Entretanto, é possível também comparar resultados entre filiais ou entre grupos de clientes em lugares demográficos distintos ou analisar as compras em função da época do ano. Assim, caso se observe que uma regra vale em uma loja, mas não prevalece em nenhuma outra, é porque há algo de interessante com esta que a torna tão diferente das outras. Investigar essas diferenças pode render algumas sugestões úteis para melhorar as vendas da companhia. Marketing de relacionamento pode ser definido como “uma estratégia de marketing que visa construir uma relação duradoura entre cliente e fornecedor, baseada em confiança, colaboração, compromisso, parceria, investimentos e benefícios mútuos” [20] onde os clientes importantes precisam receber atenção contínua. É importante ter uma relação duradoura e de confiança com os consumidores, conhecendo-os a fim de cativá-los ainda mais, estimulando o consumo de mais e novos produtos e serviços com o objetivo da organização conquistar uma fatia maior do mercado. Atualmente, as empresas estão se conscientizando da necessidade e da importância de intensificar o foco no marketing de relacionamento para crescer e se manter no mercado [21]. Administrar o relacionamento com o cliente ajuda a empresa a adquirir vantagem competitiva frente à concorrência. Apesar de muito investimento ainda ser feito na conquista de novos clientes, já existe uma percepção maior de que é possível melhorar a rentabilidade vendendo produtos e serviços para os clientes atuais. O termo cross-selling é traduzido na literatura como “venda casada de produtos” e tem por definição a prática de vender produtos ou serviços adicionais para um cliente já conquistado, objetivando o aumento das vendas. Nesse contexto, a técnica de market basket analysis baseia-se na chave cliente-item para identificar a cesta de compras com os N itens que aparecem juntos mais frequentemente em transações. A partir do conhecimento das cestas mais frequentes, torna-se fácil partir para o cross-selling, sugerindo itens que possam ser de interesse de um cliente com determinado perfil de compra identificado.
  • 23. 3 Market Basket Analysis – MBA 23 Em resumo, para auxiliar nas tomadas de decisão em aplicações de marketing, o MBA é uma técnica poderosa que suporta a implementação de estratégias de cross- seling. 3.2. Regras de Associação A análise de compras e registros de produtos tipicamente usa regras de associação representando os padrões de relacionamento encontrados entre os itens de dados do conjunto analisado. Em bases de dados onde os registros são transações, estas regras são conhecidas como regras de associação transacionais, enquanto no caso de bases de dados onde os registros representam clientes, contas, produtos, serviços e outros, as mesmas envolvem múltiplos atributos e, por isso, são chamadas de regras de associação multidimensional. No âmbito da venda casada de produtos, ou cross-selling, as regras de associação permitem que uma loja possa recomendar o produto B para um cliente comprando o produto A, uma vez que ela conhece a regra, por exemplo, de que 30% dos seus clientes que compram A também compram B. Assim, o cliente é incentivado a comprar mais produtos, que eventualmente possam interessá-lo, baseado em características de consumo de compras anteriores no sistema,. Assim, não só a quantidade de vendas é maximizada, mas também a quantidade de vendas de determinado produto. Regras de associação foram introduzidas em [25] da seguinte forma. Sejam I = {i1, i2, ..., im} um conjunto de m itens distintos e D uma base de dados formada por um conjunto de transações, onde cada transação T é composta por um conjunto de itens tal que T ⊆ I. Uma regra de associação é uma expressão do tipo X → Y onde X ⊆ I, Y ⊆ I, X ≠ Ø, Y ≠ Ø e X ∩ Y = Ø, ou seja, tanto o antecedente (X), quanto o conseqüente (Y) de uma regra de associação podem ser formados por conjuntos contendo um ou mais itens, mas não podem ser vazios e são conjuntos independentes já que não possuem itens em comum. Por exemplo: {Cerveja, Faldas} → {Leite} {Cerveja, Leite} → {Fraldas} {Fraldas, Leite} → {Cerveja} {Cerveja} → {Fraldas, Leite} {Leite} → {Cerveja, Fraldas} {Fraldas} → {Cerveja, Leite}
  • 24. 3 Market Basket Analysis – MBA 24 A importância de uma regra de associação pode ser medida em termos de suporte e confiança. O suporte de uma regra determina com qual frequência uma regra é aplicada a um conjunto de dados, ou seja, a probabilidade do primeiro termo da implicação ser verdade. Já a confiança de uma regra determina o quão frequente os itens em Y aparecem nas transações que contém X. No exemplo anterior, a probabilidade de um cliente comprar cerveja e fraldas (ou seja, o termo X ser verdadeiro) é referida como o suporte, enquanto a probabilidade condicional de um cliente comprar leite, dado que comprou cerveja e fralda, é referida como a confiança. O problema da mineração de regras de associação consiste em encontrar todas as regras de associação que possuam suporte e confiança maiores ou iguais, respectivamente, a um suporte mínimo (SupMin) e uma confiança mínima (ConfMin), especificados pelo usuário. De fato, por muito tempo, a busca por regras de associação foi de interesse exclusivo de aplicações que lidassem com informação de cestos de compra (market baskets), o que levou esta técnica a ser comumente chamada de market basket analysis (MBA). No entanto, podemos ver que regras de associação podem ser extraídas de qualquer base de dados onde existam relacionamentos implícitos entre os diferentes atributos. A utilidade destas regras não está somente na geração de novo conhecimento, mas também na confirmação de regras de negócio que são utilizadas, mas que nunca foram comprovadas. Sendo assim, regras de associação aplicam-se a diversas áreas de negócio como, por exemplo, estudo dos acessos a computadores, busca de novos clientes, recenseamento de população e análise de informação médica, dentre outros. A descoberta de padrões através da análise das regras de associação é um importante para suporte à tomada de decisão. Com essas informações, um gestor pode identificar novas oportunidades de negócio, conhecer melhor seus clientes e seus perfis de compra, identificar produtos que influenciam na venda de outros, além de diversas outras informações que podem aumentar sua competitividade no mercado. 3.3. Algoritmos de MBA Os primeiros algoritmos a serem utilizados na descoberta de regras de associação foram o artificial immune system (AIS) [23][24] e o set-oriented mining (SETM) [22]. Na maioria dos estudos mais recentes o algoritmo Apriori tem sido bastante utilizado, bem como suas variações. Nas subseções a seguir alguns desses algoritmos são explorados.
  • 25. 3 Market Basket Analysis – MBA 25 3.3.1. Artificial Immune System A técnica utilizada pelo artificial immune system (AIS) gera e conta conjuntos de itens à medida que são lidas as transações da base de dados. Para cada transação, determinam-se quais dos maiores conjuntos encontrados na transação anterior também se encontram na transação corrente e novos conjuntos de itens são gerados estendendo-se esses conjuntos com itens deste registro. A desvantagem é que este método gera e conta desnecessariamente conjuntos de itens que são considerados pequenos. A figura a seguir ilustra o seu funcionamento. Figura 3 Exemplo de iteração do algoritmo AIS A primeira passagem do algoritmo na base de dados faz a busca por cestas de apenas um item contando quantas vezes estes se repetem nas transações, ignorando aqueles que ocorrem apenas uma vez. A segunda passagem na base busca por cestas com dois itens, contando quantas vezes estes aparecem juntos nos registros varridos. Neste exemplo, a última passada encontra cestas de três itens, que são a maior cesta possível com frequencia maior que um. Assim, o algoritmo tem como solução o conjunto {2,3,5}. 3.3.2. Set-oriented Mining Assim como o AIS, o set-oriented mining (SETM) gera os conjuntos de itens candidatos no momento em que está passando pelas transações da base de dados. Entretanto, a contagem só é realizada no final da varredura da base. O identificador da transação é guardado junto com o conjunto candidato em uma estrutura sequencial. Ao fim da leitura de todos os registros, o tamanho do conjunto de itens mais frequente é determinado pela agregação da estrutura sequencial. Além de ter a mesma desvantagem do AIS, para cada conjunto candidato, existem vários valores de tamanho calculados. A figura a seguir ilustra os passos do algoritmo.
  • 26. 3 Market Basket Analysis – MBA 26 Figura 4 Exemplo de iteração do algoritmo SETM No SETM, a primeira passagem na base de dados resulta na frequencia de ocorrência de cada item nas transações, assim como no exemplo anterior baseado no AIS. Entretanto, a segunda varredura na base tem como resultado uma lista com as combinações de pares de produtos onde cada combinação recebe o identificador da transação de onde foi extraída. Assim, teremos combinações repetidas com identificadores diferentes como a cesta {1,3} que neste exemplo ocorre na transação 100 e na 300. A última passagem na base revela as cestas de três itens e a solução encontrada é aquela que aparece em mais transações. Com isso, também temos o conjunto de itens {2,3,5} como resultado da aplicação do SETM nesse conjunto de registros. 3.3.3. Algoritmo Apriori Este algoritmo foi a primeira ferramenta para descoberta de regras de associação em bases de dados com grandes volumes. Várias modificações foram propostas para melhorar sua eficiência e algoritmos similares foram propostos [26][27][28], introduzindo regras mais expressivas. Primeiramente, o algoritmo identifica os itens que fazem parte de cada uma das transações. Em seguida, o algoritmo determina as regras de associação entre estes itens, selecionando as associações que ocorrem com mais frequência (ou maiores) no conjunto de transações em questão. O maior conjunto de itens candidato da passagem anterior é levado para próxima iteração, gerando outros conjuntos com tamanho maior que 1. Por fim, o algoritmo elimina os conjuntos gerados que tem um subconjunto que não é o maior. Com base nos conjuntos de itens mais frequentes as regras de associação que atendem aos valores mínimos de suporte e confiança são geradas. Como resultado,
  • 27. 3 Market Basket Analysis – MBA 27 todos os conjuntos de itens frequentes são descobertos, produzindo todas as regras de associação que respeitam esses limites. Figura 5 Exemplo de iteração do algoritmo Apriori Assim como nos exemplos anteriores, a primeira passada do algoritmo Apriori na base de dados resulta na listagem da frequencia dos itens nas transações (cestas de um item apenas). Na passada seguinte, a lista gerada contem as cestas de dois itens com as respectivas frequencias. Destas cestas apenas as mais freqüentes serão consideradas e, assim, as cestas com três itens já são preparadas para o último passo, que irá somente então contabilizar as cestas mais frequentes relacionadas na etapa anterior. Com isso, o resultado obtido é a cesta de itens {2,3,5}. 3.4. Implementação baseada em Grafo O objetivo da abordagem baseada em grafos é possibilitar a manipulação de informações de bases de dados de grandes volumes. Nesta seção serão descritos os passos básicos do algoritmo baseado em grafos, que chamaremos de Graph-based Market Basket Analysis (GMB). Inicialmente serão introduzidos conceitos de grafos importantes para o entendimento do algoritmo. Em seguida, será abordado o princípio da implementação do algoritmo. 3.4.1. Conceitos de Grafos Uma maneira de condensar as informações das relações entre itens é criar uma estrutura de grafo que as represente. Um grafo é definido por um par G = (V,E), onde V é um conjunto finito de vértices e E representa um conjunto de arestas que ligam os vértices, de forma que E⊆[V]². No caso do market basket analysis, cada vértice representa um item e a aresta representa a relação encontrada entre dois itens. A frequência com que dois itens aparecem juntos em uma mesma transação, ou registro, é representada por valores associados às arestas, resultando em um grafo com
  • 28. 3 Market Basket Analysis – MBA 28 ponderação nas arestas. O objetivo desse tipo de representação é realizar a análise do ponto de vista das relações entre os itens e não da relação entre as transações como alguns estudos de associação abordam [18]. Definimos como G1=(V1, E1) um subgrafo de G=(V,E) onde V1⊆V e E1⊆E. O subgrafo G1 é considerado completo se houver uma aresta para cada par de vértices, ou seja, cada vértice é adjacente a todos os outros vértices. Definimos como clique de G um subgrafo completo de G. O clique máximo é o maior clique encontrado no grafo, ou seja, nenhum outro clique o contém. Sendo assim, o problema do clique máximo consiste em determinar o tamanho do maior clique de G. Entende-se por tamanho a cardinalidade do conjunto de vértices do subgrafo em questão, sendo representado por ω(G). Para exemplificar o problema do clique máximo, a figura a seguir apresenta um grafo G, onde V={1,2,3,4,5} e E={(1,2),(1,3),(1,4),(1,5),(2,3),(3,4),(4,5)}. Os nós destacados em vermelho são os nós que formam o clique máximo desse conjunto de vértices, que possui tamanho 4. Figura 6 Exemplo de clique máximo Se um peso for atribuído a cada aresta, então o subgrafo é conhecido como um subgrafo ponderado e o seu peso é definido pela soma dos pesos das arestas. No escopo de market basket analysis, achar o clique máximo significa achar o conjunto de itens que mais aparecem juntos nas relações analisadas. Nas bases usadas, os registros não são transações e, por isso, o objetivo da aplicação do algoritmo é encontrar as associações existentes entre os atributos (variáveis) de cada registro. O
  • 29. 3 Market Basket Analysis – MBA 29 peso das arestas do clique ponderado indica a frequência com que as variáveis representadas pelos vértices ligados por ele aparecem juntas em um registro. O GMB evita assim várias passadas na base de dados, típicas de algoritmos como o Apriori Após o término da execução do GMB, o analista de negócios pode começar a por em prática a estratégia de cross-selling, pois tem em mãos as relações e as respectivas frequencias entre as variáveis selecionadas para estudo. 3.4.2. Montando a Matriz de Adjacências O primeiro passo do algoritmo é montar a matriz de adjacências que irá representar o grafo ponderado, considerando apenas os atributos selecionados pelo usuário como o objetivo do estudo. A matriz de adjacências foi implementada como uma lista encadeada de objetos representando os produtos (atributos do registro) da transação e cada produto possui a lista de relacionamentos com outros produtos e a quantidade de vezes que esses produtos aparecem juntos nos registros. Sendo assim, os atributos são os vértices do grafo e as relações entre os atributos são representadas pelas arestas que os ligam. Para cada registro da base de dados, o algoritmo percorre atributo por atributo montando as relações entre os mesmos. Sendo assim, a cada atributo ak, é feita a verificação se este já está representado na matriz de adjacências. Se não estiver, então uma nova entrada é criada para representá-lo. O próximo passo é então percorrer todos os atributos ai restantes na transação, preenchendo a lista de relacionamentos entre esses produtos e, caso uma nova relação de ak com ai seja identificada, ai é adicionado à lista de relações de ak com contador de frequencia inicializado com 1. No caso dessa relação ter sido identificada em uma transação anterior, o contador é acrescido de 1. 3.4.3. Buscando a Clique de Tamanho Máximo O grupo de interesse comum ou a cesta de produtos mais recorrente nas transações é representada pelo clique máximo do grafo. Em francês, a expressão la clique é definida como o grupo de indivíduos que partilham interesses em comum. Encontrar o clique de tamanho máximo significa encontrar o maior grupo de interesses em comum possível. Quando o grafo em questão é um grafo ponderado, o clique com maior peso corresponde ao grupo de interesses em comum que se repete mais frequentemente.
  • 30. 3 Market Basket Analysis – MBA 30 Na seção 3.4.2 foi apresentado como o conjunto de registros com seus atributos podem ser transformados em uma matriz de adjacências representando um grafo. Neste sentido, podemos dizer que o problema da cesta de compras pode ser transformado no problema do clique máximo (PCM). Convém observar que encontrar o clique máximo em um grafo é um problema NP- dificil. A seguir descrevemos então um algoritmo simples para computar o clique máximo. O clique máximo é inicializado como sendo o clique vazio e seu peso é definido com valor negativo. Além disso, uma lista que representa o clique “candidato” e seu respectivo peso também são inicializados da mesma maneira. A cada passada n na lista de adjacências, o atributo an é adicionado ao clique candidato e, para cada atributo ai restante, verifica-se a existência de relacionamento com todos os atributos já adicionados ao clique candidato. Se houver relacionamento entre os atributos, ou seja, se ai está presente na lista de relacionamentos de todos os atributos incluídos no clique candidato, significa que são vértices ligados por uma aresta. Sendo assim, ai também é adicionado ao clique candidato e o peso do mesmo é atualizado. Caso ai não se relacione com algum dos outros nós, então ai não faz parte do clique e o processamento passa para o próximo atributo. Com o término do processamento do clique candidato, seu peso é comparado ao peso do clique máximo e, se for maior, então o clique candidato passa a ser a solução até que outro clique de maior peso seja encontrado ou até que todo vértice da lista de adjacências tenha sido visitado. As funções FindTheMaximalClique e Find_Clique transcritas no Apêndice A realizam esse processamento no protótipo desenvolvido.
  • 31. 4 Testes e Resultados 4 Testes e Resultados Para o desenvolvimento deste trabalho, as estruturas e tecnologia das bases utilizadas para os testes do algoritmo desenvolvido são proprietárias da Stone Age Tech. Todos os campos da base de dados são automaticamente definidos como chaves. Uma vez construída a base, todos os campos podem ser utilizados como chaves de consulta. Não existem mais limitações sobre as consultas que podem ser feitas, nem a necessidade de se pedir que sejam construídas novas agregações ou cubos de análise dos dados. Todo atributo (ou variável) pode ser cruzado com qualquer outro, dando assim total liberdade para o usuário. Há a possibilidade de se extrair qualquer tipo de informação dos dados disponíveis. O gerenciador faz uso de algoritmos de compressão de dados reduzindo a necessidade de espaço em disco em 80%. A base de dados final ocupa, em média, 20% do espaço ocupado pelos acervos originais e, com isso, bases de dados que antes requeriam equipamentos de armazenamento avançados e custosos podem agora ser disponibilizadas em discos rígidos de computadores pessoais comuns. Essa característica da base de dados facilitou o desenvolvimento deste trabalho, que investiga mineração de dados em bases com grandes volumes de informação, tanto em relação ao número de registros quanto à quantidade de variáveis. Para que aplicações possam acessar sistemas gerenciadores de banco de dados diferentes de maneira transparente, independente da linguagem e da base de dados, foi criado um padrão de acesso a esses sistemas que define interfaces de acesso de maneira que não seja necessária a utilização de métodos específicos de cada base, denominado ODBC - Open Data Base Conectivity. A utilização de um conector (driver) ODBC específico para a base de dados que se deseja utilizar permite que as informações sejam obtidas utilizando-se a linguagem SQL - Structured Query Language. 4.1. Descrição do Ambiente de Testes – Protótipo Para testar a eficiência e a eficácia do algoritmo proposto, foi desenvolvido em Delphi um protótipo de testes que, por permitir a escolha de quaisquer conectores
  • 32. 4 Testes e Resultados 32 ODBC, é genérico a qualquer tipo de base e não somente às bases com a tecnologia da Stone Age Tech. Inicialmente, o conector ODBC desejado é escolhido dentre a lista disponibilizada como mostra a figura a seguir. Figura 7 Protótipo: escolha do conector ODBC Para o acesso aos dados serem disponibilizados, é necessário entrar com nome de usuário e senha válidos na tela de autenticação que será exibida logo após o clique no botão Conectar. Figura 8 Protótipo: Autenticação no ODBC
  • 33. 4 Testes e Resultados 33 Uma vez conectado, a lista de bases será exibida para o usuário, que deve escolher com qual deseja trabalhar. Em seguida, o usuário deve solicitar a listagem das variáveis disponíveis para cruzamento. Neste protótipo estão sendo exibidas todas as variáveis da base. Entretanto, para os estudos contemplados neste trabalho apenas as variáveis discretas serão utilizadas. Figura 9 Protótipo: Escolha da base de dados O usuário escolhe as variáveis sobre as quais deseja estudar as relações de associação e solicita a execução do comando. Se desejar realizar algum filtro nos registros da base em questão, os critérios precisam ser digitados no campo filtro antes do comando de execução, como mostra a figura a seguir. Figura 10 Protótipo: Inclusão de filtro na consulta
  • 34. 4 Testes e Resultados 34 Durante o processamento, informações como a consulta (query) definida, tempo de execução pelo ODBC em milissegundos, total de registros considerados na consulta e o tempo para montar a matriz de adjacências representando as relações encontradas são exibidas. Figura 11 Protótipo: Exibição das informações relevantes 4.2. Testes Os testes foram realizados sobre uma base, denominada Vendas, que possui 25.119.414 registros e 197 variáveis. Apenas 81 dessas variáveis foram utilizadas nos testes, pois apenas estas são discretas, ou seja, com domínio de valores pré-definidos. Esta base contém as informações de abordagens de marketing para pessoas que já são clientes e para pessoas que ainda não são clientes de uma instituição financeira, como: os produtos a que são elegíveis, as restrições de elegibilidade a campanhas (de acordo com o CPF dos clientes), algumas informações cadastrais, dentre outros. Para o primeiro caso de teste, foram selecionadas: • 2 variáveis que representam produtos da empresa proprietária da base de dados • 2 variáveis que indicam se é a primeira vez que aquele CPF foi indicado para adquirir esses produtos, respectivamente • 1 variável que indica se o CPF é de uma pessoa que já é cliente da instituição ou que ainda não é, e
  • 35. 4 Testes e Resultados 35 • 1 variável com a quantidade de vezes que esse CPF foi abordado em uma campanha de marketing. Analisando os padrões encontrados pelo algoritmo (ver Quadro 1), verifica-se que as relações mais recorrentes estão entre os registros que representam pessoas que • não são clientes ainda • foram abordados mais de 4 vezes por uma campanha de marketing • são elegíveis a campanhas por mala-direta e telemarketing e • normalmente não é a primeira vez que se tornaram elegíveis aos produtos selecionados para a análise. Com isso, pode-se concluir que os indivíduos desta base já foram inúmeras vezes abordados para adquirirem os produtos CITIMAX e CITICARD e, mesmo assim, não aderiram à campanha. Tendo essas informações, os analistas perceberam que precisam repensar o modelo de abordagens desses possíveis clientes e/ou a eficiência das campanhas que estão sendo realizadas, buscando tem mais sucesso com menos abordagens. Query: SELECT "CITIFINANCIA", "FX AB", "CITI MAX", "CITICARD", "CITICARD N", "CITIMAX N" FROM "CREDICARDCITI_CITI_VENDAS" WHERE SEXO = 'F' OR SEXO = 'M' Query execution time = ms 74515 Total de registros: 318383 Lendo os registros... Por favor, aguarde... Cálculo das relações durou 57985ms ... ************************************ Produto : CITIFINANCIA_NAO Adjacências: FX_AB_NAO: 286581 -> CITI_MAX_NAO: 173888 -> CITICARD_NAO: 245837 -> CITICARD_N_NAO: 286649 -> CITIMAX_N_NAO: 250698 -> CITI_MAX_ELEG_MD_TLMK: 112761 - > CITICARD_ELEG_MD_TLMK: 40812 -> CITIMAX_N_PRIMEIRA: 35951 -> FX_AB_4_OU_MAIS: 65 -> FX_AB_3: 1 -> FX_AB_2: 1 -> FX_AB_1: 1 ************************************ Produto : FX_AB_NAO Adjacências: CITIFINANCIA_NAO: 1243649 -> CITI_MAX_NAO: 191441 -> CITICARD_NAO: 270110 -> CITICARD_N_NAO: 318315 -> CITIMAX_N_NAO: 278179 -> CITI_MAX_ELEG_MD_TLMK: 126874 - > CITICARD_ELEG_MD_TLMK: 48205 -> CITIMAX_N_PRIMEIRA: 40136 -> CITIFINANCIA_SIM: 129475 ************************************ Produto : CITI_MAX_NAO Adjacências: CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITICARD_NAO: 176691 -> CITICARD_N_NAO: 191472 -> CITIMAX_N_NAO: 191472 -> CITICARD_ELEG_MD_TLMK: 14781 -> CITIFINANCIA_SIM: 24995 -> FX_AB_4_OU_MAIS: 83 -> FX_AB_3: 1 -> FX_AB_2: 1 ************************************ Produto : CITICARD_NAO Adjacências: CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITI_MAX_NAO: 559633 -> CITICARD_N_NAO: 270159 -> CITIMAX_N_NAO: 232936 -> CITI_MAX_ELEG_MD_TLMK: 307142 - > CITIMAX_N_PRIMEIRA: 37223 -> CITIFINANCIA_SIM: 129475 -> FX_AB_4_OU_MAIS: 156 -> FX_AB_2: 1 ************************************
  • 36. 4 Testes e Resultados 36 Produto : CITICARD_N_NAO Adjacências: CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITI_MAX_NAO: 559633 -> CITICARD_NAO: 503094 -> CITIMAX_N_NAO: 278237 -> CITI_MAX_ELEG_MD_TLMK: 307142 -> CITICARD_ELEG_MD_TLMK: 93524 -> CITIMAX_N_PRIMEIRA: 40146 -> CITIFINANCIA_SIM: 129475 -> FX_AB_4_OU_MAIS: 156 -> FX_AB_3: 1 -> FX_AB_2: 1 -> FX_AB_1: 1 ************************************ Produto : CITIMAX_N_NAO Adjacências: CITIFINANCIA_NAO: 1243649 -> FX_AB_NAO: 1058042 -> CITI_MAX_NAO: 559633 -> CITICARD_NAO: 503094 -> CITICARD_N_NAO: 278237 -> CITI_MAX_ELEG_MD_TLMK: 307142 -> CITICARD_ELEG_MD_TLMK: 93524 -> CITIFINANCIA_SIM: 129475 -> FX_AB_4_OU_MAIS: 83 -> FX_AB_3: 1 -> FX_AB_2: 1 -> FX_AB_1: 1 ************************************ Produto : CITI_MAX_ELEG_MD_TLMK Adjacências: CITIFINANCIA_NAO: 112761 -> FX_AB_NAO: 126874 -> CITICARD_NAO: 93468 -> CITICARD_N_NAO: 126911 -> CITIMAX_N_NAO: 86765 -> CITICARD_ELEG_MD_TLMK: 33443 -> CITIMAX_N_PRIMEIRA: 40146 -> CITIFINANCIA_SIM: 129475 -> FX_AB_4_OU_MAIS: 156 -> FX_AB_1: 1 ************************************ Produto : CITICARD_ELEG_MD_TLMK Adjacências: CITIFINANCIA_NAO: 40812 -> FX_AB_NAO: 48205 -> CITI_MAX_ELEG_MD_TLMK: 33443 -> CITICARD_N_NAO: 48224 -> CITIMAX_N_NAO: 45301 -> CITI_MAX_NAO: 14781 -> CITIFINANCIA_SIM: 24995 -> CITIMAX_N_PRIMEIRA: 2923 -> FX_AB_4_OU_MAIS: 17 -> FX_AB_3: 1 -> FX_AB_1: 1 ************************************ Produto : CITIMAX_N_PRIMEIRA Adjacências: CITIFINANCIA_NAO: 35951 -> FX_AB_NAO: 40136 -> CITI_MAX_ELEG_MD_TLMK: 40146 -> CITICARD_NAO: 37223 -> CITICARD_N_NAO: 40146 -> CITIFINANCIA_SIM: 4195 -> CITICARD_ELEG_MD_TLMK: 2923 -> FX_AB_4_OU_MAIS: 156 ************************************ Produto : CITIFINANCIA_SIM Adjacências: FX_AB_NAO: 31734 -> CITI_MAX_ELEG_MD_TLMK: 14150 -> CITICARD_NAO: 24322 -> CITICARD_N_NAO: 31734 -> CITIMAX_N_NAO: 27539 -> CITIMAX_N_PRIMEIRA: 4195 -> CITI_MAX_NAO: 17584 -> CITICARD_ELEG_MD_TLMK: 7412 ************************************ Produto : FX_AB_4_OU_MAIS Adjacências: CITIFINANCIA_NAO: 65 -> CITI_MAX_ELEG_MD_TLMK: 36 -> CITICARD_NAO: 48 -> CITICARD_N_NAO: 65 -> CITIMAX_N_PRIMEIRA: 10 -> CITI_MAX_NAO: 29 -> CITIMAX_N_NAO: 55 -> CITICARD_ELEG_MD_TLMK: 17 ************************************ Produto : FX_AB_3 Adjacências: CITIFINANCIA_NAO: 1 -> CITI_MAX_NAO: 1 -> CITICARD_ELEG_MD_TLMK: 1 -> CITICARD_N_NAO: 1 -> CITIMAX_N_NAO: 1 ************************************ Produto : FX_AB_2 Adjacências: CITIFINANCIA_NAO: 1 -> CITI_MAX_NAO: 1 -> CITICARD_NAO: 1 -> CITICARD_N_NAO: 1 -> CITIMAX_N_NAO: 1 ************************************ Produto : FX_AB_1 Adjacências: CITIFINANCIA_NAO: 1 -> CITI_MAX_ELEG_MD_TLMK: 1 -> CITICARD_ELEG_MD_TLMK: 1 -> CITICARD_N_NAO: 1 -> CITIMAX_N_NAO: 1 Clique máxima pelo peso total: - FX_AB_4_OU_MAIS - CITIMAX_N_PRIMEIRA - CITICARD_ELEG_MD_TLMK - CITI_MAX_ELEG_MD_TLMK - CITIMAX_N_NAO - CITICARD_N_NAO
  • 37. 4 Testes e Resultados 37 - CITICARD_NAO - CITI_MAX_NAO - FX_AB_NAO - CITIFINANCIA_NAO 2676826 Quadro 1 Relações encontradas para o caso de teste 1 Para o caso de teste 2, foram utilizadas as variáveis, presentes na base de Vendas: • sexo • faixa de vezes que o CPF foi abordado em uma campanha • indicador de restrição do CPF para uma campanha • indicador se o CPF já é de um cliente e • estado civil O propósito do experimento foi descobrir as relações entre tais variáveis, verificando quais características aparecem mais vezes nos registros da base Vendas. A consulta ao banco de dados foi realizada em 65547ms (≈ 66 segundos) e a matriz de adjacência com as relações entre os valores dos atributos foi montada em 32625ms (≈ 33 segundos). Como foi realizado um filtro selecionando apenas os registros do sexo masculino e feminino (existem registro com valor de sexo “não informado” e “ignorado”, apenas 318.383 registros foram analisados. O clique encontrado tem nós com valor 1 para faixa de abordagem (ou seja, o CPF foi abordado apenas 1 vez em campanhas de marketing), sexo feminino, sem restrições ao CPF e com indicador de que este CPF ainda não se tornou cliente da instituição. Com essas informações o analista pode inferir que as mulheres que não possuem restrição às campanhas para seus CPFs foram abordadas apenas uma vez e não responderam bem à campanha realizada, já que não se tornaram clientes. Assim, foi possível preparar mais campanhas buscando abordar novamente as pessoas que ainda não se tornaram clientes e que foram abordados apenas uma vez. O Quadro 2 apresenta a consulta realizada sobre a base de dados, todas as relações encontradas entre as variáveis selecionadas pelo usuário e os valores encontrados como pertencentes ao clique. Query: SELECT "IND CPF", "CITIFINANCIA", "FX AB", "ESTCIVIL", "SEXO" FROM "CREDICARDCITI_CITI_VENDAS" WHERE SEXO = 'F' OR SEXO = 'M' Query execution time = ms 65547 Total de registros: 318383 Lendo os registros... Por favor, aguarde...
  • 38. 4 Testes e Resultados 38 Cálculo das relações durou 32625ms ... ************************************ Produto : IND_CPF_-_NAO Adjacências: CITIFINANCIA_-_NAO: 279334 -> FX_AB_-_NAO: 310155 -> ESTCIVIL_-_NAO: 310223 -> SEXO_- _F: 170677 -> SEXO_-_M: 139546 -> CITIFINANCIA_-_SIM: 30889 -> FX_AB_-_4_OU_MAIS: 65 -> FX_AB_-_3: 1 -> FX_AB_-_2: 1 -> FX_AB_-_1: 1 ************************************ Produto : CITIFINANCIA_-_NAO Adjacências: IND_CPF_-_NAO: 1070386 -> FX_AB_-_NAO: 286581 -> ESTCIVIL_-_NAO: 286649 -> SEXO_-_F: 158326 -> SEXO_-_M: 128323 -> IND_CPF_-_PROP_RECENTE: 26916 -> FX_AB_-_4_OU_MAIS: 65 -> FX_AB_-_3: 1 -> FX_AB_-_2: 1 -> FX_AB_-_1: 1 ************************************ Produto : FX_AB_-_NAO Adjacências: IND_CPF_-_NAO: 1070386 -> CITIFINANCIA_-_NAO: 731554 -> ESTCIVIL_-_NAO: 318315 -> SEXO_-_F: 175513 -> SEXO_-_M: 142802 -> CITIFINANCIA_-_SIM: 77973 -> IND_CPF_- _PROP_RECENTE: 26916 ************************************ Produto : ESTCIVIL_-_NAO Adjacências: IND_CPF_-_NAO: 1070386 -> CITIFINANCIA_-_NAO: 731554 -> FX_AB_-_NAO: 493827 -> SEXO_- _F: 175553 -> SEXO_-_M: 142830 -> CITIFINANCIA_-_SIM: 77973 -> IND_CPF_-_PROP_RECENTE: 26916 -> FX_AB_-_4_OU_MAIS: 103 -> FX_AB_-_3: 1 -> FX_AB_-_2: 1 -> FX_AB_-_1: 1 ************************************ Produto : SEXO_-_F Adjacências: IND_CPF_-_NAO: 1070386 -> CITIFINANCIA_-_NAO: 731554 -> FX_AB_-_NAO: 493827 -> ESTCIVIL_-_NAO: 175553 -> CITIFINANCIA_-_SIM: 17227 -> IND_CPF_-_PROP_RECENTE: 5720 -> FX_AB_-_4_OU_MAIS: 103 -> FX_AB_-_1: 1 ************************************ Produto : SEXO_-_M Adjacências: IND_CPF_-_NAO: 139546 -> CITIFINANCIA_-_NAO: 128323 -> FX_AB_-_NAO: 142802 -> ESTCIVIL_-_NAO: 142830 -> CITIFINANCIA_-_SIM: 77973 -> IND_CPF_-_PROP_RECENTE: 26916 - > FX_AB_-_4_OU_MAIS: 26 -> FX_AB_-_3: 1 -> FX_AB_-_2: 1 ************************************ Produto : CITIFINANCIA_-_SIM Adjacências: IND_CPF_-_NAO: 30889 -> FX_AB_-_NAO: 31734 -> ESTCIVIL_-_NAO: 31734 -> SEXO_-_M: 14507 - > SEXO_-_F: 17227 -> IND_CPF_-_PROP_RECENTE: 5720 ************************************ Produto : IND_CPF_-_PROP_RECENTE Adjacências: CITIFINANCIA_-_NAO: 7315 -> FX_AB_-_NAO: 8160 -> ESTCIVIL_-_NAO: 8160 -> SEXO_-_M: 3284 -> CITIFINANCIA_-_SIM: 845 -> SEXO_-_F: 4876 ************************************ Produto : FX_AB_-_4_OU_MAIS Adjacências: IND_CPF_-_NAO: 65 -> CITIFINANCIA_-_NAO: 65 -> ESTCIVIL_-_NAO: 65 -> SEXO_-_F: 39 -> SEXO_-_M: 26 ************************************ Produto : FX_AB_-_3 Adjacências: IND_CPF_-_NAO: 1 -> CITIFINANCIA_-_NAO: 1 -> ESTCIVIL_-_NAO: 1 -> SEXO_-_M: 1 ************************************ Produto : FX_AB_-_2 Adjacências: IND_CPF_-_NAO: 1 -> CITIFINANCIA_-_NAO: 1 -> ESTCIVIL_-_NAO: 1 -> SEXO_-_M: 1 ************************************ Produto : FX_AB_-_1 Adjacências: IND_CPF_-_NAO: 1 -> CITIFINANCIA_-_NAO: 1 -> ESTCIVIL_-_NAO: 1 -> SEXO_-_F: 1 Clique máxima pelo peso total: - FX_AB_-_1 - SEXO_-_F
  • 39. 4 Testes e Resultados 39 - ESTCIVIL_-_NAO - FX_AB_-_NAO - CITIFINANCIA_-_NAO - IND_CPF_-_NAO 2140775 Quadro 2 Relações encontradas para o caso de teste 2
  • 40. 5 Conclusão e Trabalhos Futuros 40 5 Conclusão e Trabalhos Futuros 5.1. Conclusões Esta dissertação abordou conceitos de data mining voltado para marketing de relacionamento, propondo uma implementação da técnica de market basket analysis baseada na estrutura de grafo. Para contextualizar o problema, inicialmente foram discutidos tópicos importantes relacionados à mineração de dados, bem como o processo de busca de conhecimento, os tipos de predição de informação e as técnicas mais utilizadas atualmente para descobrimento de padrões em dados armazenados em bancos de dados. Maior foco foi dado à técnica de market basket analysis, pois, ao fazer uso de regras de associação, esta técnica caracteriza-se como uma ótima escolha para solucionar problemas no escopo de marketing de relacionamento, tais como venda casada e up-selling. Neste cenário, foi proposto um algoritmo que encontra as relações mais recorrentes entre os produtos (variáveis) nas compras (registros) registradas na base de dados. A fim de realizar testes que mensurassem o desempenho do algoritmo desenvolvido, um protótipo de aplicação foi criado, permitindo que o usuário escolha a base em que irá realizar os estudos e as variáveis que deseja cruzar a fim de descobrir as relações existentes entre as variáveis. Sendo assim, este trabalho ainda apresenta testes e resultados obtidos através da utilização do algoritmo proposto. Como principal contribuição do trabalho, podemos apontar a implementação de um algoritmo para data mining capaz de descobrir relações entre atributos dos registros de uma base de dados. A principal barreira enfrentada por tais implementações está na dificuldade de encontrar informação relevante, e em volume suficientemente grande, para estudar a eficiência do algoritmo em descobrir regras de associação referentes aos dados. No caso deste trabalho, as bases de dados utilizadas são reais e com qualidade e tamanho satisfatórios para uma análise mais apurada do retorno da solução proposta. Como segunda contribuição, podemos ressaltar a generalidade do protótipo desenvolvido, que pode ser aplicado a qualquer estrutura e tecnologia de base de dados, através do uso de conector ODBC para realizar as consultas aos dados disponíveis.
  • 41. 5 Conclusão e Trabalhos Futuros 41 5.2. Trabalhos Futuros Como sugestões de trabalhos futuros, podemos enumerar: • Identificação dos atributos discretos No processo de descoberta das relações entre os atributos de um registro, só faz sentido trabalhar com aqueles que possuem domínio previamente conhecido, ou seja, atributos que sejam discretos. Sendo assim, é interessante apresentar para o usuário apenas as variáveis que sejam desse tipo, o que não foi realizado neste trabalho devido à uma limitação do conector ODBC utilizado. • Investir na visualização gráfica das informações descobertas A visualização do relacionamento entre os atributos em termos de imagens facilita a compreensão por parte do usuário e permite análises mais rápidas e intuitivas que o estudo das regras de associação descobertas. É interessante que um trabalho futuro explore a parte de visualização, buscando outros componentes que permitam a visualização do grafo de maneira mais limpa e que suporte grafos com grandes quantidades de nós e relações. • Trabalhar com outras estruturas de dados Este trabalho fez uso apenas de bases de dados de propriedade da Stone Age Tech, que não trabalha com tabelas como os bancos de dados convencionais, mas com uma estrutura colunar. Ao trabalhar com uma base de dados convencional, seria possível identificar se a estrutura da base influencia o desempenho final do algoritmo. • Estudo comparativo entre algoritmos A proposta dessa dissertação foi uma implementação da técnica de market basket analysis, utilizando-se os conceitos de grafos ponderados a fim de encontrar as relações mais frequentes, ou seja, o clique máximo do grafo. Como trabalho futuro complementar a este, pode-se sugerir a construção de outros algoritmos que tenham o mesmo princípio de regras de associação, como por exemplo, o Apriori, com o objetivo de realizar comparações de tempo de resposta e de acuracidade das informações sobre as relações. • Incluir medidas de interesse como suporte e confiança
  • 42. 5 Conclusão e Trabalhos Futuros 42 A introdução de medidas, como suporte e confiança, permite que os padrões descobertos sejam ordenados ou classificados de acordo com o grau de interesse associado aos mesmos. Além disso, essas medidas podem ser usadas para guiar ou restringir o espaço de busca, melhorando a eficiência da mesma ao eliminar conjuntos de regras de associação que não satisfaçam as condições predeterminadas. • Acrescentar outras abordagens para descoberta do clique máximo Na literatura existem algumas abordagens diferentes para a solução problema do clique máximo. A título experimental, o estudo e a implementação de novas técnicas é sugerido como trabalho futuro complementar ao proposto por esta dissertação.
  • 43. 6 Referências 6 Referências [1] SANDRI. A.; Detecção e Prevenção de Fraudes utilizando Inteligência Artificial. 2006. Disponível em <http://br.geocities.com/andresandri/artigos/IA/Deteccao_Prevencao_Fr aude_IA.doc> Acesso em Junho de 2008. [2] PASSINI, S.R.R; TOLEDO, C.M.T; Mineração de Dados para Detecção de Fraudes em Ligações de Água. 2002. Disponível em <http://www.inf.furb.br/seminco/2002/artigos/Passini-seminco2002- 6.pdf> Acesso em Junho de 2008. [3] RABELO, E;. Avaliação de Técnicas de Visualização para Mineração de Dados, 2007. Dissertação de Pós-Graduação, Universidade Federal de Maringá. Disponível em <http://www.din.uem.br/pos- graduacao/mestrado-em-ciencia-da-computacao/dissertacoes> Acesso em Junho 2008. [4] Fayyad, U.; Shapiro, P. G.; Smyth, P.; Knowledge Discovery and Data Mining: Towards a Unifying Framework. Menlo Park, Calif.: AAAI Press; Cambridge, Mass.: MIT Press, 1996. 611p. [5] FERRO, M., LEE, H. D.; O Processo de KDD – Knowledge Discovery in Database para Aplicações na Medicina, 2001. [6] ROMÃO, W.; Descoberta de Conhecimento Relevante em Banco de Dados sobre Ciência e Tecnologia. Dissertação de Pós-Graduação, Universidade Federal de Santa Catarina, 2002. [7] Information Drivers Company, Inglaterra. Disponível em <http://www.information-drivers.com/market_basket_analysis.php>. Acesso em julho 2008. [8] Direct Magazine, “Match 'Em Up” Outubro 2006. Disponível em <http://directmag.com/disciplines/crm/marketing_match_em>, Acesso em julho 2008. [9] VELOSO, M. S. A. Regras De Associação Aplicadas A Um Método De Apoio Ao Planejamento De Recursos Humanos. Dissertação de Mestrado, Universidade do Porto. [10] TAN, P., STEINBACH, M., KUMAR, V., Introduction to Data Mining. Person Addison Wesley Education Press Inc. Boston, 2005. [11] AZEVEDO, L. V. Maximizando o valor do relacionamento com o cliente: Data Mining e CRM. 2003. [12] SANTOS, J. G.; Mineração De Dados Aplicada à Gestão De Relacionamento com Clientes. Espaço Científico, Santarém V.6, n.1/2, p.29-36, 2005. [13] NOGUEIRA, C. F.; Metodologia de Valorização de Clientes, utilizando Mineração de Dados. Dissertação de Pós-graduação em Engenharia Civil da Universidade Federal do Rio de Janeiro, 2004.
  • 44. 6 Referências [14] ADOMAVICIUS, G., TUZHILIN, A.; Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions. IEEE Transactions On Knowledge And Data Engineering, VOL. 17, No. 6, Junho 2005. [15] BURKE, R; Knowledge-based Recommender Systems. University of California, Irvine. [16] MIDDLETON, S. E., ROURE, D., SHADBOLT, N.; Captuiring knowledge of User Preferences: Ontologies in Recommender Systems. University of Southampton. October 22-23, 2001, Victoria, British Columbia, Canada. [17] TAN, P.; STEINBACH, M.; KUMAR, V.; Introduction to Data Mining. Pearson Addison Wesley 2006. [18] LIU, F.; LU, Z; LU, S., Mining Association Rules Using Clustering, Intelligent Data Analysis,5, 2001, pp.309-326. [19] CAVIQUE, L. Graph-based structures for the Market Baskets Analysis. 24 2004, pp.233-246. [20] LIMEIRA, Tânia m. V. Administração das comunicações em Marketing. In: DIAS, S. R. Gestão de marketing. São Paulo: Saraiva, 2003. p. 301. [21] Bretze Marketing de Relacionamento 2004, Aumentando a Rentabilidade do Cliente com Database Marketing. Disponível em www.bretzke-marketing.com.br/textos/artigos01.htm. Acesso em janeiro de 2009. [22] HOUTSMA, M., SWAMI, A. Set-oriented mining for association rules in relational databases. Twente Univ., Enschede; Data Engineering, 1995. Proceedings of the Eleventh International Conference on p. 25-33. [23] DIPANKAR, D., Artificial Immune System and Their Aplications. Springer-Verlag 1999. [24] DASGUPTA, D., Ji, Z., González, F., Artificial Immune System (AIS) Research in the Last Five Years. IEEE 2003. [25] AGRAWAL, R., IMIELINSKI, T., SRIKANT, R., Mining Association Rules between Sets of Items in Large Databases, Proc. of the ACM SIGMOD Intl. Conf. on Management of Data, Washington, Estados Unidos, 1993, 207–216. [26] C. Borgelt, An Implementation of the FP-growth Algorithm, Workshop Open Source Data Mining Software, OSDM'05, Chicago, IL, 1-5.ACM Press, USA, 2005. [27] S. Brin, R. Motwani, J.D. Ullman and S.Tsur, Dynamic Itemset Counting and Implication Rules for Market Basket Data, in Proceedings of the 1997 ACM SIGMOD Conference, Tucson, Arizona, 1997, pp.255-264. [28] J. Han, J. Pei, Y. Yin, “Mining frequent patterns without candidate generation”, Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data, Dallas, Texas, United States, 1- 12, 2000
  • 45. 7 Apêndice A 7 APÊNDICE A – Código da Implementação Unit Main – Main.pas (******************************************************************************* * PONTIFICIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO - PUC-RIO * * Programa de Pós-Graduação em Informática - Mestrado * * Programa apresentado como requisito parcial para o cumprimento dos créditos da * cadeira de Projeto Final de Programação (INF 2102). * * Aluna: Livia Fonseca Fracalanza * Matricula : 0621292 * Orientador: Prof. Marco Antonio Casanova *******************************************************************************) unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, RzGrids, RzShellDialogs, StdCtrls, RzLabel, Mask, RzEdit, RzBtnEdt, ExtCtrls, LogView, OleCtrls, SHDocVw, MBAObject, DB, ADODB, CheckLst, RzLstBox, RzChkLst; type TFMain = class(TForm) Panel3: TPanel; Splitter1: TSplitter; WebBrowser1: TWebBrowser; Panel1: TPanel; Panel2: TPanel; Panel4: TPanel; BtnMaximalCliqueByWeight: TButton; RzOpenDialog1: TRzOpenDialog; BtnGraphGenerator: TButton; BtnMaximalCliqueByAverage: TButton; RzLabel1: TRzLabel; BtnConnect: TButton; BtnDisconnect: TButton; cbDriversList: TComboBox; RzLabel2: TRzLabel; cbBases: TComboBox; RzLabel3: TRzLabel; ODBCConnect: TADOConnection; Button1: TButton; edtFilter: TEdit; Filtro: TLabel; Button2: TButton; Memo1: TMemo; Label1: TLabel;
  • 46. 7 Apêndice A VarListBox: TRzCheckList; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btnPrintClick(Sender: TObject); procedure FileEdtButtonClick(Sender: TObject); procedure BtnMaximalCliqueByWeightClick(Sender: TObject); procedure BtnGraphGeneratorClick(Sender: TObject); procedure BtnMaximalCliqueByAverageClick(Sender: TObject); procedure BtnConnectClick(Sender: TObject); procedure BtnDisconnectClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private MBAObj : TMBAObj; FFilePath : string; recset : _Recordset; procedure ReadFile; procedure GetDriversList; procedure PrintRelations; procedure PrintMaximalClique; procedure DisconnectODBC; public // FLogViewer : TLogViewer; // Main log info end; var FMain: TFMain; implementation {$R *.dfm} uses // StrUtils, // for AnsiStr functions Registry, LoginForm, WINGRAPHVIZLib_TLB; // to use GraphViz to draw Graph gif (******************************************************************************) procedure TFMain.FormCreate(Sender: TObject); begin //Create Log Object CreateLogObject; FLogViewer.LogUpdate (' *** Início da execução do programa *** '); GetDriversList; VarListBox.MultiSelect := TRUE; end; (******************************************************************************) procedure TFMain.FormDestroy(Sender: TObject); begin // Destroy Log Object FLogViewer.LogUpdate (' *** Encerrando a execução do programa *** '); If Assigned (FLogViewer) then FreeAndNil (FLogViewer); end; (******************************************************************************) procedure TFMain.GetDriversList;
  • 47. 7 Apêndice A var reg : TRegistry; List : TStrings; begin reg := TRegistry.Create; List := TStringList.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey ('SOFTWAREODBCODBC.INI', False); reg.GetKeyNames (List); cbDriversList.Items.Assign (List); finally reg.Free; List.Free; end; end; (******************************************************************************) (******************************************************************************) procedure TFMain.btnPrintClick(Sender: TObject); begin PrintRelations; end; (******************************************************************************) (******************************************************************************* * Procedure: PrintRelations * Descrição: Procedure passa pelos nós da lista de adjacência imprimindo a rela- ção existente entre os mesmos e a quantidade de vezes em que essa relação acontece. * *******************************************************************************) procedure TFMain.PrintRelations; var i, j : Integer; Produto : TProduct; PAdj : TProduct; ws : string; begin // Memo1.Lines.Clear; for i := 0 to MBAObj.FAdjList.Count-1 do begin ws := ''; Produto := TProduct(MBAObj.FAdjList.Objects[i]); Memo1.Lines.Add(' ************************************ '); Memo1.Lines.Add('Produto : ' + MBAObj.FAdjList.Strings[i]); Memo1.Lines.Add('Adjacências: '); for j := 0 to Produto.List.Count-1 do begin PAdj := TProduct(Produto.List.Objects[j]); ws := ws + PAdj.ID + ': ' + IntToStr(PAdj.Qtd) + ' -> '; end; Memo1.Lines.Add(Copy(ws,0, length(ws)-3)); end; end; (******************************************************************************) procedure TFMain.FileEdtButtonClick(Sender: TObject); begin
  • 48. 7 Apêndice A if RzOpenDialog1.Execute then FFilePath:= RzOpenDialog1.FileName; // FileEdt.Text:= FFilePath; //Create MBA Object if Assigned (MBAObj) then MBAObj.Destroy; MBAObj := TMBAObj.Create; // Read the Transaction File and Set the Adjacent List, constructing the Graph ReadFile; //Print the relations at the list of adjacencies PrintRelations; end; (******************************************************************************) (******************************************************************************* * Procedure: ReadFile * Descrição: Lê cada linha do arquivo texto, representando uma transação e chama * a função FillAdjList para computar a relação de adjacência dos * ítens da transação. * * AE : - * AS : - *******************************************************************************) procedure TFMain.ReadFile; var MatrixFile : TextFile; TransactionLine: string; PList : TStringList; i : integer; begin if not FileExists(FFilePath) then begin ShowMessage ('O Arquivo informado não existe.'); FLogViewer.LogUpdate ('Erro: O Arquivo informado não existe.'); exit; end; Memo1.Lines.Clear; i := 0; try AssignFile(MatrixFile, FFilePath); Reset(MatrixFile); Plist := TStringList.Create; PList.Delimiter := ';'; while not Eof(MatrixFile) do begin Readln(MatrixFile, TransactionLine); Memo1.Lines.Add('Lendo Transação ' + IntTOStr(i+1)); Memo1.Lines.Add(TransactionLine); Memo1.Lines.Add(' ----------------- '); PList.DelimitedText := TransactionLine; MBAObj.FillAdjList (PList, 0);
  • 49. 7 Apêndice A inc(i); end; FLogViewer.LogUpdate (IntToStr(i) + ' transações lidas.'); finally CloseFile(MatrixFile); // FreeAndNil (MatrixFile); end; end; (******************************************************************************) (******************************************************************************* * Procedure: BtnGraphGeneratorClick * Descrição: Procedure que implementa o clique do botão de criação da imagem do * grafo de acordo com as informações da lista de adjacências. * *******************************************************************************) procedure TFMain.BtnGraphGeneratorClick(Sender: TObject); var Dot: IDot; Image: IBinaryImage; ImageFileName: string; Path : string; Data : widestring; i, j : Integer; Vertex, Adjc : TProduct; begin Memo1.Lines.Clear; Memo1.Lines.Add('graph G'); Memo1.Lines.Add('{'); Memo1.Lines.Add('label=" Grafo de Transações "'); Memo1.Lines.Add('node [color=pink, style=filled]'); for i := 0 to MBAObj.FAdjList.Count-1 do begin Vertex := TProduct(MBAObj.FAdjList.Objects[i]); if MBAObj.FMaximumCliqueList.IndexOf(Vertex.ID) >= 0 then // Node is a part of the Maximal Clique begin Memo1.Lines.Add(Vertex.ID + ' [color=yellow]'); end; for j := 0 to Vertex.List.Count-1 do begin Adjc := TProduct(Vertex.List.Objects[j]); if Vertex.ID < Adjc.ID then begin Memo1.Lines.Add(Vertex.ID + ' -- ' + Adjc.ID + ' [label = ' + IntToStr(Adjc.Qtd) + ', color=green]'); end; end; end; Memo1.Lines.Add('}'); // Print the Graph Data := Memo1.text; Path := ExtractFilePath(paramStr(0)); ImageFileName := Path + 'Graph_image.gif'; Dot := CoDOT.Create; Image := Dot.ToGIF(Data);
  • 50. 7 Apêndice A Image.Save(ImageFileName); WebBrowser1.Navigate('file:///' + Path + 'Graph_image.gif'); end; (******************************************************************************) procedure TFMain.BtnMaximalCliqueByWeightClick(Sender: TObject); begin MBAObj.FindTheMaximalClique (M_WEIGHT); PrintMaximalClique; end; (******************************************************************************) procedure TFMain.BtnMaximalCliqueByAverageClick(Sender: TObject); begin MBAObj.FindTheMaximalClique (AVERAGE); PrintMaximalClique; end; (******************************************************************************) procedure TFMain.PrintMaximalClique; var i : Integer; begin // Se foram identificados nós que formam uma clique máxima, imprime a mesma if MBAObj.FMaximumCliqueList.Count > 0 then begin Memo1.Lines.Add (' Clique máxima pelo peso total: '); for i := 0 to MBAObj.FMaximumCliqueList.Count -1 do begin Memo1.Lines.Add(' - '+ MBAObj.FMaximumCliqueList[i]); end; Memo1.Lines.Add(FloatToStr(MBAObj.FMaxCliqueWeight)); end else Memo1.Lines.Add(' -> Não existe uma Clique.'); end; (******************************************************************************) procedure TFMain.BtnConnectClick(Sender: TObject); var ConnectStr, DriverName : string; List : TStrings; begin if cbDriversList.ItemIndex < 0 then begin ShowMessage ('Por favor, selecione um Driver ODBC!'); exit; end; if FrmLogin.ShowModal <> mrOK then exit; DriverName := cbDriversList.Text; ConnectStr := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=' + DriverName; (* connect *) try ODBCConnect.ConnectionString := ConnectStr; ODBCConnect.Open (FrmLogin.UserName, FrmLogin.Password); // ('ADMCAMP', 'THORAN'); //
  • 51. 7 Apêndice A List := TStringList.Create; try if ODBCConnect.Connected then ShowMessage ('Conectado!') else begin ShowMessage ('Conexão falhou!'); Exit; end; ODBCConnect.GetTableNames (List, False); cbBases.Items.Assign (List); finally List.Free; end; BtnConnect.Enabled := false; // Button1.Enabled := true; BtnDisconnect.Enabled := true; except on E : EADOError do begin ShowMessage (E.Message); DisconnectODBC; end; on E : Exception do begin ShowMessage ('Conexão Simba falhou : ' + E.Message); DisconnectODBC; end; end; end; (******************************************************************************) procedure TFMain.BtnDisconnectClick(Sender: TObject); begin DisconnectODBC; end; (******************************************************************************) procedure TFMain.DisconnectODBC; begin ODBCConnect.Close; BtnConnect.Enabled := true; // Button1.Enabled := false; BtnDisconnect.Enabled := false; VarListBox.Clear; end; (******************************************************************************) procedure TFMain.Button1Click(Sender: TObject); var List : TStrings; begin if not ODBCConnect.Connected then begin ShowMessage ('Dataset desconectado!'); Exit; end; if cbBases.ItemIndex < 0 then
  • 52. 7 Apêndice A begin ShowMessage ('Por favor, selecione um dataset!'); Exit; end; List := TStringList.Create; VarListBox.Clear; try ODBCConnect.GetFieldNames (cbBases.Text, List); VarListBox.Items.Assign (List); finally List.Free; end; end; procedure TFMain.Button2Click(Sender: TObject); var queryStr, DataSetName, VarListStr : String; Ix, Jx : Integer; SelList : Array of String; SelCount : Integer; timestep : DWORD; FilterStr : String; FullRecovery : boolean; columnsList : array of string; RecLine : TStringList; auxStr : String; begin if cbBases.ItemIndex < 0 then begin ShowMessage ('Por favor, selecione um dataset!'); Exit; end; SelCount := VarListBox.ItemsChecked; if SelCount = 0 then begin ShowMessage ('Por favor, selecione pelo menos uma variável!'); Exit; end; SetLength (SelList, SelCount); SetLength (columnsList, SelCount); Jx := 0; DataSetName := cbBases.Text; with VarListBox do begin for Ix := 0 to Count - 1 do begin if ItemChecked[Ix] then begin SelList[Jx] := Items.Strings[Ix]; if VarListStr <> '' then VarListStr := VarListStr + ', ';
  • 53. 7 Apêndice A VarListStr := VarListStr + #34 + SelList[Jx] + #34; Inc (Jx); end; end; end; FilterStr := ''; if edtFilter.Text <> '' then FilterStr := ' WHERE ' + edtFilter.Text; queryStr := 'SELECT ' + VarListStr + ' FROM "' + DataSetName + '"' + FilterStr; Memo1.Lines.Add('Query: ' + queryStr); try timestep := GetTickCount(); recset := ODBCConnect.Execute (queryStr); timestep := GetTickCount() - timestep; Memo1.Lines.Add('Query execution time = ms ' + IntToStr (timestep) + #13 + #10 + 'Total de registros: ' + IntToStr(RECSET.RecordCount)); except on E : EADOError do begin ShowMessage (E.Message); Exit; end; on E2 : Exception do begin ShowMessage ('Query failed : ' + E2.Message); Exit; end; end; try for Jx := 0 to SelCount - 1 do columnsList [Jx] := SelList[Jx]; Jx := 0; RecLine := TStringList.Create; RecLine.Delimiter := ';'; // Create MBA Object if Assigned (MBAObj) then MBAObj.Destroy; MBAObj := TMBAObj.Create; Memo1.Lines.add ('Lendo os registros... Por favor, aguarde...'); timestep := GetTickCount(); repeat Inc (Jx); auxStr := ''; for Ix := 0 to recset.Fields.Count - 1 do begin auxStr := auxStr + columnsList [Ix] + '_' + trim(recset.Fields[Ix].Value) + ';'; end; RecLine.DelimitedText := Copy(auxStr, 1, length(auxStr)-1);
  • 54. 7 Apêndice A MBAObj.FillAdjList (RecLine, 0); recset.Move (1, EmptyParam); until recset.EOF; except on E : Exception do begin ShowMessage ('Load result exception : ' + E.Message); end; end; timestep := GetTickCount() - timestep; Memo1.Lines.add ('Cálculo das relações durou ' + IntToStr (timestep) + 'ms ...'); // ShowMessage ('Result Count = ' + inttostr(Jx)); PrintRelations; end; end. Unit MBAObject – MBAObject.pas (******************************************************************************* * PONTIFICIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO - PUC-RIO * * Programa de Pós-Graduação em Informática - Mestrado * * Programa apresentado como requisito parcial para o cumprimento dos créditos da * cadeira de Projeto Final de Programação (INF 2102). * * Aluna: Livia Fonseca Fracalanza * Matricula : 0621292 * Orientador: Prof. Marco Antonio Casanova *******************************************************************************) unit MBAObject; interface uses SysUtils, Variants, Classes; const M_WEIGHT = 1; AVERAGE = 2; const INITIALWEIGHT = -999999999; type TProduct = class(TObject) ID : string; Qtd : Integer; List : TStringList; private // public constructor Create; destructor Destroy; end; type
  • 55. 7 Apêndice A TMBAObj = class private AdjList : TStringList; // Has the relations between the elements of all the transactions MaximumCliqueList : TStringList; // Represent the Maximum Clique found MaxCWt : Double; function DestroyAdjList : Integer; function getResultAdjList: TStringList; function getMaximumCliqueList: TStringList; public constructor Create; destructor Destroy; procedure FillAdjList (Line : TStringList; Start : Integer); function Find_Clique(var Clique: TStringList; var Weight: Double; Criteria: Integer): boolean; function FindTheMaximalClique(Criteria: Integer): boolean; property FAdjList : TStringList read getResultAdjList; property FMaximumCliqueList : TStringList read getMaximumCliqueList; property FMaxCliqueWeight : double read MaxCWt; end; implementation (******************************************************************************) constructor TMBAObj.Create; begin // Initialize List of Adjacencies AdjList := TStringList.Create; //Initialize the List that will have the Maximal Clique MaximumCliqueList := TStringList.Create; end; (******************************************************************************) destructor TMBAObj.Destroy; begin if Assigned(AdjList) then DestroyAdjList; if Assigned(MaximumCliqueList) then FreeAndNil (MaximumCliqueList); end; (******************************************************************************) function TMBAObj.DestroyAdjList : Integer; var i : Integer; prod : TProduct; begin if Assigned (AdjList) then begin for i := AdjList.Count-1 downto 0 do begin if Assigned (AdjList.Objects[i]) then begin prod := TProduct(AdjList.Objects[i]); FreeAndNil(prod); end; end; FreeAndNil (AdjList);