มาลองเอาความรู้ Time Series & Trend forecasting มาช่วยเลือกซื้อหุ้นใน SET100 กันเถอะ!!!
(Disclaimer: บทความนี้จัดทำขึ้นเพื่อเป็นส่วนหนึ่งของ Data Science Essential รุ่นที่ 2 ของ Botnoi Consulting Classroom หัวข้อ Trend Forecasting)
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
มาเริ่มต้นวิเคราะห์ไปพร้อมๆกับพวกเรากลุ่ม 1 กันครับ
Step: Get Data
ในส่วนนี้เราจะ web scraping ข้อมูลจากเว็ปไซต์ investing.com เพื่อที่จะนำมาประกอบการตัดสินใจในการเลือกซื้อหุ้น
จากทั้งหมดเราจะได้ Data frame เเสดงรายการหุ้นที่น่าสนใจเเละรายการต่างๆจากสิ่งที่ได้จาก scraping เราจะนำไปประกอบการสินใจตอน model ทำนายอีกที
ในการเรียกข้อมูล SET100 เราเลือกใช้ Library ของ starfishX เเละ ใช้ indicator ของ ta-lib เเละอื่นๆ
ฟังก์ชัน get_history()ใช้ในการเรียกข้อมูลหุ้นที่สนใจย้อนหลัง โดยสามารถใส่วันที่เริ่มต้น (Start Date) และสิ้นสุดได้ ถ้าไม่ใส่วันที่สิ้นสุด (End Date) จะดึงมาให้จนถึงวันที่ปัจจุบัน
ตัวอย่าง เราจะใส่ parameter เป็นหุ้นที่ชื่อว่า “AP” จะได้ว่า get_history(“AP”).head()
- High (ราคาหุ้นที่สูงที่สุดในวันนั้น)
- Low (ราคาหุ้นที่ต่ำที่สุดในวันนั้น)
- Open (ราคาหุ้นตอนเปิดตลาด)
- Close (ราคาหุ้นตอนปิดตลาด)
จากนั้นเรามาทดลอง plot กราฟออกมาดูกัน
Step: Selection models
ก่อนหน้านี้เราลองใช้ model LSTM เเล้วซึ่งปัญหาก็คือ model ไม่สารถทำนายราคาจริงๆให้เราได้
จากรูปในความเป็นจริงเเล้วเราไม่รู้เลยว่าเราควรหยุดที่ Epochs ไหนที่มันทำนายได้ดีที่สุดในรูปอาจจะดู งงๆงั้นเราจะมาซูมดูใกล้ๆ
จากรูปจะเห็นได้ว่า model ทำนายค่อยข้างห่างจากความเป็นจริงมาก จริงๆเเล้วเราไม่อยากจะสรุปไปว่า LSTM ไม่เหมาะกับการทำเเต่ ณ ความรู้เราในขณะนี้ยังมีไม่เพียงพอที่จะใช้ LSTM
เราจึงเปลี่ยนไปทำนาย trend ขาขึ้นกับลงของหุ้นเเทนที่ไปทำนายราคาตรงๆ ซึ่งเราคิดว่าน่าจะเห็นผลเเละมีประสิทธิภาพมากกว่า
Model ที่เราจะนำมาทำนาย trend ของหุ้นเราจะใช้ GradientBoostingClassifier เเละ GradientBoostingRegressor
- GradientBoostingClassifier ใช้ทำนายว่าหุ้นนั้นมีขาขึ้นหรือขาลง
- GradientBoostingRegressor ใช้ในการประกอบการตัดสินใจในการเลือกหุ้นว่าที่ model GradientBoostingClassifier ทำนายออกมาว่า ขึ้น/ลง ถูกต้องกี่เปอร์เซ็น
Step: Split data into train and test sets
สิ่งที่เราจะใช้เป็น Feature คือ weekday, candle, indy, signal, volumn เเละ เราจะให้ target เป็น label สำหรับ test เเละ tain model โดยที่เราจะเซตค่า Test size อยู่ที่ 0.2
Column: accuracy คือ ความถูกต้องของหุ้นที่ทำนายขาขึ้น/ลงถูก ซึ่งขั้นตอนถัดไปเราจะไปเเยกว่า หุ้นขาขึ้นจาก accuracy เท่าไหร่เเละขาลงเท่าไหร่
ขั้นตอนนี้คือเราจะสร้าง Data frame ที่อธิบายว่าสิ่งที่ model ทำนายออกมาได้ค่า accuracy ตกลงเเล้วความถูกต้องขาขึ้นเท่าไหร่จาก column: up_acc เเละ ขาลง column: down_acc
Step: Prediction model
สิ่งที่ Model Gradient Boosting Regressor เเละ Gradient Boosting Classifier ดังนี้
- gbc_pred คือผลลัพธ์ที่ Gradient Boosting Classifier ทำนายออกมาถ้า model ทำนายว่าเป็น ขาขึ้น ก็จะเป็น 1 เเละ ขาลง เป็น 0
- gbr_pred คือ เเสดงผลลัพธ์ที่ gbc_pred ทำนายว่าเป็น 1 จริงๆเเล้ว model ทำนายค่าจริงๆเท่าไหร่
- up_acc คือ เเสดงความถูกต้องของหุ้นขาขึ้น
- up_gbr_mean คือ ค่าเฉลี่ยความถูกต้องของหุ้นขาขึ้น
สุดท้ายเรามาเลือกหุ้นกันเถอะ:
จากสิ่งที่เรา Scraping จากเว็ปไซต์ investing.com เราจะนำมาช่วยในการเลือกหุ้นโดยที่เราจะให้ Score ดังนี้
0 คือ Strong Sell, 1 คือ Sell, 2 คือ Neutral, 3 คือ Buy เเละ 4 คือ Strong
โดยที่เราจะเลือกหุ้นที่มี Score มากกว่าหรือเท่ากับ 3 เท่านั้น
หลังจากที่โมเดลพยากรณ์หุ้นทั้งหมดออกมาแล้ว เราได้คัดเลือกหุ้นที่มีกำไร สูงสุด 10 ตัวแรกออกมา หุ้นที่เราเลือกคือ AP(AP — บริษัท เอพี (ไทยแลนด์) จำกัด มหาชน) คือตัวเลือกที่เห็นว่าเหมาะสมครับ เนื่องจาก
- เปิดไม่สูงมาก ราคาล่าสุดณ ตอนที่รัน model คือ 7.35(หุ้นราคาไม่เเพงมากมีโอกาสขึ้นง่าย)
- volumn เทียบกับทุกหุ้นมีมูลค่าสูงที่สุด
3. weekly score มีค่าเป็น 4
ถ้าใครสนใจอยากรู้รายละเอียด Code ของกลุ่มเราสามารถเข้าไปดูได้ที่ลิงค์นี้เลยครับ