この GitHub リポジトリには、Udacity の機械学習エンジニア Nanodegree のための私の最終プロジェクトが含まれています。
これは株価予測ツールです。 Amazon の DeepAR アルゴリズムを使用してモデルを作成し、将来の株価を予測します。このリポジトリには、データの収集、モデルのトレーニング、評価に使用される Jupiter Notebook が含まれています。このノートブックには、最大 30 営業日先の株価を予測するために展開できる Web アプリも含まれています。
この Web アプリを実行するには、まずモデルを作成してデプロイする必要があります。開始する前に、いくつかの要件があります。
RapidAPI にサインアップする必要があります。アカウントを作成し、Yahoo Finance API に登録します。モデルをトレーニングするには、Jupiter Notebook にRAPIDAPI-HOST
とRAPIDAPI-KEY
必要です。
アマゾン ウェブ サービス (AWS) アカウントも必要です。アカウントを作成し、AWS コンソールから Amazon SageMaker に移動します。ノートブック インスタンスを作成します。 [ノートブック インスタンスの作成] ページで、 [Git リポジトリ]をクリックし、 [パブリックGit リポジトリをこのノートブック インスタンスのみにクローンする] を選択します。 Git リポジトリ URLにhttps://github.com/scliff108/Udacity-ML-Capstone-Project.git
と入力します。最後に、ノートブック インスタンスを作成します。
Notebook インスタンスをセットアップしたら、 stock-forecasting-deepar
ノートブックを開きます。 「データのロードと探索」という見出しの下にあるload_historical_data
関数にRAPIDAPI-HOST
とRAPIDAPI-KEY
必ず入力してください。
その後、ノートブック内のすべてのセルを実行できます。約 15 分後、モデルが生成され、評価されるはずです。
モデルをトレーニングしたので、SageMaker エンドポイントにデータを送信して結果を返す Lambda 関数を作成する必要があります。以下のコードをコピーして、AWS の Lambda 関数に貼り付けます。提供されたコードにS3 バケットと予測エンドポイント名を入力する必要があります。
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 が処理できるほど小さいデータがアップロードされます。
最後に、作成した Lambda 関数をトリガーして株価予測を取得するための API ゲートウェイを設定できます。これを行うには、新しい POST メソッドを作成し、Lambda 関数が選択されていることを確認します。次に、Lambda 関数の名前をテキストボックスに入力し、[保存] をクリックします。最後に、「アクション」ドロップダウンをクリックして API をデプロイします。
Web アプリをデプロイするには、呼び出し URL が必要です。
API を利用できるようになったので、Web アプリで API の使用を開始できます。 API と対話するための非常に単純な HTML および JavaScript ファイルを作成しました。この GitHub リポジトリから Web サイト フォルダーをダウンロードし、ファイル内の指定された場所にパブリック API URL を追加して開きます。 「データの取得」ボタンをクリックすると、アコーディオン形式で 20 銘柄が表示されるはずです。銘柄をクリックすると予想価格が表示されます。
開始すると Web アプリは次のようになります。
[データの取得]ボタンをクリックすると、Web アプリは次のようになります。
株式をクリックすると、Web アプリは次のようになります。