Una medida confiable de similitud de series: la correlación simplemente no es suficiente para mí

8

Estoy tratando de determinar un método para comparar una serie de tiempo particular con más de 10,000 series de tiempo de referencia mediante programación, y preseleccionar aquellas series de tiempo de referencia que pueden ser de interés.

El método que estaba usando era Correlación de Pearson . Para cada una de las series de tiempo de referencia, calcularía sus coeficientes de correlación y luego ordenaría la lista completa de series de tiempo de referencia en orden descendente en función del coeficiente de correlación. Luego analizaría visualmente las series temporales superiores de N que tienen los coeficientes de correlación más altos, que deberían ser las mejores coincidencias para las series temporales dadas.

El problema es que no estaba obteniendo resultados confiables. Muy a menudo, la serie en el rango N superior no se parecía visualmente a nada como la serie temporal dada. Finalmente, cuando leí el artículo completo a continuación, entendí por qué: Uno no puede usar la correlación sola para determinar si dos series de tiempo son similares.

Cuarteto de Anscombe

Ahora, este es un problema con todos los algoritmos de coincidencia que calculan algún tipo de distancia entre dos series de tiempo. Por ejemplo, los dos grupos de series de tiempo a continuación pueden resultar en la misma distancia, sin embargo, uno es obviamente una mejor coincidencia que el otro.

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

Entonces mi pregunta es, ¿existe una fórmula matemática (como la correlación) que pueda adaptarse mejor a mí en este tipo de situaciones? ¿Uno que no sufra los problemas mencionados aquí?

No dude en solicitar más aclaraciones o mejorar el texto de la pregunta si es necesario. ¡Gracias! =)

EDITAR:

Resultados de correlación

@woodchips, @krystian:

La fila superior muestra las últimas diez barras de USDCHF-Daily que finalizan en la fecha indicada. La segunda fila muestra los 3 resultados principales del método A utilizado para la correlación (a continuación se explicará). La última fila muestra los 3 resultados principales del método B. He usado precios de cierre alto-bajo para la correlación. Las últimas imágenes en cada fila son lo que yo consideraría un "buen partido", la razón es que los puntos de inflexión en la serie son más importantes para mí. Es una coincidencia que las últimas filas tengan la máxima correlación. Pero puede ver en la última fila que la segunda imagen tiene una similitud muy débil. Aún así, logra colarse en el top 3. Esto es lo que me molesta. Debido a este comportamiento, me veo obligado a acceder visualmente a cada correlación y aceptarla / descartarla. El cuarteto de Anscombe también enfatiza que la correlación necesita ser inspeccionada visualmente. Es por eso que quería alejarme de la correlación y explorar otros conceptos matemáticos que evalúan la similitud de series.

El Método A agrega datos HLC en una serie larga y los correlaciona con la serie dada. El método B correlaciona los datos H con los datos H de referencia, L con L, C con C, y luego multiplica los tres valores para calcular la correlación neta . Obviamente, reduce la correlación general, pero creo que tiende a refinar las correlaciones resultantes.

Mis disculpas por responder tan tarde. Estaba tratando de recopilar datos y correlación de código y hacer gráficos para la explicación. Esta imagen muestra uno de los raros eventos cuando las correlaciones son bastante acertadas. Haré y compartiré gráficos cuando las coincidencias resultantes también sean muy engañosas, aunque los valores de correlación sean bastante altos.

@adambowen: eres perfecto. En realidad, he implementado dos algoritmos diferentes: correlación y deformación dinámica del tiempo para acceder a la similitud de la serie. Para DTW tengo que usar MSE como dijiste. Para la correlación, puedo usar tanto MSE (en cuyo caso es igual al costo de la ruta diagonal de DTW, sin deformación) como la fórmula de correlación de Pearson real. Las siguientes imágenes resultaron del uso de la fórmula de correlación de Pearson. Buscaré los términos que mencionaste en tu publicación e informaré pronto. En realidad, no tengo dos series de tiempo separadas. Es solo una serie de tiempo de casi 10,000+ puntos de largo. Utilizo una ventana deslizante de ancho N para autocorrelacionar las series temporales para localizar los eventos cuando la serie se comportó de manera similar a la actual. Si puedo encontrar buenas coincidencias, Podría pronosticar el movimiento de la serie de tiempo actual en función de cómo se movió después de cada una de las coincidencias identificadas. Gracias por tu perspicacia.

AweSIM
fuente
3
Esta pregunta podría encajar mejor en math.stackexchange.com.
1
O quizás Cross Validated .
David Z
2
Debe definir exactamente qué es lo que hace que sus ojos coincidan mejor. Solo cuando cuantificas lo que es bueno puedes idear un esquema matemático para predecir eso. De lo contrario, "Lo sé cuando lo veo" solo se aplica a grupos de pedos viejos con túnicas.
por favor vea la edición en la pregunta .. =)
AweSIM

Respuestas:

5

Los dos métodos más comunes (en mi experiencia) para comparar señales son la correlación y el error cuadrático medio. Informalmente, si imagina su señal como un punto en algún espacio N-dimensional (esto tiende a ser más fácil si los imagina como puntos 3D), entonces la correlación mide si los puntos están en la misma dirección (desde el "origen") y el error cuadrático medio mide si los puntos están en el mismo lugar (independientemente del origen siempre que ambas señales tengan el mismo origen). Lo que funciona mejor depende un poco de los tipos de señal y ruido en su sistema.

El MSE parece ser aproximadamente equivalente a su ejemplo:

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

Sin embargo, tenga en cuenta que esto no es realmente la correlación de Pearson, que sería más como

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

dada la señal significa x_mean e y_mean. Esto está bastante cerca de la correlación pura:

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

sin embargo, creo que la correlación de Pearson será más robusta cuando las señales tengan un fuerte componente de CC (porque se resta la media) y se normalicen, por lo que una escala en una de las señales no causará un aumento proporcional en la correlación.

Finalmente, si el ejemplo particular en su pregunta es un problema, entonces también podría considerar el error absoluto medio (norma L1):

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

Soy consciente de los tres enfoques que se utilizan en diversas aplicaciones de procesamiento de señales e imágenes, sin saber más acerca de su aplicación en particular, no podría decir qué podría funcionar mejor. Me gustaría señalar que el MAE y el MSE son menos sensibles a la forma exacta en que se les presentan los datos, pero si el error medio no es realmente la métrica que le interesa, entonces no le darán los resultados que está buscando. para. Los enfoques de correlación pueden ser mejores si está más interesado en la "dirección" de su señal que en los valores reales involucrados, sin embargo, es más sensible a la forma en que se presentan los datos y casi con certeza requiere un cierto centrado y normalización para obtener los resultados. esperar.

Es posible que desee buscar Correlación de fase , Correlación cruzada , Correlación normalizada y Filtros coincidentes . La mayoría de estos se utilizan para hacer coincidir alguna subseñal en una señal más grande con algún retraso de tiempo desconocido, pero en su caso, puede usar el valor que dan para el retraso de tiempo cero si sabe que no hay retraso entre las dos señales.

Adam Bowen
fuente
por favor vea la edición en la pregunta .. =)
AweSIM
1

No estoy seguro de si esta es la forma correcta de hacerlo. ¿Pero ayudaría a escalar sus datos? Intente llevar los valores entre 0 y 1. Supongo que esto debería funcionar.

viki.omega9
fuente
eso funciona un poco, pero no de manera confiable ... para mi trabajo ya estoy escalando los datos a media cero y varianza de la unidad ... todavía obtengo falsos positivos (series con alta correlación que visualmente no se parecen a las series de entrada) ... lo que estoy buscando es este ... ¿qué otro concepto matemático puedo usar para obtener buenas coincidencias VISUALES? ¿Hay un reemplazo para la correlación para la similitud de series?
AweSIM
1
@AweSIM: ¿Podrías darnos más pistas sobre lo que consideras "buenas coincidencias visuales"? Por ejemplo, si la segunda señal se retrasa en una unidad, ¿siguen siendo buenas coincidencias visuales?
oye ... sí, les daré más información en un momento ... =)
AweSIM
@krystian .. por favor vea la edición en la pregunta .. =)
AweSIM
@AweSIM Creo que la respuesta más acertada :)
viki.omega9