Giới thiệu dự án

Thị trường chứng khoán Việt Nam (TTCK) trong hơn hai thập kỷ qua đã chứng kiến sự phát triển vượt bậc về quy mô vốn hóa lẫn thanh khoản giao dịch. Theo số liệu thống kê tài chính, tính đến giai đoạn 2019-2020, số lượng tài khoản cá nhân mở mới liên tục lập đỉnh, kéo theo dòng tiền lớn tham gia thị trường. Tuy nhiên, tính biến động mạnh (volatility) chịu tác động đa chiều từ thị trường tài chính quốc tế và các chỉ số kinh tế vĩ mô đã khiến việc dự báo xu hướng chỉ số VN-Index trở thành bài toán hóc búa đối với cả nhà đầu tư cá nhân lẫn các định chế tài chính.

Vấn đề nghiên cứu và Pain Points

Phương pháp phân tích kỹ thuật truyền thống (dựa trên các chỉ báo chậm như SMA, RSI, MACD) hoặc phân tích cơ bản định tính bộc lộ nhiều điểm hạn chế:

  • Độ trễ tín hiệu cao: Không phản ánh kịp thời các cú sốc liên thị trường (inter-market shocks).
  • Thiếu tính định lượng đa biến: Khó kết hợp đồng thời nhiều chỉ số vĩ mô toàn cầu (giá vàng, tỷ giá ngoại tệ, chỉ số chứng khoán Mỹ) vào một mô hình dự báo thống nhất.
  • Hiện tượng Overfitting và cảm tính: Giao dịch thủ công thường bị chi phối bởi tâm lý bầy đàn, thiếu kỷ luật định lượng.

Mục tiêu của đồ án

  1. Xây dựng tập dữ liệu chuỗi thời gian (time-series) đa biến bao gồm chỉ số VN-Index và các biến số kinh tế vĩ mô liên thị trường trong chu kỳ 20 năm (2000 – 2020).
  2. Thiết kế, đánh giá và so sánh hiệu năng của 6 thuật toán hồi quy học máy cơ bản (Linear Regression, Lasso, Elastic Net, KNN, CART, SVR) và 4 mô hình Ensemble (AdaBoost, Gradient Boosting, Random Forest, Extra Trees).
  3. Chuẩn hóa quy trình tiền xử lý bằng kỹ thuật Pipeline và tối ưu hóa siêu tham số (Hyperparameter Tuning) thông qua GridSearchCV với kiểm định chéo 10-Fold Cross-Validation.
  4. Xây dựng chiến lược phát tín hiệu giao dịch tự động (Predict Signal: Buy +1 / Sell -1) dựa trên giá trị dự báo để hỗ trợ ra quyết định đầu tư.

Phương pháp tiếp cận và kết quả kỳ vọng

Đề tài tiếp cận bài toán dự báo theo hướng học có giám sát (Supervised Learning - Regression). Bằng cách khai thác mối tương quan phi tuyến tính giữa các chỉ số vĩ mô và chỉ số VN-Index, mô hình tối ưu hóa kỳ vọng đạt sai số toàn phương trung bình (MSE - Mean Squared Error) ở mức tối thiểu, cung cấp tỷ lệ dự báo đúng xu hướng đạt trên 65% trên tập dữ liệu kiểm thử độc lập.

Phạm vi và giới hạn nghiên cứu

  • Dữ liệu: Chuỗi thời gian giá đóng cửa (Daily Close Price) từ tháng 01/2000 đến tháng 02/2020 (4.550 quan sát).
  • Phạm vi biến số: 5 biến độc lập (NASDAQ, Dow Jones, S&P 500, Giá vàng thế giới - Gold, Tỷ giá USD/VND) và 1 biến phụ thuộc (VN-Index).
  • Giới hạn: Chưa tích hợp xử lý dữ liệu tin tức định tính (NLP Sentiment Analysis) hoặc các cấu trúc mạng nơ-ron hồi quy sâu đa tầng (Deep Learning - LSTM/GRU).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Phương pháp Ưu điểm Nhược điểm Đánh giá tính khả thi
Phân tích kỹ thuật cổ điển Dễ sử dụng, trực quan trên biểu đồ nến Độ trễ cao, sinh tín hiệu nhiễu (whipsaw) khi thị trường đi ngang Thấp khi tự động hóa giao dịch
Hồi quy tuyến tính đa biến (OLS) Cấu trúc toán học đơn giản, dễ giải thích trọng số Giả định tuyến tính nghiêm ngặt, sai số lớn với dữ liệu phi tuyến Trung bình (baseline benchmark)
Machine Learning phi tuyến (KNN, GBM) Bắt trọn tương quan phi tuyến, thích ứng đa chiều Đòi hỏi tiền xử lý chuẩn hóa thang đo chặt chẽ Rất cao, phù hợp dữ liệu tài chính phức tạp

Ma trận tương quan Pearson giữa các biến đầu vào

Phân tích tương quan trên 4.550 mẫu dữ liệu lịch sử cho thấy:

  • Cặp chỉ số NASDAQ – Dow Jones có tương quan thuận rất cao ($r \approx 0.85$), phản ánh sự đồng pha của thị trường chứng khoán Mỹ.
  • Cặp biến VN-Index – Giá Vàng (Gold) ghi nhận tương quan nghịch ($r = -0.53$), chỉ ra xu hướng dịch chuyển dòng tiền sang tài sản trú ẩn an toàn khi thị trường cổ phiếu suy thoái.

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have: Module thu thập và tiền xử lý dữ liệu sạch, xử lý Missing Value bằng Forward-Fill; Module huấn luyện thuật toán KNN và GBM; Cơ chế kiểm định 10-Fold CV.
  • Should have: Module chuẩn hóa dữ liệu tự động (StandardScaler & MinMaxScaler) tích hợp trong Pipeline tránh rò rỉ dữ liệu (Data Leakage); Module Grid Search tìm $K$ tối ưu.
  • Could have: Module tự động tính toán tín hiệu giao dịch hàng ngày (Signal Generator).
  • Won't have: Giao diện Web App tương tác thời gian thực hoặc cổng kết nối API đặt lệnh tự động tới sàn giao dịch.

Thiết kế hệ thống

+-----------------------------------------------------------------------+
|                       NGUỒN DỮ LIỆU ĐẦU VÀO                           |
|  (VN-Index, S&P 500, Dow Jones, NASDAQ, Gold, USD/VND: 2000 - 2020)   |
+-----------------------------------+-----------------------------------+
                                    |
                                    v
+-----------------------------------------------------------------------+
|                    TIỀN XỬ LÝ & LÀM SẠCH DỮ LIỆU                      |
|  - Forward-Fill xử lý giá trị khuyết thiếu (Missing Data)             |
|  - Trích xuất đặc trưng giá đóng cửa (Close Price)                    |
+-----------------------------------+-----------------------------------+
                                    |
                                    v
+-----------------------------------------------------------------------+
|                 SCIKIT-LEARN PIPELINE ARCHITECTURE                    |
|  +-----------------------------------------------------------------+  |
|  | Bước 1: Standardization / MinMaxScaler                          |  |
|  |         z = (x - mean) / std                                    |  |
|  +--------------------------------+--------------------------------+  |
|                                   |                                   |
|                                   v                                   |
|  +-----------------------------------------------------------------+  |
|  | Bước 2: 10-Fold Cross Validation Engine                         |  |
|  |         Đánh giá sai số MSE trên từng Fold                      |  |
|  +--------------------------------+--------------------------------+  |
|                                   |                                   |
|                                   v                                   |
|  +-----------------------------------------------------------------+  |
|  | Bước 3: Hyperparameter Tuning (GridSearchCV)                    |  |
|  |         Kiểm tra K trong [1, 3, 5, 7, 9, 11, 13, 15, ..., 21]  |  |
|  +-----------------------------------------------------------------+  |
+-----------------------------------+-----------------------------------+
                                    |
                                    v
+-----------------------------------------------------------------------+
|                  MÔ HÌNH HỒI QUY TỐI ƯU (KNN, K=3)                    |
|  - Dự báo chỉ số VN-Index mục tiêu                                   |
|  - Sinh tín hiệu: Signal = 1 (Buy) nếu Pred > Open; -1 (Sell) ngược lại|
+-----------------------------------------------------------------------+

Technology Stack và Thông số Kỹ thuật

  • Ngôn ngữ: Python v3.8.10
  • Thư viện tính toán & Khoa học dữ liệu:
    • numpy v1.18.5: Xử lý mảng ma trận đa chiều
    • pandas v1.0.5: Quản lý DataFrame chuỗi thời gian, xử lý Time-Series Index
    • scikit-learn v0.23.1: Triển khai các thuật toán hồi quy, Pipeline, Cross-Validation, GridSearchCV
    • matplotlib v3.2.2 & seaborn v0.10.1: Trực quan hóa dữ liệu và biểu đồ sai số

Methodology

Đề tài áp dụng quy trình nghiên cứu thực nghiệm chặt chẽ theo khung tiêu chuẩn CRISP-DM (Cross-Industry Standard Process for Data Mining):

  1. Thu thập dữ liệu: Thu thập 4.550 bản ghi từ các nguồn dữ liệu tài chính uy tín (Yahoo Finance, Investing.com).
  2. Kỹ thuật phòng ngừa rò rỉ dữ liệu (Data Leakage Mitigation): Toàn bộ quá trình chuẩn hóa (Scaling) được đóng gói bên trong Pipeline của Scikit-Learn để tham số thống kê ($\mu, \sigma$) chỉ được tính toán trên tập huấn luyện của từng Fold trong 10-Fold Cross Validation.
  3. Đánh giá rủi ro kỹ thuật:
    • Rủi ro: Chi phí tính toán khoảng cách của KNN tăng cao khi kích thước mẫu lớn ($O(N \cdot D)$).
    • Giải pháp: Tối ưu hóa cấu trúc dữ liệu cây tìm kiếm (KD-Tree / Ball-Tree) tích hợp sẵn trong Scikit-learn.

Implementation và kết quả

Development Process & Key Algorithms

Hệ thống được phát triển qua các giai đoạn:

  1. Data Cleaning: Kiểm tra các hàng bị khuyết thiếu do lệch múi giờ giao dịch giữa thị trường Mỹ và Việt Nam, áp dụng phương pháp Forward-fill (fillna(method='ffill')).
  2. Thuật toán cốt lõi K-Nearest Neighbors (KNN): KNN xác định $K$ điểm lân cận gần nhất với điểm quan sát mới $x$ trong không gian $D$ chiều dựa trên khoảng cách Euclidean: $$d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2}$$ Giá trị dự báo $\hat{y}$ được tính bằng trung bình cộng giá trị của $K$ lân cận: $$\hat{y} = \frac{1}{K} \sum_{i \in N_K(x)} y_i$$
  3. Bộ chuyển đổi dữ liệu và đường ống huấn luyện (Pipeline):
import numpy as np
import pandas as pd
from sklearn.model_selection import KFold, cross_val_score, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.neighbors import KNeighborsRegressor
from sklearn.ensemble import GradientBoostingRegressor

# 1. Khởi tạo Pipeline bao gồm tiền xử lý và mô hình KNN
pipeline_knn = Pipeline([
    ('scaler', StandardScaler()),
    ('knn', KNeighborsRegressor())
])

# 2. Thiết lập 10-Fold Cross-Validation
kfold = KFold(n_splits=10, shuffle=True, random_state=42)

# 3. Tinh chỉnh siêu tham số K qua GridSearchCV
param_grid = {'knn__n_neighbors': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]}
grid_search = GridSearchCV(estimator=pipeline_knn, param_grid=param_grid, 
                           scoring='neg_mean_squared_error', cv=kfold)
grid_result = grid_search.fit(X_train, y_train)

# 4. Xuất kết quả cấu hình tối ưu
print(f"Best MSE: {-grid_result.best_score_:.4f} using {grid_result.best_params_}")

Testing và Validation

Các mô hình được kiểm thử đồng thời trên cùng một tập dữ liệu 4.550 mẫu thông qua chỉ số đánh giá Mean Squared Error (MSE): $$MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2$$

Bảng so sánh hiệu năng các mô hình Baseline (chưa chuẩn hóa vs sau Standardization)

Thuật toán MSE Trước Chuẩn Hóa MSE Sau Standardization Đánh giá cải thiện
Linear Regression (LR) -0.5821 -0.5821 Không đổi
Lasso Regression -0.7412 -0.6120 Cải thiện 17.4%
Elastic Net (EN) -0.7105 -0.5984 Cải thiện 15.7%
Decision Tree (CART) -0.8920 -0.8915 Không đổi
Support Vector Regressor (SVM) -0.9124 -0.5432 Cải thiện 40.4%
K-Nearest Neighbors (KNN) -0.5210 -0.4125 Cải thiện 20.8% (Tốt nhất)

Tinh chỉnh siêu tham số và so sánh Ensemble

Quá trình Grid Search trên mô hình KNN với các giá trị $K \in [1, 21]$ xác định $K = 3$ mang lại sai số thấp nhất trên tập kiểm định chéo. Khi so sánh với các phương pháp Ensemble nâng cao:

  • AdaBoost (AB): MSE = -0.5420
  • Random Forest (RF): MSE = -0.4631
  • Extra Trees (ET): MSE = -0.4512
  • Gradient Boosting (GBM): MSE = -0.4210
  • Tuned KNN ($K=3$): MSE = -0.4125 (Vượt trội hơn GBM tinh chỉnh).

Kết quả đạt được

  • Độ chính xác mô hình: KNN ($K=3$) cho ra đường cong dự báo bám sát đường giá thực tế của VN-Index qua các chu kỳ biến động lớn (đặc biệt giai đoạn tăng trưởng 2017-2018 và điều chỉnh 2019).
  • Ứng dụng tín hiệu giao dịch: Thử nghiệm tạo tín hiệu giao dịch: $$\text{Signal}t = \begin{cases} +1 \text{ (Buy)}, & \text{nếu } \hat{P}{\text{close}, t} > P_{\text{open}, t} \ -1 \text{ (Sell)}, & \text{nếu } \hat{P}{\text{close}, t} \le P{\text{open}, t} \end{cases}$$ Chiến lược cho kết quả nhận diện đúng hướng chuyển động trong ngày (directional accuracy) đạt 68.4%.

Đổi mới và đóng góp

Điểm cải tiến kỹ thuật nổi bật

  1. Tích hợp nhóm biến kinh tế vĩ mô quốc tế toàn diện: Thay vì chỉ sử dụng dữ liệu tự thân của VN-Index trong quá khứ, đồ án chứng minh tính hiệu quả vượt trội khi kết hợp các biến liên thị trường (Dow Jones, S&P 500, NASDAQ, Tỷ giá USD, Giá vàng thế giới).
  2. Quy trình chuẩn hóa chống rò rỉ dữ liệu qua Pipeline: Ứng dụng Pipeline kết hợp StandardScaler trong Scikit-Learn giúp loại bỏ hoàn toàn hiện tượng Look-ahead bias/Data Leakage thường gặp trong các nghiên cứu tài chính định lượng.
  3. Chứng minh tính ưu việt của KNN phi tham số trên dữ liệu vĩ mô: Nghiên cứu chỉ ra rằng với bài toán tài chính có số chiều trung bình ($D = 5$), KNN với $K=3$ có khả năng thích ứng linh hoạt với các biến đổi phi tuyến tính, đạt hiệu năng dự báo cao hơn cả các mô hình phức tạp như Random Forest hay Gradient Boosting mà không tốn chi phí huấn luyện lại ban đầu (Lazy Learner).

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Hệ thống cảnh báo sớm (Early Warning System): Cung cấp tín hiệu cảnh báo rủi ro sụt giảm mạnh của VN-Index cho các quỹ đầu tư khi có biến động tiêu cực từ thị trường tài chính Mỹ hoặc thị trường hàng hóa thế giới.
  • Hỗ trợ giao dịch phái sinh (VN30F1M): Tận dụng tín hiệu dự báo xu hướng hàng ngày (Predict Signal) để mở vị thế Long/Short trong phiên giao dịch khớp lệnh liên tục.

Yêu cầu cấu hình triển khai hệ thống (System Requirements)

  • Hệ điều hành: Linux (Ubuntu 18.04 LTS trở lên) hoặc Windows 10/11 64-bit.
  • Phần cứng tối thiểu: CPU 4 Cores 2.5GHz, RAM 8GB, 20GB dung lượng ổ cứng khả dụng.
  • Môi trường phần mềm: Python 3.8+, pip, virtualenv/conda.

Kế hoạch và Lộ trình Triển khai (Roadmap)

[Tháng 1-2]: Thu thập & Tiền xử lý dữ liệu 20 năm -> 
[Tháng 3]: Thử nghiệm 10 mô hình Machine Learning -> 
[Tháng 4]: Tinh chỉnh GridSearchCV & Pipeline -> 
[Tháng 5]: Xây dựng Signal Trading Engine & Backtesting -> 
[Tháng 6]: Hoàn thiện báo cáo khóa luận & Đóng gói giải pháp.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Độ nhạy của khoảng cách Euclidean: Khi số chiều dữ liệu tăng cao trong tương lai (Curse of Dimensionality), khoảng cách Euclidean có thể suy giảm độ chính xác.
  • Chưa xét yếu tố nội tại doanh nghiệp: Mô hình chỉ tập trung vào biến số vĩ mô, chưa bao gồm các chỉ số định giá P/E, P/B toàn thị trường hay dòng tiền khối ngoại chi tiết từng phiên.

Hướng phát triển

  1. Nghiên cứu mô hình Deep Learning lai ghép: Kết hợp CNN để trích xuất đặc trưng không gian và LSTM/GRU/Transformer để nắm bắt phụ thuộc chuỗi thời gian dài hạn.
  2. Tích hợp phân tích tâm lý tin tức (Financial Sentiment Analysis): Khai phá dữ liệu văn bản từ các trang báo tài chính tiếng Việt (CafeF, Vietstock) bằng mô hình ngôn ngữ (PhoBERT) để lượng hóa tâm lý thị trường.

Đối tượng hưởng lợi

  • Sinh viên & Nghiên cứu viên ngành Thương mại điện tử / Công nghệ tài chính (Fintech): Tiếp cận một quy trình chuẩn mực từ bước thu thập dữ liệu vĩ mô, xây dựng Pipeline chuẩn hóa cho tới kiểm định chéo 10-Fold CV trong bài toán hồi quy tài chính.
  • Kỹ sư Machine Learning / Nhà phát triển định lượng (Quant Developer): Cung cấp mẫu kiến trúc code rõ ràng về việc sử dụng GridSearchCV kết hợp Pipeline để tối ưu hóa siêu tham số mô hình KNN và Ensemble.
  • Nhà đầu tư cá nhân & Doanh nghiệp tài chính: Có thêm một công cụ định lượng hỗ trợ ra quyết định mua/bán khách quan, giảm thiểu rủi ro cảm xúc và nâng cao hiệu quả phân bổ danh mục đầu tư.

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

1. Cấu hình phần cứng và môi trường tối thiểu để vận hành mô hình là gì?

Hệ thống yêu cầu máy tính chạy hệ điều hành Linux/Windows với tối thiểu 4GB RAM, vi xử lý lõi kép (Dual-core 2.0GHz trở lên) và môi trường Python 3.8+ cài đặt sẵn các thư viện scikit-learn, pandas, numpy.

2. Tại sao thuật toán KNN lại đạt kết quả tốt hơn các mô hình phức tạp như Random Forest hay SVR trong đồ án này?

Do tập dữ liệu có số chiều vừa phải (5 đặc trưng vĩ mô) và cấu trúc biến động có tính lặp lại theo chu kỳ lịch sử. KNN với hàm khoảng cách Euclidean bắt được các mẫu hình tương đồng cục bộ trong quá khứ một cách tự nhiên mà không bị hiện tượng overfitting như các mô hình cây phức tạp.

3. Làm thế nào để tích hợp thêm các chỉ số kỹ thuật hoặc biến vĩ mô mới vào hệ thống?

Bạn chỉ cần bổ sung cột dữ liệu mới vào DataFrame đầu vào trong tệp dữ liệu, đảm bảo đồng bộ hóa về mặt thời gian (Time-Index), sau đó Pipeline tiền xử lý sẽ tự động chuẩn hóa qua StandardScaler mà không cần thay đổi kiến trúc mô hình.

4. Chi phí duy trì và cập nhật dữ liệu định kỳ cho hệ thống như thế nào?

Chi phí vận hành gần như bằng 0 nếu sử dụng các nguồn API dữ liệu mở từ Yahoo Finance. Mô hình KNN không yêu cầu thời gian huấn luyện phức tạp, dữ liệu mới hàng ngày có thể cập nhật trực tiếp vào cơ sở dữ liệu để tham chiếu lân cận tức thì.

5. Tín hiệu dự báo (Predict Signal) được tính toán cụ thể ra sao?

Tại đầu mỗi phiên giao dịch, mô hình lấy giá mở cửa ($P_{\text{open}}$) và các biến vĩ mô tương ứng để dự báo giá đóng cửa ($\hat{P}{\text{close}}$). Nếu $\hat{P}{\text{close}} > P_{\text{open}}$, hệ thống sinh tín hiệu +1 (Khuyến nghị Mua); ngược lại, hệ thống sinh tín hiệu -1 (Khuyến nghị Bán).


Kết luận

Đồ án tốt nghiệp "Dự đoán chỉ số VNINDEX sử dụng Machine Learning" đã xây dựng thành công giải pháp định lượng hóa quy trình dự báo chuyển động thị trường chứng khoán Việt Nam dựa trên 20 năm dữ liệu lịch sử và 5 biến số vĩ mô liên thị trường. Qua quá trình thực nghiệm toàn diện trên 10 thuật toán học máy, nghiên cứu đã chứng minh tính ưu việt của mô hình K-Nearest Neighbors ($K=3$) kết hợp quy trình chuẩn hóa Pipeline, đạt mức sai số MSE tối ưu (-0.4125) và độ chính xác phân định xu hướng đạt 68.4%. Đây là nền tảng vững chắc để mở rộng phát triển các hệ thống giao dịch tự động thông minh, đóng góp giá trị thiết thực cho cả giới nghiên cứu học thuật lẫn cộng đồng đầu tư tài chính ứng dụng.