ตลาดหุ้นจ๋าเศรษฐี Data Science มาแล้ว !

Nunthiporn Phanbanlaem
6 min readSep 19, 2021

พลังของ A.I. ทำนายหุ้นได้จริงหรือ ?

หลายๆท่านคงทราบกันอยู่แล้วหุ้นคืออะไร และเราได้อะไรจากการลงทุนในหุ้น 💸 โจทย์ของเราใน Project 3 DSE#4 กลุ่ม 7 ปีไม่ดีขึ้นเลยจะพาทุกท่านมาศึกษาโมเดล Trend Forecasting เพื่อคาดคะเนราคาหาหุ้นจาก SET100 ที่จะทำกำไรให้เรามากที่สุด 1 ตัว แล้วเข้าไปซื้อโดยใช้เงินทุนจำนวน สองหมื่นบาท!! จาก✨ ดร.วิน Founder & CEO แห่ง Botnoi 👏🏻

❓ ทำไมต้อง SET100 💬 เพราะ SET100 คือกลุ่มหุ้น 100 อันดับแรกที่มีการซื้อขายสม่ำเสมอ มีสภาพคล่องสูง โดยวิธีคำนวณดัชนีใช้แบบ Market cap weighted (หุ้นที่มีมูลค่าสูง มีสัดส่วนในตลาดมากก็มีอิทธิพลต่อดัชนีสูง) ดังนั้นหุ้นของบริษัทที่อยู่ใน SET100 จึงมีโอกาสที่จะล้มละลายต่ำมาก ทำให้ความเสี่ยงที่เงินทุนของเราจะหายต่ำลงไปด้วย 🤗

❓ Trend forecasting คืออะไร 💬 Trend เป็นส่วนหนึ่งของ Time series หรืออนุกรมเวลา ซึ่ง Time series data ก็คือข้อมูลที่เก็บรวบรวมตามระยะเวลา อย่างเช่น ข้อมูลราคาหุ้นของ SET100 ในปี 2018–2020

📣 Trend forecasting เป็นการนำข้อมูล Trend หรือแนวโน้มในอดีต มาคาดคะเนสิ่งที่จะเกิดขึ้นในอนาคต โดยใน Project นี้เราจะใช้ Machine Learning มาเป็นตัวสร้างโมเดลเพื่อคาดคะเน Trend ของหุ้นใน SET100 ให้มิสเม่าของเราเข้าไปซื้อนั่นเอง

“ มาสร้างโมเดลทำนายหุ้นกัน

ขั้นตอนที่ 1 Get Data การดึงข้อมูล

เราเริ่มจาก Import library ที่จะในการดึงข้อมูลเข้ามา

Scaping stock name in SET100

ทำการดึงชื่อหุ้นใน SET100 จากเว็บ Marketdata

Get a Stock

การดึงข้อมูลหุ้นจาก data source “yahoo” มี 3 ขั้นตอนย่อยสั้น ๆ

  1. เราเริ่มจากสร้าง list หุ้นใน set 100 ให้ตรงตาม format ของ “yahoo” เพื่อที่จะเอาไปใช้ดึงข้อมูลหุ้นย้อนหลัง
  2. ดึงข้อมูลหุ้นในset 100 จาก data source “yahoo” เริ่มตั้งแต่วันที 2011–01–01

ขั้นตอนที่ 2 Cleansing & transformation

  • ทำการ stack data ในข้อมูลลงมาให้อยู่ในรูปแบบ unpivot เพื่อที่จะนำข้อมูลไปใช้ในขั้นตอนต่อไป
  • ในขั้นตอนนี้ทีมเราไม่ต้องทำอะไรมาก เนื่องจากข้อมูล get data source “yahoo” ที่เราดึงมาเป็นระเบียบเรียบร้อยอยู่แล้ว

ขั้นตอนที่ 3 Feature Engineer (Indicator)

ต่อไปเราจะกรองหุ้นให้เหลือเฉพาะตัวที่มีสิทธิ์ได้ไปต่อ ด้วยเครื่องมือวิเคราะห์กราฟ (Technical Analysis) หรือที่เรียกว่า Indicators เพื่อหาหุ้นที่อยู่ในช่วงขาขึ้นหรือ Uptrend เพราะราคามีแนวโน้มสูงขึ้น ทั้งหมด 2 ขั้นตอน

  1. ใช้ EMA (Exponential Moving Average) ที่ 14 และ 50 คือ ค่าเฉลี่ยของราคาหุ้น 14 และ 50 วันย้อนหลัง ซึ่งเหมาะสำหรับการเทรดระยะสั้น-กลาง โดยดูจากราคาปิดจะต้องมากกว่าเส้นค่าเฉลี่ย
  2. กรองด้วย Momentum Indicators สำหรับวิเคราะห์ทิศทางของหุ้นและความผันผวนของราคา โดยเราใช้ 2 ตัวด้วยกันคือ
  • MACD (Moving Average Convergence/Divergence) โดยเลือกที่เส้น MACD อยู่เหนือเส้น Signal Line
  • RSI (Relative Strength Index) ที่มากกว่า 50 สำหรับเลือกหุ้นที่ไม่อยู่ในสถาวะเทขาย (RSI ต่ำกว่า 30 คือสภาวะ Oversold นึกภาพของที่คนไม่สนใจซื้อ แม่ค้าพ่อค้ายอมขายของถูกตัดราคาเพื่อปล่อยของ และหาก RSI มากกว่า 70 คือสภาวะ Overbought ที่แม่ค้าพ่อค้าขายโก่งราคาไปมาก และเมื่อถึงจุดที่ลูกค้าซื้อไม่ไหว ราคาจะดิ่งลงมาเอง)

เริ่มจาก Import Library TA-lib เพื่อเรียกใช้ Indicator

  1. สร้าง function ในการเพิ่มข้อมูล indicator และconditions ในการขั้นกรองหุ้นที่สนใจ
  2. สร้าง columns เพื่อใช้ในการเช็คว่าเป็นหุ้นขาขึ้นในระยะสั้นหรือไม่ โดยดูราคาปิด มากกว่า เส้นค่าเฉลี่ย14วันย้อนหลัง (ema14) และ เส้นค่าเฉลี่ย14วันย้อนหลัง (ema14) มากกว่า เส้นค่าเฉลี่ย50วันย้อนหลัง (ema50)
  3. สร้าง columns เพื่อใช้ในการเช็คว่า macd ตัดเหนือขึ้นกว่าเส้น macd signal หรือไม่
  4. สร้าง columns เพื่อใช้ในการเช็คว่า rsi มีค่ามากกว่าเท่ากับ 50 หรือไม่ เพื่อดู momentum หรือแรงซื้อในตลาดในมีจำนวนมากพอสมควร เพราะหมายถึงหุ้นกำลังเป็นที่น่าสนใจของนักลงทุน
  5. โดยค่ามาตรฐานที่ใช้กันทั่วไปนั้นจะอยู่ที่ 30 และ 70 โดยหาก RSI อยู่ในระดับที่ตํ่ากว่า 30 จะถือว่าราคาอยู่ในภาวะ “ขายมากเกินไป” (Oversold) และหากมากกว่า 70 จะถือว่าราคาอยู่ในภาวะ “ซื้อมากเกินไป” (Overbought)
  6. สร้าง columns ในการขั้นหุ้นที่ผ่านเกณฑ์ is_uptrend, macd_buy_signal, strong_rsi
  7. ทำการวนลูป สร้าง Dataframe ที่ add indicator ของหุ้นใน SET100

Import Library TA-lib

สร้าง function ในการเพิ่มข้อมูล indicator และconditions ในการขั้นกรองหุ้นที่สนใจ

ทำการวนลูป สร้าง Dataframe ที่ add indicator ของหุ้นใน SET100

จะมีข้อมูลออกมา ดังนี้

ขั้นตอนที่ 4 Train & Prediction model

ในการสร้างโมเดลเพื่อทำนายราคาหุ้น ทีมเราใช้โมเดล LSTM

เราได้หาข้อมูลเพิ่มเติมใน Kaggle.com โดยค้นหาเกี่ยวกับ “LSTM” “Stock” “Predicting” เป็นต้น

อะไรคือ Long Short-Term Memory (LSTM)

LSTM คือรูปแบบหนึ่งของ Recurrent Neural Network (RNN) ที่นำไปใช้งานกับข้อมูลที่เป็นลำดับ แต่ LSTM จะเทรนง่ายกว่า มีประสิทธิภาพมากกว่า มี Memory ภายในและมีฟังก์ชั่นพิเศษเสมือน ‘Gate’ ควบคุมข้อมูลที่เข้ามา บอกได้ว่าเมื่อไหร่ควร read, write หรือ forget (delete)

เริ่มต้น ดึงข้อมูลหุ้นเฉพาะราคาปิดมา ​​โดยเราแบ่งชุดข้อมูลแบบ train 80, test 20 และตรวจสอบว่ามีจำนวนข้อมูลเท่าไหร่

เมื่อดึงข้อมูลแล้ว ขั้นตอนต่อไป คือ การ Scale data ให้อยู่ในช่วง 0–1

ทำไมต้อง Scale data ?

เนื่องจากหุ้นแต่ละตัวมีราคาไม่เท่ากัน บางตัว 20 บาท บางตัว 200 บาท

เราจึงต้องปรับให้มาอยู่ใน range 0–1 เพื่อให้เปรียบเทียบกันได้

เริ่มสร้าง LSTM Model

ในการสร้าง LSTM เราจำเป็นต้องนำเข้า Module จาก Keras :

  • Sequential สำหรับการเริ่มต้นเครือข่ายประสาท
  • Dense สำหรับการเพิ่มชั้นเครือข่ายประสาทเทียมที่เชื่อมต่อกันระหว่าง Layer
  • LSTM สำหรับการเพิ่มเลเยอร์ Long Short-Term Memory
  • Dropout สำหรับการสุ่มถอดบาง Node ออก ในระหว่างการเทรน เพื่อป้องกันไม่ให้ Model เกิดการ Overfitting มากเกินไป

สร้างชั้น Layer ให้ประมวลผลทีละชั้น (เป็นวิธีการประมวลผลของ Model RNN)

และจะวน Train Model โดยเรากำหนด epoch = 10 หรือเรียกภาษาเราว่า “วน train ข้อมูลไป 10 รอบ”

จากนั้นก็เริ่มเทรนโดยเรียก model .fit พร้อมกำหนด Argument ต่างๆ ซึ่งหลักๆ

epochs จำนวนรอบของการเทรน : โดยแต่ละ Epoch จะทำให้ Loss ลดลง ในขณะที่ Accuracy เพิ่ม

batch_size ขนาดของ Batch ซึ่งก็คือจำนวนรายการข้อมูลที่จะให้คำนวนในหนึ่งครั้ง โดยการกำหนด Batch size จะมีผลโดยตรงกับความเร็วในการคำนวน ยิ่ง Batch ใหญ่ ยิ่งคำนวนเร็ว แต่ Batch ที่ใหญ่เกินไปอาจทำให้ข้อมูลที่คำนวนมีขนาดใหญ่เกินกว่า Memory ของเครื่องเราจะรองรับได้

เราสร้างการทำนาย โดยการใช้ข้อมูล 30 วัน โดยรูปแบบ เป็นดังนี้

หลังจาก Run แล้ว เรามาลองตรวจเช็ค “ความแม่นยำ” โดยเทียบจากข้อมูลที่รู้อยู่แล้ว โดยนำ testing data 20 % ที่เราเก็บไว้ มาดูว่าตรงกันขนาดไหน

เราลองมา Plot Graph ดูค่าที่ทำนายกับค่าจริงกัน

ขั้นตอนที่ 5 Predict New Data (Result + Visualize)

สร้างฟังก์ชั่นสำหรับทำนายหุ้นจาก list หุ้นที่ผ่านการคัดเลือก

โดยเราเอาขั้นตอนที่ 4 มาทำกับหุ้นหลายๆ ตัว แล้วเทียบความแม่นยำ

เรามาดูผลการ Predict กัน

เรามา ranking จาก percent_change จากมากไปน้อย เพื่อดูโอกาสการเปลี่ยนแปลงของราคาหุ้น

แต่ข้อมูลมาหมดเลย ไม่ว่าจะเป็น uptrend : ) หรือ downtrend : (

เราจึงใส่ Code เพิ่มเติมเพื่อให้ข้อมูลแสดงเฉพาะหุ้นที่เป็น uptrend !

และเมื่อใส่เงื่อนไขของเราลงไป

จะมีหุ้นที่ตรงอยู่ 8 ตัว เรียงตามลำดับด้านล่าง

“ ข้อมูลประกอบการตัดสินใจเลือกซื้อหุ้น

ข้อมูลจาก Fundamental ประกอบการตัดสินใจ

ในทีมได้ลองดูข้อมูลหุ้นที่มีการเปลี่ยนแปลงขึ้นมากกว่า 2% มีทั้งหมด 12 ตัว

ข้อมูลที่ 1 พิจารณาจาก indicator Moving Average (ค่าเฉลี่ยราคาหุ้นย้อนหลัง)

หลังจากพิจารณาแล้ว หุ้นที่ยังมีโอกาสขึ้นต่อจะเหลือเพียง 4 ตัวเท่านั้น

1. JMT

2. PTTGC

3. BBL

4. KTB

เปรียบเทียบกับ Graph ที่ได้จากการ run model ของหุ้นทั้ง 4 ตัว ดังนี้

ข้อมูลที่ 2 พิจารณาจากผลประกอบการย้อนหลัง (กำไร หน่วยล้านบาท)

  1. JMT มีการเติบโตอย่างต่อเนื่องของผลกำไร
  2. PTTGC มีการแกว่งของผลกำไรค่อนข้างมาก ทำให้ทำนายผลประกอบการได้ยาก
  3. BBL มีการเติบโตแบบค่อยเป็นค่อยไป แต่ปี 2020 มีเหตุการณ์โควิดทำให้กำไรลดลง แต่ปี 2021 ผลงานก็ค่อยๆฟื้นตัว
  4. KTB ลักษณะเหมือน BBL

ข้อมูลที่ 3 ข้อมูลประกอบเพิ่มเติม

ข้อมูลประกอบเพิ่มเติม เช่น

  • ข้อมูลการดำเนินธุรกิจ การจดทะเบียนบริษัท
  • สถานการณ์ในช่วงภาวะโควิด-19
  • ข่าวสารที่เกี่ยวข้องกับบริษัทในช่วงนี้

ข้อสรุปจากข้อมูลทั้งหมด

ทีมเราเลือกหุ้น JMT ในการลงทุน โดยดูข้อมูลประกอบจากทางด้าน Technical และ Fundamental

คราวนี้มาดูว่าหุ้นตัวนี้ประกอบธุรกิจอะไร มีแนวโน้มในธุรกิจในอนาคตอย่างไรบ้าง

  • บริษัท เจ เอ็ม ที เน็ทเวอร์ค เซอร์วิสเซ็ส จำกัด (มหาชน) เป็นบริษัทที่จดทะเบียนจัดตั้งในประเทศไทยขนาดใหญ่
  • ธุรกิจหลักของบริษัทฯ คือการให้บริการติดตามหนี้สิน ซื้อลูกหนี้ด้อยคุณภาพมาบริหารและติดตามเรียกเก็บเงิน

ความเห็นหลังจากสถานการณ์โควิด

  • จะเห็นได้ว่าสภาวะเศรษฐกิจได้หดตัวอย่างรุนแรง ประชาชนจำนวนมาไม่สามารถหารายได้เพียงพอมาชำระหนี้ได้ทัน ทำให้เกิดหนี้เสียเป็นจำนวนมาก ซึ่งส่งผลเสียต่อธุรกิจส่วนใหญ่ โดยเฉพาะธนาคารพาณิชย์
  • ส่งผลดีให้กับบริษัท ติดตามหนี้เสีย เพราะจะทำให้ได้ฐานลูกค้าเพิ่มขึ้นจำนวนมาก ทำให้บริษัทมีงานที่เยอะขึ้น แปรผันโดยตรงต่อรายได้ และผลกำไรในอนาคตของบริษัท

* ความเสี่ยง : ตอนนี้ราคาหุ้น 48.50 บาท (ราคาวันที่ 16 ก.ย. 2564) หากราคาขยับขึ้นทะลุ 50 บาท จะซื้อหุ้นได้จำนวนลดลง 25 %

Graph จากการ run model

“ การนำไปต่อยอด

Trend Forecasting เป็นการคาดการณ์แนวโน้ม ถึงจะเป็นวิธีที่ซับซ้อนแต่มีประโยชน์ในการดูยอดขายหรือการเติบโตของตลาดในอดีต และกำหนดแนวโน้มที่เป็นไปได้จากข้อมูลนั้น เพื่อใช้ข้อมูลเพื่อคาดการณ์สิ่งที่อาจเกิดขึ้นในอนาคต

ผู้เชี่ยวชาญด้านการตลาดมักใช้การคาดการณ์แนวโน้มเพื่อช่วยกำหนดการเติบโตของยอดขายหลายๆ ด้านของธุรกิจ คาดการณ์และตรวจสอบแนวคิดหรือการวางแผนที่เกี่ยวข้องกับการขายในอนาคต

ไม่ว่าธุรกิจจะมีความซับซ้อน ผันผวน มากหรือน้อย หลาย ๆ ธุรกิจที่สามารถนำเรื่องนี้ไปใช้ต่อได้ เช่น

  • ธุรกิจที่เป็น Seasonal หรือฤดูกาล เช่น สินค้าเกษตร ราคาผักผลไม้ต่าง ๆ
  • ธุรกิจที่มีการเก็งกำไร เช่น การซื้อขายทอง ธุรกิจการรับซื้อขยะหรือของเก่า
  • ธุรกิจที่ยังไม่เห็น Pattern แต่น่าสนใจมาลองทำนายดู เช่น ธุรกิจการซื้อขายพระเครื่อง

ถ้าธุรกิจทำงานโดยมี data-driven หรือขับเคลื่อนด้วยข้อมูล ไม่ว่าจะเป็นการหาข้อมูลย้อนหลัง หรือเริ่มตั้งแต่วันนี้ที่จะเก็บข้อมูลไว้ หากเรามีข้อมูลที่มากเพียงพอจะทำให้เราสามารถวางแผนคาดการณ์ ในการลงทุนทำธุรกิจได้แม่นยำ และส่งผลถึงโอกาส และการสร้างผลกำไรที่มากยิ่งขึ้น

Source:

--

--