[PYTHON] Versuchen Sie es mit Scikit-Learn (1) - K-Clustering nach Durchschnittsmethode

Letztes Mal hat die in scikit-learn implementierte Methode des maschinellen Lernens grob geschrieben, aber es scheint, dass es ab heute eine gewisse Nachfrage gibt. Während ich Beispielcode für maschinelles Lernen mit Scikit-Learn schreibe, möchte ich mich dem Verständnis und der Praxis der Methode nähern.

Zunächst werde ich ein Beispiel für das Clustering mit der K-Mittelungsmethode geben, das auch in Zurück durchgeführt wurde.

Die K-Mittelungsmethode ist eine der grundlegenden Methoden für das Clustering. Sie ist einfach, arbeitet mit hoher Geschwindigkeit und ist ideal für den Einstieg. Ich empfehle, die Operation jedes Mal zu erklären, aber hier ist leicht zu verstehen.

Aktienkursdaten werden weiterhin als Ziel für das Clustering verwendet.

Aktienkursdaten

  1. Jeder kann es kostenlos bekommen
  2. Reale Daten, die ein Indikator für die "Leistung" eines Unternehmens sind
  3. Einfach zu analysieren, da es sich um quantitative Daten handelt Es ist einfach zu handhaben, weil es solche Funktionen hat.

Zwischen der Unternehmensleistung und den Aktienkursen besteht ein enger Zusammenhang. Es wird gesagt, dass zwischen den beiden tatsächlich eine Lücke von etwa sechs Monaten bis drei Jahren besteht. Das liegt daran, dass Anleger in die zukünftige Wertentwicklung investieren.

Mit anderen Worten, zukünftige Geschäftsergebnisse wurden bereits in den Aktienkurs einbezogen. Wenn Sie beispielsweise IT-Investitionen und deren Nachfrage prognostizieren, können Sie sich eine einfache Vertriebsstrategie vorstellen, bei der die IT-Nachfrage auch in Bereichen erwartet wird, in denen die Geschäftsleistung steigt.

Dieses Mal werde ich die Daten der folgenden Unternehmen analysieren. Beide sind Unternehmen in der Nähe unseres Unternehmens (DTS).

Marke Name der Firma
9682 DTS
9742 Ines
9613 NTT-Daten
2327 Nippon Steel & Sumitomo Metal Solutions
9640 Saison Informationssysteme
3626 IT-Beteiligungen
2317 Systema
4684 Obic
9739 NSW
4726 Softbank-Technologie
4307 Nomura Forschungsinstitut
9719 SCSK
4793 Fujitsu BSC
4812 Internationaler Informationsdienst von Dentsu
8056 Japan Unisys

Rückgabeindex

Die Rendite in der Finanzwelt bezieht sich normalerweise auf eine prozentuale Änderung des Vermögenspreises ab einem Tag. Ein einfacher Rückgabeindex kann mit Pandas wie folgt gefunden werden:

returns = pd.Series(close).pct_change() #Finden Sie die Rate der Zunahme / Abnahme
ret_index = (1 + returns).cumprod() #Finden Sie das kumulative Produkt
ret_index[0] = 1 #Erster Wert 1.Auf 0 setzen

Wenn Sie sich auf mehrere Unternehmen konzentrieren, wird der Renditeindex verwendet, um zu messen, wie sich der Wert des Vermögenswerts ändert, wobei 1 basierend auf dem Preis eines Tages festgelegt wird.

Lassen Sie uns beispielsweise den Rückgabeindex für die letzten 30 Tage ab dem Datum des Schreibens dieses Artikels ermitteln.

#Lesen Sie Zeitreihendaten aus der CSV-Datei
df = pd.read_csv(csvfile,
                 index_col=0, parse_dates=True)
df = df[-30:] #Letzte 30 Tage
#Liste für den Rückgabeindex
indexes = get_ret_index(df)['ret_index'].values.tolist()
#DTS anzeigen
if stock == "9682":
    ts = df.index.values
    for t, v in zip(ts, indexes):
        print(t,v)
#=>
# 2015-02-23 1.0
# 2015-02-24 1.010054844606947
# 2015-02-25 1.020109689213894
# 2015-02-26 1.0351919561243146
# 2015-02-27 1.0680987202925045
# ...
# 2015-04-01 1.0237659963436931
# 2015-04-02 1.0530164533820843
# 2015-04-03 1.040219378427788

Deshalb.

Lassen Sie uns dieses Mal die Werte der letzten 30 Tage als Primzahl verwenden. Das heißt, das Obige wird so wie es ist ein 30-dimensionaler Vektor.

K-Means Clustering

Hier sei k = 4.

kmeans_model = KMeans(n_clusters=4, random_state=30).fit(features)
labels = kmeans_model.labels_
for label, name, feature in zip(labels, names, data):
    print(label, name)
#=>
# 2 9742
# 1 9682
# 2 9613
# 1 2327
# 3 9640
# 1 3626
# 1 2317
# 2 4684
# 0 9739
# 0 4726
# 2 4307
# 1 9719
# 0 4793
# 0 4812
# 1 8056

Auf diese Weise werden die Clusternummer und der Markencode angezeigt, zu denen Sie gehören.

Visualisierung

Es ist schwer zu verstehen, ob es nur das ist, also lasst es uns visualisieren.

df = pd.DataFrame(df, index=ts)
plt.figure()
df.plot()
plt.subplots_adjust(bottom=0.20)
plt.legend(loc="best")
plt.savefig("cluster.png ")
plt.close()

Dies ist zunächst einmal Cluster 0.

df0.png

Wenn Sie sich das vorstellen, können Sie sehen, dass sich die Aktien, die im März einen erheblichen Abwärtstrend verzeichneten, verfestigt haben.

Als nächstes kommt Cluster Nummer 1.

df1.png

Dies ist eine Sammlung von Aktien, deren Preise gegen Ende des Geschäftsjahres angehoben wurden, obwohl es eine Reihe von Preisbewegungen gibt.

Cluster Nummer 2.

df2.png

Unternehmen, die ihren Wert gesteigert haben, sammeln sich. Man kann sagen, dass die Leistung dieser vier Unternehmen günstig war.

Cluster 3 scheint aus einem Unternehmen ausgewählt worden zu sein, das sich etwas unregelmäßig verhalten hat.

df3.png

Für jedes Unternehmen mit ähnlichen Preisbewegungen wurden Cluster gebildet. In der obigen Tabelle finden Sie die Beziehung zwischen Aktien und Firmennamen.

Dieses Mal haben wir nur SIer-Aktien ins Visier genommen. Wenn Sie dies jedoch tun möchten, können Sie ähnliche Aktien aus den Daten aller anderen börsennotierten Unternehmen ableiten.

Japan Exchange-Sonstige statistische Daten http://www.jpx.co.jp/markets/statistics-equities/misc/01.html

Eine Liste aller börsennotierten Unternehmen kann von oben heruntergeladen werden. Ich habe über die Erfassung von Bestandsdaten in Zurück geschrieben, daher werde ich sie weglassen.

Zusammenfassung

Was können wir aus einer solchen Analyse lernen?

Eine Idee besteht darin, Unternehmen, die ähnliche Indikatoren aufweisen, aus Daten in einer Vielzahl von Branchen zu extrahieren, um beispielsweise den Zyklus beim Handel zu färben oder die Nachfrage nach versteckten IT-Investitionen zu schätzen, wenn es sich um eine Geschäftsstrategie handelt. Kann gemacht werden. Wenn wir für alle Branchen mechanisch Cluster bilden können, können wir uns die Mühe des menschlichen Urteils und des Aufnehmens ersparen.

Alternativ haben wir diesmal einfach den Rückgabeindex als Index verwendet, aber im Prinzip kann jeder Index verwendet werden. Beispielsweise wird der durchschnittliche Aktienkurs von Nikkei aus dem Durchschnitt von 225 Unternehmen berechnet. Wenn Sie jedoch aus nur 20 Unternehmen einen ähnlichen Index erstellen möchten, können Sie maschinelles Lernen verwenden.

In jedem Fall gibt es nichts weniger als eine Analyse, die auf Intuition und Erfahrung beruht. Menschen haben kognitive Verzerrungen und treffen emotionale Entscheidungen. Dieser Bereich ist [Verhaltensökonomie](http://ja.wikipedia.org/wiki/%E8%A1%8C%E5%8B%95%E7%B5%8C%E6%B8%88%E5%AD% Wie Sie aus A6) ersehen können, treffen Menschen nicht immer rationale Entscheidungen. Die Unterstützung mechanischer Analysen ist wichtig, um menschliche Emotionen zu eliminieren und rationale Entscheidungen bei der Analyse von Finanzdaten zu treffen.

Recommended Posts

Versuchen Sie es mit Scikit-Learn (1) - K-Clustering nach Durchschnittsmethode
Versuchen Sie es mit Tkinter
Versuchen Sie es mit Docker-Py
Versuchen Sie es mit einem Ausstecher
Versuchen Sie es mit PDFMiner
Versuchen Sie es mit Geopandas
Versuchen Sie es mit Selen
Versuchen Sie es mit scipy
Versuchen Sie die Clusteranalyse mit K-Mitteln
Clustering mit Scikit-Learn (1)
Versuchen Sie es mit pandas.DataFrame
Clustering mit Scikit-Learn (2)
Versuchen Sie es mit Django-Swiftbrowser
Versuchen Sie es mit matplotlib
Versuchen Sie es mit tf.metrics
Versuchen Sie es mit PyODE
kmeans ++ mit scikit-learn
Clustering mit scikit-learn + DBSCAN
Versuchen Sie es mit virtualenv (virtualenvwrapper)
[Grob] Clustering mit K-Mitteln
[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Versuchen Sie es jetzt mit virtualenv
Versuchen Sie es mit W & B.
Versuchen Sie es mit Django templates.html
[Kaggle] Versuchen Sie es mit LGBM
Versuchen Sie es mit dem Feed-Parser von Python.
Versuchen Sie es mit Pythons Tkinter
DBSCAN (Clustering) mit Scikit-Learn
Versuchen Sie es mit Tweepy [Python2.7]
Versuchen Sie es mit Pytorchs collate_fn
(Fortsetzung) Probieren Sie andere Entfernungsfunktionen mit kmeans in Scikit-learn aus
Versuchen Sie, PythonTex mit Texpad zu verwenden.
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
Versuchen Sie es mit Jupyters Docker-Image
Versuchen Sie die Funktionsoptimierung mit Hyperopt
Versuchen Sie es mit matplotlib mit PyCharm
Versuchen Sie es mit Azure Logic Apps
Versuchen Sie es mit Kubernetes Client -Python-
[Kaggle] Versuchen Sie es mit xg boost
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit OpenCV unter Windows
Versuchen Sie, Jupyter Notebook dynamisch zu verwenden
Python: Grundlagen der Verwendung von Scikit-Learn ①
Versuchen Sie es mit AWS SageMaker Studio
Versuchen Sie, automatisch mit Selen zu twittern.
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 1)
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 2)
Versuchen Sie es mit der Vorlagenfunktion von Django
Versuchen Sie es mit der PeeringDB 2.0-API
Versuchen Sie es mit der Entwurfsfunktion von Pelican
Versuchen Sie es mit pytest-Overview und Samples-
Ähnliche Gesichtsbilderkennung mit Gesichtserkennung und PCA- und K-Mittel-Clustering
Versuchen Sie es mit Folium mit Anakonda
Versuchen Sie es mit der Admin-API von Janus Gateway
[Statistik] [R] Versuchen Sie, die Teilungspunktregression zu verwenden.
Versuchen Sie es mit Spyder, das in Anaconda enthalten ist
Versuchen Sie es mit Designmustern (Exporter Edition)
Einfache Rastersuchvorlage mit Scikit-learn
Versuchen Sie es mit Pillow auf iPython (Teil 2)
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung