• Nenhum resultado encontrado

Mineração de Sequências Frequentes

3. Metodologia

3.2 Mineração de Sequências Frequentes

O objetivo deste trabalho é identificar e recomendar uma sequência de POIs a um utilizador utilizando uma série de técnicas de mineração de sequências. Esta sequência de POIs não é necessariamente uma rota existente na base de dados, mas sim a seleção de POIs encontrados em sequência.

Ou seja, para uma série de sequências 𝑆 {𝑠1, 𝑠2, … 𝑠𝑛}, em que cada sequência contém uma transação de um conjunto de itens 𝐼 {𝑖1, 𝑖2, … 𝑖𝑛} numa determinada ordem temporal, é possível identificar os padrões frequentes, associações e correlações entre os diferentes itens que cada sequência tem no seu “cesto”.

20

três e dois itens cada uma, respetivamente. Os itens {𝑀𝑢𝑠𝑒𝑢 𝐴} e {𝐶𝑜𝑙𝑖𝑠𝑒𝑢} aparecem em ambas as sequências. A ordem temporal é um fator importante na determinação da transação, sob a forma de data ou apenas horas/minutos. A determinação das subsequências mais frequentes baseia-se na probabilidade de, no caso do exemplo, ao item 𝑀𝑢𝑠𝑒𝑢 𝐴 seguir-se a visita ao item 𝐶𝑜𝑙𝑖𝑠𝑒𝑢, ou seja, de {𝑀𝑢𝑠𝑒𝑢 𝐴, 𝐶𝑜𝑙𝑖𝑠𝑒𝑢} ser uma das subsequências possíveis das duas sequências mencionadas. As medidas utilizadas para avaliar essa probabilidade e devolver um certo número de subsequências são o suporte e confiança. O suporte de uma subsequência 𝑌 é definido como frequência em que 𝑌 aparece em 𝑆, um valor elevado significa que é uma subsequência cujos itens 𝐼 aparecem com regularidade em cada sequência 𝑆. A confiança é traduzida como a percentagem de itens em 𝑠1 que podem também ser encontrados em 𝑠2. Assim, uma subsequência é denominada frequente quando ocorre mais vezes que o suporte mínimo definido. Uma subsequência frequente é máxima, suporte 100% se não é uma subsequência de qualquer outra sequência frequente. Por exemplo, {𝑀𝑢𝑠𝑒𝑢 𝐴, 𝐼𝑔𝑟𝑒𝑗𝑎} é uma subsequência com suporte 50% pois é uma subsequência que depende de uma sequência maior, e com confiança 50% pois é uma subsequência que tem essa ordem de itens em 50% das sequências apresentadas.

Um requisito importante para usar esta técnica de mineração de dados em sequência é ter um algoritmo rápido e eficiente pois o tempo de processamento computacional dos dados tem um grande impacto quando se trabalha com um grande número de dados. Deste modo, selecionou-se o algoritmo SPADE, tanto pela disponibilidade na biblioteca do R, como pela sua maior eficiência face ao algoritmo GSP (Zaki, 2001). A alternativa era a seleção do algoritmo de mineração de sequências frequentes no software R o TraMineR (Trajectory Miner in R). Ao contrário deste algoritmo, o SPADE tem a particularidade de gerar subsequências respeitando as regras de associação, ou seja, considerando que os itens {𝐼𝑔𝑟𝑒𝑗𝑎, 𝐶𝑜𝑙𝑖𝑠𝑒𝑢} aparecem sempre a seguir a {𝑀𝑢𝑠𝑒𝑢 𝐴} nas sequências de 𝑆, então as subsequências 𝑌 terão sempre a ordem {𝑀𝑢𝑠𝑒𝑢 𝐴, 𝐼𝑔𝑟𝑒𝑗𝑎, 𝐶𝑜𝑙𝑖𝑠𝑒𝑢} e nunca {𝐼𝑔𝑟𝑒𝑗𝑎, 𝑀𝑢𝑠𝑒𝑢 𝐴, 𝐶𝑜𝑙𝑖𝑠𝑒𝑢}. Assim, assume-se nesta tese que o tempo cumulativo de visita das subsequências é representativo do tempo total numa visita que inclua os trajetos. Porque, se se considerar que a subsequência {𝑀𝑢𝑠𝑒𝑢 𝐴, 𝐼𝑔𝑟𝑒𝑗𝑎, 𝐶𝑜𝑙𝑖𝑠𝑒𝑢} tem um percurso direto bem definido, não se pode dizer que ao percorrer a subsequência {𝐼𝑔𝑟𝑒𝑗𝑎, 𝑀𝑢𝑠𝑒𝑢 𝐴, 𝐶𝑜𝑙𝑖𝑠𝑒𝑢} o percurso não seja maior.

21

3.2.1 Algoritmos para obter recomendações

Com uma abordagem mineração de sequências é possível identificar o padrão que ocorra vezes suficientes numa rota, dado pelo suporte, de maneira a que seja considerado de interesse para visitar. Indiretamente, esses padrões permitem recomendar os POIs mais populares e importantes. A figura seguinte apresenta a estrutura dos algoritmos aplicados para preparar o conjunto de dados para mineração de sequências.

Algoritmo 1. Algoritmo para preparação dos dados Entrada:

BD Base de dados de rotas < 𝐼𝐷𝑛{𝐼𝑛, 𝑇𝑛} > 𝛿 Um limiar de suporte mínimo

Saída:

𝜏 Todos 𝐼𝑛 com suporte maior que 𝛿

𝜏′ Transação de < 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛{𝑒𝑣𝑒𝑛𝑡𝐼𝐷𝑛, 𝑖𝑡𝑒𝑚𝑛} > Método: 1: para cada < 𝐼𝐷𝑛{𝐼𝑛, 𝑇𝑛} >∈ BD 2: se frequência 𝐼𝑛 > 𝛿 então 3: adicionar < 𝐼𝐷𝑛{𝐼𝑛, 𝑇𝑛} > a 𝜏 4: senão apagar < 𝐼𝐷𝑛{𝐼𝑛, 𝑇𝑛} > 5: fim se 6: fim

7: para cada evento 𝑇𝑛 ∈ 𝜏

8: calcular o tempo cumulativo 𝑇𝑐 9: adicionar 𝑇𝑐 a 𝜏 10: fim 11: para cada < 𝐼𝐷𝑛{𝐼𝑛, 𝑇𝑐𝑛} > ∈ 𝜏 12: transformar em transação < 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷{𝑒𝑣𝑒𝑛𝑡𝐼𝐷, 𝑖𝑡𝑒𝑚} > 13: adicionar < 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛{𝑒𝑣𝑒𝑛𝑡𝐼𝐷𝑛, 𝑖𝑡𝑒𝑚𝑛} > a 𝜏’ 14: fim

Figura 2 - Pseudocódigo para a preparação dos dados para o algoritmo que gera

subsequências

O input do algoritmo é a base de dados contendo um número de rotas 𝐼𝐷𝑛 , com determinado número de POIs 𝐼𝑛 e tempo de visita de associado 𝑇𝑛. O objetivo do Algoritmo 1 é, em primeiro lugar, remover os POIs que aparecem uma única vez (suporte mínimo 𝛿 menor que dois), por erro, ou porque são POIs tão específicos que não faz sentido que sejam sugeridos. Depois, calcula o tempo cumulativo 𝑇𝑐 da visita de cada sequência de POIs, de maneira a assumir o tempo total de visita e percurso de uma sequência. O último passo é transformação dos dados em transação 𝜏’ de maneira a ser possível correr o algoritmo SPADE.

O Algoritmo 2 apresenta de uma maneira genérica o algoritmo para gerar subsequências de POIs dos dados preparados através do Algoritmo 1. Através de uma definição do suporte mínimo 𝜎 , o algoritmo percorre a transação 𝜏′ e procura encontrar subsequências de

22

tamanho 1. Se a frequência for maior que o suporte mínimo, o algoritmo tenta encontrar subsequências de dois itens, e por aí adiante.

Algoritmo 2. Algoritmo para gerar subsequências frequentes Entrada:

𝜏′ Base de dados de transações < 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛{𝑒𝑣𝑒𝑛𝑡𝐼𝐷𝑛, 𝑖𝑡𝑒𝑚𝑛} > 𝜎 Um limiar de suporte mínimo

Saída:

𝑠1 Conjunto de subsequências ordenadas com suporte maior que σ

Método

1: para cada 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛 ∈ 𝜏′

2: percorrer 𝜏′ para encontrar todos {𝑖𝑡𝑒𝑚𝑛} frequentes 3: se 𝑠𝑢𝑝𝑜𝑟𝑡𝑒(subsequência {𝑖𝑡𝑒𝑚𝑛}) > 𝜎 então

4: adicionar 𝑠𝑢𝑝𝑜𝑟𝑡𝑒({𝑖𝑡𝑒𝑚𝑛}[𝑒𝑣𝑒𝑛𝑡𝐼𝐷𝑛]) a 𝑠1 5: adicionar o valor de 𝜎 a 𝑠1

6: senão eliminar a subsequência

7: fim se

8: fim

9: para cada subsequência ∈ 𝑠1

10: calcular o tempo cumulativo 𝑇𝑐′ e adicionar a 𝑠1

11: calcular o comprimento da subsequência 𝑓𝑟𝑒𝑞 e adicionar a 𝑠1

12: ordenar 𝑠1 de acordo com o suporte e o comprimento da subsequência 13: fim

Figura 3 - Pseudocódigo de um algoritmo de mineração de subsequências

Após o tratamento dos dados e da geração de subsequências segue-se a fase da recomendação dos POIs, de acordo com as preferências de visita do utilizador dentro do tempo disponível. O algoritmo 3 apresenta o conjunto de passos desde a geração de subsequências até à sugestão final. Parte-se do princípio que o utilizador sabe com antecedência qual POI 𝑞𝑖 pretende visitar e durante que espaço temporal 𝑞𝑡. O objetivo é recomendar uma subsequência de POIs dentro da seleção POI e tempo de visita total de um utilizador. Se o algoritmo conseguir encontrar uma subsequência com o(s) POI(s) pretendido(s), então considera-se que a recomendação é eficaz. As sugestões 𝜃 são por fim ordenadas por suporte 𝜎, número de POIs em cada subsequência 𝑓𝑟𝑒𝑞 e, por fim, no caso de esses dois atributos serem iguais, entra o tempo cumulativo máximo de visita de cada subsequência [𝑇𝑐′].

23

Algoritmo 3. Algoritmo para gerar recomendações Entrada:

𝑠1 Conjunto de subsequências com suporte maior que σ 𝑞𝑈 Pedido do utilizador sobre os Itens 𝑞𝑖 que pretende visitar 𝑞𝑇 Pedido do utilizador sobre o Tempo 𝑞𝑡 que pretende dispensar

Saída:

𝜃 Conjunto de subsequências < 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛{𝐼𝑡𝑒𝑚𝑛}[𝑇𝑐′] > a serem recomendados

Método

1: para cada 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷 ∈ 𝑠1

2: para cada {𝐼𝑡𝑒𝑚} ∈ 𝑠1

3: para cada item {𝑞𝑖} ∈ 𝑞𝑈

4: se{𝐼𝑡𝑒𝑚𝑛} ∈ 𝑠1 = {𝑞𝑖} ∈ 𝑞𝑈 então 5: adicionar 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛 a 𝜃 6: adicionar {𝐼𝑡𝑒𝑚𝑛} 𝑎 𝜃 7: fim se 8: fim 9: fim 10: fim 11: para cada 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛 ∈ 𝜃 12: para cada 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛 ∈ 𝑠1 13: se 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷 ∈ 𝜃 = 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛 ∈ 𝑠1 14: adicionar [𝑇𝑐′] a 𝜃 15: fim se 16: fim 17: fim 18: para cada 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷𝑛 ∈ 𝜃 19: para cada 𝑇𝑐′ ∈ 𝑠1 20: para cada 𝑞𝑡 ∈ 𝑞𝑇 21: se 𝑇𝑐∈ 𝜃 > 𝑞𝑡 ∈ 𝑞𝑇 então 22: remover linha < 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐼𝐷{𝐼𝑡𝑒𝑚}𝑇𝑐′ > de 𝜃 23: fim se 24: fim 25: fim

26: Ordenar 𝜃 por suporte 𝜎, comprimento da subsequência 𝑓𝑟𝑒𝑞 e menor tempo cumulativo de visita [𝑇𝑐′]

27: fim

Figura 4 - Pseudocódigo para apresentar recomendações de subsequências de POIs de

acordo com os requisitos do utilizador

Em anexo está o código em R para cada um destes algoritmos.

Documentos relacionados