이 GitHub 저장소에는 Udacity의 기계 학습 엔지니어 Nanodegree에 대한 최종 프로젝트가 포함되어 있습니다.
이것은 주가 예측기입니다. Amazon의 DeepAR 알고리즘을 사용하여 모델을 생성하고 미래 주가를 예측합니다. 이 저장소에는 데이터 수집, 모델 교육 및 평가에 사용되는 Jupiter Notebook이 포함되어 있습니다. 이 노트북에는 향후 최대 30거래일의 주가를 예측하기 위해 배포할 수 있는 웹 앱도 포함되어 있습니다.
이 웹앱을 실행하려면 먼저 모델을 생성하고 배포해야 합니다. 시작하기 전에 몇 가지 요구 사항이 있습니다.
RapidAPI에 가입해야 합니다. 계정을 만들고 Yahoo Finance API를 구독하세요. 모델을 훈련하려면 Jupiter Notebook에 RAPIDAPI-HOST
및 RAPIDAPI-KEY
필요합니다.
Amazon Web Services(AWS) 계정도 있어야 합니다. 계정을 생성하고 AWS 콘솔에서 Amazon SageMaker로 이동합니다. 노트북 인스턴스를 생성합니다. 노트북 인스턴스 생성 페이지에서 Git 리포지토리를 클릭하고 이 노트북 인스턴스에만 퍼블릭 Git 리포지토리 복제 를 선택합니다. https://github.com/scliff108/Udacity-ML-Capstone-Project.git
에 Git 저장소 URL을 입력하세요. 마지막으로 노트북 인스턴스를 생성합니다.
노트북 인스턴스가 설정되면 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가 처리할 수 있을 만큼 작은 데이터가 업로드됩니다.
마지막으로 API 게이트웨이를 설정하여 우리가 생성한 Lambda 함수를 트리거하고 주가 예측을 얻을 수 있습니다. 이렇게 하려면 새 POST 메서드를 생성하고 Lambda 함수가 선택되어 있는지 확인하세요. 그런 다음 텍스트 상자에 Lambda 함수 이름을 입력하고 저장을 클릭합니다. 마지막으로 작업 드롭다운을 클릭하여 API를 배포합니다.
웹앱을 배포하려면 호출 URL이 필요합니다.
이제 API를 사용할 수 있으므로 웹 앱에서 사용할 수 있습니다. API와 상호 작용하기 위해 매우 간단한 HTML 및 JavaScript 파일을 만들었습니다. 이 GitHub 리포지토리에서 웹사이트 폴더를 다운로드하고, 파일에 표시된 곳에 공개 API URL을 추가하고 엽니다. 데이터 가져오기 버튼을 클릭하면 아코디언의 20개 주식이 표시됩니다. 해당 종목을 클릭하시면 예상 가격을 보실 수 있습니다.
웹앱은 시작 시 다음과 같이 표시됩니다.
데이터 가져오기 버튼을 클릭하면 웹앱이 다음과 같이 표시됩니다.
주식을 클릭하면 웹앱이 다음과 같이 표시됩니다.