В этом репозитории GitHub содержится мой последний проект для инженера по машинному обучению Udacity Nanograde.
Это предсказатель цен на акции. Он использует алгоритм Amazon DeepAR для создания модели и прогнозирования будущих цен на акции. Этот репозиторий содержит блокнот Jupiter, используемый для сбора данных, обучения модели и ее оценки. Этот блокнот также содержит веб-приложение, которое можно использовать для прогнозирования цен на акции на период до 30 торговых дней в будущем.
Чтобы запустить это веб-приложение, необходимо сначала создать и развернуть модель. Прежде чем приступить к работе, необходимо выполнить несколько требований.
Вы должны зарегистрироваться в RapidAPI. Создайте учетную запись и подпишитесь на Yahoo Finance API. Для обучения модели вам понадобятся RAPIDAPI-HOST
и RAPIDAPI-KEY
в блокноте Jupiter.
У вас также должна быть учетная запись Amazon Web Services (AWS). Создайте учетную запись и перейдите к Amazon SageMaker из консоли AWS. Создайте экземпляр ноутбука. На странице «Создание экземпляра блокнота» нажмите «Репозитории Git» и выберите «Клонировать общедоступный репозиторий Git только в этот экземпляр блокнота» . В URL-адресе репозитория Git введите https://github.com/scliff108/Udacity-ML-Capstone-Project.git
. Наконец, создайте экземпляр блокнота.
После настройки экземпляра Notebook откройте блокнот stock-forecasting-deepar
. Обязательно введите RAPIDAPI-HOST
и RAPIDAPI-KEY
в функцию load_historical_data
под заголовком «Загрузка и исследование данных» .
После этого вы можете запустить все ячейки в Блокноте. Примерно через 15 минут у вас должна быть создана и оценена модель.
Теперь, когда у вас есть обученная модель, вам нужно будет создать лямбда-функцию для отправки данных в конечную точку SageMaker и возврата результата. Скопируйте и вставьте приведенный ниже код в функцию Lambda на AWS. Вам нужно будет ввести свой сегмент S3 и имя конечной точки Predictor в предоставленный код.
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
}
К сожалению, Lambda может обрабатывать только ограниченное количество данных, поэтому нам приходится предоставлять предсказателю DeepAR меньше данных, чем у нас есть на S3. Для этого откройте блокнот lambda-data
. Снова введите информацию о RapidAPI и запустите все ячейки. При этом будут загружены данные, достаточно малые для обработки Lambda.
Наконец, мы можем настроить API-шлюз для запуска созданной нами функции Lambda и получения прогнозов цен на акции. Для этого создайте новый метод POST и убедитесь, что выбрана функция Lambda. Затем введите имя вашей лямбда-функции в текстовое поле и нажмите «Сохранить». Наконец, щелкните раскрывающийся список «Действия», чтобы развернуть API.
Вам понадобится URL-адрес вызова для развертывания вашего веб-приложения.
Теперь, когда у вас есть доступный API, вы можете начать использовать его в веб-приложении. Я создал очень простой файл HTML и JavaScript для взаимодействия с API. Загрузите папку веб-сайта из этого репозитория GitHub, добавьте URL-адрес публичного API там, где он указан в файле, и откройте его. Когда вы нажмете кнопку «Получить данные» , вы увидите 20 акций в аккордеоне. Нажмите на акцию, чтобы увидеть прогнозируемые цены.
Поначалу ваше веб-приложение будет выглядеть так.
После того, как вы нажмете кнопку «Получить данные» , ваше веб-приложение будет выглядеть следующим образом.
После нажатия на акцию ваше веб-приложение будет выглядеть следующим образом.