Visualização e armazenamento de séries temporais

0

Thayná | Maio 29, 2019

Por Ranieri Castelar

Série temporal é um tipo de conjunto de dados bastante útil e que tem sido gerado em um volume cada vez maior atualmente. Ele surge ao se indexar um conjunto de dados em relação ao tempo, tipicamente espaçando os pontos pertencentes a este conjunto de forma homogênea.

Como exemplo,
poderíamos citar um equipamento que mede a temperatura de um motor uma vez a
cada segundo e armazena essas informações em relação ao horário em que a
medição foi feita.

O aumento do
volume desse tipo de dado, que é gerado em intervalos cada vez menores e por um
número cada vez maior de equipamentos, fez com que técnicas específicas se
tornassem necessárias para seu armazenamento e manipulação. O surgimento de
soluções de armazenamento especializadas é um dos fatores que representam essa
necessidade.

Neste artigo, discutiremos algumas de suas peculiaridades e também algumas técnicas para seu armazenamento e processamento posterior.

Em próximos artigos, meus colegas, aqui da Daitan, explicarão como estão utilizando séries temporais, por exemplo, para fazer previsões via técnicas de aprendizado de máquina.

Por que a análise de séries temporais é importante?

Esse tipo de
análise pode revelar tendências, padrões sazonais, ou o impacto das mudanças
efetuadas em um produto. Com um volume suficientemente grande de dados, também
é possível perceber que alguns eventos ocorrem após o surgimento de padrões
específicos na série temporal. Essa informação pode ser utilizada para prever
ou para prevenir a ocorrência destes eventos.

Investidores,
por exemplo, costumam utilizar esse tipo de informação durante o processo de
tomada de decisões sobre em que e quando investir seus recursos.

Como essa análise é feita?

Uma das
formas de análise é feita por meio do uso de gráficos. A análise visual permite
que o analista identifique padrões e absorva informações relevantes
rapidamente. Nesse caso, a clareza com que os dados são exibidos se torna
importante, já que a existência de ruído pode dificultar ou impedir a identificação
de uma estrutura interna.

O impacto
causado pelo ruído é normalmente diminuído por meio de técnicas como Médias Móveis
ou Suavização Exponencial.
A utilização desse tipo de técnica impede que mudanças bruscas - porém de curta
duração - tenham um impacto significativo na série temporal, pois o valor do
próximo ponto a ser adicionado à série leva em conta o valor dos pontos anteriores.

No caso da
técnica de Suavização Exponencial, os valores antigos são considerados com um
peso cada vez menor, de forma que pontos atuais tenham maior impacto sobre os
próximos valores adicionados. Se relevante, o uso de SVMs (support vector machines, uma técnica de
aprendizado de máquina) e modelos similares também permite que regressões não
lineares possam ser aplicadas de forma relativamente simples.

O modo com
que as séries são dispostas também pode impactar a clareza da análise. Os
gráficos devem ir direto ao ponto, sem apresentar informação desnecessária, e
devem ser pensados de forma que a informação buscada obtenha posição de
destaque.

Mapas de
calor, gráficos de barra e outros tipos de visualização devem ser considerados,
mesmo que exista uma tendência a se utilizar um conjunto de gráficos de linha
ao se lidar com séries temporais.

Redes Neurais
Recorrentes (e outros tipos de modelos de aprendizado de máquina) também podem
ser utilizados quando se existe um desejo de se realizar previsões ou detectar
anomalias sem intervenção humana.

Disparar um
alarme quando um valor X ultrapassa um limiar predeterminado é simples e útil
em diversas situações, porém muitas vezes a detecção de anomalias requer um
processo um pouco mais sofisticado.

Quais são as particularidades do uso de séries temporais?

Em uma série
temporal, informações já coletadas não costumam ser modificadas, e novos dados
são inseridos no final da série. Além disso, consultas são feitas sobre um
intervalo contínuo da mesma.

Ferramentas
de armazenamento como o TimescaleDB ou InfluxDB
são projetadas para tirar vantagem dessas propriedades, evitando que o
desempenho de armazenamento e consulta se degrade com um aumento no volume de
dados.

Para que a
análise dos dados seja executada de forma responsiva, este tipo de ferramenta
deve prover consultas baseadas em tempo rápidas e de simples utilização, mesmo
que a quantidade de linhas armazenadas aumente consideravelmente. Se possível,
a capacidade de se executar consultas multidimensionais deve ser preservada.

Bancos de
dados tradicionais costumam utilizar uma estrutura conhecida como Árvore B para indexar
o conteúdo de suas tabelas, permitindo inserções em “complexidade computacional
logarítmica” – o que significa que a complexidade cresce proporcionalmente ao
logaritmo do número de linhas.

Soluções
otimizadas para séries temporais evitam esse tipo de indexação, dando
preferência para o uso de tabelas Hash,
com inserções de custo computacional constante (ou seja, independente do número
de linhas).

Além disso,
como consultas às séries temporais são normalmente executadas sob um intervalo
contínuo de tempo, estas soluções podem fazer uso do conceito de chunks. Basicamente, ao invés de
armazenar todos os dados de uma série em uma única tabela, esta série é
dividida em períodos específicos de tempo, e os dados de cada período são armazenados
em tabelas separadas. Isso é transparente para o usuário, já que a complexidade
adicional é abstraída. O TimeScaleDB, por exemplo, executa essa
abstração por meio de “HyperTables”.

Indexar a
posição das tabelas e não a posição dos dados, mantendo índices internos a cada
tabela, permite que consultas a qualquer período de tempo sejam feitas
rapidamente, e evita degradação de performance.

Como novas
entradas são sempre adicionadas à tabela mais recente, já que normalmente não
há inserções em uma data passada, os custos de se manter esse tipo de estrutura
são minimizados.

Remoções
também podem se tornar mais rápidas, pois é possível remover tabelas inteiras
ao invés dos dados contidos nessas tabelas. Paralelização pode ser obtida ao se
recuperar dados de vários chunks
simultaneamente, principalmente se estes chunks
estiverem distribuídos entre diferentes discos.

Mesmo com as
peculiaridades das séries temporais, esse tipo de estrutura ainda apresenta um
custo. O aumento da complexidade implica que consultas a entidades específicas
serão mais lentas, e possíveis ganhos em relação ao desempenho podem não
aparecer até que os dados atinjam um volume considerável. Além disso, outras
considerações devem ser feitas: O tamanho dos chunks deve se manter suficientemente pequeno para que eles possam
ser carregados inteiramente para a memória RAM, por exemplo.

Outro ponto
diz respeito à filtragem e suavização da série. Enquanto a filtragem de ondas
sonoras ou sinais elétricos (que podem ser descritos como séries temporais)
visa a completa remoção do ruído, isso pode não ser aconselhado ao trabalharmos
com dados. O uso desse tipo de técnica pode fazer com que informações que
poderiam auxiliar no processo de análise também sejam removidas. Devido a isso,
métodos como Transformada Rápida de
Fourier
devem ser aplicados com cuidado.

Conclusão

Séries temporais são conjuntos de dados cujo volume e importância vêm aumentando consistentemente. Um dos principais motivos é o surgimento da internet das coisas (IoT), porém o aumento do volume de equipamentos automatizados e aplicações cuja “saúde” interna queremos monitorar – como computadores e celulares – também contribuem para isso. Neste artigo discutimos algumas das particularidades de séries temporais e técnicas para melhor coletar, armazenar e processar esse tipo de dado. Continuaremos a tratar desse assunto em próximos posts. Fique atento!


Ranieri é estagiário do time de Innovation na Daitan e estuda informática na Unicamp.