[PYTHON] Trouver le début de l'avenomics à partir du grossissement NT 2

La tendance du grossissement NT a changé

Dans l'article précédent, à partir de l'analyse des deux indices boursiers Topix / Nikkei225, en particulier l'analyse de régression, le tracé de NT est en grande partie sur deux lignes de tendance, et dans l'ordre chronologique, Trend-1 avec un léger gradient ( Il a été constaté que le rapport NT = 10,06) a changé en Trend-2 (rapport NT = 12,81) avec une forte pente.

** Chiffre. Réimpression de la figure ci-dessus (Topix vs Nikkei225) ** Scatter_NT_02.png

La forte pente de la tendance 2 est présumée être liée à la politique économique «Abenomics», mais l'analyse de régression n'a pas précisé quand elle a commencé. Cette fois, nous avons utilisé une méthode d'apprentissage automatique pour classer Trend-1 et Trend-2, et avons essayé de clarifier quand Trend-2 a démarré.

Trial.1 - K-Means Clustering J'ai décidé d'utiliser scikit-learn comme module Python pour l'apprentissage automatique, mais il existe différentes approches possibles pour classer, mais j'ai d'abord essayé d'utiliser la méthode K-Means. Ceci est un exemple typique de clustering effectué sans étiquette.

K-Means_not_good.png

Le code est le suivant.


from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

mypair.dropna(inplace=True)
X = np.column_stack([mypair['topix'].values, mypair['n225'].values])

# K-means clustering process

myinit = np.array([[mypair.loc['20050104', 'topix'], mypair.loc['20050104', 'n225']], \
			[mypair.loc['20130104', 'topix'], mypair.loc['20130104', 'n225']]])

k_means = KMeans(init=myinit, n_clusters=2, n_init=10)
k_means.fit(X)           # ... compute k-means clustering

k_means_labels = k_means.labels_
k_means_cluster_centers = k_means.cluster_centers_
k_means_labels_unique = np.unique(k_means_labels)

colors = ['b', 'r']
n_clusters = 2

for k, col in zip(range(n_clusters), colors):
    my_members = k_means_labels == k
    cluster_center = k_means_cluster_centers[k]
    plt.plot(X[my_members, 0], X[my_members, 1], 'w', markerfacecolor=col, marker='.')
    plt.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=6)

plt.title('K-Means')
plt.grid(True)

Après tout, c'était inutile. Dans la méthode K-Means, il semble que la méthode consiste à mesurer la distance (abstraite) entre les données et à collecter les plus proches de votre propre membre, mais comme cette fois, celles avec un grand rapport hauteur / largeur dispersées le long de la ligne Il ne semble pas convenir à la manipulation.

Trial.2 - Primary Component Anarysis (PCA) En regardant le tracé des K-moyennes, je me suis demandé s'il serait possible d'appliquer une sorte de transformation de coordonnées pour en faire un "bloc" et ensuite l'appliquer au Clustering afin de collecter les données dispersées linéairement. Cependant, lorsque j'ai vérifié les documents, j'ai trouvé que l'Anasis en Composante Principale (PCA) pouvait être appliquée, j'ai donc décidé d'essayer la classification par PCA.

** Chiffre. Tracé ** après le traitement PCA

PCA_scatter_01.png

De là, nous avons décidé de classer en deux groupes avec une ligne de démarcation à Y = 0.

# PCA process

pca = PCA(n_components=2)
X_xf = pca.fit(X).transform(X)

plt.scatter(X_xf[:,0], X_xf[:,1])
plt.grid(True)
border_line = np.array([[-6000,0], [6000, 0]])
plt.plot(border_line[:,0], border_line[:,1],'r-', lw=1.6)

col_v = np.zeros(len(X_xf), dtype=int)
for i in range(len(X_xf)):
	col_v[i] = int(X_xf[i,1] / abs(X_xf[i,1])) * (-1)

mypair['color'] = col_v
mypair['color'].plot(figsize=(8,2), grid=True, lw=1.6)    # color historical chart
plt.ylim([-1.2, 1.2])

# plot scatter w/ colors

plt.figure(figsize=(12,5))
plt.subplot(121)
plt.scatter(X_xf[:,0], X_xf[:,1], marker='o', c=col_v)
plt.grid(True)
plt.title('Topix vs. Nikkei225 (PCA processed)')

plt.subplot(122)
plt.scatter(X[:,0], X[:,1], marker='o', c=col_v)
plt.grid(True)
plt.title('Topix vs. Nikkei225 (raw values)')

Les résultats sont présentés dans la figure ci-dessous. (Désolé, la "couleur" est difficile à voir.)

PCA_scatter_03.png

Celui de gauche est codé par couleur dans le système de coordonnées converti par PCA, et cette couleur est tracée dans le système de coordonnées d'origine. Il peut être confirmé que les tendances sont regroupées comme prévu à l'origine. Définir Y = 0 comme limite de groupe semble être "bien" raisonnable.

Résumé

Par PCA, nous avons pu classer dans un groupe de parcelles bleues avec une pente douce et un groupe de parcelles rouges avec une pente raide. Faisons des données de série de cette couleur un graphique historique.

** Chiffre. Transition de tendance (couleur) (y = -1: Trend-1, y = + 1: Trend-2) ** PCA_color-TL.png

D'après le graphique ci-dessus, ** Tendance-1 ** jusqu'au second semestre de 2009, puis il y a une légère période de transition, et à partir du deuxième trimestre de 2011, le ratio NT est élevé ** Tendance-2 ** On peut voir que cela se poursuit jusqu'en 2014. Si ** Trend-2 ** = "Abenomics", on peut en déduire que Avenomics a démarré au premier semestre 2011. (La première moitié de 2011 me rappelle le grand tremblement de terre de l'est du Japon.)

Je souhaiterais envisager l'application d'autres méthodes d'apprentissage automatique et la vérification de cette méthode PCA à l'avenir. De plus, lorsque d'autres données économiques (telles que les importations de combustibles fossiles) sont disponibles, j'aimerais étudier la relation avec elles.

Les références

Recommended Posts

Trouver le début de l'avenomics à partir du grossissement NT 2
Trouver le début de l'avenomics à partir du grossissement NT 1
Notes d'apprentissage depuis le début de Python 1
Omettre la nomenclature depuis le début de la chaîne
Notes d'apprentissage depuis le début de Python 2
Le début de cif2cell
Apprenez Nim avec Python (dès le début de l'année).
Étude depuis le début de Python Hour1: Hello World
Étude de Python Hour8: Utilisation de packages
Remarque DJango: depuis le début (Simplification et fractionnement d'URLConf)
First Python 3 ~ Le début de la répétition ~
DJango Memo: Depuis le début (préparation)
Dérivez soigneusement la plage de quadrants de la distribution normale standard depuis le début
DJango Memo: depuis le début (réglage du modèle)
[Comprendre en 3 minutes] Le début de Linux
Criez Bonjour Reiwa! Au début de Reiwa!
Remarque DJango: depuis le début (traitement de formulaire)
DJango Memo: depuis le début (création d'une vue)
Modifiez le point décimal de la journalisation de, à.
L'histoire de la recherche du n optimal dans N poing
Extrait uniquement complet du résultat de Trinity
DJango Memo: depuis le début (réglage de l'écran d'erreur)
De l'introduction de pyethapp à l'exécution du contrat
Transition du baseball vue à partir des données
Histoire de passer de Pipenv à la poésie
Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java
L'histoire du lancement d'un serveur Minecraft depuis Discord
Le mur lors du passage du service Django de Python 2.7 à la série Python 3
Utilisé depuis l'introduction de Node.js dans l'environnement WSL
Calculer le volume à partir de la structure bidimensionnelle d'un composé
[GoLang] Définissez un espace au début du commentaire
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Ouvrez la version Chrome de LINE à partir de la ligne de commande [Linux]
Calcul du nombre minimum de voix requis à partir du taux de vote
Processus de compétition Kaggle du point de vue de la transition des scores
L'idée de Tensorflow a appris de la fabrication de pommes de terre
Récupérer le code retour d'un script Python depuis bat
Remarque DJango: depuis le début (en utilisant une vue générique)
Remarque DJango: depuis le début (création d'une vue à partir d'un modèle)
Othello ~ De la troisième ligne de "Implementation Deep Learning" (4) [Fin]
Visualisez le nombre de plaintes des compagnies d'assurance-vie
Trouvez la «note de passage minimale» à partir de la «note moyenne des candidats», de la «note moyenne des candidats retenus» et de «l'agrandissement» de l'examen d'entrée