จากที่เคยเล่าให้ฟังก่อนหน้านี้ว่า ปัจจุบันเริ่มมีการนำ AI มาใช้ในการทำนายราคาหุ้นและ Crypto Currency มากขึ้น แต่การทำนายนั้นต้องอาศัยความเข้าใจใน algorithm ของ AI และสามารถปรับแต่ง parameters ต่างๆ ให้ค่าทำนายมีความเที่ยงตรงและสอดคล้องกับข้อมูลที่เกิดขึ้นจริงในอดีต ทำให้การใช้ algorithm แบบ time series ยังไม่เป็นที่แพร่หลายสำหรับคนทั่วไป เนื่องจากต้องใช้ผู้เชี่ยวชาญเฉพาะด้าน การนำมาใช้เองนั้นไม่ง่ายเอาซะเลยเหมือนที่เขียนไว้ในบทความ Part 1

Facebook คงเล็งเห็น pain point นี้เลยได้พัฒนา algorithm ที่ใช้งานง่ายมากๆในการทำนายทิศทางในอนาคตแบบ time series และไม่ต้องเสียเวลาในการสอน AI คอมพิวเตอร์ให้รู้จักกับข้อมูลในอดีตและรูปแบบผลทำนายที่อยากได้ในอนาคตอีกด้วย (supervised training) เรียกว่า run ปุ๊บก็แสดงผลออกมาได้ในทันที Facebook พัฒนา additive model algorithm นี้เป็นรูปแบบ open source บน Stan platform (เป็น state of the art platform สำหรับงานการประมวลผลทางด้านสถิติ และการวิเคราะห์ข้อมูลประสิทธิภาพระดับสูงที่ใช้ภาษา C++) เพื่อให้ทุกคนสามารถนำไปใช้และทำการพัฒนาต่อยอดได้ โดย Facebook ก็ใช้ algorithm นี้อย่างแพร่หลายในบริษัท Facebook เอง เรียกว่า Facebook Prophet ทาง Facebook ได้พัฒนา Prophet library ให้สามารถใช้ได้กับภาษา R และ Python และเปิดให้บุคคลทั่วไปสามารถนำไปใช้ได้ ซึ่งผมขออธิบายวิธีการใช้ด้วยภาษา Python ตามข้างล่างนี้
ก่อนอื่นต้องติดตั้ง Facebook Prophet library ลงใน Python เสียก่อน ซึ่งจะติดตั้งได้ก็ต่อเมื่อเครื่องคอมพิวเตอร์ของคุณมี pystan ติดตั้งอยู่ก่อนแล้วเท่านั้น เพื่อใช้ในการเชื่อมต่อกับ Stan platform นั่นเอง จากนั้นก็ติดตั้ง Facebook Prophet (fbprophet) ต่อได้เลย โดย version ของทั้ง pystan และ fbprophet ต้องสัมพันธ์กันถึงจะไม่มี error ระหว่างการติดตั้งผ่านทาง terminal ดังนี้
pip install pystan==2.19.1.1
pip install -U fbprophet
เมื่อติดตั้งเสร็จก็เริ่มเขียน code เพื่อทำนายราคาในอนาคตได้เลย เพื่อให้ทุกคนเข้าใจได้ง่ายขึ้นผลจะเขียน code ในการทำนายราคาเหรียญ LINK ให้เหมือนกับบทความภาคแรกที่ใช้ algorithm LSTM เพื่อจะได้เข้าใจได้ง่ายขึ้น และยังสามารถเปรียบเทียบวิธีการรวมถึงผลลัพธ์จากทั้งสองวิธีได้อีกด้วย
ขั้นตอนแรกเปิด Python Jupyter หรือ editor ที่ถนัดขึ้นมาและ import library ที่จำเป็นตามคำสั่งข้างล่างนี้
import matplotlib.pyplot as plt
import pandas_datareader as web
import datetime as dt
from fbprophet import Prophet
จากนั้นทำการ import ราคาของเหรียญ crypto ที่ต้องการจาก Yahoo finance มาเก็บไว้ และตรวจเช็คข้อมูลด้วยการ print ออกมาดู โดยผมจะระบุวันที่เริ่ม import data ตั้งแต่วันที่ 1/1/2019 จากนั้นใช้คำสั่ง print เพื่อแสดงตัวอย่างข้อมูลบนหน้าจอว่าเป็นเหมือนที่เราอยากได้หรือไม่
crypto_currency = 'LINK'
against_currency = 'USD'
start = dt.datetime(2019,1,1)
end = dt.datetime.now()
df = web.DataReader(f'{crypto_currency}-{against_currency}','yahoo', start, end)
df = df.reset_index()
print(df.tail())
print(df.shape)
ขั้นตอนที่สำคัญหลังจากได้ข้อมูลมาแล้ว คือการแปลงข้อมูลให้อยู่ในรูปแบบที่ fbprophet ต้องการ คือ มีเพียงแค่ 2 columns โดย column แรกจะเป็นข้อมูลวันที่โดยใช้ชื่อ column ว่า ‘ds’ ส่วน column ที่สอง เป็นข้อมูลราคาที่ต้องการทำนาย โดยเราจะใช้ราคา Adj Close โดยใช้ชื่อ column ว่า ‘y’ มาเก็บไว้ในตัวแปร data frame (df)
df[['ds','y']]= df[['Date','Adj Close']]
จากนั้นก็เรียกใช้ model prophet ได้เลย ด้วยการแปลงข้อมูลแล้วก็ระบุระยะเวลาการทำนายราคาในอนาคต โดยผมจะขอทำนายล่วงหน้าไป 30 วัน แล้วก็ใช้คำสั่ง predict ให้ prophet ทำนายราคา เท่านี้ก็เป็นอันเสร็จกระบวนการ
model = Prophet()
model.fit(df)
future=model.make_future_dataframe(30)
forecast=model.predict(future)
แน่นอนเราต้องอยากเห็นผลลัพธ์แสดงบนหน้าจอ โดยที่เราสามารถให้ระบบทำการ plot กราฟด้วยคำสั่งข้างล่างนี้ และที่ผมชอบมากคือ prophet สามารถแสดงกราฟ seasonal trend เป็น component ของระยะเวลาได้ด้วย โดยการใช้คำสั่ง model.plot_components() ทำให้เราสามารถวิเคราห์เทรนข้อมูลได้ละเอียดแบบรายวัน, รายสัปดาห์ และรายปี เลย
model.plot(forecast)
plt.show()
print(forecast.tail())
fig = model.plot_components(forecast)
ข้างล่างนี้คือผลการทำนาย ของ LINK ซึ่งผมจะ update ข้อมูลใน blog นี้ทุกวันว่ามูลค่าที่แท้จริงรายวันที่จะเกิดขึ้นสัก 10 วันข้างหน้าเมื่อเทียบกับคำทำนายมีความแม่นยำเพียงใด จาก Trend graph จะเห็นว่า ราคา LINK มีทิศทางที่จะลงในช่วงหนึ่งเดือนข้างหน้านี้



ถ้าเรามาดูกราฟ seasonal วิเคราห์แบบแยกส่วนของ prophet ข้างล่างนี้จะเห็นว่าในหนึ่งเดือนข้างหน้านี้ ราคาของ LINK จะยังคงลงต่อไปแต่จะไม่ต่ำไปกว่า 20 USD (ในความเป็นจริงราคากลับทรงตัวอยู่ที่ราวๆ 26-27 USD ครับ)
จากที่ทดลองเล่นมาพบว่าจำนวน historical data มีผลกับความเที่ยงตรงของราคาทำนาย ในตัวอย่างด้านบนผมใช้ข้อมูลตั้งแต่ต้นปี 2018 ทำให้ได้ราคาทำนายตำ่กว่าราคาจริงที่เกิดขึ้น ผมลองใช้ข้อมูลทั้งหมดตั้งแต่ LINK list ในปี 2017 พบว่าราคาที่ทำนายมีความแม่นยำมากขึ้น
ส่วนกราฟ seasonal รายสัปดาห์นี้ผมยังไม่เข้าใจเท่าไหร่ว่าสิ่งที่ plot ออกมามันคืออะไร เช่นนักลงทุนนิยมเทรดเหรียญนี้ในวันเสาร์มากกว่าวันอื่นๆหรือ? (จะเป็นช่วง 5 วันต่อจากวันปัจจุบัน หรือคือเทรน 5 วันของทุกๆสัปดาห์) แต่ที่แน่ๆคือกราฟ seasonal รายปีของ LINK ไม่ค่อยสวยเอาซะเลย โดยราคาจะตกต่ำไปเรื่อยๆจนถึงต้นปีหน้าเลย ซึ่งแสดงให้เห็นว่านักลงทุนไม่นิยมเทรดเหรียญนี้ช่วงปลายปี

นับว่าเป็นโมเดลที่หน้าสนใจ จากนี้ไปคงต้องทำการพิสูจน์ความแม่นยำไปเรื่อยๆ เพื่อจะได้เข้าใจโมเดลนี้มากขึ้นก่อนตัดสินใจว่าจะนำมาใช้เป็นเครื่องมือในการลงทุนหรือไม่ ถึงแม้ว่ามันจะดูแม่นยำกว่า LSTM algorithm และ Facebook ก็เคลมว่าโมเดลนี้รู้จักทั้ง seasonal data และวันหยุดอีกด้วย อย่างไรก็ตามอย่าเชื่อไปเสียทั้งหมด และต้องใช้วิจารณญานในการตัดสินใจลงทุนกับปัจจัยอื่นๆประกอบด้วยนะครับ
ข้างล่างนี้แถมให้ครับ เป็นทิศทางราคาของ ETH ในอีก 3 เดือนจากนี้ อนาคตสดใสมากทีเดียว :>
