พื้นที่เก็บข้อมูล GitHub นี้มีโปรเจ็กต์สุดท้ายของฉันสำหรับ Machine Learning Engineer Nanodegree ของ Udacity
นี่คือเครื่องทำนายราคาหุ้น ใช้อัลกอริทึม DeepAR ของ Amazon เพื่อสร้างแบบจำลองและคาดการณ์ราคาหุ้นในอนาคต พื้นที่เก็บข้อมูลนี้มี Jupiter Notebook ที่ใช้ในการรวบรวมข้อมูล ฝึกโมเดล และประเมินผล สมุดบันทึกนี้ยังมีเว็บแอปที่สามารถนำมาใช้ทำนายราคาหุ้นได้สูงสุด 30 วันทำการในอนาคต
หากต้องการเรียกใช้ Web App นี้ คุณต้องสร้างและปรับใช้โมเดลก่อน มีข้อกำหนดบางประการก่อนที่คุณจะเริ่มต้นใช้งาน
คุณต้องสมัครใช้งาน RapidAPI สร้างบัญชีและสมัครสมาชิก Yahoo Finance API คุณจะต้องมี RAPIDAPI-HOST
และ RAPIDAPI-KEY
ใน Jupiter Notebook เพื่อฝึกฝนโมเดลของคุณ
คุณต้องมีบัญชี 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
ใต้หัวข้อ Load and Explore the Data
หลังจากนั้น คุณสามารถเรียกใช้เซลล์ทั้งหมดใน Notebook ได้ หลังจากผ่านไปประมาณ 15 นาที คุณควรมีแบบจำลองที่สร้างและประเมินผล
เมื่อคุณได้ฝึกฝนโมเดลแล้ว คุณจะต้องสร้างฟังก์ชัน Lambda เพื่อส่งข้อมูลไปยังตำแหน่งข้อมูล SageMaker และส่งคืนผลลัพธ์ คัดลอกและวางโค้ดด้านล่างลงในฟังก์ชัน Lambda บน AWS คุณจะต้องป้อน S3 Bucket และ ชื่อตำแหน่งข้อมูล 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 Gateway เพื่อทริกเกอร์ฟังก์ชัน Lambda ที่เราสร้างขึ้นและรับการคาดการณ์ราคาหุ้นได้ ในการดำเนินการนี้ ให้สร้างวิธี POST ใหม่ และตรวจสอบให้แน่ใจว่าได้เลือกฟังก์ชัน Lambda แล้ว จากนั้น ป้อนชื่อฟังก์ชัน Lambda ของคุณลงในกล่องข้อความแล้วคลิกบันทึก สุดท้าย คลิกดรอปดาวน์การดำเนินการเพื่อปรับใช้ API
คุณจะต้องมี URL เรียกใช้ เพื่อปรับใช้ Web App ของคุณ
เมื่อคุณมี API แล้ว คุณสามารถเริ่มใช้งานในเว็บแอปได้ ฉันได้สร้างไฟล์ HTML และ JavaScript ที่เรียบง่ายเพื่อโต้ตอบกับ API ดาวน์โหลดโฟลเดอร์เว็บไซต์จากพื้นที่เก็บข้อมูล GitHub นี้ เพิ่ม URL API สาธารณะของคุณในตำแหน่งที่ระบุไว้ในไฟล์แล้วเปิดขึ้นมา เมื่อคุณคลิกปุ่ม รับข้อมูล คุณจะเห็นหุ้น 20 ตัวตามลำดับ คลิกที่หุ้นเพื่อดูราคาที่คาดการณ์
แอปพลิเคชันเว็บของคุณจะมีลักษณะเช่นนี้เมื่อเริ่มต้น
หลังจากที่คุณคลิกปุ่ม รับข้อมูล เว็บแอปของคุณจะมีลักษณะเช่นนี้
หลังจากคลิกที่หุ้น เว็บแอปของคุณจะมีลักษณะเช่นนี้