# Phương pháp Bootstrap (Bootstrap Method)


Trong thống kê và học máy, việc đánh giá độ tin cậy của một ước lượng (như trung bình, phương sai, hay các thước đo rủi ro phức tạp) thường đòi hỏi chúng ta phải biết về phân phối của dữ liệu. Nhưng trong thực tế, chúng ta hiếm khi biết được phân phối thật này. **Phương pháp Bootstrap** ra đời như một vị cứu tinh, cho phép chúng ta ước lượng độ bất định này mà không cần dựa vào các giả định phân phối khắt khe. Bài viết này sẽ giúp bạn hiểu rõ trực giác, cách thức hoạt động của Bootstrap, và ứng dụng của nó trong phân tích chuỗi thời gian tài chính.

## 1. Giới thiệu

Được giới thiệu lần đầu vào năm 1979 bởi nhà thống kê **Bradley Efron**, phương pháp Bootstrap (hay còn gọi là phương pháp lấy mẫu lại - *resampling*) là một kỹ thuật phi tham số (non-parametric) mạnh mẽ. 

Cái tên "Bootstrap" xuất phát từ thành ngữ tiếng Anh *"to pull oneself up by one's bootstraps"*, ám chỉ việc tự lực cánh sinh thực hiện một điều tưởng chừng như vô lý (tự nhấc bổng mình lên bằng dây giày của chính mình). Trong thống kê, ý nghĩa của nó là: làm thế nào để ước lượng phân phối chọn mẫu (sampling distribution) của một đại lượng thống kê chỉ từ một tập dữ liệu ban đầu duy nhất?

Vấn đề cốt lõi mà Bootstrap giải quyết là ước lượng sự biến thiên (như sai số chuẩn, khoảng tin cậy) của một tham số khi không có công thức giải tích sẵn có, hoặc khi các giả định phân phối (như giả định dữ liệu tuân theo phân phối chuẩn) bị vi phạm trầm trọng. Thay vì dựa vào các giả định toán học, Bootstrap dựa vào sức mạnh tính toán của máy tính để mô phỏng lại quá trình chọn mẫu.

## 2. Ý tưởng cốt lõi

Trực giác của Bootstrap gói gọn trong triết lý: **"Hãy để dữ liệu tự lên tiếng"**. 

Giả sử chúng ta có một mẫu dữ liệu quan sát được từ một quần thể (population) chưa biết. Trong thống kê cổ điển, chúng ta thường giả định quần thể có một hình dạng phân phối nào đó (ví dụ: phân phối Chuẩn) và dùng mẫu để ước lượng tham số của phân phối đó. 

Bootstrap lại có một cách tiếp cận khác: nó sử dụng chính **phân phối thực nghiệm** (empirical distribution) của mẫu dữ liệu hiện tại đóng vai trò như một "quần thể thế thân" (stand-in) cho quần thể thật chưa biết. Nguyên lý này được gọi là **nguyên lý cắm vào (plug-in principle)**. 

Bằng cách **lấy mẫu lại có hoàn lại (resampling with replacement)** từ tập dữ liệu ban đầu, chúng ta có thể tạo ra vô số các "mẫu giả" (bootstrap samples). Từ các mẫu giả này, chúng ta tính toán lại đại lượng thống kê đang quan tâm, từ đó phác hoạ được bức tranh về sự biến thiên của nó.

## 3. IID Bootstrap

Phiên bản cơ bản nhất của Bootstrap là **IID Bootstrap** (Independent and Identically Distributed Bootstrap), được sử dụng khi các quan sát trong mẫu độc lập và có cùng phân phối.

**Thuật toán từng bước:**

Giả sử bạn có một mẫu ban đầu gồm $n$ quan sát: $X = \{x_1, x_2, \dots, x_n\}$. Bạn muốn ước lượng một đại lượng thống kê $\theta$ (ví dụ: số trung bình, trung vị).

1. **Lấy mẫu lại**: Rút ngẫu nhiên có hoàn lại $n$ giá trị từ tập $X$. Kết quả thu được là một mẫu bootstrap $X^* = \{x^*_1, x^*_2, \dots, x^*_n\}$. Vì lấy mẫu có hoàn lại, một số phần tử trong $X$ có thể xuất hiện nhiều lần trong $X^*$, trong khi một số khác có thể không xuất hiện.
2. **Tính toán đại lượng thống kê**: Trên mẫu $X^*$, tính toán đại lượng thống kê $\theta^*$.
3. **Lặp lại**: Lặp lại bước 1 và 2 với số lần lặp $B$ rất lớn (thường $B \ge 1000$). Ta thu được một tập hợp các giá trị $\theta^*_1, \theta^*_2, \dots, \theta^*_B$.
4. **Phân tích kết quả**: Phân phối của các giá trị $\theta^*$ này chính là phân phối Bootstrap của đại lượng thống kê. Từ đây, ta có thể tính phương sai, sai số chuẩn hoặc khoảng tin cậy.

**Ví dụ cụ thể**: Xây dựng khoảng tin cậy cho lợi suất trung bình.
Nếu ta tính được 1000 giá trị trung bình từ 1000 mẫu bootstrap, ta sắp xếp 1000 giá trị này từ nhỏ đến lớn. Khoảng tin cậy 95% có thể được xác định bằng cách lấy giá trị ở phân vị thứ 2.5% và 97.5%. Đơn giản và trực quan!

## 4. Moving-Block Bootstrap

IID Bootstrap rất tuyệt vời, nhưng nó sẽ phá sản hoàn toàn nếu áp dụng cho dữ liệu chuỗi thời gian (time series). Lý do là vì dữ liệu chuỗi thời gian thường có **sự phụ thuộc chuỗi (serial dependence)** và **hiện tượng cụm biến động (volatility clustering)**. Nếu ta lấy mẫu lại từng quan sát một cách độc lập, ta sẽ phá vỡ hoàn toàn cấu trúc tự tương quan (autocorrelation) của dữ liệu.

Để giải quyết vấn đề này, ta sử dụng **Moving-Block Bootstrap (Bootstrap khối động)**. Thay vì bốc ngẫu nhiên từng điểm dữ liệu, ta bốc ngẫu nhiên từng *khối* (block) dữ liệu liên tiếp nhau.

**Thuật toán Block Bootstrap:**

1. **Chọn độ dài khối $\ell$**: Khối dữ liệu cần đủ dài để bao hàm được sự phụ thuộc chuỗi, nhưng cũng phải đủ ngắn để có nhiều khối khác nhau. Một nguyên tắc kinh nghiệm (rule of thumb) phổ biến là chọn độ dài khối theo công thức: $\ell = \min\left(20, \text{round}(n^{1/3})\right)$, với $n$ là cỡ mẫu.
2. **Tạo các khối**: Từ chuỗi $n$ quan sát, ta trích xuất tất cả các khối có độ dài $\ell$ liền kề nhau. Sẽ có $n - \ell + 1$ khối có thể có (do chúng chồng lấp lên nhau - moving blocks).
3. **Rút khối ngẫu nhiên**: Chọn ngẫu nhiên có hoàn lại các khối cho đến khi tổng số phần tử bằng (hoặc vừa vượt quá) cỡ mẫu $n$.
4. **Ghép nối**: Ghép (concatenate) các khối đã rút lại với nhau để tạo thành một chuỗi mẫu bootstrap mới. Cắt bỏ các phần tử dư thừa nếu chuỗi dài hơn $n$.
5. **Tính toán và lặp lại**: Tương tự như IID, tính toán đại lượng thống kê trên chuỗi mẫu mới và lặp lại $B$ lần.

## 5. Bootstrap trong ước lượng rủi ro tài chính

Trong tài chính, đo lường rủi ro giảm giá (downside risk) như **VaR (Value at Risk)** hay **ES (Expected Shortfall)** là cực kỳ quan trọng. 

Phương pháp Bootstrap tỏ ra cực kỳ hữu ích tại đây nhờ đặc tính phi tham số: nó **không đòi hỏi giả định phân phối**. Lợi suất chứng khoán thực tế thường có "đuôi dày" (fat tails) và lệch (skewed). Nếu giả định chúng phân phối chuẩn, ta sẽ đánh giá thấp rủi ro một cách trầm trọng. Bootstrap giúp ta mô phỏng lại các đường sinh lời tương lai bằng cách lấy mẫu lại từ chính dữ liệu lợi suất lịch sử, giữ nguyên được đặc điểm đuôi dày tự nhiên của dữ liệu.

Đối với chuỗi lợi suất chứng khoán hàng ngày, kiểm định Ljung-Box (Ljung-Box test) thường cho thấy có sự tự tương quan đáng kể (đặc biệt là tự tương quan trong chuỗi lợi suất bình phương, biểu hiện của volatility clustering). Đây là minh chứng rõ ràng biện minh cho việc sử dụng Moving-Block Bootstrap thay vì IID Bootstrap, nhằm bảo tồn động lực học của rủi ro.

Tuy nhiên, mọi phương pháp đều có **sự đánh đổi (trade-off)**:
Ưu điểm lớn nhất của Bootstrap (tôn trọng dữ liệu lịch sử tuyệt đối) cũng chính là nhược điểm của nó. Bootstrap **không thể ngoại suy ra ngoài lịch sử quan sát được**. Nếu tập dữ liệu lịch sử của bạn chưa từng trải qua một cuộc khủng hoảng như Black Monday 1987 hay COVID-19 2020, Bootstrap sẽ không bao giờ dự báo được những cú sốc tồi tệ cỡ đó, khác với các phương pháp Monte Carlo tham số (có thể sinh ra các kịch bản cực đoan từ phần đuôi của phân phối toán học).

## 6. Ví dụ minh hoạ bằng Python

Dưới đây là một đoạn code Python ngắn gọn minh hoạ cả hai kỹ thuật trên bằng thư viện `numpy`.

```python
import numpy as np

# Tạo dữ liệu giả lập (ví dụ: lợi suất 500 ngày)
np.random.seed(42)
returns = np.random.normal(0.001, 0.02, 500)
n = len(returns)
B = 1000 # Số lần bootstrap

# --- 1. IID Bootstrap cho Khoảng tin cậy của lợi suất trung bình ---
boot_means = np.zeros(B)
for i in range(B):
    # Lấy mẫu có hoàn lại từng phần tử
    idx = np.random.randint(0, n, n)
    boot_sample = returns[idx]
    boot_means[i] = np.mean(boot_sample)

ci_lower, ci_upper = np.percentile(boot_means, [2.5, 97.5])
print(f"IID Bootstrap - 95% CI for Mean: [{ci_lower:.5f}, {ci_upper:.5f}]")

# --- 2. Moving-Block Bootstrap cho phân phối lợi suất tích luỹ 20 ngày ---
# Theo công thức: \ell = \min(20, \text{round}(n^{1/3}))
l = min(20, int(round(n**(1/3)))) 
num_blocks = int(np.ceil(20 / l)) # Số khối cần rút để được chuỗi 20 ngày

boot_cum_returns = np.zeros(B)
for i in range(B):
    boot_series = []
    for _ in range(num_blocks):
        # Chọn ngẫu nhiên vị trí bắt đầu của khối
        start_idx = np.random.randint(0, n - l + 1)
        block = returns[start_idx : start_idx + l]
        boot_series.extend(block)
    
    # Cắt cho đúng độ dài 20 ngày và tính lợi suất tích luỹ (đơn giản hoá bằng tổng)
    boot_path = np.array(boot_series[:20])
    boot_cum_returns[i] = np.sum(boot_path)

var_95 = np.percentile(boot_cum_returns, 5) # 5% VaR
print(f"Block Bootstrap - 95% VaR (20 days): {var_95:.4f}")
```

## 7. So sánh Bootstrap và Monte Carlo

Để kết luận, hãy xem qua bảng so sánh tóm tắt giữa Bootstrap và Mô phỏng Monte Carlo tham số - hai phương pháp thường được đặt lên bàn cân trong đo lường rủi ro:

| Tiêu chí | Bootstrap (Mô phỏng lịch sử) | Monte Carlo tham số |
| :--- | :--- | :--- |
| **Giả định phân phối** | Không cần (Phi tham số) | Bắt buộc (Chuẩn, Student-t, v.v.) |
| **Điểm mạnh** | Dễ triển khai, phản ánh đúng "đuôi dày" và sự lệch của dữ liệu thật. Không có sai số do chọn sai mô hình toán học. | Dễ dàng lập mô hình các rủi ro phức tạp (options pricing). Có thể ngoại suy các sự kiện cực đoan chưa từng xảy ra. |
| **Điểm yếu** | Bị giới hạn bởi dữ liệu lịch sử. Cần lượng lớn dữ liệu để chính xác. Khó thay đổi hoặc can thiệp các tham số cấu trúc. | Phụ thuộc nặng nề vào tính đúng đắn của mô hình. Dễ dẫn đến rủi ro mô hình (Model Risk). |
| **Khi nào nên dùng?** | Khi có sẵn lượng dữ liệu lịch sử lớn, đại diện tốt cho hiện tại và phân phối thực tế quá phức tạp. | Khi lịch sử quá ngắn, hoặc khi cần kiểm tra sức chịu đựng (Stress testing) với các kịch bản chưa từng có. |

## 8. Tổng kết

Phương pháp Bootstrap là một tư duy đột phá, chuyển gánh nặng từ suy luận toán học thuần tuý sang sức mạnh điện toán. Từ IID Bootstrap đơn giản cho các mẫu độc lập, đến Moving-Block Bootstrap để xử lý dữ liệu chuỗi thời gian như chứng khoán, Bootstrap mang lại một công cụ trực quan và mạnh mẽ để đo lường rủi ro (VaR/ES). Dù không thể dự đoán những "Thiên nga đen" chưa từng xuất hiện trong lịch sử, triết lý "để dữ liệu tự cất tiếng" của nó vẫn làm cho Bootstrap trở thành một mảnh ghép không thể thiếu trong bộ công cụ của các nhà phân tích định lượng.

