[PYTHON] Beachten Sie, dass die Berechnung der durchschnittlichen paarweisen Korrelation mit Pandas sehr einfach war

Was ist die durchschnittliche paarweise Korrelation?

Ich weiß nicht, wie viele Menschen auf der Welt diese Berechnung durchführen müssen.

Die durchschnittliche paarweise Aktienkorrelation ist der Durchschnitt der Korrelationskoeffizienten der Preisbewegungen zwischen Aktien. Im Allgemeinen ist das Umfeld so, dass der Markt insgesamt während einer Krise wie dem Lehman-Schock oder der europäischen Schuldenkrise stark sinkt und dann als Reaktion stark ansteigt und der Korrelationskoeffizient zwischen Aktien steigt. Wenn die Korrelation springt, verhalten sich alle Aktien gleich und schaffen ein Marktumfeld, in dem es für aktive Aktieninvestoren schwierig ist, übermäßige Einnahmen aus der Aktienauswahl zu erzielen. Verwenden Sie diese Metrik, um das Risikoniveau Ihres Portfolios anzupassen (reduzieren Sie das Risiko, wenn Sie wahrscheinlich nicht gewinnen usw.). Als schlampigeres Beispiel verwenden aktive Aktienmanager dies als Ausrede, um zu sagen: "Ich habe in letzter Zeit nicht gewonnen, aber dies ist das Marktumfeld. Bitte verzeihen Sie mir."

So einfach mit Pandas

Bereiten Sie zuerst die Daten vor. Bereiten Sie einen DataFrame (m x n) mit dem Datum vertikal (angenommen m Tage), den Beständen horizontal (angenommen n) und den täglichen Bestandsrenditen in jedem Element vor. Dieses Mal habe ich die Daten draußen vorbereitet und mit CSV gelesen. Dieser Artikel usw. laden Sie den Aktienkurs mit Pandas von Yahoo herunter und verwenden Sie die Methode "pct_change ()" für die tägliche Rückgabe Sie können es beheben.

Und schließlich werde ich den Korrelationskoeffizienten berechnen,

#Berechnung der paarweisen Korrelation(Das Ergebnis ist Panel)
result = df.rolling(window=60, min_periods=30).corr()

Die Berechnung der rollenden paarweisen Korrelation ist in dieser einen Zeile abgeschlossen! Was wir tun, ist "eine Korrelationsmatrix (nxn-Matrix) zu berechnen, die den Korrelationskoeffizienten zwischen allen Beständen für 60 Tage täglicher Rendite bis zu diesem Tag verwendet. Für Bestände, die 30 Tage lang keine Daten haben," Keine " Und wiederholen Sie dies für alle Daten. " Das resultierende "Ergebnis" ist ein "pandas.Panel" -Objekt, das ein zweidimensionaler "DataFrame" mit einer weiteren Achse (Zeitachse) ist, um es dreidimensional (m x n x n) zu machen.

Ich konnte die Korrelation berechnen, aber es erfordert einige Arbeit, um den Durchschnitt zu ermitteln. Da es sich um eine Korrelationsmatrix handelt, ist 1 in der Diagonalkomponente enthalten, und es ist erforderlich, den Durchschnitt ohne diese zu nehmen. 2) Wenn der Korrelationskoeffizient aufgrund von Datenverlust nicht berechnet werden kann, ist der Wert Keine enthalten. Es gibt zwei Gründe, warum Sie den Durchschnitt darüber nehmen müssen.

Zunächst ist es die diagonale Komponente 1, aber ich werde np.fill_diagonal () von Numpy verwenden und in den Wert None ändern. Verwenden Sie für einen einzelnen DataFrame so etwas wie "np.fill_diagonal (df, None)". Verwenden Sie diesmal jedoch die Methode "apply ()", um sie wie folgt auf das gesamte "Panel" anzuwenden:

#Konvertieren Sie die diagonale Komponente in Keine
tmp = result.apply(lambda x: np.fill_diagonal(x.values, None), axis=(1,2)) 

Wenden Sie dann die Methode mean (skipna = True) an, um den Durchschnittswert zu berechnen, wobei Sie den Wert None ignorieren. Dies ist die durchschnittliche paarweise Korrelation. Dies wird auch über die Zeitachse mit einer einzigen "apply ()" - Methode angewendet.

#Ignorieren Sie Keine und berechnen Sie den Durchschnitt
apc = result.apply(lambda x: x.unstack().mean(skipna=True), axis=(1,2))

Mit Panel.apply (..., axis = (1,2)) können Sie die Korrelationsmatrix zu jedem Zeitpunkt als DataFrame x verarbeiten, während Sie die Zeitachse verschieben.

Die Berechnung ist abgeschlossen! Lassen Sie es uns planen.

apc.plot()

correlation.png

Sie können sehen, dass die Korrelation zu dem Zeitpunkt springt, zu dem der Markt von gelegentlichen Makrofaktoren beeinflusst wird.

abschließend

Das ist alles, was Sie tun müssen, um den Code zusammenzustellen. Es ist einfach. Die Pandas werden nur vom Autor Wes McKinney während seiner Amtszeit bei AQR Capital, einem Hedgefonds, entwickelt, was den Umgang mit Finanzdaten sehr einfach macht.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#Daten gelesen
df = pd.read_csv('data.csv', na_values=' ', index_col=0, parse_dates=True)
#Berechnung der paarweisen Korrelation(Das Ergebnis ist Panel)
result = df.rolling(window=60, min_periods=30).corr()
#Konvertieren Sie die diagonale Komponente in Keine
tmp = result.apply(lambda x: np.fill_diagonal(x.values, None), axis=(1,2)) 
#Ignorieren Sie Keine und berechnen Sie den Durchschnitt
apc = result.apply(lambda x: x.unstack().mean(skipna=True), axis=(1,2))
#Handlung
apc.plot()

Verweise

Recommended Posts

Beachten Sie, dass die Berechnung der durchschnittlichen paarweisen Korrelation mit Pandas sehr einfach war
Zeichnen Sie den Nikkei Average Stock Index mit Pandas
Ich habe den gleitenden Durchschnitt des IIR-Filtertyps mit Pandas und Scipy verglichen
Hinweis: Bereiten Sie die Umgebung von CmdStanPy mit Docker vor
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Hier ist eine, ich werde die mit "künstlicher Intelligenz" ausgestatteten Anwendungen zusammenfassen, an denen ich interessiert war
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
Bitte beachten Sie, dass sich der neueste Link von ius geändert hat
Die Geschichte, dass der Rückgabewert von tape.gradient () None war
Die Geschichte, die Japan ausgab, wurde mit Django verwechselt
Extrahieren Sie den Maximalwert mit Pandas und ändern Sie diesen Wert
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Formatieren Sie die Zeitachse des Pandas-Zeitreihendiagramms mit matplotlib neu
Grundlegende Berechnung von Pandas, um Hakone Ekiden zu genießen und gleichzeitig mit den besten Mitgliedern aller Zeiten zu konkurrieren
Beachten Sie, dass ich süchtig danach war, mit Pythons mysql.connector über eine Webanwendung auf die Datenbank zuzugreifen