# 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/)