การทำนายหุ้นด้วย AUTOARIMA 🐾Botnoi-Classroom-Weekly Project 3:

Tonklar Khaimuk
botnoi-classroom
Published in
3 min readSep 15, 2020
Team Member Group 17 BOTNOI DSE
1.Earth M @methdevth
2.PisutW
3.Noikku Wararat
4.Nueng
5.PkP
6.Astuma_Saru
7.Natt
8.Plern Warittha
9.CherylKoong
10.Namo
11.Jaturun
12.TK
13.Tae
14.May

สวัสดีครับ วันนี้พวกเรากลุ่ม 17 กลับมาอีกครั้งกับ weekly project ครั้งที่ 3

ในสัปดาห์นี้เราได้โจทย์มาครับ คือการให้ทำนายราคาหุ้นเพื่อซื้อในวันที่ 17 แล้วนำไปขายในวันที่ 24 โดยขั้นตอนจะมี

1. การอ่านราคาหุ้น SET100

2. การวิเคราะห์ข้อมูลว่าควรใช้โมเดล sarima แบบใด

3. การ fit model ทำนายและดูว่าเป็นยังไง

4. การทำนายราคาสุดท้ายและหุ้นตัวไหนบ้างที่ควรซื้อ

การอ่านราคาหุ้น SET100

เราจะทำการดึงข้อมูลชื่อหุ้น set100 แบบเรียลไทม์จากลิ้งค์

https://marketdata.set.or.th/mkt/sectorquotation.do?sector={0}&language=en&country=US

โดยเราสนใจ sector SET100 ซึ่งเก็บข้อมูลของชื่อหุ้นไว้โดยอาศัยการใช้ html selector เลือก element จาก tag ของ html ในเพจนี้ออกมา

ผมก็ได้สร้าง function ตัวหนึ่งขึ้นมาเพื่อเอา list ชื่อออกมา

จากนั้นก็ใช้ function starfish ในการดึงข้อมูลหุ้นจากชื่อของหุ้น ท้ายที่สุดจะได้ list ของข้อมูลหุ้นมาโดยเป็น list ของ dataframe

การวิเคราะห์ข้อมูลว่าควรใช้โมเดล arima แบบใด

จากนั้นผมก็ได้ไปหาวิธีที่จะสามารถทำให้ เราสามารถเรียนรู้ pattern ของกราฟหุ้นได้ก็ไปพบกับ library หนี่งของ pyramid คือ auto arima แล้ว การทำ arima คืออะไรหละ?

Arima คือการทำนายกราฟจากการรวมกันของ การ moving average กับ การทำ regressionกับกราฟที่ stationary โดยถูกกำหนดด้วย parameter p,d,q โดยแต่ละตัวแปรคือ

p lag of order คือขนาดของจุดที่ lag หรือการถอยไปของจุดข้อมูลเริ่มที่จะไม่มีความแตกต่าง

d order of difference คือ การที่เราต้องทำการ differentiate กี่ครั้งกราฟจะ stationary

q คือ ขนาดของ window ที่ทำการทำ moving average

และกราฟที่ stationary นั้นคืออะไรมันคือกราฟที่ไม่ได้ปัดออกจากค่ากลางของมันมากนักกล่าวคือค่าเฉลี่ยของกราฟ,ค่า variance และการกระจายตัวของกราฟมีความสม่ำเสมอดังจะเห็นได้จากตัวอย่างในภาพ

ภาพจาก https://www.seanabu.com/2016/03/22/time-series-seasonal-ARIMA-model-in-python/

โดยส่วนมากกราฟของหุ้นจะไม่ stationary ทำให้เราจะต้องทำการ differentiate มันก่อนเพื่อทำให้กราฟ stationary มากขึ้น จึงลองทำมาให้ดู จะเห็นว่ามัน stationary ขึ้นอย่างเห็นได้ชัด

และกราฟส่วนมากจะ stationary แล้วหากเรา stationary เราจึงเลือก d = 1 สำหรับ โมเดลของพวกเรา และอีกอย่างหนึ่งคือ กราฟหุ้นถูกจัดอยู่ในกลุ่ม non-seasonal เราจึงจะไม่ใช้ auto arima ในโหมดที่มี parameter เพิ่มเติมสำหรับการวิเคราะห์ seasonal ของกราฟด้วยแต่ในที่นี้จะไม่สนใจ seasonal ของกราฟเลย

เราจึงจะให้ function auto arima ในการหาparameter ที่เหมาะสมสำหรับกราฟให้เราโดยเราใส่ feature ไปแค่ข้อมูลที่เราสนใจเลยคือ ราคาปิดของมันโดยแบ่งข้อมูล 96% ไปเทรนเพื่อปรับ parameter ก่อนแล้วนำไปเดาข้อมูลที่ 4%ของชุดข้อมูลพบว่ามีความเป็นไปได้สูงมากๆที่จะคาดเดาได้ถูก( ได้ลองกับการแบ่ง 20% แต่คิดว่าน่าจะเพราะการที่สนใจ pattern ที่กว้างไปอาจจะทำให้เสีย pattern บริเวณใกล้ที่เราจะคาดเดาได้)

การ fit model ทำนายและดูว่าเป็นยังไง

เขียน function เพื่อทำการ train_test_split ไป 96% แล้วจากนั้นนำโมเดลนี้ไปทำนายทั้งชุดข้อมูลเพื่อนำข้อมูลราคาซื่อหุ้นในวันที่ 17 และ 24 ออกมา

เมื่อรันสำหรับหนึ่งหุ้นจะได้จะได้ผลลัพธ์มาแบบนี้

เป็นโมเดลที่ดีที่สุดสำหรับแต่ละหุ้นและ return ค่าออกมาเป็นเงินโดยเมื่อรันออกมา 100 ตัวจะได้ List ที่เก็บเงินที่ได้ในแต่ละหุ้นออกมา

การทำนายราคาสุดท้ายและหุ้นตัวไหนบ้างที่ควรซื้อ

จากนั้นเรานำมาหาว่าแต่ละหุ้นจะได้กำไรเท่าไหร่และตัวไหนที่ให้กำไรเรามากที่สุด 3 ตัว

[61.07912206684496, ‘BGRIM’], [79.880626711204, ‘DOHOME’], [133.53119111673362, ‘TQM’]

ได้มาสามตัวคือ TQM,BGRIM,DOHOME และได้กำไรเป็นบาทตามที่เห็นเลยครับ

แต่ตัวที่มากที่สุดคือ TQM ดังนั้นเราจึงเลือก TQM โดยจะได้กำไรประมาณ 133.5 บาท

เป็นอันเสร็จสิ้นสําหรับ ภารกิจเจอกันใน project อื่นๆนะครับบ

--

--