DataScience x CryptoCurrency  

  RSS
The Neural Engineer
(@neural-engineer)
EfficientNet

Data Science x Cryptocurrency
 
สำหรับผู้ที่สนใจ Data Science และ Cryptocurrency สัปดาห์นี้มีการแข่งขันใหม่บน Kaggle เพื่อทำนายราคาเหรียญ Cryptocurrencies 14 ชนิด และมีเงินรางวัลมากกว่า 4 ล้านบาท สำหรับผู้ชนะ 10 อันดับแรก กำหนดเวลา 3 เดือน
 
รายละเอียดคร่าวๆ ของการแข่งขันคือต้องทำนายราคาของเหรียญ 14 ชนิดได้แก่ Bitcoin, Bitcoin Cash, Ethereum, Ethereum Classic, Binance Coin, Dogecoin, Cardano, EOS.IO, Litecoin, Monero, TRON, Stellar, IOTA และ Maker
 
ข้อมูลที่ Kaggle เตรียมให้จะเป็น High-frequency trading data ย้อนหลังไปจนถึงปี 2018 เพื่อใช้สร้างโมเดล โดยมีกำหนดเวลา 3 เดือนจนถึง เช้าวันที่ 2 กุมภาพันธ์ 2565 โดยการวัดผลจะใช้ Pearson Correlation Coefficient แบบมี weighted ซึ่งดูวิธีการวัดได้ที่นี่ครับ www.kaggle.com/cstein06/tutorial-to-the-g-research-crypto-competition
 
หลังจากครบกำหนดเวลาแล้ว จะให้โมเดลรันทำนายราคาสินทรัพย์ทั้ง 14 ไปอีก 3 เดือนและจะประกาศผลผู้ชนะเลิศวันที่ 3 พฤษภาคมครับ โดยรายละเอียดอื่นๆ ทั้งหมดดูได้ที่นี่ครับผม
 
ในการแข่งขันทั้งหมดบน Kaggle ผู้เข้าแข่งขันจะได้รับการสนับสนุน Cloud Machine คุณภาพสูง โดยเป็น TPU v3 จำนวนสัปดาห์ละ 20 ชั่วโมง และ GPU P100 สัปดาห์ละไม่ต่ำกว่า 30 ชั่วโมง ฟรีครับ ดูรายละเอียดเกี่ยวกับ Kaggle เพิ่มเติมได้ที่กระทู้ปักหมุดในเพจนะครับ
This topic was modified 7 months ago 2 times by The Neural Engineer
อ้างอิง
Posted : 07/11/2021 12:57 am
The Neural Engineer
(@neural-engineer)
EfficientNet

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/

 

รูปที่ 1

 

 

.

 

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 นั้นสามารถทำได้หลากหลายมากกว่าตัวอย่างในโน้ตบุค และเป็นจุดสำคัญเลยว่าโมเดลนี้จะทำงานได้ดีแค่ไหน

This post was modified 6 months ago 3 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 11/12/2021 8:37 am
Share:

Please Login or Register