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