Trong lĩnh vực phân tích tài chính, việc dự báo giá trị tương lai của cổ phiếu luôn là một thách thức lớn do tính chất biến động liên tục và khó lường của thị trường. Dự báo điểm đơn thuần thường không cung cấp đủ thông tin cho các nhà đầu tư và nhà quản lý rủi ro, bởi vì nó bỏ qua mức độ bất định xung quanh dự báo đó. Để giải quyết vấn đề này, dự báo xác suất đã trở thành một công cụ quan trọng, giúp cung cấp cả giá trị kỳ vọng lẫn khoảng tin cậy của dự báo.
Bài viết này sẽ hướng dẫn cách kết hợp một mô hình dự báo xu hướng trung bình bất kỳ với mô hình GARCH(1,1) để nắm bắt cả giá trị trung bình có điều kiện lẫn phương sai có điều kiện của tỷ suất sinh lời chứng khoán. Phương pháp này giúp tạo ra các khoảng dự báo xác suất động, phản ánh chân thực mức độ biến động của thị trường theo thời gian.
Phương pháp tiếp cận linh hoạt trong dự báo tài chính
Mô hình hóa chuỗi thời gian tài chính thường đòi hỏi phải giải quyết hai thành phần chính: xu hướng trung bình và cấu trúc biến động của sai số. Các mô hình truyền thống thường giả định phương sai của sai số là không đổi, điều này hoàn toàn không phù hợp với thực tế thị trường chứng khoán, nơi thường xuyên xảy ra hiện tượng cụm biến động.
Bằng cách sử dụng thuật toán agnosticgarchf trong thư viện ahead của ngôn ngữ R, chúng ta có thể tách biệt hai nhiệm vụ này. Đầu tiên, một mô hình bất kỳ do người dùng lựa chọn sẽ được áp dụng để dự báo xu hướng trung bình có điều kiện. Sau đó, mô hình GARCH(1,1) được áp dụng trên phần dư để dự báo phương sai có điều kiện. Sự kết hợp này mang lại khả năng tùy biến cực kỳ cao cho các nhà phân tích dữ liệu.
Cài đặt thư viện và chuẩn bị dữ liệu
Trước khi đi vào triển khai, chúng ta cần cài đặt các thư viện cần thiết, bao gồm thư viện chứa dữ liệu chứng khoán của Google và thư viện thực hiện thuật toán dự báo.
1install.packages("pak")
2pak::pak("fpp2")
3devtools::install_github("Techtonique/ahead")
4pak::pak("fGarch")Sau khi hoàn tất cài đặt, chúng ta sẽ lần lượt thử nghiệm việc kết hợp GARCH(1,1) với các mô hình dự báo xu hướng khác nhau.
Tích hợp mô hình ARIMA tự động với GARCH(1,1)
Mô hình ARIMA tự động là lựa chọn phổ biến hàng đầu khi xử lý chuỗi thời gian nhờ khả năng tự cấu hình các tham số tự hồi quy và trung bình trượt. Khi kết hợp với GARCH(1,1), chúng ta thu được kết quả dự báo điểm cùng khoảng tin cậy biến đổi linh hoạt.
1res <- ahead::agnosticgarchf(fpp2::goog200,
2 FUN=forecast::auto.arima, h=20)
3print(res)
4# Kết quả dự báo:
5# Point Forecast Lo 95 Hi 95
6# 201 532.1750 518.1879 546.1621
7# 202 532.8717 518.8757 546.8678
8# 203 533.5684 519.5635 547.5734
9# 204 534.2652 520.2513 548.2790
10# 205 534.9619 520.9391 548.9847
11# 206 535.6586 521.6269 549.6903
12# 207 536.3553 522.3148 550.3959
13# 208 537.0521 523.0026 551.1015
14# 209 537.7488 523.6905 551.8071
15# 210 538.4455 524.3783 552.5127
16# 211 539.1422 525.0662 553.2183
17# 212 539.8390 525.7540 553.9239
18# 213 540.5357 526.4419 554.6295
19# 214 541.2324 527.1298 555.3351
20# 215 541.9291 527.8176 556.0407
21# 216 542.6259 528.5055 556.7462
22# 217 543.3226 529.1934 557.4518
23# 218 544.0193 529.8813 558.1573
24# 219 544.7160 530.5692 558.8629
25# 220 545.4128 531.2571 559.5684
26ggplot2::autoplot(res)
Tích hợp phương pháp Theta với GARCH(1,1)
Phương pháp Theta phân tách chuỗi thời gian thành các đường cong có độ cong khác nhau để dự báo xu hướng dài hạn và biến động ngắn hạn. Việc bổ sung GARCH(1,1) giúp khoảng dự báo mở rộng một cách tự nhiên hơn khi thời gian dự báo tiến xa hơn.
1res <- ahead::agnosticgarchf(fpp2::goog200,
2 FUN=forecast::thetaf, h=20)
3print(res)
4# Kết quả dự báo:
5# Point Forecast Lo 95 Hi 95
6# 201 531.4982 518.2318 544.7646
7# 202 531.7610 516.1991 547.3230
8# 203 532.0238 514.1041 549.9436
9# ...
10# 220 536.4916 438.3483 634.6349
11ggplot2::autoplot(res)
Kết hợp hồi quy Ridge với GARCH(1,1)
Hồi quy Ridge là một kỹ thuật học máy giúp kiểm soát hiện tượng quá khớp bằng cách thêm thành phần phạt vào hàm mất mát. Sử dụng mô hình hồi quy Ridge để dự báo xu hướng trung bình, kết hợp với GARCH(1,1) cho sai số, đem lại một mô hình lai mạnh mẽ giữa học máy và kinh tế lượng truyền thống.
1res <- ahead::agnosticgarchf(fpp2::goog200,
2 FUN=ahead::ridge2f, h=20)
3print(res)
4# Kết quả dự báo:
5# Point Forecast Lo 95 Hi 95
6# 201 532.1740 519.4742 544.8737
7# 202 532.9003 517.9900 547.8106
8# 203 533.6547 516.8217 550.4877
9# ...
10# 220 549.0716 512.7274 585.4158
11ggplot2::autoplot(res)
Sử dụng mô hình làm mượt LOESS với GARCH(1,1)
LOESS là phương pháp làm mượt phi tham số dựa trên hồi quy đa thức cục bộ. Mô hình này cực kỳ linh hoạt trong việc bắt kịp các thay đổi phi tuyến tính của cấu trúc dữ liệu. Khi tích hợp với GARCH(1,1), chúng ta thu được khoảng tin cậy phản ánh độ bất định từ các ước lượng phi tham số này.
1res <- ahead::agnosticgarchf(fpp2::goog200,
2 FUN=ahead::loessf, h=20)
3print(res)
4# Kết quả dự báo:
5# Point Forecast Lo 95 Hi 95
6# 201 544.3276 520.1558 568.4994
7# 202 548.2888 523.7199 572.8578
8# 203 552.0027 527.0698 576.9356
9# ...
10# 220 604.7474 576.5943 632.9006
11ggplot2::autoplot(res)
Như các biểu đồ trực quan hóa đã thể hiện rõ ràng, việc kết hợp bất kỳ mô hình dự báo xu hướng nào với GARCH(1,1) đều cung cấp một cái nhìn toàn diện và sâu sắc hơn về cả xu hướng giá dự kiến lẫn mức độ rủi ro đi kèm. Đây là một công cụ cực kỳ hữu ích cho các nhà phân tích tài chính trong việc định lượng rủi ro danh mục đầu tư.
✨ Điểm đắt giá của phương pháp này chính là tính kế thừa và sự tự do tối đa trong thiết kế mô hình. Bạn không cần phải xây dựng một mô hình toán học phức tạp tích hợp sẵn từ đầu. Thay vào đó, bạn có thể tận dụng thế mạnh của bất kỳ thuật toán dự báo hiện đại nào để nắm bắt xu hướng trung bình, đồng thời ủy thác nhiệm vụ ước lượng biến động thị trường cho cấu trúc GARCH(1,1) đã được chứng minh hiệu quả qua nhiều thập kỷ.
Câu hỏi tư duy: Khi áp dụng mô hình lai này vào thị trường chứng khoán có biên độ dao động giá hàng ngày bị giới hạn bởi quy định pháp lý, các giả định phân phối của mô hình GARCH(1,1) cần được điều chỉnh như thế nào để phản ánh đúng thực tế rủi ro?


