Estou tentando determinar um método para comparar uma série temporal específica com mais de 10.000 séries cronológicas de referência programaticamente e listar as séries cronológicas de referência que podem ser interessantes.
O método que eu estava usando era a correlação de Pearson . Para cada uma das séries temporais de referência, eu calculava seus coeficientes de correlação e, em seguida, classificava a lista inteira de séries temporais de referência em ordem decrescente com base no coeficiente de correlação. Analisaria visualmente as principais séries temporais de N que têm os maiores coeficientes de correlação, que devem ser as melhores correspondências para a série temporal especificada.
O problema é que eu não estava obtendo resultados confiáveis. Muitas vezes, as séries da faixa N superior não se assemelham visualmente a algo como a série temporal especificada. Finalmente, quando li o artigo completo abaixo, entendi o porquê: Não se pode usar a correlação sozinha para determinar se duas séries temporais são semelhantes.
Agora, este é um problema com todos os algoritmos correspondentes que calculam algum tipo de distância entre duas séries temporais. Por exemplo, os dois grupos de séries temporais abaixo podem resultar na mesma distância, mas um é obviamente uma correspondência melhor que o outro.
A => [1, 2, 3, 4, 5, 6, 7, 8, 9]
B1 => [1, 2, 3, 4, 5, 6, 7, 8, 12]
distance = sqrt(0+0+0+0+0+0+0+0+9) = 3
B2 => [0, 3, 2, 5, 4, 7, 6, 9, 8]
distance = sqrt(1+1+1+1+1+1+1+1+1) = 3
Então, minha pergunta é: existe uma fórmula matemática (como correlação) que possa me atender melhor nesse tipo de situação? Um que não sofre dos problemas mencionados aqui?
Por favor, não hesite em pedir mais esclarecimentos ou, se necessário, melhorar o texto da pergunta. Obrigado! =)
EDITAR:
@woodchips, @krystian:
A linha superior mostra as últimas dez barras do USDCHF-Diário que terminam na data especificada. A segunda linha fornece os três principais resultados do método A usado para correlação (a seguir, explicações). A última linha mostra os 3 principais resultados do método B. Eu usei preços Alto-Baixo-Fecho para correlação. As últimas imagens de cada linha são o que eu consideraria uma "boa combinação", a razão é que os pontos de viragem na série são mais importantes para mim. É uma coincidência que as últimas linhas tenham a correlação máxima. Mas você pode ver na última linha que a segunda imagem é uma similaridade muito fraca. Ainda assim, ele consegue se infiltrar no top 3. Isso é o que me perturba. Devido a esse comportamento, sou forçado a acessar visualmente cada correlação e aceitá-la / descartá-la. O quarteto de Anscombe também enfatiza que a correlação precisa ser inspecionada visualmente. É por isso que eu queria me afastar da correlação e explorar outros conceitos matemáticos que avaliam a similaridade de séries.
O método A acrescenta dados HLC em uma série longa e os correlaciona com a série fornecida. O método B correlaciona os dados H com os dados de referência H, L com L, C com C e multiplica todos os três valores para calcular a correlação líquida . Obviamente, reduz a correlação geral, mas acho que tende a refinar as correlações resultantes.
Minhas desculpas por responder tão tarde. Eu estava tentando coletar dados e correlação de código e criar gráficos para a explicação. Esta imagem mostra um dos raros eventos em que as correlações são bastante claras. Eu vou criar e compartilhar gráficos quando as correspondências resultantes forem altamente enganosas também, embora os valores de correlação sejam bastante altos.
@ adambowen: você está no local. Na verdade, eu implementei dois algoritmos diferentes: correlação e distorção dinâmica do tempo para acessar a similaridade em série. Para DTW eu tenho que usar o MSE como você disse. Para correlação, posso usar o MSE (nesse caso, é igual ao custo da rota diagonal do DTW, sem qualquer distorção) e a fórmula de correlação real de Pearson. As imagens abaixo resultaram do uso da fórmula de correlação de Pearson. Pesquisarei os termos que você mencionou em sua postagem e informará em breve. Na verdade, não tenho duas séries temporais separadas. É apenas uma série temporal com quase 10.000 pontos. Eu uso uma janela deslizante de largura N para autocorrelacionar as séries temporais para localizar os eventos quando as séries se comportam de maneira semelhante à atual. Se eu conseguir encontrar boas correspondências, Talvez eu consiga prever o movimento da série cronológica atual com base em como ela foi movida após cada uma das correspondências identificadas. Obrigado pela sua compreensão.