Bối cảnh và vấn đề nghiên cứu

Thị trường chứng khoán (TTCK) giữ vai trò là kênh dẫn vốn trung và dài hạn quan trọng của nền kinh tế, đồng thời là môi trường đầu tư tài chính thu hút sự quan tâm của nhiều cá nhân và tổ chức. Tuy nhiên, giá chứng khoán có đặc tính phi tuyến tính, biến động động và không tham số, chịu sự tác động đồng thời từ các yếu tố kinh tế vĩ mô (lạm phát, tỷ giá, GDP, lãi suất), tình hình hoạt động nội tại của doanh nghiệp và tâm lý hành vi của nhà đầu tư.

Tại Việt Nam, sau giai đoạn biến động mạnh do tác động của đại dịch Covid-19 từ đầu năm 2020, thị trường đã ghi nhận sự phục hồi và tăng trưởng quy mô nhanh chóng trong năm 2020 và 2021 với số lượng nhà đầu tư cá nhân mở mới tài khoản cao kỷ lục. Trong bối cảnh đó, các phương pháp phân tích thống kê và kinh tế lượng truyền thống bộc lộ một số hạn chế khi nắm bắt các mối quan hệ phi tuyến phức tạp trong chuỗi thời gian tài chính. Ngược lại, các mô hình học sâu (Deep Learning), đặc biệt là mạng nơ-ron hồi quy bộ nhớ ngắn-dài (Long Short-Term Memory - LSTM), có khả năng lưu giữ thông tin phụ thuộc thời gian dài và tự động trích xuất đặc trưng từ dữ liệu quá khứ. Nhằm khai thác thế mạnh này, đề tài "Ứng dụng Deep Learning viết chương trình thử nghiệm dự đoán giá chứng khoán VIC" được thực hiện.

Mục tiêu nghiên cứu của khóa luận gồm:

  1. Mục tiêu chính: Sử dụng mô hình Deep Learning để xây dựng chương trình dự báo giá chứng khoán, cung cấp góc nhìn tham khảo về biến động giá cổ phiếu VIC trong ngắn hạn cho các nhà đầu tư cá nhân và tổ chức.
  2. Mục tiêu cụ thể:
    • Trình bày hệ thống lý thuyết cơ bản về Deep Learning và kiến trúc mạng LSTM.
    • Phân tích thực trạng và biến động lịch sử của giá cổ phiếu VIC trên thị trường chứng khoán Việt Nam.
    • Xây dựng mô hình sử dụng chuỗi dữ liệu giá 30 ngày trước đó để dự đoán giá đóng cửa của ngày kế tiếp ($t+1$).
    • Sử dụng ngôn ngữ lập trình Python để viết và thực thi chương trình thử nghiệm.
    • Giải thích, phân tích và đánh giá kết quả thực nghiệm bằng các thước đo thống kê.
    • So sánh kết quả thu được với một số nghiên cứu và phương pháp liên quan.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Giá cổ phiếu VIC của Tập đoàn Vingroup – Công ty Cổ phần niêm yết trên Sở Giao dịch Chứng khoán Thành phố Hồ Chí Minh (HOSE).
  • Phạm vi dữ liệu: Dữ liệu chuỗi thời gian lịch sử từ ngày 08/07/2013 đến ngày 29/10/2021 (tương ứng 2.077 ngày giao dịch được trích xuất từ nguồn Investing.com).

Cơ sở lý thuyết và phương pháp

Khóa luận thiết lập nền tảng nghiên cứu dựa trên sự kết hợp giữa lý thuyết tài chính thị trường và các mô hình toán học - trí tuệ nhân tạo:

  1. Lý thuyết thị trường chứng khoán: Hệ thống hóa khái niệm về thị trường sơ cấp, thị trường thứ cấp, cơ chế khớp lệnh và các chỉ tiêu giao dịch cơ bản (giá trần, giá sàn, giá tham chiếu, giá mở cửa, giá đóng cửa, giá cao nhất, giá thấp nhất, khối lượng giao dịch).
  2. Mạng nơ-ron nhân tạo (ANN): Cấu trúc gồm tầng đầu vào (Input Layer), các tầng ẩn (Hidden Layers) và tầng đầu ra (Output Layer). Giá trị tại mỗi nút mạng được xác định qua tổ hợp tuyến tính trọng số, độ lệch (bias) và đi qua hàm kích hoạt phi tuyến (Sigmoid, Tanh, ReLU, Softmax): $$\text{Output} = f\left(\sum_{i=1}^{m} w_i x_i + \text{bias}\right)$$
  3. Mạng nơ-ron hồi quy (RNN): Mô hình mạng có các liên kết vòng cho phép duy trì trạng thái ẩn qua các bước thời gian, phục vụ xử lý dữ liệu dạng chuỗi. Tuy nhiên, RNN truyền thống gặp hiện tượng suy giảm gradient (vanishing gradient) hoặc bùng nổ gradient khi chuỗi thời gian có độ dài lớn.
  4. Mạng bộ nhớ ngắn-dài (LSTM): Kiến trúc cải tiến của RNN do Hochreiter và Schmidhuber giới thiệu năm 1997. LSTM kiểm soát luồng thông tin thông qua trạng thái tế bào ($s_t$) và 3 cổng chức năng:
    • Forget gate ($f_t$): Quyết định loại bỏ thông tin không cần thiết từ trạng thái cũ: $$f_t = \sigma(W_{fx} x_t + W_{fh} h_{t-1} + b_f)$$
    • Input gate ($i_t$): Quyết định cập nhật thông tin mới vào trạng thái tế bào cùng giá trị ứng viên $\tilde{s}t$: $$i_t = \sigma(W{ix} x_t + W_{ih} h_{t-1} + b_i)$$ $$\tilde{s}t = \tanh(W{sx} x_t + W_{sh} h_{t-1} + b_s)$$ $$s_t = f_t \odot s_{t-1} + i_t \odot \tilde{s}_t$$
    • Output gate ($o_t$): Quyết định giá trị đầu ra $h_t$ dựa trên trạng thái tế bào đã được chuẩn hóa qua hàm $\tanh$: $$o_t = \sigma(W_{ox} x_t + W_{oh} h_{t-1} + b_o)$$ $$h_t = o_t \odot \tanh(s_t)$$
  5. Thước đo đánh giá sai số mô hình:
    • Sai số tuyệt đối trung bình (Mean Absolute Error - MAE): $$\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |Y_i - \hat{Y}_i|$$
    • Phần trăm sai số tuyệt đối trung bình (Mean Absolute Percentage Error - MAPE): $$\text{MAPE} = \frac{1}{n} \sum_{i=1}^{n} \left| \frac{Y_i - \hat{Y}_i}{Y_i} \right| \times 100%$$
    • Hệ số không ngang bằng Theil (Theil's U): Dùng để so sánh độ chính xác của mô hình với mô hình Naïve, giá trị $U \in [0, 1]$, khi $U < 0.55$ mô hình được coi là có chất lượng dự báo tốt.

Phương pháp nghiên cứu thực tế bao gồm việc thu thập dữ liệu thứ cấp từ Investing.com, xây dựng các chỉ báo kỹ thuật bổ trợ, chuẩn hóa dữ liệu về khoảng $[0, 1]$ bằng MinMaxScaler, phân chia tập Train/Test theo trình tự thời gian, và tiến hành huấn luyện mô hình mạng LSTM sâu trên môi trường Python.


Nội dung chính theo từng chương

Chương 1: Cơ sở lý luận và tổng quan nghiên cứu

Chương 1 hệ thống hóa lý thuyết về cơ chế hoạt động, chức năng của TTCK và định nghĩa pháp lý của chứng khoán. Tác giả đi sâu vào bản chất toán học của các mô hình học sâu, phân tích chi tiết cơ chế hoạt động của mạng ANN, RNN, các biến thể RNN hai chiều (Bidirectional RNN), RNN sâu (Deep RNN) và kiến trúc chi tiết của mạng LSTM trong việc khắc phục hiện tượng mất đạo hàm.

Phần tổng quan nghiên cứu phân tích các công trình thực nghiệm tiêu biểu:

  • Nghiên cứu của Magnus Hansson (2017) tại Đại học Lund về dự báo chuỗi lợi nhuận cổ phiếu tại thị trường Mỹ, Thụy Điển, Brazil bằng LSTM so với các mô hình ARMA-GJRGARCH.
  • Nghiên cứu của Kaisheng Yao và cộng sự về mô hình Depth-Gated RNN trên tập dữ liệu BTEC và PennTreeBank.
  • Nghiên cứu của Lê Gia Tiến về việc ứng dụng Python và các mô hình san bằng mũ (Moving Average, Single/Double Exponential Smoothing) dự báo cổ phiếu VNM giai đoạn 2014–2018.
  • Nghiên cứu của Nguyễn Lê Nam Phương về ứng dụng ARIMA, ARCH, GARCH dự báo chỉ số VN-Index giai đoạn 2014–2015 và hiệu ứng "Sell in May".
  • Nghiên cứu của Lê Xuân Hiền và Hồ Việt Hùng về ứng dụng mạng LSTM dự báo mực nước thời gian thực tại Hải Phòng.

Chương 2: Thực trạng hoạt động của Vingroup và giá chứng khoán VIC

Chương 2 trình bày bối cảnh kinh tế vĩ mô Việt Nam trong giai đoạn 10 năm (2009–2019) với mức tăng trưởng GDP duy trì trên 7% trong các năm 2018–2019, kim ngạch xuất nhập khẩu vượt mốc 500 tỷ USD; mức tăng trưởng GDP năm 2020 đạt 2,91% và 6 tháng đầu năm 2021 đạt 5,64%. TTCK Việt Nam ghi nhận sự phát triển qua 21 năm, vượt qua giai đoạn điều chỉnh cuối năm 2014 do biến động giá dầu thế giới và Thông tư 36/2014/TT-NHNN, bùng nổ thanh khoản và điểm số năm 2021 (chỉ số VN-Index đạt đỉnh 1.420,27 điểm vào ngày 02/07/2021, giá trị giao dịch cao nhất đạt 38.500 tỷ đồng ngày 04/06/2021).

Về phía doanh nghiệp nghiên cứu, Tập đoàn Vingroup (tiền thân là CTCP Thương mại Tổng hợp Việt Nam thành lập năm 2002) là tập đoàn tư nhân đa ngành quy mô lớn với cơ cấu doanh thu:

Lĩnh vực kinh doanh Tỷ lệ đóng góp doanh thu (%)
Chuyển nhượng bất động sản 65%
Bán lẻ 15%
Dịch vụ khách sạn, du lịch, vui chơi giải trí 8%
Cho thuê bất động sản đầu tư 6%
Dịch vụ bệnh viện 2%
Dịch vụ giáo dục 1%
Lĩnh vực khác 3%

Về diễn biến giá cổ phiếu VIC trên sàn HOSE từ khi niêm yết (19/09/2007) đến tháng 10/2021:

  • Giai đoạn 2013 đến giữa năm 2017: Giá dao động quanh mức dưới 50.000 VNĐ/cổ phiếu.
  • Giai đoạn tăng trưởng mạnh 2017–2019: Đạt mốc 111.488 VNĐ/cổ phiếu vào ngày 04/09/2017, đưa VIC vào nhóm cổ phiếu vốn hóa lớn nhất thị trường.
  • Đáy sụt giảm do dịch bệnh: Giảm xuống 63.556 VNĐ/cổ phiếu vào ngày 24/03/2020.
  • Đỉnh lịch sử: Đạt mức 128.000 VNĐ/cổ phiếu vào ngày 19/04/2021 (vốn hóa xấp xỉ 490.000 tỷ đồng, chiếm hơn 10% vốn hóa sàn HOSE).
  • Giai đoạn điều chỉnh: Sau đỉnh tháng 5/2021, giá VIC giảm hơn 30% trong 5 tháng, vốn hóa lùi về khoảng 330.300 tỷ đồng.

Chương 3: Kết quả dự đoán giá chứng khoán VIC

Chương 3 trình bày toàn bộ quá trình xử lý số liệu, huấn luyện mô hình và phân tích kết quả dự báo. Bộ dữ liệu gồm 2.077 phiên giao dịch từ 08/07/2013 đến 29/10/2021 với các đặc trưng thống kê mô tả:

Chỉ tiêu thống kê Giá trị (VNĐ)
Số quan sát 2.077 ngày
Giá trị trung bình (Mean) 63.934,94
Yếu vị (Mode) 34.711,00
Độ lệch chuẩn (Std Dev) 32.722,54
Giá trị nhỏ nhất (Min) 26.307,00 (17/12/2014)
Tứ phân vị 1 ($Q_1$) 34.213,00
Trung vị (Median) 41.697,00
Tứ phân vị 3 ($Q_3$) 98.045,00
Giá trị lớn nhất (Max) 128.000,00 (19/04/2021)

Phân tích hình học qua biểu đồ hộp (Boxplot) và biểu đồ phân phối tần suất cho thấy dữ liệu phân bố lệch trái về phía giá trị nhỏ, không xuất hiện các điểm ngoại lai bất thường ngoài quy luật thị trường.


Thiết kế và triển khai chương trình thử nghiệm

Chương trình thử nghiệm được xây dựng và thực thi trên môi trường Google Colab bằng ngôn ngữ Python.

+-------------------------------------------------------------+
|               Thu thập dữ liệu (investpy)                  |
|          2.077 phiên giao dịch VIC (2013 - 2021)            |
+------------------------------+------------------------------+
                               |
                               v
+-------------------------------------------------------------+
|                 Kỹ thuật tạo đặc trưng                      |
|       H-L, O-C, SMA_7, SMA_14, SMA_21, SD_7, SD_21          |
+------------------------------+------------------------------+
                               |
                               v
+-------------------------------------------------------------+
|                Tiền xử lý & Phân chia mẫu                   |
|        - MinMaxScaler đưa dữ liệu về khoảng [0, 1]          |
|        - Chuỗi trượt đầu vào: Lookback Window = 30 ngày     |
|        - Tập Train: 1.713 mẫu | Tập Test: 365 mẫu           |
+------------------------------+------------------------------+
                               |
                               v
+-------------------------------------------------------------+
|                  Kiến trúc mô hình LSTM                     |
|     - LSTM Layer: 1.000 units, return_sequences=True        |
|     - Dense Layer (Output), Optimizer='adam', Loss='MSE'    |
+------------------------------+------------------------------+
                               |
                               v
+-------------------------------------------------------------+
|                 Dự báo & Đánh giá kết quả                   |
|       - Dự báo ngoài mẫu 365 ngày & ngày 30/10/2021         |
|       - Đánh giá chất lượng qua MAE, MAPE, Theil's U        |
+-------------------------------------------------------------+

1. Trích xuất đặc trưng (Feature Engineering)

Từ các biến giá gốc (Open, Close, High, Low), mô hình khởi tạo thêm các biến kỹ thuật phản ánh xu hướng và độ biến động:

  • $H - L = \text{High} - \text{Low}$ (biên độ dao động trong phiên).
  • $O - C = \text{Open} - \text{Close}$ (chênh lệch giữa giá mở cửa và giá đóng cửa).
  • Trung bình trượt 7 ngày, 14 ngày, 21 ngày: $\text{SMA}7$, $\text{SMA}{14}$, $\text{SMA}_{21}$.
  • Độ lệch chuẩn trượt 7 ngày và 21 ngày: $\text{SD}7$, $\text{SD}{21}$.

2. Phân vùng dữ liệu và tạo cửa sổ trượt

  • Tập huấn luyện (Train set): 1.713 quan sát đầu tiên, cấu trúc thành các chuỗi trượt 30 ngày liên tiếp làm đầu vào để dự báo giá đóng cửa ngày tiếp theo.
  • Tập kiểm tra (Test set): 365 quan sát cuối cùng (từ ngày 21/05/2020 đến ngày 29/10/2021) dùng để kiểm định độc lập hiệu năng ngoài mẫu.

3. Cấu hình mạng và huấn luyện

  • Thư viện sử dụng: investpy, pandas, numpy, sklearn.preprocessing.MinMaxScaler, tensorflow.keras (Sequential, LSTM, Dense, Dropout), matplotlib, seaborn.
  • Kiến trúc mạng: Tầng LSTM gồm 1.000 đơn vị (units=1000), kết nối với tầng đầu ra Dense có số chiều bằng số biến mục tiêu (Close).
  • Tham số tối ưu: Thuật toán tối ưu hóa adam, hàm mất mát mean_squared_error (MSE).

Kết quả và đóng góp

1. Kết quả thực nghiệm

Quá trình kiểm thử trên 365 phiên giao dịch ngoài mẫu cho thấy đường dự báo của mô hình LSTM bám sát xu hướng vận động thực tế của giá cổ phiếu VIC qua các giai đoạn biến động mạnh.

Trích xuất một số kết quả so sánh giữa giá thực tế và giá dự báo từ mô hình:

Thời điểm quan sát Giá thực tế (VNĐ) Giá dự báo bởi LSTM (VNĐ) Chênh lệch (VNĐ)
Phiên $t-364$ 87.111 85.198,7891 -1.912,2109
Phiên $t-363$ 85.689 85.945,7266 +256,7266
Phiên $t-362$ 86.311 85.269,3594 -1.041,6406
Phiên $t-361$ 86.133 85.398,4609 -734,5391
Phiên $t-360$ 86.133 85.615,3047 -517,6953
Phiên $t-2$ 95.000 93.915,3359 -1.084,6641
Phiên $t-1$ 95.000 95.335,8984 +335,8984
Phiên $t$ (29/10/2021) 95.800 95.432,9609 -367,0391

Thực hiện dự đoán giá cổ phiếu VIC cho ngày tiếp theo (ngày 30/10/2021) bằng dữ liệu của 30 phiên gần nhất, mô hình cho kết quả: $$\hat{Y}_{30/10/2021} = 95.476,625 \text{ VNĐ}$$ Kết quả này phản ánh xu hướng giá VIC duy trì dao động ổn định quanh ngưỡng 95.000 VNĐ trong ngắn hạn, biên độ chênh lệch so với phiên liền trước không lớn.

2. Đóng góp của nghiên cứu

  • Cập nhật chuỗi dữ liệu giao dịch của cổ phiếu VIC đến thời điểm tháng 10/2021, bao quát các giai đoạn chịu ảnh hưởng của đại dịch Covid-19 và giai đoạn lập đỉnh lịch sử của thị trường chứng khoán Việt Nam.
  • Thiết lập quy trình trích xuất đặc trưng kết hợp giữa các giá trị giá cơ bản và các đường chỉ báo kỹ thuật ($\text{SMA}$, $\text{SD}$, biên độ $H-L$, $O-C$) phục vụ mô hình học sâu.
  • Hiện thực hóa chương trình thực nghiệm hoàn chỉnh bằng Python, cung cấp quy trình tính toán tự động các chỉ số sai số MAE, MAPE và Theil's U để kiểm soát độ tin cậy của mô hình.

Hạn chế và hướng nghiên cứu tiếp

Khóa luận xác định các hạn chế mang tính kỹ thuật và phạm vi nghiên cứu:

  • Việc lựa chọn siêu tham số: Quá trình xác định số đơn vị ẩn trong tầng LSTM, tốc độ học (learning rate), số lượng epoch chủ yếu dựa trên thử nghiệm lặp lại (trial-and-error), chưa áp dụng các kỹ thuật tối ưu hóa tự động (Grid Search hoặc Bayesian Optimization).
  • Phạm vi biến đầu vào: Mô hình tập trung vào dữ liệu chuỗi thời gian giá lịch sử và các chỉ báo kỹ thuật nội sinh; chưa tích hợp các biến ngoại sinh như chỉ số kinh tế vĩ mô, luồng tin tức tài chính, báo cáo tài chính định kỳ hoặc dữ liệu phân tích cảm xúc thị trường (Sentiment Analysis).
  • Khả năng khái quát hóa: Mô hình mới chỉ được kiểm định trên chuỗi dữ liệu đơn lẻ của cổ phiếu VIC, chưa mở rộng so sánh đa dạng trên toàn bộ rổ chỉ số VN30 hoặc các nhóm ngành có tính chất chu kỳ khác.

Hướng nghiên cứu tiếp theo được đề xuất bao gồm: mở rộng nghiên cứu trên các biến thể kiến trúc mạng khác (Bidirectional LSTM, Gated Recurrent Unit - GRU, Depth-Gated LSTM), tối ưu hóa cấu trúc tầng ẩn và kết hợp dữ liệu phi cấu trúc để nâng cao độ chính xác dự báo.


Giá trị tham khảo

Đề tài là tài liệu tham khảo chuyên ngành hữu ích cho:

  • Sinh viên và học viên chuyên ngành Toán kinh tế, Phân tích dữ liệu, Kinh tế số, Tài chính định lượng: Tham khảo phương pháp xây dựng pipeline xử lý dữ liệu chuỗi thời gian, phương pháp tạo biến đặc trưng kỹ thuật và cách áp dụng mô hình Deep Learning trong bài toán tài chính.
  • Các nhà nghiên cứu về học máy: Tham khảo mã nguồn Python triển khai kiến trúc LSTM với Keras/TensorFlow, cách xử lý dữ liệu đầu vào theo dạng mảng 3 chiều (samples, time steps, features) và các hàm tính toán sai số MAE, MAPE, Theil's U.
  • Nhà đầu tư cá nhân và tổ chức: Sử dụng phương pháp luận của đề tài như một công cụ hỗ trợ kỹ thuật trong việc theo dõi xu hướng biến động ngắn hạn của cổ phiếu.

Câu hỏi thường gặp

1. Khóa luận sử dụng độ dài chuỗi dữ liệu quá khứ bao nhiêu ngày để dự đoán giá ngày tiếp theo?

Mô hình thiết lập tham số cửa sổ trượt (lookback window) là 30 ngày giao dịch liên tiếp ($t, t-1, \dots, t-29$, loại trừ ngày nghỉ thứ Bảy và Chủ nhật) để đưa ra giá đóng cửa dự báo cho ngày $t+1$.

2. Dữ liệu huấn luyện và kiểm định của mô hình được phân chia theo tỷ lệ nào?

Tổng số 2.077 ngày quan sát được chia thành hai phần:

  • Tập huấn luyện (Train set): Gồm 1.713 ngày đầu tiên.
  • Tập kiểm tra ngoài mẫu (Test set): Gồm 365 ngày cuối cùng (từ ngày 21/05/2020 đến ngày 29/10/2021).

3. Những đặc trưng kỹ thuật nào đã được tạo thêm từ bộ dữ liệu giá gốc?

Ngoài 4 giá trị giá gốc (Open, Close, High, Low), nghiên cứu tạo thêm 7 biến kỹ thuật gồm:

  • Biên độ giá trong phiên: $H-L = \text{High} - \text{Low}$.
  • Chênh lệch giá mở/đóng: $O-C = \text{Open} - \text{Close}$.
  • Trung bình động giá đóng cửa: $\text{SMA}7$, $\text{SMA}{14}$, $\text{SMA}_{21}$.
  • Độ lệch chuẩn trượt: $\text{SD}7$, $\text{SD}{21}$.

4. Kết quả dự báo giá đóng cửa của cổ phiếu VIC cho ngày 30/10/2021 là bao nhiêu?

Mô hình LSTM đưa ra mức giá dự báo cho ngày 30/10/2021 là 95.476,625 VNĐ, cho thấy giá cổ phiếu có xu hướng dao động ổn định quanh ngưỡng 95.000 VNĐ so với mức giá thực tế 95.800 VNĐ của phiên liền trước ngày 29/10/2021.

5. Tại sao mô hình LSTM lại được lựa chọn thay vì mạng nơ-ron hồi quy RNN truyền thống?

Mạng LSTM được lựa chọn vì có cấu trúc 3 cổng chức năng (Forget gate, Input gate, Output gate) giúp kiểm soát luồng thông tin truyền qua trạng thái tế bào, giải quyết hiệu quả hiện tượng suy giảm gradient (vanishing gradient) khi huấn luyện trên các chuỗi thời gian tài chính dài.


Kết luận

Khóa luận tốt nghiệp của tác giả Lê Hà Giang đã hệ thống hóa cơ sở lý luận về mạng nơ-ron học sâu và triển khai thực nghiệm thành công mô hình LSTM trong bài toán dự báo giá cổ phiếu VIC giai đoạn 2013–2021. Bằng việc kết hợp dữ liệu giá lịch sử với các chỉ báo kỹ thuật trích xuất, chương trình viết bằng Python đã mô phỏng sát xu hướng vận động của giá đóng cửa ngoài mẫu thử nghiệm 365 ngày. Nghiên cứu đóng góp một khung phân tích thực nghiệm hoàn chỉnh, làm cơ sở khoa học cho việc phát triển các mô hình định lượng trong phân tích tài chính tại Việt Nam.