Dự báo lạm phát với nhiều biến (Lasso / Elastic Net)
Minh họa nhóm chính quy hóa: khi có rất nhiều biến dự báo vĩ mô (cung tiền, tỷ giá, giá dầu, lãi suất, độ trễ…), OLS dễ overfitting và đa cộng tuyến. Lasso/Elastic Net tự động chọn biến và co hệ số. Số liệu là minh họa.
Tóm tắt: dùng Lasso/Elastic Net để chọn tập biến dự báo lạm phát tốt nhất ngoài mẫu (out-of-sample).
Bước 1 — Ý tưởng
- Câu hỏi: biến vĩ mô nào thực sự hữu ích để dự báo lạm phát, và mô hình dự báo ngoài mẫu ra sao?
Bước 2 — Tổng quan tài liệu
Dự báo lạm phát, mô hình nhiều biến (data-rich forecasting), regularization.
Bước 3 — Thu thập dữ liệu
Chuỗi tháng/quý: cpi (lạm phát), và 20–50 biến ứng viên (m2, er, oil, rate, sản lượng, kỳ vọng, độ tr ễ…) từ EcoData/World Bank/FRED.
Bước 4 — Mô hình hóa
Chọn họ Hồi quy chính quy hóa → Lasso (hoặc Elastic Net khi biến tương quan nhóm); chuẩn hóa biến; chọn bằng cross-validation.
Kết quả minh họa (định dạng — không phải kết quả thực):
| OLS (mọi biến) | Lasso | |
|---|---|---|
| Số biến khác 0 | 45 | 8 |
| RMSE ngoài mẫu | 1.00 (chuẩn hóa) | 0.78 |
| Biến được giữ | — | m2_lag, oil, er, rate… |
Diễn giải mẫu: Lasso giữ lại 8/45 biến và giảm RMSE ngoài mẫu so với OLS đầy đủ ⇒ mô hình thưa, dự báo tốt hơn, dễ diễn giải.
Mã tái lập:
- Stata
- R
- Python
* === Dự báo lạm phát — Lasso ===
* Chọn lambda bằng cross-validation
lasso linear inflation x1-x15, selection(cv)
* Xem hệ số biến được chọn / bị phạt
lassocoef, display(coef, penalized)
* Dự báo ngoài mẫu
predict inflation_hat, xb
# === Dự báo lạm phát — Lasso ===
library(glmnet)
X_train <- as.matrix(train[, vars])
y_train <- train$inflation
X_test <- as.matrix(test[, vars])
# Lasso: alpha = 1, chọn lambda bằng CV
cv_fit <- cv.glmnet(X_train, y_train, alpha = 1)
# Dự báo ngoài mẫu
pred <- predict(cv_fit, X_test, s = "lambda.min")
cat("RMSE ngoài mẫu:", sqrt(mean((test$inflation - pred)^2)), "\n")
import numpy as np
from sklearn.linear_model import LassoCV
from sklearn.metrics import mean_squared_error
# === Dự báo lạm phát — Lasso ===
model = LassoCV(cv=10, random_state=42)
model.fit(X_train, y_train)
# Biến được chọn (hệ số khác 0)
selected = np.where(model.coef_ != 0)[0]
print(f"Số biến được chọn: {len(selected)}")
print(f"Biến: {[vars[i] for i in selected]}")
# RMSE ngoài mẫu
pred = model.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, pred))
print(f"RMSE ngoài mẫu: {rmse:.4f}")
Bước 5 — Báo cáo
Xuất báo cáo + đường co theo + mã tái lập.
Regularization thiên về dự báo, không phải suy diễn nhân quả; hệ số đã bị co. Để suy diễn, kết hợp lý thuyết hoặc Adaptive Lasso.
Video minh họa
Video Tutorial: Hướng dẫn chạy Lasso dự báo lạm phát trong EcoLab
Xem thêm
- Lasso · Elastic Net · Ridge · Danh mục