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) **
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.
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
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.)
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.
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) **
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.
Recommended Posts