---
# System prepended metadata

title: 'Day 20: 從因子到信號—Boosting 驅動的多因子合成'

---

# Day 20: 從因子到信號—Boosting 驅動的多因子合成


## 目錄

1. [什麼是「多因子合成」？](#1-什麼是多因子合成)
2. [合成的難點在哪裡？](#2-合成的難點在哪裡)
3. [傳統方法一覽：從等權加總到線性回歸](#3-傳統方法一覽從等權加總到線性回歸)
4. [Boosting 登場：為什麼它特別適合因子合成？](#4-boosting-登場為什麼它特別適合因子合成)
5. [先備知識：決策樹與集成學習](#5-先備知識決策樹與集成學習)
6. [Boosting 的核心原理](#6-boosting-的核心原理)
7. [Boosting 的演進史](#7-boosting-的演進史)
8. [為什麼排序式合成（LTR）比回歸式更好？](#8-為什麼排序式合成ltr比回歸式更好)
9. [實戰注意事項](#9-實戰注意事項)
10. [總結與參考資料](#10-總結與參考資料)

---

## 1. 什麼是「多因子合成」？

### 從指標到單因子

進行預測時，通常不會只依賴單一資訊。例如，要判斷一個加密貨幣在下一個調倉週期的表現，可能需要同時參考多項**指標**（indicator）：

- 交易量變化率（流動性趨勢）
- 過去一週的動量（近期趨勢強度）
- 資金費率（多空情緒）
- 鏈上活躍地址數變化（鏈上基本面）
- 波動度（價格穩定性）

但「指標」不等於「因子」。指標是原始訊號，它的數值方向與未來收益率的關係可能是正向、反向、甚至非線性的。例如波動度高不一定代表表現好或壞。

**單因子**（single factor）是經過處理與驗證後的指標，必須滿足以下條件：

1. **方向性明確**：數值越大，預期下一期的截面收益率越大。如果原始指標是反向的（例如波動度越低越好），需要先取負號或做倒數轉換，使其符合「越大越好」的慣例。
2. **通過單因子檢定**：在正式納入因子庫之前，每個因子必須獨立通過統計檢驗，證明它確實具有預測能力。常見的檢定標準包括：
   - **IC 均值顯著**：因子值與下期收益率的 Rank IC（Spearman 相關係數）在回測期間的均值顯著異於零。
   - **IC-IR 門檻**：IC 均值 / IC 標準差（即因子的「夏普比率」）通常要求 > 0.5。
   - **分組單調性**：按因子值將截面分為 N 組（通常 5 或 10 組），各組的平均收益率應呈現單調遞增，且多空組（第 1 組 vs. 第 N 組）的收益差異顯著。
   - **衰減穩定性**：因子的預測力不應在短時間內急速消失。

只有通過上述檢定的指標，才能被稱為「單因子」，才有資格進入多因子合成的流程。

### 多因子合成

**多因子合成**的意思，就是：

> **把多個已通過單因子檢定的因子，組合成一個最終的「合成分數」，用來排序——分數高的做多、分數低的做空。**

直覺上，把所有因子加起來取平均即可。但實際操作遠比想像複雜。

---

## 2. 合成的難點在哪裡？

把因子直接等權加總，有三大問題：

### 問題一：因子預測力不均

不同因子的預測能力差異顯著。例如動量因子可能表現穩定，而某些鏈上指標幾乎沒有預測力。等權加總時，低品質因子會稀釋高品質因子的信號。

### 問題二：因子之間高度相關

假設因子庫中有 10 個價量因子（均由價格與成交量衍生）和 1 個鏈上因子（源自鏈上數據），等權加總的結果幾乎完全被價量因子主導——因為它們數量多且彼此高度相關，實際上承載的獨立資訊遠少於表面的 10:1 比例。

類比投票：10 個持相同意見的人投出 10 票，實質上只代表 1 種觀點，卻壓過了另一個持有獨立觀點的投票者。

### 問題三：因子之間有非線性交互

有些因子要「同時滿足特定條件」才有預測力。例如：

- 動量為正 **且** 交易量放大 → 強烈做多信號
- 動量為正 **但** 交易量萎縮 → 趨勢可能即將反轉

這種「A 和 B 要一起看」的關係叫做交互效應（interaction），簡單的加權合成做不到。

**這三個問題，就是多因子合成的核心挑戰。** 而 Boosting，恰好能同時解決這三個問題。

---

## 3. 傳統方法一覽：從等權加總到線性回歸

在進入 Boosting 之前，先回顧主流的因子合成方法。這些方法各有適用場景，但也存在明確的侷限。

### 3.1 等權合成

最簡單的方法：把所有因子標準化（讓它們量綱一致），然後取平均。

```
合成分數 = (因子1 + 因子2 + ... + 因子N) / N
```

- **優點**：簡單至極、不會 overfit（因為根本沒有模型）
- **缺點**：完全不處理因子好壞差異和相關性

通常作為 baseline（基準線），用以衡量更複雜方法的增量價值。

### 3.2 IC 加權

IC（Information Coefficient）衡量的是因子值與未來收益之間的排序相關性，反映因子的預測能力。

IC 加權的做法：看過去一段時間每個因子的平均 IC，IC 越高的因子權重越大。

```
w_i = 因子 i 的平均 IC
合成分數 = w_1 * 因子1 + w_2 * 因子2 + ...
```

- **優點**：直觀合理——預測力強的因子獲得更高權重
- **缺點**：未考慮因子間相關性；多個高度相關的因子仍會在權重上壓過單一獨立因子

### 3.3 IC-IR 加權

IC-IR = 平均 IC / IC 的標準差，相當於因子預測力的「夏普比率」。除了預測力的強度，還納入了**穩定性**的考量。IC 高但波動劇烈的因子，其權重會被壓低。

- **優點**：比 IC 加權多考慮了穩定性
- **缺點**：跟 IC 加權一樣——**不處理因子相關性**

### 3.4 線性回歸（LASSO / Ridge）

以因子矩陣作為自變量 X，未來收益率作為應變量 Y，透過回歸模型學習最優因子權重。

- **Ridge**：加 L2 正則化，把相關因子的係數壓小，但不會完全去掉
- **LASSO**：加 L1 正則化，不重要的因子係數直接壓到 0（自動篩選因子）

### 傳統方法匯總

| 方法 | 核心思想 | 處理因子相關性 | 捕捉非線性 |
|------|---------|:---:|:---:|
| 等權 | 全部平均 | 否 | 否 |
| IC 加權 | 依預測力分配權重 | 否 | 否 |
| IC-IR 加權 | 依預測力與穩定性分配權重 | 否 | 否 |
| Ridge | 讓數據決定權重 + 壓共線 | 部分 | 否 |
| LASSO | 讓數據決定權重 + 自動篩選 | 部分 | 否 |

可以注意到，**所有傳統方法在「捕捉非線性」欄位均為「否」**。這正是 Boosting 的核心價值所在。

---

## 4. Boosting 登場：為什麼它特別適合因子合成？

| 優勢 | 說明 |
|------|------|
| **自動處理因子相關性** | 樹的分裂機制中，若已選擇因子 A，則與 A 高度相關的因子 B 提供的增量資訊極少，模型傾向不再選取 B。這從結構上解決了因子冗餘問題 |
| **捕捉非線性交互** | 「動量為正 且 交易量放大」才構成有效信號——這類因子間的交互效應，樹模型可以天然捕捉 |
| **不需要標準化** | 樹模型以閾值比較（>= 或 <）進行分裂，對數據的絕對尺度不敏感，因子量綱不同亦無影響 |
| **可解釋性** | 通過 SHAP 值或 feature importance，可以知道每個因子貢獻了多少 |
| **現成的排序學習支持** | LightGBM 直接支持 LambdaRank——而因子合成的終極目標就是排序 |

**Boosting 是目前多因子合成場景中最主流、最強大的方法之一。**

接下來先介紹必要的先備知識（決策樹與集成學習），再深入 Boosting 的核心原理。

---

## 5. 先備知識：決策樹與集成學習

### 5.1 什麼是決策樹？

決策樹（Decision Tree）是由一連串的「是 / 否」判斷所構成的分支結構，最終導向一個預測結論。日常生活中的決策流程就是一種決策樹：

```
今天要不要帶傘？

    天氣預報說會下雨嗎？
    ├── 是 → 帶傘
    └── 否 → 看看窗外有雲嗎？
              ├── 是 → 帶傘
              └── 否 → 不帶
```

應用在因子合成場景中，假設目標是預測加密貨幣的截面表現：

```
動量 > 0 嗎？
├── 是 → 交易量變化率 > 50% 嗎？
│         ├── 是 → 預測：表現好（分數 0.8）
│         └── 否 → 預測：普通（分數 0.4）
└── 否 → 資金費率 < 0 嗎？
          ├── 是 → 預測：可能反彈（分數 0.5）
          └── 否 → 預測：表現差（分數 0.2）
```

### 決策樹的核心動作：分裂

決策樹的訓練過程，就是自動搜尋「最佳切分點」——選擇哪個因子、以什麼閾值進行分裂，能讓左右子節點的目標分布差異最大。

例如輸入 200 個加密貨幣的因子數據，演算法會遍歷每個因子的每個候選切分值，評估哪種分法能讓「表現好」和「表現差」的幣種區隔度最高。

### 決策樹的問題

單棵決策樹有兩個致命缺陷：

1. **太簡單就學不好**（underfitting）：如果樹很淺（只問 2-3 個問題），它抓不住複雜的規律。
2. **太複雜就記太多**（overfitting）：如果樹很深，它會把訓練數據的噪音都背下來，遇到新數據就失準。

這就是為什麼我們需要 Boosting。

### 5.2 集成學習：三個臭皮匠勝過一個諸葛亮

一個模型可能犯錯，但如果我們訓練很多個模型，讓它們「投票」或「取平均」，結果通常比單一模型好。這就是**集成學習**（Ensemble Learning）。

集成學習有兩大流派：

| 流派 | 核心思想 | 代表方法 |
|------|---------|---------|
| **Bagging** | 訓練多個獨立的模型，最後取平均 | Random Forest（隨機森林） |
| **Boosting** | 訓練多個模型，每個模型專攻前人犯的錯 | AdaBoost、GBDT、XGBoost、LightGBM |

### Bagging vs. Boosting 的直覺

想像你在準備一場考試：

- **Bagging**：找 10 個同學，每個人各自讀不同的章節，考試時大家各寫各的答案，最後取平均分數。每個人可能有盲點，但整體來看會比較穩定。
- **Boosting**：自己先寫一遍考卷，看看錯哪些題。然後專門針對錯的題目再讀一遍、再寫一遍。重複這個過程，每一輪都專攻上一輪的弱點。

Boosting 的哲學是：**從錯誤中學習，一輪比一輪強**。

---

## 6. Boosting 的核心原理

### 一句話版本

> Boosting 就是「一群弱學習器（weak learner），按順序，每一個都專門修正前面所有人的錯誤，最後疊加成一個強學習器（strong learner）」。

### 什麼是弱學習器？

弱學習器是一個「略優於隨機猜測」的模型。在 Boosting 中，通常就是一棵很淺的決策樹（深度 2~5 層），稱為 **樹樁**（stump）。

Boosting 的核心在於「組合」——每棵小樹只捕捉一小部分規律，但數百棵累加後可以建構出極為複雜的映射。同時，由於每棵樹本身結構簡單，不容易 overfit。

### Boosting 的運作流程

以多因子合成為例，假設輸入 100 個加密貨幣的因子數據，目標是預測下期收益率。每棵樹的輸出不是「選或不選」，而是一個**連續數值**——葉節點存的是落入該節點的所有樣本的目標值（或殘差）平均。

```
第 1 棵樹：
  動量 > 0 嗎？
  ├── 是（60 個幣）→ 這 60 個幣的平均收益率 = +0.03  ← 葉節點值
  └── 否（40 個幣）→ 這 40 個幣的平均收益率 = -0.02  ← 葉節點值

→ BTC（動量 > 0）從這棵樹得到 +0.03
→ ETH（動量 < 0）從這棵樹得到 -0.02

計算殘差（還沒學到的部分）：
  BTC 的殘差 = 真實收益 - 0.03
  ETH 的殘差 = 真實收益 - (-0.02)

第 2 棵樹（目標變成殘差）：
  交易量變化 > 50% 嗎？
  ├── 是（30 個幣）→ 殘差平均 = +0.01  ← 葉節點值
  └── 否（70 個幣）→ 殘差平均 = -0.005 ← 葉節點值

... 重複 100 輪，每一輪都學習上一輪剩餘的殘差 ...
```

每棵樹自行選擇最優的切分因子——Boosting 在這個過程中**自動完成了因子合成**，模型自行決定每個因子的相對重要性和交互方式。

### 學習率與最終輸出

實務上不會讓每棵樹全力修正殘差，而是乘以一個很小的**學習率**（learning rate，通常 0.01 ~ 0.1），避免過度擬合噪音：

```
BTC 的合成分數 = 0.1 × (+0.03)     ← 第 1 棵樹（動量 > 0）
               + 0.1 × (+0.01)     ← 第 2 棵樹（量 > 50%）
               + 0.1 × (...)       ← 第 3 棵樹
               + ...
              = 0.047（連續數值）
```

所有幣都會得到一個這樣的分數，然後**按分數排序**——分數高的做多、分數低的做空。這就是 Boosting 產出的「合成因子」。

小步修正、逐輪累積，比每一步都全力修正更穩健。

### 數學表述

假設我們要預測的目標值是 $y$ ，第 $t$ 輪之後的預測值是 $F_t(x)$ ：

$$F_0(x) = \text{初始值（通常是 y 的平均值）}$$

$$F_t(x) = F_{t-1}(x) + \eta \cdot h_t(x)$$

其中：
- $h_t(x)$ 是第 $t$ 棵小樹，它學的目標是殘差 $r_t = y - F_{t-1}(x)$
- $\eta$ 是學習率（learning rate）

就這麼簡單。每一輪加一棵小樹，目標是縮小殘差，最後全部加起來。

---

## 7. Boosting 的演進史

Boosting 方法經歷了 20 多年的演進。以下按時間線介紹每一代的核心改進。

### 7.1 AdaBoost（1995 年）

**發明者**：Yoav Freund 和 Robert Schapire

**核心想法**：透過「調整樣本權重」實現迭代改進。上一輪預測錯誤的樣本，在下一輪訓練中被賦予更高權重，迫使新的學習器聚焦於困難樣本。

```
運作方式：
1. 一開始，所有樣本權重相同（1/N）
2. 訓練一個弱學習器
3. 計算錯誤率
4. 答錯的樣本 → 權重加大
   答對的樣本 → 權重減小
5. 用新權重訓練下一個弱學習器
6. 重複
7. 最終預測 = 所有弱學習器的加權投票
```

**歷史意義**：第一個實用的 Boosting 算法。證明了「弱學習器可以被提升為強學習器」這個理論。

**局限**：只適合分類問題；對噪音和異常值非常敏感（因為會不斷加大錯誤樣本的權重，如果那些樣本本身就是噪音，模型會被帶偏）。

---

### 7.2 Gradient Boosting / GBDT（2001 年）

**發明者**：Jerome Friedman

**核心革新**：把「修正上一輪的錯誤」用更通用的數學框架來描述——**梯度下降**。

AdaBoost 是通過調整樣本權重來修正錯誤。Gradient Boosting 更直接——每一輪直接學習「殘差」（也就是損失函數對當前預測值的負梯度）。

```
對比：
AdaBoost：「提高上一輪錯誤樣本的權重，讓下一輪更關注它」
GBDT：   「計算上一輪的殘差，讓下一輪直接學習這個差距」
```

**為什麼重要？**

1. **通用性**：AdaBoost 只能用特定的損失函數，GBDT 可以用任何可微分的損失函數——MSE、MAE、交叉熵、甚至排序指標（後來的 LambdaRank）。
2. **可以做回歸**：不再只限於分類問題。
3. **更穩健**：可以通過選擇對異常值不敏感的損失函數（例如 Huber Loss）來提高穩健性。

**這一步的意義**：GBDT 是後來所有現代 Boosting 框架（XGBoost、LightGBM、CatBoost）的理論基礎。

---

### 7.3 XGBoost（2014 年）

**發明者**：陳天奇（Tianqi Chen）

**核心革新**：在 GBDT 基礎上做了大量工程優化和正則化改進。

| 改進面向 | 具體作法 |
|---------|---------|
| **正則化** | 在目標函數中加入樹的複雜度懲罰（葉節點數量、葉節點數值的 L2 正則化），大幅減少 overfit |
| **二階梯度** | 不只用一階梯度（殘差），還用二階梯度（Hessian），讓每一步的更新更精確 |
| **缺失值處理** | 自動學習缺失值應該走左分支還是右分支 |
| **工程優化** | 並行化分裂點搜尋、cache-aware 存取、核外計算支持大數據 |

**為什麼爆紅**：2014-2016 年間，XGBoost 在 Kaggle 競賽中幾乎統治了所有表格數據（tabular data）的比賽。它讓人們意識到——在結構化數據上，樹模型比深度學習更強。

---

### 7.4 LightGBM（2017 年）

**發明者**：微軟研究院（Ke et al.）

**核心革新**：解決 XGBoost 在超大數據集上太慢的問題。

| 改進面向 | XGBoost 做法 | LightGBM 做法 |
|---------|-------------|--------------|
| **樹的生長策略** | Level-wise（按層生長，每層所有葉節點都分裂） | Leaf-wise（只分裂增益最大的那個葉節點）→ 更快收斂 |
| **分裂點搜尋** | 遍歷所有可能的分裂值 | Histogram-based（先把特徵值分到 256 個桶）→ 快很多 |
| **數據採樣** | 全量數據 | GOSS（梯度大的樣本全保留，梯度小的隨機採樣）→ 同等精度下快 5-10 倍 |
| **特徵捆綁** | 無 | EFB（互斥特徵合併）→ 減少稀疏數據的計算量 |

**實戰地位**：目前量化投資和大部分工業場景中，LightGBM 是最主流的 Boosting 框架。它比 XGBoost 快 5-10 倍，精度相當或更好。

**對因子合成的關鍵優勢**：LightGBM 原生支持 **Learning to Rank**（LambdaRank），可直接優化排序品質——而因子合成的終極目標正是排序。

---

### 7.5 CatBoost（2017 年）

**發明者**：Yandex（俄羅斯搜索引擎公司）

**核心革新**：

| 改進面向 | 說明 |
|---------|------|
| **類別特徵** | 原生支持類別型特徵（如「行業=科技」、「交易所=NYSE」），不需要手動做 one-hot encoding |
| **Ordered Boosting** | 用一種類似時序交叉驗證的方式訓練，減少 target leakage（目標值洩漏） |
| **對稱樹** | 每一層用相同的分裂條件，樹的結構更規整，推理更快 |

**適用場景**：當因子數據中包含大量類別型特徵（例如行業分類、交易所代碼）時，CatBoost 的優勢較為顯著。

---

### 演進總結

```
1995  AdaBoost        「調整樣本權重，專攻難的」
  |
  |   核心突破：用梯度下降取代權重調整，通用化
  v
2001  GBDT            「學習殘差（負梯度）」
  |
  |   核心突破：工程優化 + 正則化，工業級可用
  v
2014  XGBoost         「二階梯度 + 正則化 + 並行計算」
  |
  |   核心突破：速度飛躍，超大數據集可用
  v
2017  LightGBM        「Leaf-wise + Histogram + GOSS」
  |   CatBoost        「類別特徵 + Ordered Boosting」
  v
現在  LightGBM 是多因子合成場景的首選
```

---

## 8. 為什麼排序式合成（LTR）比回歸式更好？

實戰中應使用 LightGBM 等成熟框架進行因子合成。使用 Boosting 做因子合成有兩種主要方式：

- **回歸式合成**：用因子預測未來收益率（`objective: regression`），預測值即為合成分數。
- **排序式合成（LTR）**：使用 LambdaRank（`objective: lambdarank`），直接優化截面排序品質（NDCG）。

兩者的關鍵差異如下：

| | 回歸 (MSE Loss) | LTR (LambdaRank) |
|---|---|---|
| 優化目標 | 最小化預測值和真實值的差距 | 最大化排序正確性（NDCG） |
| 對異常值 | 敏感（一個暴漲的幣種會主導 loss） | 穩健（只在乎相對順序） |
| 信噪比 | 低（收益率絕對值噪音大） | 高（排名的信噪比 > 絕對值的信噪比） |
| 與目標對齊 | 間接（預測準 → 排序準） | 直接（排序準 → 選幣準） |
| 市場中性適配 | 需要精確收益率來估算部位大小 | 天然適配——市場中性策略只要排序正確即可獲利（做多排前面、做空排後面），無需精確預測絕對收益率 |

因子合成的最終目標是「正確排序」而非「精確預測絕對收益率」。特別是在市場中性（market-neutral）策略中，組合的收益來源是截面排序的正確性：只要排序對了就能賺錢，至於賺多少則取決於截面離散度。LTR 直接對齊這個目標。

---

## 9. 實戰注意事項

### 9.1 Boosting 做因子合成的常見陷阱

| 注意事項 | 說明 | 解決方案 |
|---------|------|---------| 
| **Overfitting** | Boosting 很容易記住訓練數據的噪音，特別是加密貨幣市場信噪比低 | 控制 `max_depth`（3-5）、`num_leaves`（8-32）、`learning_rate`（0.01-0.05），並且用交叉驗證（但必須是時序 CV，不能隨機切分！） |
| **時序洩漏** | 不能用未來數據訓練！隨機切分 train/test 會造成 look-ahead bias | 必須用 **時序分割**：訓練集的最後日期 < 測試集的第一個日期 |
| **前處理仍然重要** | 雖然樹模型不需要標準化，但截面中性化等前處理仍然會提升效果 | 在輸入 Boosting 之前，先對因子做截面中性化 |
| **再訓練頻率** | crypto 市場 regime 變化快，模型需要定期更新 | 建議每週或每月 retrain，且用 expanding window 或滾動 window |

### 9.2 完整的多因子 Boosting 合成工作流程

```
1. 因子準備
   ├── 收集原始因子（價量、鏈上數據、衍生品指標）
   ├── 缺失值處理（樹模型可自動處理，但先清理更好）
   └── 截面中性化（回歸掉市值等控制變量）

2. 數據組織
   ├── 按時間排序
   ├── 構建目標變量（下期收益率）
   └── 如果用 LTR：構建 group（每個截面 = 一個 group）

3. 模型訓練
   ├── 時序交叉驗證（Purged Time-Series CV）
   ├── 超參數調優（Optuna 或 GridSearch）
   └── 訓練最終模型

4. 評估
   ├── Rank IC（Spearman 相關係數）
   ├── NDCG（排序品質）
   └── 分組回測（用預測結果做多空組合，看績效）

5. 上線推理
   ├── 每日用最新因子數據做預測
   ├── 輸出排序分數作為合成因子
   └── 定期 retrain

6. 監控
   ├── 追蹤 Rank IC 是否衰退
   ├── 追蹤 feature importance 的變化
   └── 如果衰退明顯 → 觸發 retrain
```

### 9.3 與傳統方法的對比總結

| 方法 | 處理因子相關性 | 捕捉非線性 | Overfit 風險 | 可解釋性 | 實戰主流度 |
|------|:---:|:---:|:---:|:---:|:---:|
| 等權 | 否 | 否 | 無 | 高 | 低 |
| IC-IR 加權 | 否 | 否 | 低 | 高 | 中高 |
| 嶺回歸 | 部分 | 否 | 中低 | 高 | 高 |
| LightGBM 回歸 | 是 | 是 | 高 | 中 (SHAP) | 高 |
| LightGBM LTR | 是 | 是 | 高 | 中 (SHAP) | 非常高 |
| Stacking | 取決子模型 | 取決子模型 | 中 | 中 | 高 |

---

## 10. 總結與參考資料

### 一句話總結

> 多因子合成的核心問題是「如何將多個因子整合為一個排序」。Boosting 透過一群小樹按順序學習殘差，自動處理了因子相關性和非線性交互，是目前最主流的解法。

### 這篇文章學到了什麼？

1. **多因子合成**的本質是把多個因子組合成一個排序分數。
2. **傳統方法**（等權、IC 加權、線性回歸）各有局限——不處理因子相關性或非線性。
3. **Boosting** 天然解決了因子冗餘和非線性交互的問題。
4. **演進史**：AdaBoost → GBDT → XGBoost → LightGBM / CatBoost。
5. **LightGBM LTR**（LambdaRank）直接優化排序品質，是因子合成的最佳實戰選擇。

### 參考資料

- Chen & Guestrin (2016). [XGBoost: A Scalable Tree Boosting System](https://arxiv.org/abs/1603.02754)
- Ke et al. (2017). [LightGBM: A Highly Efficient Gradient Boosting Decision Tree](https://papers.nips.cc/paper/2017/hash/6449f44a102fde848669bdd9eb6b76fa-Abstract.html)
- Burges (2010). [From RankNet to LambdaRank to LambdaMART: An Overview](https://www.microsoft.com/en-us/research/publication/from-ranknet-to-lambdarank-to-lambdamart-an-overview/)
- de Prado (2018). *Advances in Financial Machine Learning*, Wiley
- Lundberg & Lee (2017). [A Unified Approach to Interpreting Model Predictions](https://arxiv.org/abs/1705.07874)
- [LightGBM 官方文檔](https://lightgbm.readthedocs.io/)
