Data Science x Cryptocurrency ภาคปฏิบัติ :
สร้างโมเดล Supervised Autoencoder เพื่อทำนาย Asset Pricing บน Keras
สวัสดีครับ สืบเนื่องมาจากโพสต์เดือนก่อนเกี่ยวกับการแข่งเขียนโปรแกรมทำนายราคาเหรียญ Crypto 14 ชนิดเงินรางวัล 4 ล้านบาท https://www.facebook.com/thaikeras/posts/922894348625246
ก่อนหน้านี้ ในต้นปี 2021 มีการแข่งขันคล้ายๆ กันในการทำนายราคาหุ้นบนตลาดหลักทรัพย์ (Jane Street Market Prediction) โดยผู้ชนะเลิศในการแข่งขันครั้งนั้น ได้ใช้เทคนิคที่เรียกว่า "Supervised Autoencoder" และเทคนิคนี้เหมือนจะเป็นเทคนิคที่ใช้กับปัญหา Time Series ได้ดีจริงๆ เพราะว่า ในการแข่งขันทำนาย "ความเสถียรของ RNA" ซึ่งเป็น Time Series อีกรายการ เทคนิค "Supervised Autoencoder" นี้ก็คว้าเหรียญทองได้เช่นกัน
เนื่องจากมีผู้นำโค้ด "Supervised Autoencoder" กับงานทำนายเหรียญ Crypto ร่วมกับเทคนิค Time-series Kfolds จึงคิดว่าน่าจะมีประโยชน์สำหรับเพื่อนๆ น้องๆ หลายคนครับ
ในการใช้งานเราต้องทำความเข้าใจประเด็นต่อไปนี้
- อะไรคือ Autoencoder
- แล้ว Autoencoder นำมาช่วยทำนาย time series data ได้อย่างไร
- การเขียน Supervised Autoencoder บน Keras
ซึ่งบทความนี้จะเล่าอย่างกระชับๆ และแปะอ้างอิงสำหรับผู้สนใจเพิ่มเติมครับ
Autoencoder คืออะไร?
----------------------
จากภาพที่ 1, Autoencoder คือ Neural Network ที่ประกอบไปด้วยส่วน Encoder และ Decoder โดย
- ส่วน encoder รับ Input (รูปภาพ / vectors/ tensors) เข้ามา ลดรูปของ input นั้นให้เป็น Feature vector ขนาดที่เล็กกว่าเดิม และ
- ส่วน decoder พยายามสร้าง output จาก feature vector นั้นให้เหมือน input เดิมให้มากที่สุด
ทำไปเพื่ออะไร?
จริงๆ แล้ว Autoencoder ถูกคิดค้นขึ้นมาเพื่อจุดประสงค์ "dimensionality reduction" หรือ "data compression" หรือการลดขนาดข้อมูล input ขนาดใหญ่ เช่นรูปภาพขนาด 256x256x3 ให้มีขนาดเล็กลง อาทิเช่น 2048x1 โดยยังคงคุณสมบัติของ input เดิมให้มากที่สุด นั่นคือสามารถ reconstruct input เดิมได้เกือบสมบูรณ์ผ่าน decoder
เทคนิดนี้คิดมาตั้งแต่ปี 1991 แต่ว่าไม่ได้รับความนิยมเท่าที่ควร เนื่องจากในยุคก่อน Deep Learning และ GPU นั้นการคำนวณผ่าน Neural Networks นั้นไม่ได้มีประสิทธิภาพมากนัก
ดังนั้นในยุค 90s เทคนิค Dimensional reduction ที่คนส่วนใหญ่ใช้กันจะมีพื้นฐานอยู่บน Linear Algebra
เช่น Principal Component Analysis หรือ Spectral Embedding ที่การคำนวนสามารถทำได้มีประสิทธิภาพมากกว่าผ่าน Eigen-decomposition ไม่ต้องเสียเวลาเทรน Neural networks ใดๆ
อย่างไรก็ดีในยุค Deep Learning นั้นการ train/inference บน neural networks สามารถทำได้อย่างมีประสิทธิภาพมาก ทำให้ Autoencoder ถูกนำกลับมาใช้งาน และน่าจะกลายเป็น "de facto" หรือเทคนิคมาตรฐานของ dimensionality reduction techniques ที่ดีที่สุดในยุคนี้ เนื่องจาก Deep Neural Network เช่น CNNs หรือ Transformer สามารถสกัด features ที่มีความ ซับซ้อนแบบ non-linear สูง
จึงทำให้มีลูกหลานเกินขึ้นมากมาย เช่น Denoising Autoencoder, Variational Autoencoer (VAE), Vector Quantized VAE (VQ-VAE) เป็นต้น ซึ่งเป็นเทคนิคที่ทรงพลังมากๆ และเป็นพื้นฐานของงานมหัศจรรย์อย่าง DALL-E อีกที ผู้สนใจดูเพิ่มเติมได้ที่นี้ครับ
https://en.wikipedia.org/wiki/Autoencoder
https://ml.berkeley.edu/blog/posts/vq-vae/
.
Autoencoder มาช่วยทำนายข้อมูลพวก Time-series ได้อย่างไร?
----------------
Data Scientists หลายท่านมีไอเดียว่าด้วยพลังของ Deep Learning, (Deep) Autoencoder น่าจะเป็นเทคนิคครอบจักรวาลนอกจากจะใช้งานได้ดีเมื่อ input เป็นรูปภาพ, ข้อความ หรือเสียงแล้ว ข้อมูลประเภท time-series ก็น่าจะถูก compress ได้ดีบน autoencoder ด้วยเช่นเดียวกัน
โดยหวังว่า เมื่อเราลดรูป vector time-series ที่มีความซับซ้อนเพื่อมาสกัดเป็น feature vector ที่คง information ที่สำคัญๆ ของ time-series นั้นไว้แล้ว information ชี้เป็นชี้ตาย เช่น information ที่ส่งผลให้ราคา asset ขึ้นหรือลงก็จะอยู่ใน vector นี้ด้วย
ข้อดีอีกข้อของ Autoencoder คือ สามารถใช้กับ learning setting ได้หลากหลายไม่ว่าจะเป็น Unsupervised learning หรือ multi-task learning ที่เรียนแบบ unsupervised และ supervised ไปพร้อมๆ กัน
เช่น ในการสกัด feature vector ของ time-series ของเหรียญ crypto นั้น นอกจากข้อมูลที่ผู้จัดการแข่งขันให้มาแล้ว เรายังสามารถไป หาข้อมูลอื่นที่คล้ายกัน เช่น time-series ของตลาดหุ้น มาเรียน autoencoder ได้โดยไม่ต้องสนใจ label ใดๆ บน unsupervised learning setting ที่มีเป้าหมายเพียงให้ decoder สร้าง input ขึ้นมาใหม่เท่านั้น
จากนั้นเมื่อ train ฝั่ง unsupervised learning จนได้ผลที่พอใจแล้ว สามารถนำ supervised learning task ที่ต้องการทำนายราคาขึ้นลงมา plug-in ได้ทันที โดยเพิ่ม "หัวทำนาย" หรือ classification layers เข้าไปที่ feature vector ซึ่งสามารถดูได้ในรูปที่ 2
ซึ่ง autoencoder ที่ใส่หัวทำนายเข้าไปนี่เอง ที่ผู้ชนะเลิศงาน Jane Street เรียกว่า "supervised autoencoder"
รูปที่ 2
.
Keras สำหรับ Supervised Autoencoder
-------------------------------
ด้วยความง่ายของ Tensorflow's Keras เราสามารถแปลง architecture ในรูปที่ 2 เป็นโค้ดในรูปที่ 3 ได้อย่างง่ายดาย โดยมีการเพิ่ม Dropout และ GaussianNoise layers ลงไปเพื่อลด overfitting
โดยการแบ่งข้อมูลสามารถใช้ GroupTimeSeries Split เพื่อหลีกเลี่ยง Data Leakage (ไม่ให้โมเดลรู้คำตอบเวลาสอน) ดั่งแสดงในรูปที่ 4
โดยรายละเอียดการเตรียมข้อมูลและแบ่งข้อมูลก่อนเข้าโมเดลนั้นสามารถดูเบื้องต้นได้ใน notebook นี้ครับ
โค้ด Supervised-autoencoder ทำนายเหรียญ Crypto เขียนด้วย Keras
www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto
กระทู้ตั้งต้นของ 1st-price Jane Street Market Prediction ด้วย Supervised Autoencoder
https://www.kaggle.com/c/jane-street-market-prediction/discussion/224348
อย่างไรก็ดี การออกแบบข้อมูล input ของ Autoencoder จาก pure time-series ให้เป็นเวกเตอร์ที่เรียกว่า feature engineering นั้นสามารถทำได้หลากหลายมากกว่าตัวอย่างในโน้ตบุค และเป็นจุดสำคัญเลยว่าโมเดลนี้จะทำงานได้ดีแค่ไหน