Comparador de Preços Inteligente Jhonny Alexander Aldeia de Jesus Dissertação para obtenção do Grau de Mestre em Engenharia Informática e de Computadores Orientador: Professor José Alberto Rodrigues Pereira Sardinha Júri Presidente: Professor Alberto Manuel Rodrigues da Silva Orientador: Professor José Alberto Rodrigues Pereira Sardinha Vogal: Professor Bruno Emanuel da Graça Martins Junho 2015
94
Embed
Comparador de Preços Inteligente - Autenticação · Comparador de Preços Inteligente ... pretende-se implementar um Comparador de Preços Inteligente utilizando uma técnica de
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Comparador de Preços Inteligente
Jhonny Alexander Aldeia de Jesus
Dissertação para obtenção do Grau de Mestre em
Engenharia Informática e de Computadores
Orientador: Professor José Alberto Rodrigues Pereira Sardinha
Júri
Presidente: Professor Alberto Manuel Rodrigues da SilvaOrientador: Professor José Alberto Rodrigues Pereira Sardinha
Vogal: Professor Bruno Emanuel da Graça Martins
Junho 2015
Agradecimentos
É com muita satisfação que expresso o meu mais profundo agradecimento a todos aqueles que torna-
ram possível a realização deste trabalho, e também aos diversos professores que me acompanharam
durante estes anos, que muito contribuíram para o enriquecimento da minha formação académica e
científica. Ao Professor Alberto Sardinha, o meu mais profundo Obrigado, pela orientação, ajuda, ami-
zade, disponibilidade e apoio, foi imprescindível para a conclusão desta dissertação.
Aos meus amigos e colegas, em especial a Nuno Marcos, queria expressar a minha mais sincera grati-
dão, obrigado pelo apoio, companheirismo, ajuda e motivação nas alturas de desânimo.
Á minha namorada, o meu mais sincero obrigado, pelo apoio, paciência, disponibilidade e ajuda, que
sempre me demostraste nas horas de maior aflição, com as tuas palavras de motivação fizeste-me
acreditar que seria capaz.
Quero agradecer à minha família, em especial aos meus pais e aos meus irmãos, por todo o apoio que
me deram, pela paciência, e por sempre acreditarem em mim, pois sem eles, não teria atingido esta
meta. O meu muito Obrigado.
i
Abstract
Price Comparators are tools that help users on the Internet to identify product prices obtained by
different e-commerce stores. These comparators help perform your shopping, finding the best deals
and offers.
Thus, we intend to implement a Intelligent Price Comparator using a Data Mining (DM) technique, that
searches for products in various e-commerce stores and finds results of similar products.
This project aims to evaluate existing technological capabilities, integrating internet information extrac-
tion and data analysis with DM techniques in price comparators, creating mechanisms that allow us to
perform different approaches. The evaluation will be made based on a comparison where we highlight
the differences, advantages and disadvantages of the intelligent price comparator and current market
price comparators with existing methodologies that support the veracity of the results of the techniques
applied.
Keywords
Web Crawler, Web Spider, Web Scraping, Data Mining, K-means, Incremental K-means, Internet,
Price comparators, Services search.
iv
Resumo
Os Comparadores de Preços são ferramentas que auxiliam os utilizadores na internet para identifi-
car preços de produtos dados por diferentes lojas e-commerce. Estes comparadores ajudam a realizar
as suas compras, localizando as melhores oportunidades e ofertas.
Assim, pretende-se implementar um Comparador de Preços Inteligente utilizando uma técnica de (Data
Mining) (DM), que pesquise produtos em diversas lojas e-commerce, e encontre resultados de produtos
semelhantes.
Este projeto pretende avaliar as potencialidades tecnológicas existentes, integrando a extração de in-
formação da internet e a análise dos dados com técnicas de DM num Comparador de Preços, criando
assim mecanismos que nos permitam realizar abordagens diferentes. A avaliação será efetuada com
base numa comparação onde realçamos as diferenças, vantagens e desvantagens do Comparador
de Preços Inteligente e os Comparadores de Preços do mercado, com metodologias existentes que
suportem a veracidade dos resultados das técnicas aplicadas.
Palavras Chave
Web Crawler, Web Spider, Web Scraping, Data Mining, K-means, Incremental K-means, Internet,
Os Comparadores de Preços (Price Comparison Website) são ferramentas para comparar preços
de produtos, também conhecidas como Price Comparison Service, ou Price Engine, estes, apresentam
listas de diferentes preços para produtos do mesmo género. Os Comparadores de Preços não são
locais de venda de produtos, como as lojas online (também conhecidas como lojas e-commerce), mas
sim agregadores dos produtos desses locais.
Atualmente existe uma grande variedade de mecanismos que facilitam estas tarefas, como por exem-
plo, os motores de busca integrados nas proprias lojas online: Fnac[3], Worten[2], os quais ajudam e
fornecem informação sobre os produtos pretendidos pelo cliente. Estes também podem procurar por
produtos extraídos das próprias lojas e-commerce, para posteriormente comparar o preço, e/ou filtrar
outras caraterísticas, como por exemplo: num televisor temos a dimensão diagonal do ecrã, o consumo
elétrico em Wats, entre outros.
Existem diferentes formas, dos Comparadores de Preços executarem as suas pesquisas:
• Online - A pesquisa é feita diretamente nas páginas de internet nesse mesmo instante;
• Offline - Os dados ou meta dados sobre os produtos que os utilizadores pretendem pesquisar já
se encontram numa Base de Dados (BD) local ao programa;
• Metasearch - Envia pedidos dos utilizadores para outros motores de pesquisa e/ou BD e agrega
os resultados em uma única lista ou exibe-os de acordo com sua fonte[4].
A tecnologia utilizada na internet está em constante evolução e sempre a melhorar, por isso, os
Comparadores de Preço seriam ferramentas interessantes para estudo junto com abordagens tecnoló-
gicas aplicadas a estes, utilizando métodos estáticos e matemáticos que poderiam ajudar a fazer uma
procura mais personalizada.
1.2 Comparadores de Preços
Os Comparadores de Preços existentes no mercado são diferentes entre eles, alguns com capaci-
dade de oferecer maior diversidade de produtos do que outros, interfaces alternativas, inclusive, apre-
sentações diferentes para os produtos comparados. O critério mais importante para o consumidor na
seleção de um produto, é o preço face as caraterísticas e marcas.
É importante referir que conceitos como: a extração de dados de internet, a análise de dados, e a apre-
sentação dos resultados, são componentes dos Comparadores de Preços que os tornam ferramentas
interessantes de estudo, não apenas pelas diversas possibilidades de implementação, arquiteturas e
modelos de negócio, mas também, para outras possíveis soluções a adotar, onde será introduzido o
caso de estudo de este trabalho.
2
1.3 Objetivos
Pretende-se desenvolver um Comparador de Preços Inteligente que utilize uma técnica de Data Mi-
ning (DM)1, que pesquise produtos em diversas lojas e-commerce2, de forma a agrupar produtos com
caraterísticas semelhantes.
O Comparador de Preços Inteligente, será semelhante aos comparadores de preços existentes:
PriceGrabber[5], Buscapé[6], e KuantoKusta[7]. A diferença encontra-se no funcionamento e na apre-
sentação dos resultados, face às caraterísticas escolhidas, num processo de procura de um produto do
mesmo género.
Os Comparadores de Preços, normalmente, funcionam com consultas Structured Query Language
(SQL) à BD e podem utilizar ficheiros de formatos e estruturas diferentes e/ou disponibilizar Web Servi-
ces (WS) para fazer o carregamento da informação. O nome atribuído a este processo é Data Feed.
Nestes Comparadores de Preços, o utilizador escolhe um produto pesquisando através de um campo
de texto ou pela seleção de categorias, até atingir o género de produto pretendido, podendo posterior-
mente restringir as caraterísticas disponibilizadas.
Por sua vez, o Comparador de Preços Inteligente utiliza diferentes abordagens, inclui técnicas de Web
Scraping para extrair informação das lojas e-commerce, e Clustering como técnica de DM escolhida
para a análise dos dados. Assim, o utilizador escolhe diretamente as caraterísticas do produto pre-
tendido, sendo-lhe apresentados como resultado, produtos semelhantes ou iguais às caraterísticas
indicadas.
1.4 Secções do Documento
O Caso de Estudo está organizado da seguinte forma:
No Capitulo 2 são apresentados conceitos básicos, introduzindo alguns Comparadores de Preços com
a sua respetiva arquitetura e funcionamento, para além dos algoritmos utilizados na implementação e
avaliação do programa a implementar.
O Capitulo 3 contem a Arquitetura do Comparador de Preços inteligente, assim como os passos para
o desenvolvimento e execução, código e diagramas de sequências dos módulos que fazem parte da
arquitetura.
No Capitulo 4 temos o caso de estudo, que aborda as variáveis em estudo, o processo de extração de
dados necessários para construir a população de dados a utilizar, o seu pré-processamento, a análise
1DM é o processo de análise de grandes quantidades de dados à procura de padrões consistentes, e envolve métodos queintersetam Inteligência artificial, Aprendizagem máquina e estatística.
2Lojas e-commerce também será denominado ao longo do texto por lojas online.
3
destes, e por fim mostro os resultados do estudo, finalizando com o Capitulo 5 correspondente as
Figura 2.9: Formato resposta em XML de um pedido GET KuantoKusta
13
2.2 Extração de Dados em Páginas de Internet
Para extrair os dados, existem alguns passos que deverão ser tidos em conta, começando por um
conjunto de URLs, que servem de ponto de partida para atingir as páginas web6 desejadas. Se dese-
jarmos procurar por mais informação, continuamos explorando de hyperlinks em hyperlinks, avançando
em profundidade pela World Wide Web (WWW) até obter o que pretendemos retirar.
2.2.1 Web Crawlers
Web Crawlers [19] [20] é um Bot7 que navega, sistematicamente a WWW. O Crawler inicia-se com
uma listagem de URLs também chamadas de Seeds. À medida que o crawler visita essas URLs, este
identifica todos os hyperlinks na página, e acrescenta-os à lista8 de URLs, e esta por sua vez, será
visitada recursivamente.
Figura 2.10: Google Crawling[1]
Na figura 2.10 é apresentado um exemplo de crawling da Google[21]. Existem diversos programas
para Crawlers, que já estão desenvolvidos, tais como: Wget [22], Methabot [23], Googlebot [24], Msn-
bot [25]. Cada um destes, faz a sua função de crawlers otimizados e especializados em trabalhos
diferentes, por exemplo: O GoogleBot é especializado em indexar páginas e hyperlinks da internet no
seu motor de pesquisa, o Msnbot é utilizado particularmente no motor de pesquisa do MSN, Wget
e o Methabot são ferramentas Open Source que executam um crawler otimizado para procurar texto
de forma mais rápida e simplificada, evitando preocupações com protocolos HTTP, Hypertext Transfer
Protocol Secure (HTTPS), Secure Socket Layer (SSL), e Internet Protocol version 6 (IPv6); O Methabot
tem a particularidade de poder converter HyperText Markup Language (HTML) para XML.
6Páginas web também será referido como sites ou páginas de internet ao longo do texto.7Diminutivo de robot, também conhecido como internet bot ou web robot, esta é uma aplicação de software concebida para
simular ações humanas repetidas vezes.8Chamada de fronteira de rastreamento.
14
2.2.2 Web Spider
Web Spider [26][27] é um crawler que visita URLs nas páginas web, afim de criar uma lista de URLs
das mesmas, sendo este processo feito em simultâneo até visitar todos os URLs, de forma a criar uma
teia de todos estes.
2.2.3 Web Scraping
Web Scraping[28] é uma técnica de extração de informação das páginas de internet (sendo está
adotada pela maioria dos motores de pesquisa), que através da utilização de um web crawler trans-
forma dados não estruturados na web, (tipicamente páginas em formato HTML), em dados estruturados
que podem ser guardados numa BD.
2.2.4 Ferramentas para Web Scrapping
Após a realização de uma pesquisa, a extração de dados Web, será efetuada com uma das seguin-
tes ferramentas: Link Web Extractor [29], Web-Harvest [30] e Jsoup[31]. É relevante explicar que o Link
Web Extrator não se adequa, pois limita-se a extrair dados em formato XML, e é necessário para este
caso de estudo, ter a flexibilidade de poder extrair dados de outras formas, por exemplo: diretamente de
texto simples das páginas Web, para posteriormente guarda-los numa BD. No entanto, o Web-Harvest
e Jsoup podem extrair informação de documentos HTML, que é o pretendido, assim, optou-se ferra-
menta Jsoup, porque apresenta semânticas semelhantes à biblioteca jQuery e dos seletores Cascading
Style Sheets (CSS), com os quais nos encontramos familiarizados, enquanto que o Web-Harvest tem
uma própria sintaxe.
2.2.4.A Jsoup
Jsoup[31] é uma biblioteca Java para trabalhar com HTML, que fornece uma API para a extração e
manipulação de dados, usando o melhor do Document Object Model (DOM), CSS e métodos jQuery-
like.
• DOM - É uma especificação da World Wide Web Consortium (W3C)[32] é uma interface que per-
mite programas e scripts acederem e atualizarem dinamicamente o conteúdo, estrutura e estilo
de um documento. Este pode ser processado e os resultados desse processamento são incorpo-
rados novamente na página apresentada.
• CSS - É uma linguagem utilizada para definir a apresentação de documentos como HTML ou
XML.
Jsoup implementa a especificação WHATWG[33] HyperText Markup Language v5 (HTML5), e ana-
lisa HTML para o mesmo DOM como navegadores modernos.
• Faz scraping e parsing de: documento HTML desde uma URL, arquivo ou string.
15
• Encontra e extrai dados, utilizando DOM traversal9 ou seletores CSS
• Manipula os elementos, os atributos e o texto do HTML
Jsoup é projetado para lidar com todas as variedades de HTML encontradas e por sua vez cria uma
árvore de análise.
2.3 Análise de Dados
A técnica de DM escolhida para a análise e agrupamento de dados dos produtos é o Clustering, e o
algoritmo para este é o Incremental k-means, uma variante do k-means que tem como tarefa apresentar
o melhor agrupamento de dados, ou seja, o melhor cluster. A utilização desta variante deve-se à
aplicação de uma função de avaliação denominada F(k). A função F(k) avalia qual o melhor número de
clusters num determinado agrupamento de dados, ou seja, a escolha de um valor de K ótimo.
2.3.1 Clustering
O Clustering (em português "Segmentação"[34]) é uma técnica que consiste em encontrar uma
coleção de dados, que de alguma forma são semelhantes, sendo um cluster uma coleção de objetos
que são semelhantes entre si, mas distintos de outros objetos de outro cluste[35].
O objetivo de criar um cluster é determinar um conjunto de objetos (dados) que ainda não têm uma
caraterística definida que os assemelha. Não existe qualquer critério para definir o que constitui um
bom agrupamento, sendo este definido pelo utilizador face às suas necessidades[35]. Os algoritmos de
Clustering podem ser aplicados em Biologia, Biblioteconomia, Urbanismo, Sismologia, Marketing entre
outros.
Figura 2.11: Clusters
9São seletores próprios do DOM que servem para navegar através dos seus nós
16
Na figura 2.11 A, podemos identificar três conjuntos se o critério de similaridade for a distância, pois,
conseguimos ver cada um de estes objetos (pontos) mais próximos entre si do que aos objetos dos ou-
tros conjuntos. Assim podemos agrupa-los criando três grupos (clusters) como mostrado em 2.11 B.
Estes algoritmos devem principalmente satisfazer os seguintes requisitos: escalabilidade, alta dimensi-
onalidade, capacidade de interpretação, usabilidade, lidar com diferentes tipos de atributos, capacidade
de lidar com o ruído e descobrir clusters com forma arbitrária, ou seja, para podermos criar um cluster
devemos saber como lidar com os dados e as suas caraterísticas.
Por outro lado existem diversos problemas com este tipo de técnica [35]: As técnicas atuais não con-
templam todos os requisitos de forma adequada, o resultado do algoritmo de agrupamento pode ser
interpretado de diferentes maneiras, lidar com grande número de dimensões e objetos de dados pode
ser problemático por causa da complexidade de tempo e a eficácia do método depende da definição de
distancia (isto para o agrupamento com base na distância).
2.3.2 K-means
O termo K-means foi usado pela primeira vez por James MacQueen em 1967 [36] sendo um algo-
ritmo de aprendizagem não supervisionada que resolve o problema de agrupamento, sendo um dos
mais simples que existe atualmente [37]. O objetivo deste algoritmo é agrupar um conjunto de dados
(ou instâncias) num certo número de clusters definindo K centróides, um para cada cluster [34][38], em
que o K será calculado mediante a utilização de uma função F(k) que será abordado mais adiante. Os
centróides representam o centro de cada conjunto de dados (o centro de cada cluster).
Existem várias formas de inicializar os centróides, sendo a inicialização aleatória utilizada neste estudo[34].
Passos da Inicialização aleatória utilizada[34]:
• Primeiro passo - consiste em inicializar os centróides, atribuindo-lhes um valor aleatório;
• Segundo passo - temos que levar cada ponto que pertence a um determinado conjunto de dados
e associá-la ao centróide mais próximo, até associar os pontos todos e assim concluímos este
passo;
• Terceiro passo - Voltamos a recalcular os novos K centróides como baricentro dos clusters resul-
tantes da etapa anterior;
• Quarto passo - Agora temos novos K centróides, onde uma ligação tem de ser feita entre os
mesmos dados e o novo centróide mais próximo, e assim sucessivamente até que não seja pos-
sível fazer mais mudanças, isto é, até os K centróides estabilizarem e não mudarem mais a sua
posição.
17
O K-means é representando pela seguinte fórmula:
J =
k∑j=1
n∑i=1
‖x(j)i − cj‖2 (2.1)
1 k-means(Dataset D, int k)
2 // Escolha de uma instancia representante para cada grupo
3 for each for each for each cluster Gi c {G1...Gk} do
4 Gi.c <- x: x c Dom(D)
5 ok <- true
6 do
7 // x passa a pertencer ao grupo com representante mais semelhante
8 for each for each for each instance x c D do
9 Gi <- G:G.c = arg min(f(x, ci))
10 if x c Gi then
11 Gi <- Gi U {x}
12 ok <- false
13 // O representante de um grupo torna-se a media das instancias do grupo
14 for each for each for each cluster Gi c {G1...Gk} do
15 Gi.c <- mean {x: x c Gi}
16 while not ok()
17 return {G return i}
Figura 2.12: Pseudocódigo do k-means
onde ‖x(j)i − cj‖2 é uma medida de distância escolhida entre uma instancia x
(j)i e o centro de cluster
cj , que a sua vez é um indicador da distância entre as "n"instancias e os seus respetivos centros dos
clusters [37].
Para uma melhor compreensão, será explicado os passos do k-means com a ilustração seguinte 2.13:
Figura 2.13: Iterações do K-Means
Na figura 2.13 os pontos azuis representam as instâncias (dados) e o ponto vermelho e verde (bolas
maiores) são os centróides que representam os grupos de instâncias (clusters).
Passo 1: Como podemos ver na figura 2.13, em "A", foram colocados os pontos K que representam o
grupo de centróides inicial, e calculamos as distâncias dos centróides para todas as instâncias existen-
tes (pontos azuis).
18
Passo 2: Tendo as distâncias calculadas, agrupamos as instâncias com as distâncias mais perto dos
centróides como podemos ver em "B".
Passo 3: Quando todas as instâncias foram finalmente assignadas ao grupo correspondente, recalcula-
mos novamente a posição dos centróides, isto é feito com base na média das distâncias das instâncias
de cada agrupamento provisório do passo 2, e assim obtemos "C".
Passo 4: Por último temos de repetir o passo 2 e 3 até os centróides estabilizarem e não haver mais
mudanças, para obtermos os respetivos clusters.
A Aleatoriedade do K-means pode ser um problema em situações que os agrupamentos devem conter
dados semelhantes entre eles, isto acontece porque a inicialização do k-means é feita aleatoriamente,
podendo escolher centróides que criem agrupamentos com dados semelhantes, muito distanciados
entre eles. A inicialização dos centróides e a escolha de um bom K (número de clusters) pode aju-
dar a resolver esse problema. Existem abordagens possíveis que resolvem esse problema, como por
exemplo Incremental K-means.
2.3.2.A Incremental K-means
Uma das maiores deficiências do K-means é a dependência da aleatoriedade, isto faz com que
exista a possibilidade de serem criados agrupamentos de dados menos desejados. O Incremental K-
means é uma variante do K-means que resolve esse problema, criando resultados mais consistentes,
tendo como objetivo uniformizar a distribuição dos dados pelos clusters, reduzindo o erro de distor-
ção2.14a.
(a) Distorção do Erro (b) Cálculo do novo centróide wk
(c) Número de objetos do cluster k
Figura 2.14: Incremental K-means
A diferença do Incremental k-means para o k-means, está na inicialização e na criação de clusters
incrementalmente. O Incremental k-means é iniciado atribuindo-lhe um valor K, este inicia com k=1 e
vai incrementando por 1 valor em cada iteração até atingir o valor de K atribuído inicialmente. Enquanto
k < 2, os primeiros centróides são escolhidos aleatoriamente, quando k > 1, é criado 1 centróide em
cada iteração mas não aleatoriamente, este centróide é calculado com base na distribuição dos clusters
e dados existentes, de forma a manter uma distribuição uniforme pelos dados.
O Incremental k-means inclui uma operação de salto durante o processo de aprendizagem, para corrigir
a posição do cluster pior colocado. A operação lida com o problema removendo o centróide de um
19
cluster duma inadequada posição, e cria um novo centróide 2.14b que é inserido no pior cluster (o
que tem pior distorção do erro) em cada iteração, inserindo-a para uma posição mais promissora. A
Distorção do Erro 2.14a serve para apresentar as irregularidades na distribuição de dados avaliando se
o cluster está numa má posição, ou seja, em quanto a distorção do erro não convergir para um valor,
esta correção será feita até o algoritmo estabilizar.
Na figura acima 2.14, o N representa o numero de objetos de um cluster, S é a soma das distorções
dos clusters, Wk corresponde ao centróide do cluster k, e x0 é o centro do espaço euclidiano, que
representa a media das distâncias de todos os objetos. Os índices i e j representam o índice do pior
cluster e do cluster mais próximo ao pior, respetivamente.
O algoritmo segue os seguintes passos[39]:
Atribuir K = 1.
Fase 1 (Treinamento normal
1. Se K = 1, escolher um ponto arbitrário para o centróide do cluster. Se K > 1, inserir o centróide do
novo cluster, no cluster com a maior distorção;
2. Atribuir cada objeto do conjunto de dados ao cluster mais próximo e atualiza o seu centróide
(similar ao k-means);
3. Se o centróide do cluster não se mover, ir a Fase 2. Caso contrario, ir a Fase 1, passo 2;
Fase 2 (Aumento dos clusters)
1. Se K é mais pequeno que um valor específico, aumentar K por 1 e ir a Fase 1, passo 1. Caso
contrário, parar.
2.3.2.B Escolha do K ideal
O valor K, serve para indicar o número de clusters num determinado conjunto de dados, e a escolha
deste é muito importante devido a qualidade dos resultados. Se para uma determinada população o K
for muito pequeno, a distribuição dos dados face às suas características podem não ser corretos, pois
formar-se-ão poucos clusters, que contêm dados que poderão não ser semelhantes entre si. No caso
do K ser muito grande, estaríamos a criar demasiados clusters com dados semelhante distribuídos por
diversos clusters, o que não faz muito sentido, uma vez que o objetivo é separar os dados semelhantes
o mais próximo possível por clusters. Exemplo:
Considerando um caso em que existe dados que tem como característica a cor: amarelo, azul, verde
e vermelho, o K ideal seria 4, uma cor para cada clusters. Se o K for menor que 4, haveria mistura de
cores nos clusters. Se o K for superior a 4 haverá repetição de cores nos diferentes clusters.
20
Tendo em conta este problema, a abordagem utilizada para encontrar o K ideal, seria a implementação
da função F(k)[40], que testa diversos valores de k, de modo a determinar o melhor número de clusters.
A função F(k), pode revelar mais do que um K válido. O algoritmo desta função deve começar em k
= 2 e incrementar por 1, até o resultado de F(k) convergir para um valor mais próximo de 1.0, e ai o
algoritmo termina. Se k fosse 1, o valor de F(k) seria 1.0. Se os valores iniciais de F(k) para cada k
forem muito diferentes, o algoritmo tem de incrementar o k até que ele comece a convergir. Quando os
resultados da função F(k) comecem a estabilizar (a convergir para 1.0) e aparecerem valores diferentes
ao valor que se está a convergir, esse será um possível K ideal.
F(k) toma em conta a distorção do cluster, figura 2.16a, que são as irregularidades na distribuição dos
dados num cluster, para perceber se os clusters estão bem distribuídos. A função F(k) rege-se pela
seguinte fórmula:
Figura 2.15: Função F(k)
Na utilização da função F(k), é importante que o resultado varie o menos possível quando o K
permanece inalterado. Por isso, o algoritmo k-means deverá obter resultados consistentes para que
o desempenho da função de avaliação F(k) tenha bons resultados. E é por este motivo que introduzi
anteriormente a variante Incremental K-means que resolve esse problema, pois a principal deficiência
do k-means é a dependência da aleatoriedade. As figuras abaixo 2.16, representam as fórmulas que
complementam a receita da função F(k)2.15.
(a) Distorção do cluster (b) Soma das distorções dos clusters(c) Factor de peso da distribuição dos
dados
Figura 2.16: Funções complementares para o cálculo de F(k)
A inicialização do algoritmo F(k) pode variar dependo da forma como queremos que termine, pode-
mos optar por ele terminar num valor fixo, ou deter o algoritmo quando estabilize ao convergir para 1.0.
Resumidamente, o algoritmo F(k) segue os seguintes passos[40]:
Passo 1: Inicializar k = 2, e incrementar por 1 valor, até o algoritmo finalizar.
Passo 2: No arranque do algoritmo, se os valores de F(k) não estabilizarem em quanto convergem para
1.0, ignorar os resultados de F(k).
21
Passo 3: Quando os valores de F(k) estabilizarem até convergirem para 1.0, o algoritmo termina.
Passo 4: Para cada k, os valores de F(k) que forem diferentes após a estabilização e até a finalização
do algoritmo, serão os k ideais a considerar. Entenda-se por valores de F(k) diferentes, a variação
considerável ao valor que está a convergir. Em Anexo A.6, os dados sublinhados a verde representam
os resultados de F(k) dos melhores k’s, e em azul outras possibilidades de k.
As figuras seguintes, são um exemplo do comportamento da função F(k) em determinadas distribuições
de dados[40].
Figura 2.17: Exemplo 1, gráfico de F(k)
Na figura 2.17, podemos verificar que os dados encontram-se concentrados numa única região com
uma distribuição normal, e a avaliação do gráfico de F(k), não apresenta um comportamento irregular,
mantendo-se próximo ao valor 1 para o qual convergiu. Isto sugere que o valor de K deve ser 1.
22
Figura 2.18: Exemplo 2, gráfico de F(k)
No conjunto de dados apresentado na figura acima 2.18, podemos visualizar duas regiões bem
separadas, e como podemos notar, a avaliação do gráfico F(k) tem uma forte irregularidade nos seus
valores quando K = 2, mantendo os restantes convergindo para 1. Isto sugere que K = 2 deve ser o
valor tomado.
Figura 2.19: Exemplo 3, gráfico de F(k)
No exemplo acima 2.19, o conjunto de dados apresentado, apresenta 3 conjuntos de dados bem
separados, isto significa que os dados são fortemente semelhantes em cada conjunto. A avaliação feita
pelo gráfico de F(k) mostra esse comportamento, indicando uma forte tendência quando K = 3, logo
esse é o valor que deve ser utilizado.
Em síntese uma tendência ou comportamento irregular significa que o valor da função F(k) é muito
23
elevado ou muito baixo do valor para o qual está a convergir, é assim que se escolhe o valor de K.
Nos exemplos indicados acima, percebemos como F(k) com base no gráfico de tendências, consegue
indicar-nos possíveis valores que o K deve tomar. Evidentemente, se existir uma distribuição com re-
giões de dados que se sobreponham, podem existir mais do que um valor de K.
A versão normal do k-means pode ser um problema na utilização do F(k), porque pode induzir-nos em
erro, uma vez que esta função, avalia a distribuição dos clusters pela distribuição dos dados, e o Incre-
mental k-means tem isso em consideração, conseguindo melhorar as escolhas dos novos centróides
incrementalmente, mantendo assim resultados mais consistentes, evitando agrupamentos com dados
20 FileOutputStream fout = new FileOutputStream("KClusters.pc");
21 ObjectOutputStream oout = new ObjectOutputStream(fout);
22 oout.writeObject(clustersListBestK);
23 } catch (Exception e1) {
24 e1.printStackTrace();
25 }
26 }
Figura 3.9: Geração dos Cluster e Avaliação de possíveis K’s, com base na população de televisões em estudo. Código éexecutado no método detailedClusteringKMeans da Classe PriceComparator e Corresponde a Envia Dados para o Gera
clustering no Diagrama de Sequencia.
O diagrama de sequência 3.8, inicia-se quando o "fk.php"do PC Interface for executado. Este di-
agrama, também pode ser o mesmo para a execução normal do programa, mas, sem o processo
"ClusteringKmeans"ativo. Se o ficheiro "KClusters.pc"não existir, o processo "ClusteringKmeans"fica
ativo.
Com base nos clusters criados e avaliações apresentadas na interface, Anexo A.5, procedemos a es-
colher o valor K que mais se adequa. De seguida configurámos as variáveis no código da Classe
Main 3.10, e compilamos com o K definido. Para além disto, no código apresentado abaixo, podemos
configurar também, a variável que controla o Modo em que opera o PC Core.
34
1 /**
2 * Modo 1 (Web Scraping)
3 * Modo 2 (PCInterface)
4 **/
5 static int MODE = 2;
6 static int K = 39;
7
8 public static void main(String[] args){
9
10 try {
11 DataBase db = new DataBase("localhost:3306", "comparador_precos", "root", "");
12 db.debugMode(false);
13
14 if(MODE == 1){
15 WebScraperWorten wsw = new WebScraperWorten(db);
16 wsw.execute();
17
18 WebScraperFnac wsf = new WebScraperFnac(db);
19 wsf.execute();
20 }else if(MODE == 2){
21 PriceComparator pc = new PriceComparator(db, args);
22 pc.executeSearch();
23 }
24
25 db.closseConnection();
26
27 } catch (Exception e) {
28 e.printStackTrace();
29 }
30 }
Figura 3.10: Configuração e compilação dos dados. Executado no método main da package pc
Em Anexo A.11, apresenta o modelo Unified Modeling Language (UML) da implementação do algo-
ritmo Incremental k-means, o qual é constituído por cinco classes: Point, Cluster, Clusters, Incremen-
talKmeans e Fk.
• Classe Point, corresponde ao ponto que representa um objeto no cluster, este ponto é de N
dimensões, onde N é o número de características dos produtos, para além de esta informação,
também identifica os produtos pelo seu respetivo ID.
• Classe Cluster, guarda uma lista dos pontos List<Point> points, o seu centróide (Point), métodos
para, atualizar o centróide, obter a lista de pontos e centróide.
• Classe Clusters corresponde a uma ArrayList da Classe Cluster : Clusters extends ArrayList<Cluster>.
Contem métodos para, atualizar os clusters, atribuir pontos aos clusters, e saber o cluster mais
próximo a um ponto.
• Classe IncrementalKmeans executa o algoritmo utilizando todas as funcionalidades das classes
das alíneas anteriores.
• Classe Fk executa a função de avaliação, e recebe como argumento no construtor uma lista de
clusters: List<Cluster> clusters, e o valor de K que foi utilizado para a lista de clusters criada.
35
3.3 PC Interface
O programa, comporta dois tipos de interfaces, uma será meramente exploratória, denominada
por "Pesquisa Absoluta", que serve para simular os mesmos comportamentos dos Comparadores de
Preços existentes. A outra interface, "Pesquisa por Parâmetros"é a que corresponde ao Comparador
de Preços Inteligente, nesta, a procura do produto é feita através da escolha de características do
produto de um único género para o estudo que abordarei adiante. A Interface (modulo PC Interface) é
implementada em PHP e HTML com suporte da biblioteca jQuery Mobile.
Figura 3.11: Screenshot PC Interface
A interface da figura acima 3.11, é composta pela seguinte estrutura:
• Selecionador de interface serve para fazer a seleção entre a interface de teste "Pesquisa Abso-
luta", e a do Comparador Inteligente "Pesquisa por Parâmetros".
• Filtro de ordenação apresenta os produtos ordenados da seguinte forma: mais semelhante,
ordem alfabética, mais barato e mais caro.
• Filtros de características representa os filtros das características, onde cada uma de estas é
associada a um valor numérico. O utilizador poderá ajustar cada uma destas, através de um
slider com limites de intervalo.
• Botão de Pesquisa Ao ser pressionado, inicia a operação de pesquisa que comunica com o
modulo PC Core, e presentara uma listam de produtos.
36
• Apresentação de resultados é a secção que apresenta a listagem dos resultados. A apresen-
tação é feita em blocos, onde cada um representa um produto composto por um título, imagem,
preço, e a loja de onde provém. Nestes blocos é incluído o hyperlink que reencaminha o utilizador
para o produto na loja respetiva.
3.4 Base de Dados (BD)
Figura 3.12: Modelo Relacional (MR) da BD
A Base de Dados (BD) é construída em MySQL, que é um Data Base Management System (DBMS)12.
Esta foi concebida num Modelo Relacional (MR) apresentado na figura 3.12, composta por três tabelas,
onde será armazenado os dados estraídos das lojas online, que correspondem à população em estudo.
As tabelas foram organizadas em três tipos: shop, product e features.
• shop esta tabela corresponde as listas de lojas e-commerce a serem estudadas neste projeto. É
composto por três campos: um identificador que relaciona a loja aos produtos, o nome e a URL
da respetiva loja.
• product a tabela é composta por um identificador para associar as características dos produtos
extraídos na tabela features, um nome que faz parte do titulo apresentado pelo lojista na página12Conjunto de programas, responsáveis pela gestão da BD
37
web onde se encontra o produto, o preço, e os URLs, onde um deles é para a imagem, e o outro
reencaminha o produto a ser visualizado na interface do Comparador Inteligente para a respetiva
loja.
• features é a tabela que representa o tipo de característica e o valor associado a este, seja ele
numérico ou texto, embora para este estudo só iremos considerar valores numéricos. É importante
notar, que os dados armazenados no momento da extração, ainda não passaram por uma fase de
limpeza (pré-processamento), com exceção do preço (inserido na tabela product). Isto acontece,
porque no momento do desenho deste modelo, os preços foram assumidos como numéricos, mas
nos sites das lojas, estes vem acompanhado do símbolo da moeda euro (e), vírgulas e/ou pontos
das casas decimais. Para os restantes casos, como referi anteriormente, as características como
contêm grande diversidade de informação textual e numérica, a limpeza é feita posteriormente,
na configuração do clustering (fase de pré-processamento, secção 4.3).
38
3.5 Comunicação entre PC Core e PC Interface é Interação com oUtilizador
A comunicação entre PC Core e PC Interface só deverá ser realizada quando o PC Core se encon-
trar em Modo 2, com o código configurado e compilado como indicado na secção do capitulo anterior
3.2.2. Se tentar qualquer interação com a interface, e o modulo PC Core não estiver compilado, ou está
compilado em Modo 1, não obterá qualquer tipo de resposta.
Assim, todo o processo de comunicação só poderá ser feito com o PC Core em Modo 2. O diagrama de
sequência apresentado 3.13, é um exemplo de um funcionamento completo, onde o modulo PC Core
já se encontra configurado e preparado para o utilizador poder fazer as suas pesquisas. No entanto, a
sequência de comunicação é a mesma omitindo só o processo "Loja Online", quando fazemos a confi-
guração do agrupamento de dados (clustering) através da execução "fk.php"do modulo PC Interface.
Utilizador PC Interface PC Core Loja Online
Escolhe
atributos Envia
dados
Dados
dos produtos
Processa
dadosListagem
dos produtos
Escolhe
produto
Vai
a Loja
Dados
do produtoApresenta
produto
Figura 3.13: Diagrama de sequência do PC Interface
Quando se deseja efetuar um pedido de pesquisa desde o PC Interface, e o PC Core está preparado
para execução, uma sequência de código PHP como indicado em 3.14 é executado.
12 exec('java -cp ../libs/mysql-connector-java-5.1.26/mysql-connector-java-5.1.26-bin.jar; pc
.Main '.$params, $output);
13 }
Figura 3.14: Pedido efetuado pelo PC Interface ao PC Core (Linguagem: PHP - Ficheiro index.php no Modulo PC Interface).Corresponde a seta "Envia dados"do processo PC Interface no diagrama de Sequencia.
Quando um pedido é recebido pelo PC Core, este avalia os dados, e gera uma resposta numa string
Figura 3.15: Interpretação e Apresentação da resposta ao utilizador pelo PC Interface (Linguagem: PHP, HTML - Ficheiroindex.php no Modulo PC Interface). Corresponde a seta "Dados dos produtos"do processo PC Interface no diagrama de
Sequencia.
40
Se executamos o script do ficheiro "fk.php"do Modulo PC Interface para configurar o sistema, será
executado o código 3.16, que apresentará mediante a impressão da variável $output, uma listagem de
avaliações F(k) para diferentes K clusters analisados, Anexo A.5.