Im vorherigen Artikel wurde anhand der Analyse der beiden Aktienindizes Topix / Nikkei225, insbesondere der Regressionsanalyse, die Darstellung von NT weitgehend auf zwei Trendlinien und in chronologischer Reihenfolge auf Trend-1 mit einem leichten Gradienten (Tend-1 ( Es wurde festgestellt, dass sich das NT-Verhältnis = 10,06) mit einer steilen Steigung zu Trend-2 (NT-Verhältnis = 12,81) änderte.
** Zahl. Nachdruck der obigen Abbildung (Topix vs. Nikkei225) **
Es wird angenommen, dass der steile Anstieg von Trend-2 mit der Wirtschaftspolitik von "Avenomics" zusammenhängt, aber die Regressionsanalyse hat zu Beginn nicht geklärt. Dieses Mal haben wir Trend-1 und Trend-2 mithilfe der Methode des maschinellen Lernens klassifiziert und versucht zu klären, wann Trend-2 gestartet wurde.
Trial.1 - K-Means Clustering Ich habe mich entschieden, scikit-learn als Python-Modul für maschinelles Lernen zu verwenden, aber es gibt verschiedene mögliche Ansätze für die Klassifizierung, aber zuerst habe ich versucht, die K-Means-Methode zu verwenden. Dies ist ein typisches Beispiel für Clustering ohne Label.
Der Code lautet wie folgt.
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)
Immerhin war es nutzlos. Bei der K-Means-Methode scheint es so zu sein, dass die Methode darin besteht, den (abstrakten) Abstand zwischen den Daten zu messen und die Nähe zu Ihrem eigenen Mitglied zu erfassen, aber wie diesmal sind diejenigen mit einem großen Seitenverhältnis entlang der Linie verstreut Es scheint nicht für die Handhabung geeignet zu sein.
Trial.2 - Primary Component Anarysis (PCA) Als ich mir das K-Mittel-Diagramm ansah, fragte ich mich, ob es möglich wäre, eine Art Koordinatentransformation anzuwenden, um es zu einem "Klumpen" zu machen, und es dann auf Clustering anzuwenden, um die linear gestreuten Daten zu sammeln. Als ich jedoch die Dokumente überprüfte, stellte ich fest, dass die Hauptkomponentenanase (PCA) angewendet werden konnte, und entschied mich daher, die Klassifizierung nach PCA zu versuchen.
** Zahl. Plot ** nach PCA-Verarbeitung
Von hier aus haben wir beschlossen, in zwei Gruppen mit einer Grenzlinie bei Y = 0 zu klassifizieren.
# 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)')
Die Ergebnisse sind in der folgenden Abbildung dargestellt. (Entschuldigung, die "Farbe" ist schwer zu sehen.)
Die linke ist in dem von PCA konvertierten Koordinatensystem farbcodiert, und diese Farbe ist im ursprünglichen Koordinatensystem aufgetragen. Es kann bestätigt werden, dass Trends wie ursprünglich beabsichtigt gruppiert werden. Das Setzen von Y = 0 als Gruppengrenze scheint "gut" sinnvoll zu sein.
Durch PCA konnten wir in eine blaue Grundstücksgruppe mit leichtem Gefälle und eine rote Grundstücksgruppe mit steilem Gefälle einteilen. Machen wir die Seriendaten dieser Farbe zu einem historischen Diagramm.
** Zahl. Trend- (Farb-) Übergang (y = -1: Trend-1, y = + 1: Trend-2) **
Aus der obigen Grafik ** Trend-1 ** bis zum zweiten Halbjahr 2009 ergibt sich eine leichte Übergangszeit, und ab dem zweiten Quartal 2011 ist die NT-Quote groß ** Trend-2 ** Es ist zu sehen, dass es bis 2014 andauert. Wenn ** Trend-2 ** = "Abenomics" ist, kann davon ausgegangen werden, dass Abenomics im ersten Halbjahr 2011 gestartet wurde. (Das erste Halbjahr 2011 erinnert mich an das große Erdbeben in Ostjapan.)
Ich möchte die Anwendung anderer Methoden des maschinellen Lernens und die Überprüfung dieser PCA-Methode in Zukunft in Betracht ziehen. Wenn andere Wirtschaftsdaten (z. B. Importe fossiler Brennstoffe) verfügbar sind, möchte ich auch den Zusammenhang damit untersuchen.
--Data Scientist Training Reader (Technische Überprüfung) http://gihyo.jp/book/2013/978-4-7741-5896-9 7741-5896-9)
Recommended Posts