[PYTHON] Umsatzprognose für die Zeitreihenanalyse

Aidemy 2020/11/10

Einführung

Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur AI-spezialisierten Schule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dieses Mal werde ich die Praxis der Zeitreihenanalyse veröffentlichen. Freut mich, dich kennenzulernen.

Was diesmal zu lernen ・ Zeitreihenanalyse mit LSTM (Umsatzprognose)

Zeitreihenanalyse mit LSTM

Über LSTM

(Informationen zu LSTM in "Themenextraktion 1 des japanischen Textes" und "Negative / Positive Analyse 3") -__ LSTM__ ist eine Art RNN und kann die am Anfang eingegebenen Daten speichern __. Das heißt, es ist ein RNN-Modell, das zur Langzeitspeicherung in der Lage ist.

Verkaufsprognoseverfahren

・ Dieses Mal verwenden wir LSTM, um Verkaufsdaten vorherzusagen. Das Verfahren ist das gleiche wie bei anderen Datenvorhersagen. __ ① Datenerfassung __ __② Datenverarbeitung __ __③ Modellerstellung __ __④ Prognose / Bewertung __

① Datenerfassung

Daten gelesen

・ Dieses Mal sammeln wir Daten, indem wir __csv-Daten der Champagner-Verkaufsprognose lesen. -In der LSTM-Datenvorhersage wird nur der Wert von __Zeitreihendaten __ verwendet, sodass nur dieser erfasst wird. Insbesondere sollte __ "pd.read_csv ()" __ ausgeführt werden, aber im Argument __ "usecols = [column]" __ gibt die zu extrahierende Spalte an __ und __ "skipfooter =" Geben Sie unter "Anzahl der Zeilen" __ die Anzahl der Zeilen an, die ab dem Ende von __ nicht gelesen werden sollen. Bei Verwendung von skipfooter muss außerdem __ "engine = 'python'" __ angegeben werden.

・ Code![Screenshot 2020-11-07 16.50.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/0b331f86-594b-321d- 55cd-62127694301c.png)

・ Ergebnis (nur Teil)![Screenshot 2020-11-07 16.50.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/71ca1207 -7f78-ad5a-3d25-42ce612eb76a.png)

② Datenverarbeitung

Erstellen eines Datensatzes

-Hier __ formatieren Sie die Daten in ein Formular, das für die Analyse verwendet werden kann . ・ Zunächst werden die Daten in __ Trainingsdaten und Testdaten unterteilt, aber __ Zeitreihendaten enthalten auch Informationen wie Periodizität und Kontinuität __. Wenn die Daten also zufällig aufgeteilt werden, sind dies diese Teilen Sie es nicht zufällig auf, da die Informationen verloren gehen und als Daten beschädigt werden. ・ Dieses Mal werden die Originaldaten in __3 unterteilt, und das erste 2/3 dient zum Training und das verbleibende 1/3 zum Testen.

・ Code![Screenshot 2020-11-07 17.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/ddc6b5eb-9caa-db2f- a8b5-03564d2d3293.png)

Datenskalierung

・ Code![Screenshot 2020-11-07 20.19.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/84b9fd35-956c-5a5d- 59c9-cc0ef1cf5bbd.png)

・ Ergebnis (nur Teil)![Screenshot 2020-11-07 20.19.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/2d9134e0 -0479-69d0-2e6a-9d954233d3eb.png)

Erstellung von Eingabedaten und korrektem Antwortetikett

-Diese Vorhersage verwendet __ "mehrere Daten vor dem Referenzpunkt" __ "Vorhersage der nächsten Daten" __, sodass die Eingabedaten __ "Referenzpunkt" sind. Die Daten von diesem Punkt bis zu n Punkten zuvor sind __, und das richtige Antwortetikett lautet __ "Daten an dem Punkt, der auf den Referenzpunkt folgt" __.

スクリーンショット 2020-11-07 20.34.05.png

-Für diese __ "create_dataset" __ -Funktion werden Daten dataset und __ "look_back" __, die angeben, wie weit der Referenzpunkt (n) genommen werden soll, als Argumente übergeben. Bereiten Sie zunächst __ "data_X" __ "data_X" __ vor, um die Eingabedaten zu speichern __ "data_Y" __, um das richtige Antwortetikett zu speichern. -Für __ "für i im Bereich (look_back, len (Datensatz))" __ repräsentiert dies die Position von __ "dem Punkt des Tages nach dem Referenzpunkt" __. Mit anderen Worten ist der Referenzpunkt __ "i-1" . In data_X werden __ "Datensatz [i-look_back: i, 0]" __ "Daten von i-look_back oder mehr und weniger als i (bis zum Referenzpunkt)" __ gespeichert, und in data_Y __ "Datensatz" [i, 0] " speichert " Daten des Tages nach dem Referenzpunkt ". Sie müssen diese lediglich als __np.array-Array __ zurückgeben.

-Dieses Mal werden __3 vorherige Daten als 1 Satz __ gesetzt, dh __ "look_back = 3" __. Sie können __ "train_X" "train_Y" __ erstellen, indem Sie Trainingsdaten und Look_back an die Funktion create_dataset wie im obigen Code übergeben und Testdaten auf die gleiche Weise übergeben __ "test_X" und "test_Y" __ Kann erstellt werden.

Eingabedaten formatieren

-Konvertieren Sie die Dimensionen mit __ "reshape ()" __. Wenn es als Argument übergeben wird, wird es __ (numpy.shape [0], numpy.shape [1], 1) __.

・ Code![Screenshot 2020-11-07 21.39.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/e4d55aa7-e26e-23fe- 9604-46ac2b47dc79.png)

・ Ergebnis (Teil von train_X)![Screenshot 2020-11-07 21.40.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/ ff4ed61b-bf29-550b-9fa9-478a8142b4be.png)

③ Modellerstellung

Erstellen und Trainieren von LSTM-Modellen

・ Dieses Mal erstellen wir mit __Sequential Model __. Daher kann die LSTM-Ebene mit __ "model.add (LSTM ())" __ hinzugefügt werden. Geben Sie die Anzahl der __LSTM-Blöcke __ an und erstellen Sie mit __input_shape = (look_back, 1) __ eine Eingabeebene mit der Länge look_back und der Dimension 1. -Die Ausgabeschicht sind die Daten des nächsten Tages, dh eine Klasse ist ausreichend, also __ "Dense (1)" __. -Nächste führen Sie compile __ durch. __ Stellen Sie die Verlustfunktion loss und optimizer ein. Da diese Zeit regression model ist, wird __mean squared error "mean_squared_error" __ für die Verlustfunktion verwendet (die Funktion, die den Fehler zwischen dem richtigen Label und der Ausgabe misst). Es gibt verschiedene Optimierungsalgorithmen (Methoden, die die Gewichte so ändern, dass der Gradient der Verlustfunktion abnimmt), aber __ Ich kann es nicht verstehen, bis ich es tatsächlich versuche __.

-Das Lernen erfolgt mit __ "model.fit ()" __. Übergeben Sie epochs (Anzahl der Lernvorgänge) und batch_size (Anzahl der Datenunterteilungen) als Argumente. ・ Ändern Sie danach die Anzahl der Ebenen und die Anzahl der Epochen in __tune __. Wenn die LSTM-Ebene nach der LSTM-Ebene hinzugefügt wird, schreiben Sie __ "return_sequences = True" __ in das Argument der Additionsquelle.

·Code スクリーンショット 2020-11-07 23.04.50.png

・ Ergebnis (nur Teil)![Screenshot 2020-11-07 23.05.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/dd32ab50 -c35b-c3ac-2ec6-1c4c29ade57f.png)

④ Prognose / Bewertung

-Finally, prognostizieren und bewerten Sie das Modell. -Verwenden Sie __ "model.predict ()" __ zur Vorhersage. Sie können train_X und test_X an diesen übergeben. ・ Als nächstes werden wir das Vorhersageergebnis auswerten, aber um es korrekt auszuwerten, müssen die skalierten Daten wiederhergestellt werden. Ich habe mit __ "transform ()" __ skaliert, aber dieses Mal verwende ich __ "inverse_transform ()" __, was das Gegenteil bewirkt.

スクリーンショット 2020-11-07 23.18.04.png

・ Machen Sie dasselbe für Testdaten. Sobald Sie dies getan haben, besteht der nächste Schritt darin, __data __ auszuwerten. -Für den Genauigkeitsindex von Zeitreihendaten verwenden Sie den __ "durchschnittlicher quadratischer Fehler" __, der zuvor ausgegeben wurde. Dieser Index zeigt erneut, wie weit der vorhergesagte Wert von der richtigen Antwort entfernt ist. Je näher er an __0 liegt, desto höher ist die Genauigkeit __.

・ Code![Screenshot 2020-11-07 23.30.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/31dd419b-64f1-2762- 78f4-7d4d6492b454.png)

・ Ergebnis![Screenshot 2020-11-07 23.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/7c9dbf22-8174-9066- bb2b-a3327a6cf54d.png)

Visualisierung der Vorhersageergebnisse

・ Ich möchte sehen, was diesmal visualisiert wird, daher werde ich nur einen bestimmten Code veröffentlichen.

・ Code![Screenshot 2020-11-07 23.33.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/649132c4-c813-5a12- 712e-f70aca646b64.png)

・ Ergebnis![Screenshot 2020-11-07 23.38.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/2cb856dc-b466-6366- cc1f-09db83c4395d.png)

Zusammenfassung

-Für die Zeitreihenanalyse ist es ratsam, ein Modell mit "LSTM" zu erstellen, das eine Langzeitspeicherung ermöglicht.

Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Umsatzprognose für die Zeitreihenanalyse
Zeitreihenanalyse Teil 3 Prognose
Herausforderung für die zukünftige Umsatzprognose: ② Zeitreihenanalyse mit PyFlux
Herausforderung für die zukünftige Umsatzprognose: ⑤ Zeitreihenanalyse von Prophet
Python: Zeitreihenanalyse
RNN_LSTM1 Zeitreihenanalyse
Zeitreihenanalyse 1 Grundlagen
Zeitreihenanalyse Teil 4 VAR
Zeitreihenanalyse Teil 1 Autokorrelation
Herausforderung für die zukünftige Umsatzprognose: ④ Zeitreihenanalyse unter Berücksichtigung der Saisonalität nach Statistikmodellen
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Herausforderung für die zukünftige Umsatzprognose: ① Was ist Zeitreihenanalyse?
Zeitreihenanalyse 2 Stabilität, ARMA / ARIMA-Modell
Ich habe versucht, Zeitreihen zu analysieren! (AR-Modell)
Zeitreihenanalyse Teil 2 AR / MA / ARMA
Zeitreihenanalyse 4 Konstruktion des SARIMA-Modells
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
Zeitreihenzerlegung
Python: Zeitreihenanalyse: Erstellen eines SARIMA-Modells
Python: Zeitreihenanalyse: Konstanz, ARMA / ARIMA-Modell
Python 3.4 Windows7-64bit-Umgebung erstellen (für die Analyse finanzieller Zeitreihen)
Python-Zeitreihenfrage
TOPIX-Zeitreihen anzeigen
Zeitreihendiagramm / Matplotlib
Eine Lernmethode für Anfänger zum Erlernen der Zeitreihenanalyse
[Python] Zeichnen Sie Zeitreihendaten
[Statistik] [Zeitreihenanalyse] Zeichnen Sie das ARMA-Modell und erfassen Sie die Tendenz.