• Nenhum resultado encontrado

Algoritmos dos operadores StreamPref

Código 9 Ű Consulta para experimentos com os algoritmos PartitionBest,

8.2.1.3 Tempo de execução por iteração

IncAncestorsBest IncGraphBest IncP artition Partition 0 1 2 3 31,18 30,43 0,27 0,56 2,9 2,87 0,07 0,52 T em p o de execução (segundos) Primeiro Instante Demais Instantes

Figura 42 Ű Tempo de execução por instante dos algoritmos PartitionBest, IncAncestorsBest, IncGraphBest e IncPartitionBest sobre dados sintéti- cos

Em ambientes da dados em Ćuxos, é importante veriĄcar o tempo de execução por iteração dos algoritmos, uma vez que este tipo de cenário requer um tempo de resposta rápido em qualquer instante. A Figura 42 mostra o tempo de execução dos algoritmos no

8.2. Segunda etapa de experimentos 161 primeiro e demais instantes considerando os valores padrões para os todos os parâmetros (ATT=8, TUP=1000, DEL=50, INS=50, RUL=8, LEV=2, IND=4).

Os algoritmos IncAncestorsBest e IncGraphBest possuem um comportamento muito similar, ambos gastam um tempo maior na primeira iteração e um tempo menor nas demais iterações. O maior tempo gasto na primeira iteração é causado pela atualização das estruturas de hierarquia de preferência de todas as tuplas existentes. Já nas demais iterações, os algoritmos precisam apenas atualizar tais estruturas de acordo com as remoções e inserções.

O algoritmo PartitionBest apresenta um tempo de execução similar na primeira e demais iterações porque em todas as iterações o algoritmo precisa processar todas as tuplas. O algoritmo IncPartitionBest obteve melhor desempenho em relação aos demais tanto na primeira quanto nas demais iterações. Este melhor desempenho se deve às estruturas de dados mais compactas usadas para manter a hierarquia de preferência.

8.2.2 Experimentos com dados reais

Os experimentos com dados reais usaram dados históricos do mercado de ações importados do Yahoo Finance (Yahoo! Inc., 2015)5. Como foi mostrado do Capítulo 4, esta é um interessante aplicação prática onde as consultas com preferência condicionais podem ser usadas. As consultas dos experimentos utilizaram as mesmas preferências do trabalho de Petit et al. (2012). Estas preferências incluem proposições sobre um atributo de taxa de volatilidade calculada sobre os valores das ações. Para cada tupla importada, foram calculadas duas taxas de volatilidade usando dois métodos distintos. Como resultado foi criado o Ćuxo de dados transactions composto pelos seguintes atributos:

symbol: código identiĄcador da ação; sector: setor da empresa;

country: país da sede da empresa; price: preço da ação;

volume: quantidade de transações com a ação; rate: taxa de volatilidade calculada;

method: método usado no cálculo da volatilidade.

A base de dados original possui 36.661 tuplas da bolsa de valores de São Paulo entre os anos de 2014 e 2015. Após o cálculo da volatilidade, o Ćuxo de dados resultante Ącou com 73.322 tuplas. A base de dados possui ações de 140 empresas com aproximadamente 148 tuplas por instante de tempo. Foi desenvolvida uma ferramenta para automatizar o processo de extração e cálculo de volatilidade da base de dados (RIBEIRO, 2017)6.

5 <http://Ąnance.yahoo.com/>

Os experimentos seguiram a mesma metodologia adotada no trabalho de Petit et al. (2012). No referido trabalho, os autores usaram janelas deslizantes baseadas em contagem. Os experimentos descritos nesta seção usaram janelas baseadas em tempo uma vez que estes operadores já haviam sido implementados. Contudo, considerando a quantidade de tuplas por instante, ambos experimentos possuem um tamanho de janela similar (em número de tuplas).

O Código 10 mostra o formato das consultas processadas durante a execução dos experimentos. As consultas possuem variações na abrangência temporal (RAN) e intervalo de deslocamento (SLI). O parâmetro RAN variou de 2 a 6 com valor padrão de 4. A variação no parâmetro SLI foi de 1 a 4 com valor padrão de 1.

Código 10 Ű Consulta para experimentos com os algoritmos PartitionBest,

IncAncestorsBest, IncGraphBest e IncPartitionBest sobre dados reais

SELECT * FROM stocks [RANGE <RAN > SECOND, SLIDE <SLI > SECOND] ACCORDING TO PREFERENCES

IF sector = ‘Basic Materials’

THEN rate < 0.25 BETTER rate >= 0.25 [method, symbol, price] AND IF sector = ‘Technology’

THEN rate < 0.35 BETTER rate >= 0.35 [method, symbol, price] AND IF rate >= 0.35

THEN country = ‘Brazil’ BETTER country = ‘France’ [symbol, price] AND IF rate >= 0.35

THEN volume > 1000 BETTER volume <= 1000 [symbol, price];

2 3 4 5 6 102 103 104 T emp o de ex ecução (segundos)

PartitionBest IncAncestors IncGraph IncPartitionBest

1 2 3 4 102 103 104 2 3 4 5 6 20 22 24 26 28

Abrangência temporal (RAN)

Consumo de memória (MB) 1 2 3 4 21 22 23 24

Intervalo de deslocamento (SLI)

Figura 43 Ű Experimentos com os algoritmos PartitionBest, IncAncestorsBest, IncGraphBest e IncPartitionBest sobre dados reais

A Figura 43 exibe o tempo de execução e o consumo de memória dos algoritmos sobre os dados reais. Tanto no experimento com variação na abrangência temporal quanto no experimento com variação do intervalo de deslocamento, os algoritmos IncAncestorsBest e IncGraphBest possuem o maior tempo de execução. Mesmo processando apenas as inserções e exclusões, os algoritmos IncAncestorsBest e IncGraphBest gastam mais tempo

8.2. Segunda etapa de experimentos 163 por causa da complexidade do teste de dominância baseado em busca e das hierarquias de preferência que armazenam relações de dominância individuais para as tuplas.

O algoritmo PartitionBest, mesmo não sendo um algoritmo incremental, supera os algoritmos IncAncestorsBest e IncGraphBest com o uso da técnica de particionamento. Já o algoritmo IncPartitionBest tem a melhor performance porque, além de ser um algoritmo incremental, utiliza uma hierarquia de preferência baseada na técnica de particionamento.

Comparando a variação na abrangência temporal com a variação no intervalo de deslocamento, os algoritmos têm comportamentos opostos. As abrangências temporais maiores aumentam o tamanho da janela e, por consequência, o tempo de execução dos algoritmos. Por outro lado, os intervalos de deslocamento maiores causam a exclusão de um maior número de tuplas das janelas, fazendo com que o tamanho da janela seja reduzido.

Quanto ao consumo de memória, todos os algoritmos apresentam um comportamento muito similar. Existe um consumo um pouco maior para as abrangências temporais maiores e os intervalos de deslocamentos menores, situações nas quais as janelas possuem um tamanho maior. Novamente, o algoritmo PartitionBest obteve o menor consumo de memória pelo fato de não ter que armazenar uma hierarquia de preferência.