Uma medida confiável da semelhança de séries - a correlação simplesmente não serve para mim

8

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.

Quarteto de Anscombe

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:

Resultados da correlação

@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.

AweSIM
fonte
3
Essa pergunta pode ser mais adequada em math.stackexchange.com.
1
Ou talvez com validação cruzada .
David Z
2
Você precisa definir exatamente o que contribui para uma melhor correspondência aos seus olhos. Somente quando você quantifica o que é bom, é possível conceber um esquema matemático para prever isso. Caso contrário, "eu sei quando o vejo" se aplica apenas a grupos de peidos velhos vestindo túnicas.
por favor, veja a edição na pergunta .. =)
AweSIM

Respostas:

5

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:

mse = 0;
for( int i=0; i<N; ++i )
    mse += (x[i]-y[i])*(x[i]-y[i]);
mse /= N;

note, no entanto, que essa não é realmente a correlação de Pearson, que seria mais parecida com

xx = 0;
xy = 0;
yy = 0;

for( int i=0; i<N; ++i )
{
    xx += (x[i]-x_mean)*(x[i]-x_mean);
    xy += (x[i]-x_mean)*(y[i]-y_mean);
    yy += (y[i]-y_mean)*(y[i]-y_mean);
}

ppmcc = xy/std::sqrt(xx*yy);

dado o sinal significa x_mean e y_mean. Isso é bastante próximo da correlação pura:

corr = 0;
for( int i=0; i<N; ++i )
    corr += x[i]*y[i];

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):

mae = 0;
for( int i=0; i<N; ++i )
    mae += std::abs(x[i]-y[i]);
mae /= N;

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.

Adam Bowen
fonte
consulte a edição em questão .. =)
AweSIM
1

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.

viki.omega9
fonte
isso meio que funciona, mas não é confiável .. para o meu trabalho já estou escalando os dados para zero e média de variação de unidade .. ainda estou recebendo falsos positivos (séries com alta correlação que visualmente não se assemelham às séries de entrada) .. o que estou procurando é isso .. que outro conceito matemático posso usar para obter boas correspondências visuais .. existe um substituto para a correlação para similaridade de séries?
AweSIM
1
@AweSIM: Você poderia nos dar mais algumas dicas sobre o que considera "boas correspondências visuais"? Por exemplo, se o segundo sinal for atrasado por uma unidade, eles ainda são bons resultados visuais?
hey .. sim doente dar a vocês mais informações em pouco tempo .. =)
AweSIM
@krystian .. consulte a edição em questão .. =)
AweSIM
@AweSIM Acho que a resposta principal acertou :)
viki.omega9