Dieses GitHub-Repository enthält mein Abschlussprojekt für den Machine Learning Engineer Nanodegree von Udacity.
Dies ist ein Aktienkursvorhersager. Es nutzt den DeepAR-Algorithmus von Amazon, um ein Modell zu erstellen und zukünftige Aktienkurse vorherzusagen. Dieses Repository enthält ein Jupiter-Notizbuch, mit dem Daten gesammelt, ein Modell trainiert und ausgewertet werden. Dieses Notizbuch enthält auch eine Web-App, mit der Aktienkurse für bis zu 30 Handelstage in der Zukunft vorhergesagt werden können.
Um diese Web-App auszuführen, müssen Sie zunächst ein Modell erstellen und bereitstellen. Es gibt ein paar Voraussetzungen, bevor Sie beginnen können.
Sie müssen sich für RapidAPI anmelden. Erstellen Sie ein Konto und abonnieren Sie die Yahoo Finance API. Für das Training Ihres Modells benötigen Sie Ihren RAPIDAPI-HOST
und RAPIDAPI-KEY
im Jupiter Notebook.
Sie müssen außerdem über ein Amazon Web Services (AWS)-Konto verfügen. Erstellen Sie ein Konto und navigieren Sie über Ihre AWS-Konsole zu Amazon SageMaker. Erstellen Sie eine Notebook-Instanz. Klicken Sie auf der Seite Notebook-Instanz erstellen auf Git-Repositorys und wählen Sie Öffentliches Git-Repository nur auf diese Notebook-Instanz klonen aus. Geben Sie in der Git-Repository-URL https://github.com/scliff108/Udacity-ML-Capstone-Project.git
ein. Erstellen Sie abschließend die Notebook-Instanz.
Sobald die Notebook-Instanz eingerichtet ist, öffnen Sie das Notebook stock-forecasting-deepar
. Geben Sie unbedingt Ihren RAPIDAPI-HOST
und RAPIDAPI-KEY
in die Funktion load_historical_data
unter der Überschrift „Daten laden und erkunden“ ein.
Danach können Sie alle Zellen im Notebook ausführen. Nach etwa 15 Minuten sollten Sie ein Modell generiert und ausgewertet haben.
Nachdem Sie nun ein Modell trainiert haben, müssen Sie eine Lambda-Funktion erstellen, um Daten an den SageMaker-Endpunkt zu senden und das Ergebnis zurückzugeben. Kopieren Sie den folgenden Code und fügen Sie ihn in eine Lambda-Funktion in AWS ein. Sie müssen Ihren S3-Bucket und Ihren Predictor-Endpunktnamen in den bereitgestellten Code eingeben.
import boto3
import os
import sys
import json
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = ''# YOUR BUCKET HERE
key = 'lambda-deepar-stock-forecasting/test/test.json'
obj = s3.Object(bucket, key)
file_content = obj.get()['Body'].read().decode('utf-8')
instances = file_content.splitlines()
instances = [json.loads(i) for i in instances]
for i in instances:
for _ in range(30):
i['dynamic_feat'][0].append(i['dynamic_feat'][0][-1])
configuration = {'num_samples': 30,
'output_types': ['mean'],
}
request_data = {'instances': instances,
'configuration': configuration
}
payload = json.dumps(request_data).encode('utf-8')
runtime = boto3.Session().client('sagemaker-runtime')
response = runtime.invoke_endpoint(EndpointName = '', # YOUR ENDPOINT NAME HERE
ContentType = 'application/json',
Body = payload
)
result = response['Body'].read().decode('utf-8')
return {
'statusCode': 200,
'body': result
}
Leider kann Lambda nur eine begrenzte Datenmenge verarbeiten, sodass wir dem DeepAR-Prädiktor weniger Daten bereitstellen müssen als auf S3. Öffnen Sie dazu das lambda-data
-Notizbuch. Geben Sie erneut Ihre RapidAPI-Informationen ein und führen Sie alle Zellen aus. Dadurch werden Daten hochgeladen, die klein genug sind, damit Lambda sie verarbeiten kann.
Schließlich können wir API Gateway einrichten, um die von uns erstellte Lambda-Funktion auszulösen und Aktienkursvorhersagen zu erhalten. Erstellen Sie dazu eine neue POST-Methode und stellen Sie sicher, dass die Lambda-Funktion ausgewählt ist. Geben Sie dann den Namen Ihrer Lambda-Funktion in das Textfeld ein und klicken Sie auf Speichern. Klicken Sie abschließend auf das Dropdown-Menü „Aktionen“, um die API bereitzustellen.
Sie benötigen die Aufruf-URL, um Ihre Web-App bereitzustellen.
Da Ihnen nun eine API zur Verfügung steht, können Sie diese in einer Web-App verwenden. Ich habe eine sehr einfache HTML- und JavaScript-Datei für die Interaktion mit der API erstellt. Laden Sie den Website-Ordner aus diesem GitHub-Repository herunter, fügen Sie Ihre öffentliche API-URL an der in der Datei angegebenen Stelle hinzu und öffnen Sie sie. Wenn Sie auf die Schaltfläche „Daten abrufen“ klicken, sollten die 20 Aktien in einer Akkordean-Form angezeigt werden. Klicken Sie auf die Aktie, um die prognostizierten Preise anzuzeigen.
Ihre Web-App sieht zunächst so aus.
Nachdem Sie auf die Schaltfläche „Daten abrufen“ geklickt haben, sieht Ihre Web-App folgendermaßen aus.
Nachdem Sie auf eine Aktie geklickt haben, sieht Ihre Web-App so aus.