[PYTHON] Notez que le calcul de la corrélation moyenne par paire était très facile avec les pandas

Qu'est-ce que la corrélation moyenne par paire

Je ne sais pas combien de personnes dans le monde ont besoin pour faire ce calcul.

La corrélation moyenne des actions par paire est la moyenne des coefficients de corrélation des mouvements de prix entre les actions. En général, l'environnement est tel que le marché dans son ensemble baisse fortement lors d'une crise comme le choc Lehman ou la crise de la dette européenne, puis augmente fortement en réaction, et le coefficient de corrélation entre les actions augmente. Lorsque la corrélation augmente, toutes les actions se comportent de la même manière, créant un environnement de marché dans lequel il est difficile pour les investisseurs actifs en actions de gagner un revenu excédentaire en sélectionnant des actions. Alors, utilisez cette métrique pour ajuster le niveau de risque de votre portefeuille (réduisez le risque lorsque vous avez peu de chances de gagner, etc.). À titre d'exemple plus bâclé, les gestionnaires de titres actifs l'utilisent comme excuse pour dire: "Je n'ai pas gagné récemment, mais c'est l'environnement du marché, alors pardonnez-moi."

Si facile avec les pandas

Préparez d'abord les données. Préparez un DataFrame (m x n) avec la date verticalement (supposée être m jours), les stocks horizontalement (supposé être n) et les rendements quotidiens des stocks dans chaque élément. Cette fois, j'ai préparé les données à l'extérieur et je les ai lues avec csv. Cet article, etc., téléchargez le cours de l'action de yahoo en utilisant des pandas et utilisez la méthode pct_change () pour les retours quotidiens Vous pouvez le réparer.

Et enfin je vais calculer le coefficient de corrélation,

#Calcul de la corrélation par paires(Le résultat est Panel)
result = df.rolling(window=60, min_periods=30).corr()

Le calcul de la corrélation par paire roulante est terminé dans cette ligne! Ce que nous faisons, c'est "Calculer une matrice de corrélation (matrice nxn) qui prend le coefficient de corrélation entre tous les stocks pour 60 jours de rendements quotidiens jusqu'à ce jour. Cependant, pour les actions qui ne disposent pas de données pendant 30 jours," Aucun " Et répétez ceci pour toutes les dates. " Le "résultat" résultant est un objet "pandas.Panel" qui est un "DataFrame" bidimensionnel avec un axe supplémentaire (axe du temps) pour le rendre tridimensionnel (m x n x n).

J'ai pu calculer la corrélation, mais il faut du travail pour obtenir la moyenne. Puisqu'il s'agit d'une matrice de corrélation, 1 est inclus dans la composante diagonale et il est nécessaire de prendre la moyenne sans cela.2) Si le coefficient de corrélation ne peut pas être calculé en raison d'une perte de données, la valeur Aucun est incluse. Il y a deux raisons pour lesquelles vous devez prendre la moyenne sur cela.

Tout d'abord, c'est le composant diagonal 1, mais j'utiliserai np.fill_diagonal () de Numpy et le changerai en valeur None. Pour un seul DataFrame, nous utilisons quelque chose comme np.fill_diagonal (df, None), mais cette fois nous utilisons la méthode ʻapply () pour l'appliquer à l'ensemble du Panel` comme suit:

#Convertir le composant diagonal en Aucun
tmp = result.apply(lambda x: np.fill_diagonal(x.values, None), axis=(1,2)) 

Appliquez ensuite la méthode mean (skipna = True) pour calculer la valeur moyenne, en ignorant la valeur None. Il s'agit de la corrélation moyenne par paire. Ceci est également appliqué sur l'axe des temps avec une seule méthode ʻapply () `.

#Ignorer Aucun et calculer la moyenne
apc = result.apply(lambda x: x.unstack().mean(skipna=True), axis=(1,2))

Avec Panel.apply (..., axis = (1,2)), vous pouvez traiter la matrice de corrélation à chaque point dans le temps comme DataFrame x tout en déplaçant l'axe des temps.

Le calcul est terminé! Tracons-le.

apc.plot()

correlation.png

Vous pouvez voir que la corrélation saute au moment où le marché est influencé par des facteurs macroéconomiques occasionnels.

en conclusion

C'est tout ce qu'il faut pour élaborer le code. C'est facile. Les pandas ne sont développés que par l'auteur Wes McKinney pendant son mandat au fonds spéculatif AQR Capital, ce qui facilite la gestion des données financières.

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

#Lecture des données
df = pd.read_csv('data.csv', na_values=' ', index_col=0, parse_dates=True)
#Calcul de la corrélation par paires(Le résultat est Panel)
result = df.rolling(window=60, min_periods=30).corr()
#Convertir le composant diagonal en Aucun
tmp = result.apply(lambda x: np.fill_diagonal(x.values, None), axis=(1,2)) 
#Ignorer Aucun et calculer la moyenne
apc = result.apply(lambda x: x.unstack().mean(skipna=True), axis=(1,2))
#Terrain
apc.plot()

Les références

Recommended Posts

Notez que le calcul de la corrélation moyenne par paire était très facile avec les pandas
Tracez l'indice boursier moyen Nikkei avec des pandas
J'ai comparé la moyenne mobile du type de filtre IIR avec les pandas et scipy
Remarque: préparez l'environnement de CmdStanPy avec docker
[Note] Exportez le html du site avec python.
En voici une, je vais résumer les applications équipées "d'intelligence artificielle" qui m'intéressaient
Calculer la somme des valeurs uniques par tabulation croisée des pandas
Prenez note de la liste des utilisations de base de Pandas
Veuillez noter que le dernier lien d'ius a changé
L'histoire selon laquelle la valeur de retour de tape.gradient () était None
L'histoire de la confusion entre la production japonaise et Django
Extraire la valeur maximale avec les pandas et modifier cette valeur
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
Calcul de base des pandas pour profiter de Hakone Ekiden tout en rivalisant avec les meilleurs membres de tous les temps
Notez que j'étais accro à accéder à la base de données avec mysql.connector de Python en utilisant une application Web