Decomposição de séries temporais em componentes estocásticas e determinísticas
A análise e modelagem de séries temporais são utilizadas em vários cenários do mundo real, como mercado financeiro, observações do tempo, previsão de vendas etc. As séries temporais são compostas por componentes estocásticas e determinísticas. Quando separamos essas componentes, conseguimos modelar cada componente individualmente, assim, podemos obter um modelo híbrido de maior acurácia.
1. Introdução
O estudo de séries temporais tem uma linha de pesquisa muito difundida. A análise e a modelagem têm sido exploradas para compreender as relações entre as sequência de observações obtidas ao longo do tempo. Desse modo, é um importante instrumento para várias aplicações práticas em muitos setores do mundo real, como vendas, comunicações, mercado financeiro etc.
Existem, atualmente, duas formas de analisarmos uma a série temporal, a visão clássica e a análise das componentes determinísticas e estocásticas. A visão clássica, comumente mais utilizada, se baseia no pressuposto que os valores que compõem a variável de interesse é a composição das componentes de tendência, sazonalidade e ruído. A outra abordagem, menos investigada na ciência, se baseia na análise das componentes determinísticas e estocásticas da série.
O estudo das componentes estocásticas e determinísticas embutidas em uma série temporal possibilita isolar o conjunto de dados que são influenciados fortemente por processos aleatórios e que podem interferir consideravelmente os resultados da modelagem.
Destarte, nesse artigo, vamos analisar uma série temporal sintética e entender como podemos fazer essa decomposição seguindo algumas ferramentas matemáticas.
2. Definições Iniciais
Nessa seção, vamos definir algumas termos, a fim de conseguirmos prosseguir para o nosso assunto de interesse.
Tá… Mas o que são séries temporais e essas componentes que a compõe?!
Conforme o professor Pedro A. Morettin, séries temporais se definem como uma sequência de observações ao longo do tempo, podendo ser uniformemente distribuídas no tempo ou não. A figura a seguir tem um exemplo básico de série temporal, onde mostra o número de venda de uma loja ao longo do tempo.
Dito isso, há estudos que focam na separação da série em componentes estáveis ou determinísticos e componentes puramente aleatórios ou estocásticos. Uma série estocástica é definida como uma sequência de observações e relações aleatórios que seguem funções de probabilidade e podem mudar com o tempo. Quando geramos uma distribuição normal com média 0 e desvio padrão 0.5, podemos dizer que é uma série estocástica ,haja visto que esses valores foram gerados aleatoriamente e não seguem nenhum padrão.
E, uma série é dita determinística ou estável quando depende rigorosamente de observações passadas produzidas por alguma função matemática. Se gerarmos uma senoide, podemos dizer que uma é uma série determinística, pois os valores são dependentes das observações históricas.
Se somarmos essas duas séries, vamos ter uma série com um comportamento estocástico e determinístico, vai apresentar um comportamento aleatório, mas também vai apresentar um comportamento determinístico, que os valores vão apresentar dependência com as observações históricas. Esse tipo de série representa melhor as que encontramos no mundo real, haja visto que uma série não apresentam comportamento só determinístico ou só estocástico. A figura a seguir tem mil pontos que contem um ruído seguindo uma distribuição normal com média zero e desvio padrão 0.5.
3. Metodologia
O estudo sobre a decomposição de séries temporais para decompor em componentes determinísticos e estocásticos ainda é um problema em aberto. Então, vamos sintetizar o estado da arte, identificar os métodos de separação e técnicas de análise das séries.
3.1 EMD como método de decomposição
Empirical Mode Decomposition (EMD) é uma técnica para analisarmos sinais com frequências diferentes e modulações. Assim, é usada para caracterizar os sinais não lineares e/ou não estacionários, permitindo a análise da composição de frequência das funções que tem uma única dimensão. Desse modo, a EMD tem como finalidade decompor o sinal em uma soma de funções de modo intrínsecas chamadas IMFs.
Para conseguirmos decompor o sinal, o sinal precisa ter as seguintes características:
- O sinal tem pelo menos dois extremos, um mínimo e um máximo;
- A escala de tempo é definida no intervalo de tempo entre esses extremos;
- Se os dados forem totalmente desprovidos de extremos, mas contem apenas os pontos de inflexão, então se podemos diferenciar uma ou mais vezes esse sinal, a fim revelar os extremos. Os resultados finais podem ser obtidos por integração dos componentes.
Dito isso, para definir as IMFs usamos o método de envelopes. Esse método consiste em identificar os extremos e todos os máximos locais são conectados pela linha spline cubic, assim, obtendo o envelope superior. De forma análoga, todos os mínimos locais são conectados, obtendo o envelope inferior. Os envelopes superior e inferior devem cobrir todos os dados, como é mostrado na figura 5.
Então, é calculada a média entre os envelopes. Essa média é representada por m1, e a diferença entre o sinal original e m1 é a primeira componente h1:
Assim, com esse processo, conseguimos eliminar as ondas de equitação e fazer os perfis de onda mais simétricos. Esse processo é repetido várias vezes. No segundo processo de filtragem, h1 é tratado como o sinal original da forma:
Esse processo de filtragem é repetido K vezes, até que h1k cumpra as duas condições:
- O número de extremos e o número de cruzes por zero devem ser iguais ou diferir no máximo em um;
- Em qualquer ponto, o valor médio entre o envelope definido pelos máximos locais e o envelope definido pelos mínimos locais é zero, isto é, os máximos locais devem ser positivos e o mínimos locais devem ser negativos.
Garantindo as condições das IMFs, então h1k é a primeira componente das IMFs da série original.
No final, o resultado do processo de EMD serão n funções de modo intrínsecas IMFs [c1, c2,…,cn-1, cn] e um sinal de residual rn. Então, podemos reescrever o nosso original pelo somatório das IMFs mais o resíduo:
Contudo, quando queremos fazer todo esse processo, a maioria das linguagens de programação têm bibliotecas que fazem isso automaticamente. Nesse post, vamos utilizar a biblioteca EMD-signal do Python. Dessa forma, vamos obter as IMFs e o resíduo do sinal sintético produzido igualmente na figura 4.
#Importando as bibliotecas utilizadas
import numpy as np
from PyEMD import EMD
np.random.seed(42)#Gerando o sinal sintético
n_pontos = 1000
X = np.linspace(-4*np.pi, 4*np.pi, n_pontos, endpoint=True)
S = np.sin(X)
sigma = 0.5
media = 0
ruido = np.random.normal(media,sigma,n_pontos)
S_ruido = S + ruido#Aplicar o Empirical Mode Decomposition(EMD) no sinal
emd = EMD()
emd.emd(S_ruido)
imfs, res = emd.get_imfs_and_residue()
Se plotarmos essas IMFs e o resíduos, vamos ter como resultado:
3.2 Identificação da Componente estocástica e determinística
Quando analisamos as IMFs é notável, a partir da 5° componente, um comportamento com menos ruído. Se observarmos da 1° à 3° componente, podemos ver um componente totalmente estocástico, a 4° não conseguimos concluir muitas coisas.
Agora, vamos tentar inferir quais são as componentes determinística e estocásticas. Para isso, vamos usar como base o artigo Applying Empirical Mode Decomposition and mutual information to separate stochastic and deterministic influences embedded in signals, dos autores Ricardo Araújo Rios e Rodrigo Fernandes de Mello.
Nesse artigo, os autores abordam como podemos separar as componentes estocásticas e determinísticas. Eles primeiros analisam a transformada de Fourier das IMFs e do resíduo, a fim de tentar achar alguma informação e tirar conclusões.
Contudo, quando aplicamos a transformada de Fourier na nossas IMFs e no Resíduo, conforme a figura 7, não nos dá muita informação visualmente. Se tivermos pontos bem afastados aos demais pontos, pode nos indicar que o sinal começou a ter um comportamento um pouco mais determinístico, como é mostrado na transformada IMF 7, por exemplos. Assim, os autores passaram analisar a fase das transformada de Fourier, a fim de achar informações sobre as IMFs e o Resíduo, para separar as componentes. A fase é calculada pelo arco tangente componente imaginária pela componente real. A fase pode nos dar informações sobre comportamentos, como também é quando obtemos a fase de uma imagem em processamento digital de imagens.
Eles descobriram um componente bem interessante. Eles identificaram a congruência de fase, o que consiste os ângulos entre vetores presentes no plano complexo de Fourier começam transeccionar de forma mais suave. A congruência vai aumentando conforme decompõe as IMFs.
Então, no artigo, concluímos que a soma das IMFs com as congruência de fase mais baixa vai nossa componente estocástica. De forma análoga, se somarmos as IMFs com maior congruência de fase vai nossa componente determinística.
No artigo, os autores demonstram até qual IMF vai a componente estocástica e o restante vai nessa componente determinística, por meio da medida de informação mútua. Para fins didáticos, nesse post, vamos considerar visualmente que a nossa componente estocástica é a soma do intervalo fechado entre a IMF 1 e a IMF 4 e a nossa determinística é a soma do intervalo fechado entre a IMF 5 e IMF 7 mais o resíduo. Assim, vamos visualizar a seguir nossas componentes geradas usando Python.
#Componente Determinística
deterministica = np.copy(imfs[:, 4])
for i in range(5, imfs.shape[1]):
deterministica += imfs[:, i]
deterministica += res#Componente Estocastica
estocastico = imfs[:, 0] + imfs[:, 1] + imfs[:, 2] + imfs[:, 3]"""
Plot da série original, componente estocástica e componente determinística
"""
fig, axes = plt.subplots(1,3, figsize = (20,6))
#x = np.arange(1,11)
t=range(1000)
axes[0].scatter(t,S_ruido)
axes[0].set_title('Série Original')
axes[1].scatter(t, deterministica)
axes[1].set_title('Componente Determinística')
axes[2].scatter(t, estocastico)
axes[2].set_title('Componente Estocástica')
fig.tight_layout()
plt.show()
4. Conclusão
Assim com muitos problemas de computação, quando dividimos um problema em partes menores, conseguimos ter percepções e resultados diferentes. O famoso “Dividir para conquistar”. Em séries temporais não é muito diferente, haja visto que, quando a gente decompõe o nosso sinal em componentes determinísticas e estocásticas, vai nos possibilitar modelar a nossa série determinística com as ferramentas vindas de sistemas dinâmicos e modelar nossa série estocástica com as ferramentas de processos estocásticos. Isso vai nos dar resultados bem melhores.
No meu GitHub há todos os códigos executados nesse post e uma sugestão de como podemos modelar as nossas componentes. Espero que tenha sido útil para você! Caso deseje enviar sugestões , queiram um post de modelagem dessas componentes ou feedbacks deixo meu Linkedin.