[PYTHON] Aktienkursprognose mit Deep Learning (TensorFlow)

Aus irgendeinem Grund sehe ich nicht, dass Leute so viel tun, deshalb werde ich versuchen, den Aktienkurs mithilfe von Deep Learning vorherzusagen. Sowohl Deep Learning als auch Python sind Anfänger. Über Bibliotheken, Implementierungsmethoden, Theorien usw. ist wenig bekannt. Wir warten auf Tsukkomi etc.

Ziel

――Mit den Lagerdaten für mehrere Tage können Sie vorhersagen, ob der durchschnittliche Aktienkurs von Nikkei für den nächsten Tag „steigen“, „fallen“ oder „sich ändern“ wird. (Kategorie)

Überblick

――Der Schlusskurs des nächsten Tages wird verwendet, um zu bestimmen, ob er „hoch“, „runter“ oder „unverändert“ war.

Umgebung

TensorFlow 0.7 Ubuntu 14.04 Python 2.7 AWS EC2 micro instance

Inhalt

Vorbereitung

Bereiten Sie so viele Nikkei-Durchschnittsdaten wie möglich vor. Dieses Mal habe ich die Daten von [Yahoo Finance] verwendet (http://stocks.finance.yahoo.co.jp/stocks/detail/?code=998407.o).

Implementierung

Der Nikkei-Durchschnitt ist ein Text. (Weil es mühsam ist, es jedes Mal zu holen) Dieses Mal werde ich mir die Daten für 10 Tage ansehen und den Aktienkurs für den nächsten Tag vorhersagen. Wenn der Schlusskurs am nächsten Tag 0,5% oder mehr vom Schlusskurs am Vortag beträgt, ist er "hoch", wenn er 0,5% oder weniger beträgt, ist er "runter", andernfalls ist er "unverändert". Der Grund für diese Zahl ist, dass diese drei nur etwa 33% sind.

if array_base[idx][3] > (array_base[idx+1][3] * (1.0+flg_range)):
  y_flg_array.append([1., 0., 0.])
  up += 1
elif array_base[idx][3] < (array_base[idx+1][3] * (1.0-flg_range)):
  y_flg_array.append([0., 0., 1.])
  down += 1
else:
  y_flg_array.append([0., 1., 0.])
  keep += 1

Das Verhältnis der Daten als Ganzes ist wie folgt. Erhöht: 33,9% Verringert: 32,7% Keine Veränderung: 33,4%

Diagrammerstellung

Der Code sieht so aus. Es ist ein kleines Spaghetti mit einer Kopie, aber es ist leicht zu sehen. (Ausrede)

def inference(x_ph, keep_prob):

  with tf.name_scope('hidden1'):
    weights = tf.Variable(tf.truncated_normal([data_num * 4, NUM_HIDDEN1]), name='weights')
    biases = tf.Variable(tf.zeros([NUM_HIDDEN1]), name='biases')
    hidden1 = tf.nn.sigmoid(tf.matmul(x_ph, weights) + biases)
  
  with tf.name_scope('hidden2'):
    weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN1, NUM_HIDDEN2]), name='weights')
    biases = tf.Variable(tf.zeros([NUM_HIDDEN2]), name='biases')
    hidden2 = tf.nn.sigmoid(tf.matmul(hidden1, weights) + biases)
  
  with tf.name_scope('hidden3'):
    weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN2, NUM_HIDDEN3]), name='weights')
    biases = tf.Variable(tf.zeros([NUM_HIDDEN3]), name='biases')
    hidden3 = tf.nn.sigmoid(tf.matmul(hidden2, weights) + biases)
  
  with tf.name_scope('hidden4'):
    weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN3, NUM_HIDDEN4]), name='weights')
    biases = tf.Variable(tf.zeros([NUM_HIDDEN4]), name='biases')
    hidden4 = tf.nn.sigmoid(tf.matmul(hidden3, weights) + biases)
  
  #DropOut
  dropout = tf.nn.dropout(hidden4, keep_prob)
  
  with tf.name_scope('softmax'):
    weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN4, 3]), name='weights')
    biases = tf.Variable(tf.zeros([3]), name='biases')
    y = tf.nn.softmax(tf.matmul(dropout, weights) + biases)
  
  return y

Ein Platzhalter, in dem x_ph die Aktienkursdaten bis zum Vortag enthält. Die Daten sind enthalten als [vor 1 Tag Schlusskurs, vor 1 Tag Eröffnungskurs, vor 1 Tag Hochpreis, vor 1 Tag Niedrigpreis, vor 2 Tagen Schlusskurs, ...]. Die Anzahl der versteckten Ebeneneinheiten beträgt 100, 50, 30, 10. Das heißt, es ist unten definiert.

# DEFINITION
NUM_HIDDEN1 = 100
NUM_HIDDEN2 = 50
NUM_HIDDEN3 = 30
NUM_HIDDEN4 = 10

Übrigens sind die Anzahl der Einheiten und die Anzahl der Schichten angemessen. Ist es nicht besser, mehr zu haben? Ich entschied mich mit der Absicht. Ich würde mich freuen, wenn Sie mir Richtlinien zur Bestimmung dieser Zahlen m (_ _) m mitteilen könnten

Optimierung

Die Optimierung verwendet ADAM. Ich kenne die Details nicht, aber meiner Erfahrung nach ist es schwieriger, davon abzuweichen als beim GradientDescentOptimizer.

def optimize(loss):
  optimizer = tf.train.AdamOptimizer(learning_rate)
  train_step = optimizer.minimize(loss)
  return train_step

Ausbildung

Das Training sieht wie folgt aus. Die Chargengröße beträgt 100. Wenn es zu groß ist, wird es Moos sein. (Unzureichender Speicher. Es ist in Ordnung, wenn Sie nicht stecken bleiben.)

def training(sess, train_step, loss, x_train_array, y_flg_train_array):
  
  summary_op = tf.merge_all_summaries()
  init = tf.initialize_all_variables()
  sess.run(init)
  summary_writer = tf.train.SummaryWriter(LOG_DIR, graph_def=sess.graph_def)
  
  for i in range(int(len(x_train_array) / bach_size)):
    batch_xs = getBachArray(x_train_array, i * bach_size, bach_size)
    batch_ys = getBachArray(y_flg_train_array, i * bach_size, bach_size)
    sess.run(train_step, feed_dict={x_ph: batch_xs, y_ph: batch_ys, keep_prob: 0.8})

    summary_str = sess.run(summary_op, feed_dict={x_ph: batch_xs, y_ph: batch_ys, keep_prob: 1.0})
    summary_writer.add_summary(summary_str, i)

Auswertung

Nach dem Training wie folgt bewerten. Es ist im Grunde eine Kopie aus dem Tutorial.

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_ph, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

print(sess.run(accuracy, feed_dict={x_ph: x_test_array, y_ph: y_flg_test_array, keep_prob: 1.0}))

Ergebnis

Wenn man sich das TensorBoard ansieht, sieht es so aus, als ob es wie folgt konvergiert hat. nikkei.jpg

Betrachtet man jedoch den Prozentsatz der richtigen Antworten,

0.3375

Eine schreckliche Niederlage. : Schrei: Wie oben erwähnt, beträgt die Wahrscheinlichkeit für jede Kategorie (hoch, runter, unverändert) etwa 33%, sodass das Ergebnis dem Erraten entspricht. (Lol)

Erwägung

In Bezug auf die Ursache dieses Fehlers sind die möglichen Ursachen wie folgt.

Ich habe verschiedene Dinge ausprobiert, indem ich die Anzahl der für die Eingabe verwendeten Tage, die Anzahl der ausgeblendeten Ebenen, die Anzahl der Einheiten, die Aktivierungsfunktion usw. geändert habe, aber es gab keine besondere Änderung in den Ergebnissen. : Schluchzen:

Impressionen

Ich bin nicht sehr vertraut mit Matrixberechnung oder Deep Learning, aber wenn ich die Gliederung verstehen kann, kann ich so etwas mit TensorFlow machen! : zufrieden:

Referenzierte Websites, Seiten, Literatur

Offizielles Tutorial Spielen, um den Rennwert vorherzusagen und mit TensorFlow aus dem Pokemon-Namen zu tippen [Deep Learning (professionelle Serie für maschinelles Lernen)](http://www.amazon.co.jp/%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92-%E6 % A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 83% 97% E3% 83% AD% E3% 83% 95% E3% 82% A7% E3% 83 % 83% E3% 82% B7% E3% 83% A7% E3% 83% 8A% E3% 83% AB% E3% 82% B7% E3% 83% AA% E3% 83% BC% E3% 82% BA -% E5% B2% A1% E8% B0% B7-% E8% B2% B4% E4% B9% 8B / dp / 4061529021)

Recommended Posts

Aktienkursprognose mit Deep Learning (TensorFlow)
Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-
Aktienkursprognose mit Deep Learning [Datenerfassung]
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
Aktienkursprognose mit maschinellem Lernen (Return Edition)
Aktienkursprognose mit Tensorflow
Aktienprognose mit TensorFlow (LSTM) ~ Aktienprognose Teil 1 ~
Aktienkursprognose 2 Kapitel 2
Aktienkursprognose 1 Kapitel 1
Aktienkursprognose durch maschinelles Lernen Numerai Signals
Python & Machine Learning Study Memo ⑦: Aktienkursprognose
Aktienkursprognose mit TensorFlow (mehrschichtiges Perceptron: MLP) ~ Aktienprognose 2 ~
Versuchen Sie es mit TensorFlow
Python: Aktienkursprognose Teil 2
Aktienkursprognose mit LSTM_1
Python: Aktienkursprognose Teil 1
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Aktienkursprognose durch maschinelles Lernen Beginnen wir mit Numerai
Bitcoin-Preisprognose mit TensorFlow (LSTM)
[Python] Meine Aktienkursprognose [HFT]
Ich habe versucht, mit Theano tief zu lernen
Vorhersage von Aktienkursänderungen mithilfe von Metallkennzeichnung und zweistufigem maschinellem Lernen
Aktienkurs Prognose durch maschinelles Lernen ist so wahr, Numerai Signale
Tiefes Lernen
Umgang mit Tensorflow mit GPU beim Deep Learning, das plötzlich nicht mehr funktioniert
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Probieren Sie die Bitcoin-Preisprognose mit Deep Learning aus
Bis die Deep Learning-Umgebung (TensorFlow) mit GPU für Ubuntu 14.04 vorbereitet ist
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Ein Amateur versuchte Deep Learning mit Caffe (Einführung)
Ein Amateur versuchte Deep Learning mit Caffe (Übung)
Deep Learning Memorandum
Starten Sie Deep Learning
Python Deep Learning
[Kausalsuche / Kausalinferenz] Führen Sie mit Deep Learning eine Kausalsuche (SAM) durch
Ein Amateur hat Deep Learning mit Caffe ausprobiert (Übersicht)
Deep Learning × Python
Aktieninvestitionen durch tiefgreifendes Lernen (Policy Gradient Method) (1)
DNN (Deep Learning) Library: Vergleich von Chainer und TensorFlow (1)
Sammlung und Automatisierung erotischer Bilder durch Deep Learning
Erstes tiefes Lernen ~ Kampf ~
Python: Deep Learning-Praxis
Deep Learning / Aktivierungsfunktionen
Deep Learning von Grund auf neu
Deep Learning 1 Übung des Deep Learning
Deep Learning / Cross Entropy
Erstes tiefes Lernen ~ Vorbereitung ~
Erstes tiefes Lernen ~ Lösung ~
[AI] Deep Metric Learning
Ich habe versucht, tief zu lernen
Maschinelles Lernen (TensorFlow) + Lotto 6
Preisschwankungsprognose für virtuelle Währungen
Python: Deep Learning Tuning
Deep Learning Großtechnologie
Kaggle ~ Home Preisprognose ② ~
Kaggle ~ Home Preisprognose ~
Deep Learning / Softmax-Funktion
[Teil 4] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Untersuchung der Austauschprognosemethode mit Deep Learning und Wavelet-Konvertierung - Teil 2-