Thị trường chứng khoán là nơi mà mọi người đều mong muốn tìm ra các "câu thần chú" để dự đoán thành công giá cổ phiếu. Mặc dù vậy, hầu như giá là thứ không thể dự đoán một cách chính xác. 

Trong bài viết này, mình sẽ giới thiệu qua một thư viện rất hay, hỗ trợ cả 10 Model phổ biến nhất trong dự báo chuỗi thời gian. Và áp dụng thử 4 Model là SARIMA, Facebook Prophet, HoltWinters & Vector AutoRegression (VAR), để mô phỏng lại quá trình dự báo giá dựa trên lịch sử giá.

Thư viện Kats do Facebook's Data Science team xây dựng và phát triển. Trong thư viện có support hầu hết các model dự báo Time Series phổ biến như: Linear, Quadratic, ARIMA, SARIMA, Holt-Winters, Prophet, AR-Net, Theta, VAR. Hay thậm chí model Deep Learning là LSTM.

Lưu ý:
  • Model được áp dụng đơn giản, chưa Tuning Parameter cũng như khung thời gian train là rất ngắn. Do đó những Model trong bài viết mang tính chất giới thiệu là chính, còn hiệu quả về mặt đầu tư thì cần phải có thời gian đánh giá lại. Việc chỉ dùng giá mở cửa, cao nhất, thấp nhất, khối lượng để dự báo giá đóng cửa mang rất nhiều rủi ro 
  • Model thiết lập đơn giản đến mức bạn có thể clone một bản trên colab, và chỉ thay đổi dữ liệu đầu vào theo đúng cấu trúc là được.
  • Thư viện KATS cũng có hỗ trợ cả việc điều chỉnh tham số (Tuning Parameter) của các Model, cũng như Back Testing error như MAE, MSE, RMSE, MAPE,... Tuy nhiên, mình sẽ viết về phần này trong một bài viết khác!
  • Dữ liệu bên dưới là dữ liệu của Chứng Khoán Bản Việt (HoSE:VCI), mình trích xuất từ V-Pro của Chứng Khoán Bản Việt (HoSE:VCI). Bên dưới cũng có hướng dẫn cách export nhanh cho ai muốn vọc thử liền. (ai muốn dùng thử VPro thì mở tk ở đây)
  • Mình cũng có viết những bài viết khác về áp dụng AI trong đầu tư như: Algo Trading trong phân tích tâm lí thị trường (Sentiment), Áp dụng Machine Learning trong dự báo lợi nhuận đầu tư,... Tham khảo thêm
----------------------------------------------------------------
Lê Đặng Trung Hiếu

Supervisor
Phòng ABS, CTCP Chứng Khoán Bản Việt
Tầng 8, Sailing Tower, 111A Pasteur, Quận 1, TpHCM
Kết nối bạn bè: Facebook | Github | Linkedin
----------------------------------------------------------------

OK không nói nhiều nữa, bắt đầu thôi!
Đầu tiên là applied thư viện KATS:
pip install kats

 Mình nhập data mẫu từ V-Pro VCSC lên Github để call cho dễ, hướng dẫn như hình bên dưới. Nếu bạn nào có biết nơi để call dữ liệu realtime (và free để ai cũng dùng dc :D ) thì comment support mình nhé.


Ở đây mình chỉ giới thiệu thư viện & các thuật toán, nên mình chỉ filter ra 200 phiên gần nhất để chạy các Model mẫu. (đỡ phải chờ lâu :))

Bạn có thể dùng nhiều dữ liệu train hơn nếu muốn.

Bảng dữ liệu mẫu sẽ như thế này:


Set up 2 tệp dữ liệu đào tạo và kiểm tra

Chắc hẳn mọi người sẽ hỏi vì sao không random như các bài toán ML khác? thì mình xin trả lời ngắn gọn là do tính chất của bài toán dự báo, dữ liệu cơ sở là dùng giá lịch sử để dự báo là giá của ngày hôm sau. (trong bài là giá đóng cửa)

Và còn một điều cần phải thống nhất nữa, mình setup train 170 phiên & giữ lại test 30 phiên. Trên phần vẽ biểu đồ, mình compair phần model tính toán với phần data real để tiện so sánh độ hiệu quả.

Chạy các Model Machine Learning

Model SARIMA

SARIMA và ARIMA là những mô hình sử dụng rộng rãi nhất để dự báo chuỗi thời gian.ARIMA model là viết tắt của cụm từ Autoregressive Intergrated Moving Average. Mô hình sẽ biểu diễn phương trình hồi qui tuyến tính đa biến (multiple linear regression) của các biến đầu vào, còn SARIMA về bản chất là mô hình ARIMA nhưng được điều chỉnh đặc biệt để áp dụng cho những chuỗi thời gian có yếu tố mùa vụ.

Phía dưới mình biều diễn 2 biểu đồ với 2 ý nghĩa khác nhau:
  • Biểu đồ đầu tiên là so sánh giá (Close) giữa thực tế và model dự báo.
  • Biểu đồ thứ 2 là giá lịch sử (170 phiên) & giá dự báo (30 phiên tiếp theo)

Model Facebook Prophet

Thuật toán Facebook Prophet được giới thiệu lần đầu vào năm 2017, do Facebook’s Core Data Science team sáng tạo nên. Facebook Prophet cung cấp các thông số trực quan, dễ điều chỉnh. Ngay cả những người không đủ chuyên môn sâu về các mô hình dự báo chuỗi thời gian (như mình) cũng có thể sử dụng.

Facebook Prophet còn có nhiều tính năng hay như xác định tính mùa vụ theo ngày / tháng, xác định phiên giao dịch bất thường (outlier detection)
from kats.models.prophet import ProphetModel, ProphetParams
params = ProphetParams(seasonality_mode="additive")
m = ProphetModel(ts,params)
m.fit()
fcst = m.predict(steps=30, freq="D")
fcst['Close'] = test['Close']
import seaborn as sns
plt.figure(figsize = (11,5))
plt.xticks(rotation=20)
plt.title('So sánh giá dự báo & giá thực tế')
sns.lineplot(x=fcst['time'], y=fcst['fcst'], label="Giá dự báo", color="b")
sns.lineplot(x=fcst['time'], y=fcst['Close'], label ="Giá thực tế", color = 'red')
m.plot()


Model HoltWinters

Mình không tìm hiểu sâu về nền tảng của HoltWinter. Tuy nhiên, bạn có thể đọc thêm về phương pháp này tại đây


Model Vector autoregression (VAR)

Vector autoregression (VAR) là một thuật toán dự báo đa biến, cũng được hỗ trợ sẵn trong Kats. Bây giờ chúng ta sẽ áp dụng VAR để dự báo xu hướng giá mở cửa & đóng cửa nhé.

Phần plot của Kats.VARModel hơi chuối, nhìn tạm nhé mn.


Lời cuối:

Bài viết này chia sẻ đến cộng đồng đầu tư những bước đi đến với ứng dụng Machine Learning trong dự báo giá cổ phiếu. Có thể nó sẽ góp phần tối ưu hóa quá trình đầu tư của bạn, cũng như cải thiện kỹ năng viết bài của mình :))

Nếu thích bạn có thể kết nối bạn bè, hoặc đọc thêm các bài viết khác của mình trên https://www.cafechungkhoan.com

Link code của bài viết: https://github.com/cafechungkhoan/deeplearning-predict-stock