[PYTHON] Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-

Fortsetzung von Letztes Mal. Es ist eine Geschichte, dass wir den Aktienkurs mit TensorFlow vorhersagen werden, einem Rahmen für tiefes Lernen. Das letzte Mal war es übrigens ein völliger Misserfolg. Letztes Mal kommentiert von tawago ["Google macht dasselbe"]( Ich habe die Informationen https://cloud.google.com/solutions/machine-learning-with-financial-time-series-data) erhalten, habe sie also kopiert und versucht, sie zu inspirieren.

Unterschiede zum letzten Mal

Beim letzten Mal wurde "der Nikkei-Durchschnitt mehrere Tage lang verwendet, um vorherzusagen, ob der Nikkei-Durchschnitt für den nächsten Tag steigen, fallen oder sich nicht ändern wird (3 Auswahlmöglichkeiten)". In der Google-Demo "verwenden wir globale Aktienindizes im Wert von mehreren Tagen (Dow, Nikkei Average, FTSE100, DAX usw.), um vorherzusagen, ob S & P am nächsten Tag steigen oder fallen wird (2 Auswahlmöglichkeiten)." Es war der Inhalt. Im Folgenden sind die wichtigsten Änderungen gegenüber dem letzten Mal aufgeführt. ――Zwei Möglichkeiten von "hoch" und "runter"

Weitere Informationen zur Google-Demo finden Sie unter dieses Video. (Englisch)

Umgebung

TensorFlow 0.7 Ubuntu 14.04 Python 2.7 AWS EC2 micro instance

Implementierung

Vorbereitung

Es scheint, dass die Daten von der Website Quandl heruntergeladen werden können. Es gab jedoch ein Problem, dass die veröffentlichten Daten zu groß waren, um zu wissen, welche heruntergeladen werden sollten. Daher werde ich dieses Mal nur vier verwenden, Nikkei, Dow, Hong Kong Hansen und Deutschland. Ich habe ungefähr 8 in der Google-Demo verwendet.

Die abgelegten Daten werden in einer Tabelle zusammengefasst und als CSV gespeichert. Es gibt kein bestimmtes Skript. Ich habe es manuell mit der VLOOKUP-Funktion von Excel gemacht. Wenn Sie können, können Sie es in die Datenbank stellen und gut damit umgehen ...

Etikette

Dieses Mal gibt es zwei Möglichkeiten: "Auf" oder "Ab". Das richtige Flag lautet also wie folgt.

if array_base[idx][3] > array_base[idx+1][3]:
  y_flg_array.append([1., 0.])
  up += 1
else:
  y_flg_array.append([0., 1.])
  down += 1

Als ganze Probe Zunahme: 50,6% Rückgang: 49,4% ist geworden.

Diagrammerstellung

Das Diagramm ahmt fast den Code von Google nach. Die Anzahl der ausgeblendeten Ebenen und die Anzahl der Einheiten befinden sich noch im Google-Code. Möglicherweise gab es keinen Ausfall.

NUM_HIDDEN1 = 50
NUM_HIDDEN2 = 25
def inference(x_ph, keep_prob):

  with tf.name_scope('hidden1'):
    weights = tf.Variable(tf.truncated_normal([data_num * price_num, NUM_HIDDEN1], stddev=stddev), name='weights')
    biases = tf.Variable(tf.zeros([NUM_HIDDEN1]), name='biases')
    hidden1 = tf.nn.relu(tf.matmul(x_ph, weights) + biases)
  
  with tf.name_scope('hidden2'):
    weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN1, NUM_HIDDEN2], stddev=stddev), name='weights')
    biases = tf.Variable(tf.zeros([NUM_HIDDEN2]), name='biases')
    hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)
  
  #DropOut
  dropout = tf.nn.dropout(hidden2, keep_prob)
  
  with tf.name_scope('softmax'):
    weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN2, 2], stddev=stddev), name='weights')
    biases = tf.Variable(tf.zeros([2]), name='biases')
    y = tf.nn.softmax(tf.matmul(dropout, weights) + biases)
  
  return y

Verlust

Der Verlust, den ich beim letzten Mal vergessen habe zu schreiben, ist wie folgt definiert. Es ist das gleiche wie beim letzten Mal, aber es ist das gleiche wie bei Google.

def loss(y, target):
  return -tf.reduce_sum(target * tf.log(y))

Optimierung

Die Optimierung ist die gleiche wie beim letzten Mal.

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

Ausbildung

Kein Training ist wie beim letzten Mal.

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})
    ce = sess.run(loss, feed_dict={x_ph: batch_xs, y_ph: batch_ys, keep_prob: 1.0})

    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

Die Bewertung ist die gleiche wie beim letzten Mal.

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-Teil 1-

Infolgedessen ist die Genauigkeit

0.50295

** · · · Nein. ** **.

Fix

Als Eingabe habe ich den Aktienindex jedes Landes so verwendet, wie er ist, aber ich habe ihn ein wenig korrigiert. Ich entschied mich einzugeben, "wie stark der Aktienindex im Vergleich zum Vortag geschwankt hat". (Ich bin nicht sicher, aber es schien, als hätte Google das im Video getan.) Der Code sieht so aus. (Es kann schwer zu verstehen sein)

tmp_array = []
for j in xrange(idx+1, idx + data_num + 1):
  for row, sprice in enumerate(array_base[j]):
    tmp_array.append(sprice)

x_array.append(tmp_array)

Oben wie unten geändert.

tmp_array = []
for j in xrange(idx+1, idx + data_num + 1):
  for k in range(price_num):
    tmp_array.append(((array_base[j][k]) - (array_base[j+1][k])) / array_base[j][k] * 100)

x_array.append(tmp_array)

Ergebnis-Teil 2-

0.63185

Es scheint, dass es irgendwie eine bedeutungsvolle Zahl wurde. Mit 63% können wir vorhersagen, ob es steigen oder fallen wird. Man kann also sagen, dass wir bessere Ergebnisse erzielen als raten. Deshalb ist es ein Erfolg (^ _ ^;) Ich denke, dass die Genauigkeit in der Google-Demo etwa 72% betrug, aber ich denke, dass dies daran liegt, dass die Anzahl der hier verwendeten Aktienindizes gering ist.

Erwägung

Impressionen

»Ich bin froh, dass es vorerst so aussieht! ――TensorFlow enthält viele Teile, die nicht geändert werden müssen, z. B. Trainingsteile, auch wenn sich die Daten geringfügig ändern. Sobald Sie also eine Vorlage erstellt haben, ist die Codierung einfach. Wenn überhaupt, ist die Verarbeitung der Eingabedaten problematischer. ―― Aus den oben genannten Gründen ist es einfacher, die Zahlen so konstant wie möglich zu halten.

Apropos···

Wenn jemand eine Website kennt, auf der Sie 5, 15, 30 Minuten Austauschdaten herunterladen können, lassen Sie es mich bitte wissen. m (__) m

Recommended Posts

Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-
Aktienkursprognose mit Deep Learning (TensorFlow)
Aktienkursprognose mit Deep Learning [Datenerfassung]
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
Aktienprognose mit TensorFlow (LSTM) ~ Aktienprognose Teil 1 ~
Aktienkursprognose mit maschinellem Lernen (Return Edition)
Aktienkursprognose mit Tensorflow
Python: Aktienkursprognose Teil 2
Python: Aktienkursprognose Teil 1
Versuchen Sie es mit TensorFlow Part 2
Aktienkursprognose 2 Kapitel 2
Aktienkursprognose durch maschinelles Lernen Numerai Signals
Python & Machine Learning Study Memo ⑦: Aktienkursprognose
Aktienkursprognose 1 Kapitel 1
Versuchen Sie es mit TensorFlow
Aktienkursprognose mit LSTM_1
[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 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
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
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
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 1
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 2
Bis die Deep Learning-Umgebung (TensorFlow) mit GPU für Ubuntu 14.04 vorbereitet ist
Tiefes Lernen
"Deep Learning from Grund" Memo zum Selbststudium (Teil 12) Deep Learning
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)
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
[Kausalsuche / Kausalinferenz] Führen Sie mit Deep Learning eine Kausalsuche (SAM) durch
Ein Amateur hat Deep Learning mit Caffe ausprobiert (Übersicht)
Report_Deep Learning (Teil 1)
Report_Deep Learning (Teil 1)
Deep Learning Memorandum
Starten Sie Deep Learning
Report_Deep Learning (Teil 2)
Python Deep Learning
Deep Learning × Python
Denken Sie über Party-Attack-ähnliche Wachstumstaktiken mit Deep Learning nach
Aktieninvestitionen durch tiefgreifendes Lernen (Policy Gradient Method) (1)
Deep Learning aus den mathematischen Grundlagen Teil 2 (während der Teilnahme)
DNN (Deep Learning) Library: Vergleich von Chainer und TensorFlow (1)
Sammlung und Automatisierung erotischer Bilder durch Deep Learning