Skip to content

...and the Cross-Section of Expected Returns — Đa Kiểm Định và Backtest Overfitting

Tác giả: Campbell R. Harvey, Yan Liu, Heqing Zhu (2016) Nguồn: Review of Financial Studies, Vol. 29, No. 1 Tag: mới:2026-05-16 #multiple-testing #p-hacking #backtest-overfitting

Nội dung chính (Core Concept)

Harvey, Liu & Zhu khảo sát 316 nhân tố đã được công bố trong các tạp chí tài chính top từ 1967-2014. Vấn đề: mỗi factor được "phát hiện" bằng cách hồi quy returns trên hàng trăm biến, chỉ giữ lại biến có t-stat > 2. Khi nghĩ cộng dồn — số lượng "false positives" cực kỳ lớn do hiện tượng multiple hypothesis testing (data dredging / p-hacking).

Tác giả áp dụng 3 phương pháp hiệu chỉnh: Bonferroni, Holm, và Benjamini-Hochberg (BHY) False Discovery Rate. Kết luận:

  • Ngưỡng cũ t > 1.96 (p < 0.05) đã hết giá trị trong tài chính do explosion của factor zoo.
  • Để công nhận một nhân tố mới là thật, cần t-stat > 3.0 (sau Bonferroni) hoặc t > 2.78 (Benjamini-Hochberg).
  • Nhiều nhân tố nổi tiếng như profitability, investment, liquidity vẫn pass; nhưng phần lớn 316 nhân tố là false discoveries.

Ý tưởng chính cho giao dịch (Key Trading Insight)

Đây là bài học sống còn cho mọi quant researcher: nếu bạn thử 100 strategy trên cùng dataset, kỳ vọng ~5 strategy có t > 2 thuần do noise. Để chiến lược thực sự có alpha, phải apply Deflated Sharpe Ratio (López de Prado, 2014) hoặc t-threshold cao hơn dựa trên số lượng phép thử.

Một cách thực hành: nếu bạn backtest N chiến lược biến thể (vary lookback, vary threshold, vary symbol), thì để α = 0.05 thực sự, t-stat phải vượt t_adj ≈ Φ⁻¹(1 - 0.05/(2N)). Với N = 100, t_adj ≈ 3.29. Một Sharpe 1.5 trên 5 năm có t ≈ 1.5 × √5 ≈ 3.35 — vừa đủ pass.

Ứng dụng trên VN30F

Trên VN30F single-asset, không gian biến thể rất nhỏ (chỉ vài chục features, vài lookback), nhưng vẫn cần cảnh giác. Quy tắc thực hành:

  1. Pre-register hypotheses: trước khi backtest, viết ra giả thuyết rõ ràng (vd. "OFI > 2σ → mean reversion 15min"). Không tweak threshold sau khi nhìn kết quả.
  2. Holdout: dành 20-30% data cuối làm out-of-sample, chỉ chạm vào khi đã hoàn thiện chiến lược.
  3. Deflated Sharpe: nếu thử N parameter combinations, áp dụng công thức DSR để adjust Sharpe quan sát.
  4. Walk-forward: trên VN30F 4 năm dữ liệu, dùng 12 tháng training + 3 tháng test, rolling.

Code minh họa (Python)

python
import numpy as np
from scipy import stats

def deflated_sharpe_ratio(observed_sharpe, n_trials, n_obs, skew=0, kurt=3):
    """
    López de Prado (2014). Deflated Sharpe Ratio.
    observed_sharpe: Sharpe quan sát (annualized) -- chuyển sang per-period nếu cần
    n_trials: số strategy đã thử (multiple testing)
    n_obs: số observations (vd. số tháng)
    """
    # Expected max Sharpe under null (no skill) given n_trials
    euler_mascheroni = 0.5772156649
    max_z = (1 - euler_mascheroni) * stats.norm.ppf(1 - 1.0 / n_trials) + \
            euler_mascheroni * stats.norm.ppf(1 - 1.0 / (n_trials * np.e))
    sr0 = max_z  # expected max sharpe under null

    # Adjusted variance of Sharpe (Lo 2002, Mertens 2002)
    var_sr = (1 - skew * observed_sharpe + (kurt - 1) / 4 * observed_sharpe ** 2) / (n_obs - 1)

    # DSR: probability that true SR > 0 given observation
    dsr = stats.norm.cdf((observed_sharpe - sr0) / np.sqrt(var_sr))
    return {'sr0': sr0, 'dsr': dsr, 'pass_5pct': dsr > 0.95}

# Ví dụ: chiến lược backtest có SR=1.8, đã thử 50 variants, 60 tháng
result = deflated_sharpe_ratio(1.8, n_trials=50, n_obs=60)
print(result)
# Nếu DSR < 0.95, không phải alpha thật mà có thể là chance

Tài liệu tham khảo

  • Harvey, C. R., Liu, Y., & Zhu, H. (2016). ...and the cross-section of expected returns. Review of Financial Studies, 29(1), 5-68.
  • López de Prado, M. (2018). Advances in Financial Machine Learning, Chapter 14.

Powered by dautu.tech