Ein verlässliches Maß für die Ähnlichkeit von Serien - Korrelation ist für mich einfach kein Problem

8

Ich versuche, eine Methode zu finden, um eine bestimmte Zeitreihe programmgesteuert mit mehr als 10.000 Referenzzeitreihen zu vergleichen und die Referenzzeitreihen in die engere Wahl zu ziehen, die von Interesse sein können.

Die Methode, die ich verwendete, war Pearson Correlation . Für jede der Referenzzeitreihen würde ich ihre Korrelationskoeffizienten berechnen und dann die gesamte Liste der Referenzzeitreihen in absteigender Reihenfolge basierend auf dem Korrelationskoeffizienten sortieren. Ich würde dann visuell die Top-N-Zeitreihen analysieren, die die höchsten Korrelationskoeffizienten aufweisen, was die besten Übereinstimmungen mit der gegebenen Zeitreihe sein sollte.

Das Problem ist, dass ich keine verlässlichen Ergebnisse erhalten habe. Sehr oft ähnelte die Serie im oberen N-Bereich optisch nicht der angegebenen Zeitreihe. Als ich schließlich den vollständigen Artikel unten las, verstand ich warum: Man kann nicht allein die Korrelation verwenden, um festzustellen, ob zwei Zeitreihen ähnlich sind.

Anscombes Quartett

Dies ist nun ein Problem bei allen Übereinstimmungsalgorithmen, die eine Art Abstand zwischen zwei Zeitreihen berechnen. Zum Beispiel können die beiden folgenden Gruppen von Zeitreihen zu derselben Entfernung führen, aber eine passt offensichtlich besser zusammen als die andere.

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

Meine Frage ist also, gibt es eine mathematische Formel (wie Korrelation), die in solchen Situationen besser zu mir passt? Eine, die nicht unter den hier genannten Problemen leidet?

Bitte fordern Sie weitere Erläuterungen an oder verbessern Sie den Fragentext bei Bedarf. Vielen Dank! =)

BEARBEITEN:

Korrelationsergebnisse

@woodchips, @krystian:

Die obere Reihe zeigt die letzten zehn Balken von USDCHF-Daily, die zum angegebenen Datum enden. Die zweite Zeile enthält die drei wichtigsten Ergebnisse der für die Korrelation verwendeten Methode A (Erläuterung folgt). Die letzte Zeile zeigt die Top 3 Ergebnisse von Methode B.. Ich habe High-Low-Close-Preise für die Korrelation verwendet. Die letzten Bilder in jeder Reihe sind das, was ich für eine "gute Übereinstimmung" halte. Der Grund dafür ist, dass Wendepunkte in der Serie für mich wichtiger sind. Es ist ein Zufall, dass die letzten Zeilen die maximale Korrelation hatten. In der letzten Zeile sehen Sie jedoch, dass das zweite Bild eine sehr schwache Ähnlichkeit aufweist. Trotzdem schleicht es sich in die Top 3. Das stört mich. Aufgrund dieses Verhaltens bin ich gezwungen, visuell auf jede Korrelation zuzugreifen und sie zu akzeptieren / zu verwerfen. Das Anscombe-Quartett betont auch, dass die Korrelation visuell überprüft werden muss. Deshalb wollte ich mich von der Korrelation entfernen und andere mathematische Konzepte untersuchen, die die Ähnlichkeit von Reihen bewerten.

Methode A hängt HLC-Daten in einer langen Reihe an und korreliert sie mit der angegebenen Reihe. Methode B korreliert H-Daten mit Referenz-H-Daten, L mit L, C mit C und multipliziert dann alle drei Werte, um die Nettokorrelation zu berechnen . Natürlich reduziert es die Gesamtkorrelation, aber ich glaube, es neigt dazu , die resultierenden Korrelationen zu verfeinern .

Ich entschuldige mich dafür, dass ich so spät geantwortet habe. Ich habe versucht, Daten- und Codekorrelationen zu sammeln und Grafiken für die Erklärung zu erstellen. Dieses Bild zeigt eines der seltenen Ereignisse, bei denen die Korrelationen genau richtig sind. Ich werde Grafiken erstellen und freigeben, wenn die resultierenden Übereinstimmungen auch sehr irreführend sind, obwohl die Korrelationswerte ziemlich hoch sind.

@adambowen: du bist genau richtig. Eigentlich habe ich zwei verschiedene Algorithmen implementiert: Korrelation und dynamisches Time Warping, um auf Serienähnlichkeit zuzugreifen. Für DTW muss ich MSE verwenden, wie Sie sagten. Für die Korrelation kann ich sowohl die MSE (in diesem Fall entspricht sie den Kosten der diagonalen Route der DTW ohne Verzerrung) als auch die tatsächliche Pearson-Korrelationsformel verwenden. Die folgenden Bilder resultieren aus der Verwendung der Pearson-Korrelationsformel. Ich werde die Begriffe nachschlagen, die Sie in Ihrem Beitrag erwähnt haben, und bald darüber berichten. Tatsächlich habe ich keine zwei separaten Zeitreihen. Es ist nur eine Zeitreihe mit fast 10.000 Punkten. Ich verwende ein Schiebefenster der Breite N, um die Zeitreihen automatisch zu korrelieren und die Ereignisse zu lokalisieren, bei denen sich die Reihen ähnlich wie heute verhalten haben. Wenn ich gute Übereinstimmungen finden kann, Möglicherweise kann ich die Bewegung der aktuellen Zeitreihe anhand der Bewegung nach jedem der identifizierten Spiele vorhersagen. Vielen Dank für Ihren Einblick.

AweSIM
quelle
3
Diese Frage passt möglicherweise besser zu math.stackexchange.com.
1
Oder vielleicht Cross Validated .
David Z
2
Sie müssen genau definieren, was in Ihren Augen zu einer besseren Übereinstimmung führt. Nur wenn Sie quantifizieren, was gut ist, können Sie ein mathematisches Schema entwickeln, um dies vorherzusagen. Ansonsten gilt "Ich weiß es, wenn ich es sehe" nur für Gruppen alter Fürze, die Roben tragen.
Bitte
beachten

Antworten:

5

Die beiden nach meiner Erfahrung am häufigsten verwendeten Methoden zum Vergleichen von Signalen sind die Korrelation und der mittlere quadratische Fehler. Wenn Sie sich Ihr Signal informell als einen Punkt in einem N-dimensionalen Raum vorstellen (dies ist in der Regel einfacher, wenn Sie sich diese als 3D-Punkte vorstellen), misst die Korrelation, ob die Punkte in derselben Richtung liegen (vom "Ursprung") und Der mittlere quadratische Fehler misst, ob sich die Punkte an derselben Stelle befinden (unabhängig vom Ursprung, solange beide Signale denselben Ursprung haben). Was besser funktioniert, hängt etwas von den Signal- und Rauscharten in Ihrem System ab.

Die MSE scheint in etwa Ihrem Beispiel zu entsprechen:

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

Beachten Sie jedoch, dass dies nicht wirklich eine Pearson-Korrelation ist, was eher so wäre

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

gegeben das Signal bedeutet x_mean und y_mean. Dies kommt der reinen Korrelation ziemlich nahe:

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

Ich denke jedoch, dass die Pearson-Korrelation robuster ist, wenn die Signale eine starke Gleichstromkomponente haben (weil der Mittelwert subtrahiert wird) und normalisiert sind, sodass eine Skalierung in einem der Signale keinen proportionalen Anstieg der Korrelation verursacht.

Wenn das spezielle Beispiel in Ihrer Frage ein Problem darstellt, können Sie auch den mittleren absoluten Fehler (L1-Norm) berücksichtigen:

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

Mir sind alle drei Ansätze bekannt, die in verschiedenen Signal- und Bildverarbeitungsanwendungen verwendet werden. Ohne mehr über Ihre spezielle Anwendung zu wissen, kann ich nicht sagen, was wahrscheinlich am besten funktioniert. Ich möchte darauf hinweisen, dass die MAE und die MSE weniger empfindlich darauf reagieren, wie die Daten genau dargestellt werden. Wenn der mittlere Fehler jedoch nicht die Metrik ist, an der Sie interessiert sind, erhalten Sie nicht die gewünschten Ergebnisse zum. Die Korrelationsansätze können besser sein, wenn Sie mehr an der "Richtung" Ihres Signals als an den tatsächlichen Werten interessiert sind. Sie reagieren jedoch empfindlicher auf die Darstellung der Daten und erfordern mit ziemlicher Sicherheit eine gewisse Zentrierung und Normalisierung, um die gewünschten Ergebnisse zu erzielen erwarten von.

Möglicherweise möchten Sie nach Phasenkorrelation , Kreuzkorrelation , normalisierter Korrelation und übereinstimmenden Filtern suchen . Die meisten davon werden verwendet, um ein Untersignal in einem größeren Signal mit einer unbekannten Zeitverzögerung abzugleichen. In Ihrem Fall können Sie jedoch einfach den Wert verwenden, den sie für eine Zeitverzögerung von Null angeben, wenn Sie wissen, dass zwischen den beiden Signalen keine Verzögerung besteht.

Adam Bowen
quelle
Bitte
beachten
1

Ich bin mir nicht sicher, ob dies der richtige Weg ist. Aber würde die Skalierung Ihrer Daten helfen? Versuchen Sie, die Werte auf 0 bis 1 zu bringen. Ich nehme an, das sollte funktionieren.

viki.omega9
quelle
Das funktioniert irgendwie, aber nicht zuverlässig. Für meine Arbeit skaliere ich die Daten bereits auf den Mittelwert Null und die Einheitsvarianz. Ich erhalte immer noch falsch positive Ergebnisse (Serien mit hoher Korrelation, die visuell überhaupt nicht den Eingabeserien ähneln). Was ich suche ist dies .. welches andere mathematische Konzept kann ich verwenden, um gute visuelle Übereinstimmungen zu erhalten .. gibt es einen Ersatz für die Korrelation für Serienähnlichkeit?
AweSIM
1
@AweSIM: Können Sie uns weitere Hinweise geben, was Sie für "gute visuelle Übereinstimmungen" halten? Wenn beispielsweise das zweite Signal um eine Einheit verzögert wird, stimmen sie dann immer noch gut visuell überein?
hey .. ja ich gebe euch in
kurzer Zeit
@ krystian .. bitte sehen Sie die Bearbeitung in der Frage .. =)
AweSIM
@AweSIM Ich denke, die Top-Antwort hat es richtig gemacht :)
viki.omega9