Trực tiếp: Gradient Boosting kết hợp các cây quyết định yếu theo trình tự — mỗi cây sửa chữa lỗi của cây trước đó. Đối với dữ liệu tùy chọn dạng bảng, phương pháp này tốt hơn, nhanh hơn và dễ hiểu hơn mạng nơ-ron. Dưới đây là mã Hinglish.
Chỉ để học hỏi. Không phải lời khuyên đầu tư. Hãy tham khảo SEBI và các cố vấn được cấp phép.
Cách Gradient Boosting hoạt động
Các bộ học yếu (Weak learners): Các cây nhỏ (độ sâu 3-6).
Hàm mất mát (Loss): Tuân theo gradient.
Tốc độ học (Learning rate): Đóng góp của mỗi cây nhỏ (0,05).
Chính quy hóa (Regularization): Lấy mẫu con hàng và đặc trưng trong mỗi cây.
Tại sao tốt hơn mạng nơ-ron (tùy chọn)
Mạng nơ-ron thất bại trên dữ liệu dạng bảng + ít dữ liệu (100-1.000 hàng).
Các loại hỗn hợp (float Greeks)
Trực tiếp: Gradient Boosting kết hợp các cây quyết định yếu theo trình tự — mỗi cây sửa chữa lỗi của cây trước đó. Đối với dữ liệu tùy chọn dạng bảng, phương pháp này vượt trội hơn mạng nơ-ron về tốc độ, hiệu quả và dễ hiểu. Dưới đây là mã Hinglish.
Chỉ để học hỏi. Không phải lời khuyên đầu tư. Hãy tham khảo SEBI và các cố vấn được cấp phép.
**Gradient Boosting hoạt động như thế nào**
* **Bộ học yếu (Weak learners):** Các cây nhỏ (độ sâu 3-6).
* **Hàm mất mát (Loss):** Tuân theo gradient.
* **Tốc độ học (Learning rate):** Đóng góp của mỗi cây nhỏ (0,05).
* **Chính quy hóa (Regularization):** Lấy mẫu con hàng và đặc trưng trong mỗi cây.
**Tại sao tốt hơn mạng nơ-ron (đối với các tùy chọn)**
* Mạng nơ-ron kém hiệu quả với dữ liệu dạng bảng và ít dữ liệu (100-1.000 hàng).
* Xử lý các loại dữ liệu hỗn hợp (số thực Greeks + số nguyên DTE) mà không cần chuẩn hóa.
* Có thể đọc được tầm quan trọng của đặc trưng (Feature Importance) → có thể trình bày cho cơ quan quản lý.
**XGBoost so với HistGradientBoosting**
| Đặc điểm | XGBoost | HistGradientBoosting |
| :------- | :------ | :------------------- |
| Tốc độ | Rất nhanh (GPU) | Nhanh (CPU) |
| Điều chỉnh | Nhiều tham số | Ít hơn, mặc định hợp lý |
| Trên điện thoại | Cần cài đặt | Tích hợp sẵn trong sklearn |
Đối với điện thoại/Termux, nên dùng HistGradientBoosting — không cần cài đặt thêm.
**Các siêu tham số (Hyperparameters)**
```python
# Mac / Linux / Termux
python3 tune.py
# Windows CMD
py tune.py
from sklearn.ensemble import HistGradientBoostingClassifier
model = HistGradientBoostingClassifier(
max_depth=4, # Cây nhỏ; 3-6 là tối ưu
learning_rate=0.05, # Thấp = nhiều cây hơn, mạnh mẽ hơn
max_iter=300, # Xác định bằng dừng sớm
l2_regularization=1.0 # Thu nhỏ trọng số lá
)
```
**Huấn luyện tín hiệu đang chạy**
```python
# Mac / Linux / Termux
python3 train_signal.py
# Windows CMD
py train_signal.py
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.model_selection import TimeSeriesSplit, roc_auc_score
import pandas as pd
FEATURES = ["spread_pct","moneyness","iv_skew","pcr",
"theta_per_delta","gamma","vega","dte","oi","volume"]
def train_signal(X, y):
tscv = TimeSeriesSplit(n_splits=5)
m = HistGradientBoostingClassifier(max_depth=4, learning_rate=0.05, max_iter=300)
for tr, te in tscv.split(X):
m.fit(X.iloc[tr], y.iloc[tr])
p = m.predict_proba(X.iloc[te])[:,1]
print("fold AUC:", round(roc_auc_score(y.iloc[te], p), 3))
m.fit(X, y)
return m
```
**Dừng sớm (Early Stopping)**
```python
model = HistGradientBoostingClassifier(max_iter=500,
early_stopping=True, validation_fraction=0.15, n_iter_no_change=20)
```
Nếu lỗi xác thực không cải thiện trong 20 vòng, quá trình sẽ dừng lại — đây là biện pháp bảo vệ đáng tin cậy nhất chống lại việc quá khớp (overfit).
**Các đặc trưng hiệu quả**
* **theta_per_delta:** Chi phí phân rã so với hướng.
* **iv_skew:** Độ rẻ so với ATM.
* **moneyness:** ITM/OTM.
* **pcr:** Tâm lý thị trường.
**Các đặc trưng kém hiệu quả (nên loại bỏ):** oi, volume — chúng làm rò rỉ nhãn.
**Xếp chồng (Stacking) (mô hình thứ hai)**
Một bộ tăng cường tốt, nhưng xếp chồng mạnh mẽ hơn:
```python
# Mac / Linux / Termux
python3 stack.py
# Windows CMD
py stack.py
from sklearn.ensemble import HistGradientBoostingClassifier, RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import TimeSeriesSplit
gb = HistGradientBoostingClassifier(max_depth=4, learning_rate=0.05, max_iter=300)
rf = RandomForestClassifier(n_estimators=120, max_depth=6, n_jobs=-1)
tscv = TimeSeriesSplit(n_splits=5)
stack_X, stack_y = [], []
for tr, te in tscv.split(X):
gb.fit(X.iloc[tr], y.iloc[tr]); rf.fit(X.iloc[tr], y.iloc[tr])
p1 = gb.predict_proba(X.iloc[te])[:,1]; p2 = rf.predict_proba(X.iloc[te])[:,1]
stack_X.append(np.column_stack([p1, p2])); stack_y.append(y.iloc[te])
meta = LogisticRegression().fit(np.vstack(stack_X), np.concatenate(stack_y))
```
**Giám sát trôi dạt (Drift Monitor)**
```python
def drift_alert(train_mean, live_mean, std, auc_now, auc_base):
if abs(live_mean - train_mean) > 2*std:
return "RETRAIN"
if auc_base - auc_now > 0.03:
return "HALT"
return "OK"
```
**Thuật ngữ**
Boosting: Chuỗi các cây yếu.
Learning rate: Đóng góp nhỏ.
Max depth: Độ sâu của cây (3-6).
Early stop: Dừng khi lỗi xác thực (validation loss) ổn định.
Calibration: Xác suất bằng tần suất.
Walk-forward: Huấn luyện lại theo phương pháp cuộn (rolling retrain).
## CÁC LỖI THƯỜNG GẶP
Phân tách ngẫu nhiên trên chuỗi thời gian.
max_depth quá cao (quá khớp - overfit).
Không có dừng sớm (early stop).
Cung cấp oi/volume làm đặc trưng dự đoán.
Toàn bộ quy trình sản xuất (Data Engine -> Predictor -> Filter)
Hầu hết các bài viết chỉ hiển thị mô hình và kiểm thử ngược (backtest). Hệ thống thực tế đang hoạt động có 4 giai đoạn giữa dữ liệu thị trường thô và giao dịch:
1. DATA ENGINE tìm nạp chuỗi + IV + PCR + VIX mỗi N giây.
2. FEATURE ENGINE xây dựng các đặc trưng (build_features()) -> làm sạch, loại bỏ trùng lặp, gán nhãn.
3. PREDICTOR mô hình tăng cường gradient (gradient boosting model) -> xác suất tăng (prob_up) cho mỗi mức giá thực hiện (strike).
4. FILTER quy tắc Greeks + chế độ (regime) + dải xác suất (prob-band) -> cho phép/chặn.
5. EXECUTOR thực hiện lệnh trên giấy hoặc lệnh thực, xác định kích thước vị thế (position_size()).
1. Data Engine
Lấy ảnh chụp nhanh chuỗi từ nhà môi giới/sàn giao dịch (NSE, Zerodha Kite, v.v.) theo bộ hẹn giờ. Cần thực hiện:
Loại bỏ trùng lặp đa địa điểm (cross-venue dedup) (Euronext một sổ lệnh).
Độ trễ ảnh chụp nhanh phải nhỏ hơn cửa sổ quyết định.
Không cung cấp cho mô hình giá giữa (mid quote) đã lỗi thời do khoảng trống nguồn cấp dữ liệu.
2. Feature Engine
Chạy build_features() trên ảnh chụp nhanh thô: mid, spread_pct, moneyness, iv_skew, pcr, theta_per_delta. Đây là nơi dữ liệu xấu bị loại bỏ — nếu không có OI hoặc là báo giá CFD thì loại bỏ.
3. Predictor
HistGradientBoostingClassifier đã được huấn luyện cung cấp prob_up cho mỗi mức giá thực hiện. Không trạng thái khi suy luận — tải một lần, dự đoán nhiều lần.
4. Filter (hầu hết bỏ qua)
Bộ dự đoán không phải là giao dịch. Bộ lọc là lớp quy tắc cứng:
def filter(prob_up, greeks, vol_z, max_capital):
if not (0.58 <= prob_up <= 0.80):
return {}
if greeks["dte"] <= 1:
return {}
if abs(greeks["vega"]) > 8.0:
return {}
if vol_z > 2.0:
max_capital *= 0.5
size = (max_capital * 0.01) / max(greeks["theta"], 1e-9)
return {"action": "paper_entry", "size": round(size, 2)}
Bộ lọc bảo vệ hệ thống khỏi chế độ chưa từng thấy trong quá trình huấn luyện.
5. Executor
Tạo lệnh có kích thước từ tín hiệu cho phép. Đầu tiên là lệnh trên giấy (ghi lại mọi lần khớp lệnh), sau đó là lệnh thực sau khi nhà môi giới xem xét. Không bao giờ bỏ qua giai đoạn 4.
Đây là phân chia năm giai đoạn cho thấy phần mô hình 1500 từ không phải là sản phẩm hoàn chỉnh — công cụ dữ liệu (data engine) và bộ lọc (filter) cũng quan trọng như mô hình.
CÁC CÂU HỎI THƯỜNG GẶP
Q1. Trên điện thoại thì sao?
HistGradientBoosting — không cần cài đặt thêm, độ chính xác khá tốt.
Q2. Bao nhiêu mẫu?
100-1000 hàng là đủ; AUC ổn định ở 1000+ hàng.
Q3. Tại sao không phải mạng nơ-ron?
Mạng nơ-ron kém hiệu quả hơn trên dữ liệu quyền chọn dạng bảng + khó hiểu.
Q4. AUC tốt?
0.55-0.60 vẫn có thể giao dịch được với giới hạn rủi ro; 0.65+ là mạnh; 0.75+ nghi ngờ rò rỉ trên thực tế.
Q5. Ngăn chặn quá khớp?
Dừng sớm (early stop) + depth=4 + lr=0.05 + phân tách chuỗi thời gian.
Nguồn tin: Dev.to Machine Learning — Tác giả: shakti tiwari. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.