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.
fonte
Respostas:
Os dois métodos mais comuns (na minha experiência) para comparar sinais são a correlação e o erro médio quadrático. Informalmente, se você imaginar seu sinal como um ponto em algum espaço N-dimensional (isso tende a ser mais fácil se você os imaginar como pontos 3D), a correlação medirá se os pontos estão na mesma direção (da "origem") e o erro quadrado médio mede se os pontos estão no mesmo local (independente da origem, desde que ambos os sinais tenham a mesma origem). O que funciona melhor depende um pouco dos tipos de sinal e ruído no seu sistema.
O MSE parece ser aproximadamente equivalente ao seu exemplo:
note, no entanto, que essa não é realmente a correlação de Pearson, que seria mais parecida com
dado o sinal significa x_mean e y_mean. Isso é bastante próximo da correlação pura:
no entanto, acho que a correlação de Pearson será mais robusta quando os sinais tiverem um componente DC forte (porque a média é subtraída) e for normalizada; portanto, uma escala em um dos sinais não causará um aumento proporcional na correlação.
Por fim, se o exemplo específico da sua pergunta for um problema, você também poderá considerar o erro absoluto médio (norma L1):
Estou ciente das três abordagens sendo usadas em vários aplicativos de processamento de sinal e imagem, sem saber mais sobre seu aplicativo em particular, não sabia dizer o que provavelmente funcionaria melhor. Eu observaria que o MAE e o MSE são menos sensíveis a exatamente como os dados são apresentados a eles, mas se o erro médio não for realmente a métrica em que você está interessado, eles não fornecerão os resultados que você está procurando para. As abordagens de correlação podem ser melhores se você estiver mais interessado na "direção" do seu sinal do que nos valores reais envolvidos; no entanto, é mais sensível à forma como os dados são apresentados e quase certamente requer alguma centralização e normalização para fornecer os resultados. Espero.
Convém consultar Correlação de fase , Correlação cruzada , Correlação normalizada e Filtros correspondentes . A maioria deles é usada para corresponder a algum sub-sinal em um sinal maior com algum atraso de tempo desconhecido, mas no seu caso, você pode usar o valor que eles fornecem para um atraso de tempo zero se você souber que não há atraso entre os dois sinais.
fonte
Não tenho certeza se esse é o caminho certo para fazê-lo. Mas o dimensionamento de seus dados ajudaria? Tente trazer os valores entre 0 e 1. Suponho que isso funcione.
fonte