Aktienkursvorhersage mit maschinellem Lernen und Deep Learning-Techniken (mit Python-Codes)

Einführung

Die Vorhersage, wie sich der Aktienmarkt entwickeln wird, ist eines der schwierigsten Dinge. Es gibt so viele Faktoren, die an der Vorhersage beteiligt sind – physikalische Faktoren vs. physiologisches, rationales und irrationales Verhalten usw. All diese Aspekte machen die Aktienkurse volatil und sehr schwer mit hoher Genauigkeit vorherzusagen.

Können wir maschinelles Lernen als Game Changer in diesem Bereich einsetzen? Verwenden von Funktionen wie den neuesten Ankündigungen zu einer Organisation, ihren vierteljährlichen Umsatzergebnissen usw. Techniken des maschinellen Lernens haben das Potenzial, Muster und Erkenntnisse aufzudecken, die wir zuvor nicht gesehen haben, und diese können verwendet werden, um zielsicher genaue Vorhersagen zu treffen.

Aktienkursprognose, LSTM, maschinelles Lernen

In diesem Artikel werden wir mit historischen Daten über die Aktienkurse eines börsennotierten Unternehmens arbeiten. Wir werden eine Mischung aus Algorithmen für maschinelles Lernen implementieren, um den zukünftigen Aktienkurs dieses Unternehmens vorherzusagen, beginnend mit einfachen Algorithmen wie Mittelwertbildung und linearer Regression, und dann zu fortgeschrittenen Techniken wie Auto ARIMA und LSTM übergehen.

Die Kernidee hinter diesem Artikel ist es, zu zeigen, wie diese Algorithmen implementiert werden. Ich werde die Technik kurz beschreiben und relevante Links bereitstellen, um die Konzepte bei Bedarf aufzufrischen. Falls Sie ein Neuling in der Welt der Zeitreihen sind, schlage ich vor, zuerst die folgenden Artikel durchzugehen:

  • Ein umfassender Leitfaden für Anfänger zum Erstellen einer Zeitreihenprognose
  • Ein vollständiges Tutorial zur Zeitreihenmodellierung
  • Kostenloser Kurs: Zeitreihenprognose mit Python

Projekt zum Üben der Zeitreihenprognose

Zeitreihenprognose & Modellierung spielt eine wichtige Rolle bei der Datenanalyse. Die Zeitreihenanalyse ist ein spezialisierter Zweig der Statistik, der in Bereichen wie Ökonometrie & Operation Research umfassend eingesetzt wird.

Zeitreihen werden häufig in der Analytik verwendet & Datenwissenschaft. Dies ist ein speziell für Sie entwickeltes Zeitreihenproblem und die Herausforderung besteht darin, den Verkehr vorherzusagen.

Jetzt üben

Sind Sie ein Anfänger und suchen einen Ort, an dem Sie Ihre Data Science-Reise beginnen können? Präsentieren Sie einen umfassenden Kurs voller Wissen und Data Science-Lernen, der nur für Sie zusammengestellt wurde! Dieser Kurs deckt alles ab, von Grundlagen des maschinellen Lernens bis hin zu fortgeschrittenen Konzepten von ML, Deep Learning und Zeitreihen.

  • Zertifizierte KI & ML Blackbelt+ Programm

Inhaltsverzeichnis

    1. Die Problemstellung verstehen
    2. Gleitender Durchschnitt
    3. Lineare Regression
    4. k-Nächste Nachbarn
    5. Auto ARIMA
    6. Prophet
    7. Langzeit-Kurzzeitgedächtnis (LSTM)

Die Problemstellung verstehen

Wir werden bald in den Implementierungsteil dieses Artikels eintauchen, aber zuerst ist es wichtig festzustellen, was wir lösen wollen. Im Großen und Ganzen ist die Aktienmarktanalyse in zwei Teile unterteilt – Fundamentalanalyse und Technische Analyse.

  • Bei der Fundamentalanalyse wird die zukünftige Rentabilität des Unternehmens auf der Grundlage des aktuellen Geschäftsumfelds und der finanziellen Leistung analysiert.
  • Die technische Analyse umfasst andererseits das Lesen der Diagramme und die Verwendung statistischer Zahlen, um die Trends am Aktienmarkt zu identifizieren.

Wie Sie vielleicht erraten haben, liegt unser Fokus auf dem Teil der technischen Analyse. Wir verwenden einen Datensatz von Quandl (hier finden Sie historische Daten für verschiedene Bestände) und für dieses spezielle Projekt habe ich die Daten für ‚Tata Global Beverages‘ verwendet. Zeit zum Eintauchen!

Hinweis: Hier ist der Datensatz, den ich für den Code verwendet habe: Download

Wir werden zuerst den Datensatz laden und die Zielvariable für das Problem definieren:

#import packagesimport pandas as pdimport numpy as np#to plot within notebookimport matplotlib.pyplot as plt%matplotlib inline#setting figure sizefrom matplotlib.pylab import rcParamsrcParams = 20,10#for normalizing datafrom sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler(feature_range=(0, 1))#read the filedf = pd.read_csv('NSE-TATAGLOBAL(1).csv')#print the headdf.head()

Der Datensatz enthält mehrere Variablen: Datum, Öffnen, Hoch, niedrig, zuletzt, Schließen, total_trade_quantity und Umsatz.

  • Die Spalten Öffnen und Schließen stellen den Start- und Endpreis dar, zu dem die Aktie an einem bestimmten Tag gehandelt wird.
  • High, Low und Last stellen den maximalen, minimalen und letzten Preis der Aktie für den Tag dar.
  • Die Gesamthandelsmenge ist die Anzahl der am Tag gekauften oder verkauften Aktien und der Umsatz (Lacs) ist der Umsatz des jeweiligen Unternehmens an einem bestimmten Datum.

Eine weitere wichtige Sache zu beachten ist, dass der Markt an Wochenenden und Feiertagen geschlossen ist.Beachten Sie die obige Tabelle erneut, einige Datumswerte fehlen – 2/10/2018, 6/10/2018, 7/10/2018. Von diesen Daten ist der 2. ein Nationalfeiertag, während der 6. und 7. auf ein Wochenende fallen.

Die Gewinn- oder Verlustberechnung wird normalerweise durch den Schlusskurs einer Aktie für den Tag bestimmt, daher betrachten wir den Schlusskurs als Zielvariable. Zeichnen wir die Zielvariable auf, um zu verstehen, wie sie sich in unseren Daten entwickelt:

#setting index as datedf = pd.to_datetime(df.Date,format='%Y-%m-%d')df.index = df#plotplt.figure(figsize=(16,8))plt.plot(df, label='Close Price history')

In den kommenden Abschnitten werden wir diese Variablen untersuchen und verschiedene Techniken verwenden, um den täglichen Schlusskurs der Aktie vorherzusagen.

Gleitender Durchschnitt

Einleitung

‚Durchschnitt‘ ist leicht eines der häufigsten Dinge, die wir in unserem täglichen Leben verwenden. Zum Beispiel die Berechnung der Durchschnittstemperaturen, um die Gesamtleistung zu bestimmen, oder die Durchschnittstemperatur der letzten Tage, um eine Vorstellung von der heutigen Temperatur zu bekommen – all dies sind Routineaufgaben, die wir regelmäßig erledigen. Dies ist also ein guter Ausgangspunkt für unseren Datensatz, um Vorhersagen zu treffen.

Der prognostizierte Schlusskurs für jeden Tag ist der Durchschnitt einer Reihe zuvor beobachteter Werte. Anstatt den einfachen Durchschnitt zu verwenden, werden wir die Moving Average-Technik verwenden, die den neuesten Satz von Werten für jede Vorhersage verwendet. Mit anderen Worten, für jeden nachfolgenden Schritt werden die vorhergesagten Werte berücksichtigt, während der älteste beobachtete Wert aus der Menge entfernt wird. Hier ist eine einfache Abbildung, die Ihnen hilft, dies klarer zu verstehen.

Wir werden diese Technik in unserem Datensatz implementieren. Der erste Schritt besteht darin, einen Datenrahmen zu erstellen, der nur die Spalten Datum und Schlusskurs enthält, und ihn dann in Zug- und Validierungssätze aufzuteilen, um unsere Vorhersagen zu überprüfen.

Implementierung

Nur die Überprüfung des RMSE hilft uns nicht zu verstehen, wie das Modell funktioniert. Lassen Sie uns dies visualisieren, um ein intuitiveres Verständnis zu erhalten. Hier ist also ein Diagramm der vorhergesagten Werte zusammen mit den tatsächlichen Werten.

#plotvalid = 0valid = predsplt.plot(train)plt.plot(valid])

Inferenz

Der RMSE-Wert liegt nahe bei 105, aber die Ergebnisse sind nicht sehr vielversprechend (wie Sie dem Diagramm entnehmen können). Die vorhergesagten Werte liegen im gleichen Bereich wie die beobachteten Werte im Zugsatz (es gibt zunächst einen zunehmenden Trend und dann einen langsamen Rückgang).

Im nächsten Abschnitt werden wir uns zwei häufig verwendete Techniken des maschinellen Lernens ansehen – Lineare Regression und kNN – und sehen, wie sie sich auf unsere Börsendaten auswirken.

Lineare Regression

Einführung

Der grundlegendste Algorithmus für maschinelles Lernen, der für diese Daten implementiert werden kann, ist die lineare Regression. Das lineare Regressionsmodell gibt eine Gleichung zurück, die die Beziehung zwischen den unabhängigen Variablen und der abhängigen Variablen bestimmt.

Die Gleichung für die lineare Regression kann wie folgt geschrieben werden:

Hier, x1, x2,….xn die unabhängigen Variablen darstellen, während die Koeffizienten θ1, θ2, …. θn repräsentieren die Gewichte. Sie können den folgenden Artikel lesen, um die lineare Regression genauer zu untersuchen:

  • Eine umfassende Anfängeranleitung für lineare, Grat- und Lasso-Regression.

Für unsere Problemstellung haben wir keinen Satz unabhängiger Variablen. Wir haben stattdessen nur die Daten. Lassen Sie uns die Datumsspalte verwenden, um Funktionen wie Tag, Monat, Jahr, Mo / fr usw. zu extrahieren. und dann passen Sie ein lineares Regressionsmodell an.

Implementierung

Wir werden zuerst den Datensatz in aufsteigender Reihenfolge sortieren und dann einen separaten Datensatz erstellen, damit jedes neu erstellte Feature die ursprünglichen Daten nicht beeinflusst.

#setting index as date valuesdf = pd.to_datetime(df.Date,format='%Y-%m-%d')df.index = df#sortingdata = df.sort_index(ascending=True, axis=0)#creating a separate datasetnew_data = pd.DataFrame(index=range(0,len(df)),columns=)for i in range(0,len(data)): new_data = data new_data = data
#create featuresfrom fastai.structured import add_datepartadd_datepart(new_data, 'Date')new_data.drop('Elapsed', axis=1, inplace=True) #elapsed will be the time stamp

Dadurch entstehen Funktionen wie:

‚Year‘, ‚Month‘, ‚Week‘, ‚Day‘, ‚Dayofweek‘, ‚Dayofyear‘, ‚Is_month_end‘, ‚Is_month_start‘, ‚Is_quarter_end‘, ‚Is_quarter_start‘, ‚Is_year_end‘ und ‚Is_year_start‘.

Hinweis: Ich habe add_datepart aus der Fastai-Bibliothek verwendet. Wenn Sie es nicht installiert haben, können Sie einfach den Befehl pip install fastai . Andernfalls können Sie diese Funktion mit einfachen for-Schleifen in Python erstellen. Ich habe unten ein Beispiel gezeigt.

Abgesehen davon können wir unsere eigenen Funktionen hinzufügen, von denen wir glauben, dass sie für die Vorhersagen relevant sind. Zum Beispiel ist meine Hypothese, dass der erste und der letzte Tag der Woche den Schlusskurs der Aktie weit mehr beeinflussen könnten als die anderen Tage. Daher habe ich eine Funktion erstellt, die angibt, ob ein bestimmter Tag Montag / Freitag oder Dienstag / Mittwoch / Donnerstag ist. Dies kann mit den folgenden Codezeilen erfolgen:

new_data = 0for i in range(0,len(new_data)): if (new_data == 0 or new_data == 4): new_data = 1 else: new_data = 0

Wenn der Wochentag gleich 0 oder 4 ist, ist der Spaltenwert 1, andernfalls 0. Ebenso können Sie mehrere Features erstellen. Wenn Sie einige Ideen für Funktionen haben, die bei der Vorhersage des Aktienkurses hilfreich sein können, teilen Sie diese bitte im Kommentarbereich mit.

Wir werden nun die Daten in Zug- und Validierungssätze aufteilen, um die Leistung des Modells zu überprüfen.

#split into train and validationtrain = new_datavalid = new_datax_train = train.drop('Close', axis=1)y_train = trainx_valid = valid.drop('Close', axis=1)y_valid = valid#implement linear regressionfrom sklearn.linear_model import LinearRegressionmodel = LinearRegression()model.fit(x_train,y_train)

Ergebnisse

#make predictions and find the rmsepreds = model.predict(x_valid)rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))rms
121.16291596523156

Der RMSE-Wert ist höher als bei der vorherigen Technik, was deutlich zeigt, dass die lineare Regression eine schlechte Leistung erbracht hat. Schauen wir uns die Handlung an und verstehen Sie, warum die lineare Regression nicht gut funktioniert hat:

#plotvalid = 0valid = predsvalid.index = new_data.indextrain.index = new_data.indexplt.plot(train)plt.plot(valid])

Inferenz

Die lineare Regression ist eine einfache Technik und recht einfach zu interpretieren, aber es gibt einige offensichtliche Nachteile. Ein Problem bei der Verwendung von Regressionsalgorithmen besteht darin, dass das Modell an die Datums- und Monatsspalte überanpasst. Anstatt die vorherigen Werte vom Vorhersagepunkt aus zu berücksichtigen, berücksichtigt das Modell den Wert vom selben Datum vor einem Monat oder vom selben Datum / Monat vor einem Jahr.

Wie aus dem Diagramm oben hervorgeht, gab es für Januar 2016 und Januar 2017 einen Rückgang des Aktienkurses. Das Modell hat das gleiche für Januar 2018 vorhergesagt. Eine lineare Regressionstechnik kann für Probleme wie Big Mart-Verkäufe gut funktionieren, bei denen die unabhängigen Merkmale zur Bestimmung des Zielwerts nützlich sind.

k-Nearest Neighbours

Einführung

Ein weiterer interessanter ML-Algorithmus, den man hier verwenden kann, ist kNN (k nearest neighbours). Basierend auf den unabhängigen Variablen findet kNN die Ähnlichkeit zwischen neuen und alten Datenpunkten. Lassen Sie mich dies an einem einfachen Beispiel erklären.

Berücksichtigen Sie die Größe und das Alter von 11 Personen. Anhand vorgegebener Merkmale (‚Alter‘ und ‚Größe‘) kann die Tabelle wie folgt grafisch dargestellt werden:

Um das Gewicht für ID # 11 zu bestimmen, berücksichtigt kNN das Gewicht der nächsten Nachbarn dieser ID. Das Gewicht von ID # 11 wird als Durchschnitt seiner Nachbarn vorhergesagt. Wenn wir vorerst drei Nachbarn (k = 3) betrachten, wäre das Gewicht für ID # 11 = (77+72+60)/3 = 69.66 kg.

Ein detailliertes Verständnis von kNN finden Sie in den folgenden Artikeln:

  • Einführung in k-Nearest Neighbors: Vereinfacht

  • Eine praktische Einführung in den K-Nearest Neighbors-Algorithmus für die Regression

Implementierung

#importing librariesfrom sklearn import neighborsfrom sklearn.model_selection import GridSearchCVfrom sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler(feature_range=(0, 1))

Mit demselben Zug und Validierungssatz aus dem letzten Abschnitt:

#scaling datax_train_scaled = scaler.fit_transform(x_train)x_train = pd.DataFrame(x_train_scaled)x_valid_scaled = scaler.fit_transform(x_valid)x_valid = pd.DataFrame(x_valid_scaled)#using gridsearch to find the best parameterparams = {'n_neighbors':}knn = neighbors.KNeighborsRegressor()model = GridSearchCV(knn, params, cv=5)#fit the model and make predictionsmodel.fit(x_train,y_train)preds = model.predict(x_valid)

Ergebnisse

#rmserms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))rms
115.17086550026721

Es gibt keinen großen Unterschied im RMSE-Wert, aber ein Diagramm für die vorhergesagten und tatsächlichen Werte sollte ein klareres Verständnis vermitteln.

#plotvalid = 0valid = predsplt.plot(valid])plt.plot(train)

Inferenz

Der RMSE-Wert ist dem linearen Regressionsmodell fast ähnlich und das Diagramm zeigt das gleiche Muster. Wie die lineare Regression hat auch kNN im Januar 2018 einen Rückgang festgestellt, da dies in den letzten Jahren das Muster war. Wir können mit Sicherheit sagen, dass Regressionsalgorithmen für diesen Datensatz keine gute Leistung erbracht haben.

Schauen wir uns einige Zeitreihenprognosetechniken an, um herauszufinden, wie sie sich bei dieser Herausforderung der Vorhersage von Aktienkursen verhalten.

Auto ARIMA

Einführung

ARIMA ist eine sehr beliebte statistische Methode zur Zeitreihenprognose. ARIMA-Modelle berücksichtigen die vergangenen Werte, um die zukünftigen Werte vorherzusagen. Es gibt drei wichtige Parameter in ARIMA:

  • p (vergangene Werte zur Vorhersage des nächsten Wertes)
  • q (vergangene Prognosefehler zur Vorhersage der zukünftigen Werte)
  • d (Reihenfolge der Differenzierung)

Die Parametereinstellung für ARIMA verbraucht viel Zeit. Daher verwenden wir auto ARIMA, das automatisch die beste Kombination von (p, q, d) auswählt, die den geringsten Fehler liefert. Weitere Informationen zur Funktionsweise von Auto ARIMA finden Sie in diesem Artikel:

  • Erstellen Sie leistungsstarke Zeitreihenmodelle mit Auto ARIMA

Implementierung

from pyramid.arima import auto_arimadata = df.sort_index(ascending=True, axis=0)train = datavalid = datatraining = trainvalidation = validmodel = auto_arima(training, start_p=1, start_q=1,max_p=3, max_q=3, m=12,start_P=0, seasonal=True,d=1, D=1, trace=True,error_action='ignore',suppress_warnings=True)model.fit(training)forecast = model.predict(n_periods=248)forecast = pd.DataFrame(forecast,index = valid.index,columns=)

Ergebnisse

rms=np.sqrt(np.mean(np.power((np.array(valid)-np.array(forecast)),2)))rms
44.954584993246954
#plotplt.plot(train)plt.plot(valid)plt.plot(forecast)

Inferenz

Wie wir bereits gesehen haben, verwendet ein Auto-ARIMA-Modell vergangene Daten, um das Muster in der Zeitreihe zu verstehen. Mit diesen Werten erfasste das Modell einen zunehmenden Trend in der Serie. Obwohl die Vorhersagen mit dieser Technik weitaus besser sind als die der zuvor implementierten Modelle für maschinelles Lernen, liegen diese Vorhersagen immer noch nicht in der Nähe der realen Werte.

Wie aus der Handlung hervorgeht, hat das Modell einen Trend in der Serie erfasst, konzentriert sich jedoch nicht auf den saisonalen Teil. Im nächsten Abschnitt werden wir ein Zeitreihenmodell implementieren, das sowohl den Trend als auch die Saisonalität einer Serie berücksichtigt.

Einführung

Einführung

Es gibt eine Reihe von Zeitreihentechniken, die auf dem Bestandsvorhersagedatensatz implementiert werden können, aber die meisten dieser Techniken erfordern eine Menge Datenvorverarbeitung, bevor das Modell angepasst wird. Prophet, entworfen und Pionier von Facebook, ist eine Zeitreihenprognose-Bibliothek, die keine Datenvorverarbeitung erfordert und extrem einfach zu implementieren ist. Die Eingabe dafür ist ein Datenrahmen mit zwei Spalten: Datum und Ziel (ds und y).

Prophet versucht, die Saisonalität in den vergangenen Daten zu erfassen, und funktioniert gut, wenn der Datensatz groß ist. Hier ist ein interessanter Artikel, der Prophet auf einfache und intuitive Weise erklärt:

  • Generieren Sie schnelle und genaue Zeitreihenprognosen mit Facebook Prophet.

Umsetzung

#importing prophetfrom fbprophet import Prophet#creating dataframenew_data = pd.DataFrame(index=range(0,len(df)),columns=)for i in range(0,len(data)): new_data = data new_data = datanew_data = pd.to_datetime(new_data.Date,format='%Y-%m-%d')new_data.index = new_data#preparing datanew_data.rename(columns={'Close': 'y', 'Date': 'ds'}, inplace=True)#train and validationtrain = new_datavalid = new_data#fit the modelmodel = Prophet()model.fit(train)#predictionsclose_prices = model.make_future_dataframe(periods=len(valid))forecast = model.predict(close_prices)

Ergebnisse

#rmseforecast_valid = forecastrms=np.sqrt(np.mean(np.power((np.array(valid)-np.array(forecast_valid)),2)))rms
57.494461930575149
#plotvalid = 0valid = forecast_valid.valuesplt.plot(train)plt.plot(valid])

Inferenz

Prophet versucht (wie die meisten Zeitreihenprognosetechniken), den Trend und die Saisonalität aus früheren Daten zu erfassen. Dieses Modell funktioniert normalerweise gut mit Zeitreihendatensätzen, wird jedoch in diesem Fall seinem Ruf nicht gerecht.

Wie sich herausstellt, haben die Aktienkurse keinen bestimmten Trend oder Saisonalität. Es hängt stark davon ab, was derzeit auf dem Markt vor sich geht und damit die Preise steigen und fallen. Daher würden Prognosetechniken wie ARIMA, SARIMA und Prophet für dieses spezielle Problem keine guten Ergebnisse zeigen.

Lassen Sie uns eine andere fortgeschrittene Technik ausprobieren – das Langzeit-Kurzzeitgedächtnis (LSTM).

Long Short Term Memory (LSTM)

Einleitung

LSTMs werden häufig für Sequenzvorhersageprobleme verwendet und haben sich als äußerst effektiv erwiesen. Der Grund, warum sie so gut funktionieren, ist, weil LSTM in der Lage ist, vergangene Informationen zu speichern, die wichtig sind, und die Informationen zu vergessen, die nicht wichtig sind. LSTM hat drei Tore:

  • Das Eingangstor: Das Input-Gate fügt Informationen zum Zellzustand hinzu
  • Das Forget-Gate: Es entfernt die Informationen, die vom Modell nicht mehr benötigt werden
  • Das Output-Gate: Das Output-Gate bei LSTM wählt die Informationen aus, die als Ausgabe angezeigt werden sollen

Für ein detaillierteres Verständnis von LSTM und seiner Architektur können Sie den folgenden Artikel durchgehen:

  • Einführung in das Langzeit-Kurzzeitgedächtnis

Lassen Sie uns zunächst LSTM als Blackbox implementieren und die Leistung unserer speziellen Daten überprüfen.

Implementierung

#importing required librariesfrom sklearn.preprocessing import MinMaxScalerfrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, LSTM#creating dataframedata = df.sort_index(ascending=True, axis=0)new_data = pd.DataFrame(index=range(0,len(df)),columns=)for i in range(0,len(data)): new_data = data new_data = data#setting indexnew_data.index = new_data.Datenew_data.drop('Date', axis=1, inplace=True)#creating train and test setsdataset = new_data.valuestrain = datasetvalid = dataset#converting dataset into x_train and y_trainscaler = MinMaxScaler(feature_range=(0, 1))scaled_data = scaler.fit_transform(dataset)x_train, y_train = , for i in range(60,len(train)): x_train.append(scaled_data) y_train.append(scaled_data)x_train, y_train = np.array(x_train), np.array(y_train)x_train = np.reshape(x_train, (x_train.shape,x_train.shape,1))# create and fit the LSTM networkmodel = Sequential()model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape,1)))model.add(LSTM(units=50))model.add(Dense(1))model.compile(loss='mean_squared_error', optimizer='adam')model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)#predicting 246 values, using past 60 from the train datainputs = new_data.valuesinputs = inputs.reshape(-1,1)inputs = scaler.transform(inputs)X_test = for i in range(60,inputs.shape): X_test.append(inputs)X_test = np.array(X_test)X_test = np.reshape(X_test, (X_test.shape,X_test.shape,1))closing_price = model.predict(X_test)closing_price = scaler.inverse_transform(closing_price)

Ergebnisse

rms=np.sqrt(np.mean(np.power((valid-closing_price),2)))rms
11.772259608962642
#for plottingtrain = new_datavalid = new_datavalid = closing_priceplt.plot(train)plt.plot(valid])

Schlussfolgerung

Wow! Das LSTM-Modell kann auf verschiedene Parameter abgestimmt werden, z. B. die Anzahl der LSTM-Schichten ändern, den Dropout-Wert hinzufügen oder die Anzahl der Epochen erhöhen. Aber reichen die Vorhersagen von LSTM aus, um festzustellen, ob der Aktienkurs steigen oder fallen wird? Gewiss nicht!

Wie ich zu Beginn des Artikels erwähnt habe, wird der Aktienkurs von den Nachrichten über das Unternehmen und anderen Faktoren wie Demonetarisierung oder Fusion / Spaltung der Unternehmen beeinflusst. Es gibt auch bestimmte immaterielle Faktoren, die oft im Voraus nicht vorhergesagt werden können.

Endnoten

Zeitreihenprognosen sind ein sehr faszinierendes Feld, mit dem ich arbeiten kann, wie ich während meiner Zeit beim Schreiben dieser Artikel festgestellt habe. Es gibt eine Wahrnehmung in der Community, dass es sich um ein komplexes Feld handelt, und obwohl es ein Körnchen Wahrheit gibt, ist es nicht so schwierig, sobald Sie die grundlegenden Techniken verstanden haben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.