
在商業現場中處理的資料,很多都不是只有乾淨的數值所構成。
例如,顧客資料可能包含「顧客區隔」「地區」「產業」「方案」,行銷資料可能包含「活動」「廣告管道」「流入來源」,問卷資料可能包含「回答類別」或「屬性資訊」等,這些都屬於所謂的類別型變數。
近年來,針對這類表格式商業資料建立高精度預測模型的方法,常常會使用 LightGBM 或 CatBoost 這類 boosting 系列的機器學習演算法。
Exploratory 也因應使用者需求,自 v14.5 起支援 LightGBM,並自 v15.5 起支援 CatBoost。
因此,這次要針對特別擅長處理包含大量類別變數資料的 CatBoost,以盡可能淺顯易懂的方式來說明。
CatBoost 是在以下這類包含變數的資料上,特別容易發揮效果的機器學習演算法。
本文將說明以下內容:
另外,如果你想更深入了解 LightGBM,也可以一併參考之前寫的這篇文章。
例如,假設我們想根據下列資料預測顧客流失(Churn)。
顧客區分地域方案產業月營收流失SMB西日本Starter零售120TRUEEnterprise東日本Business金融2500FALSEMid-Market關西ProSaaS850FALSE在這類資料中,
實務資料中,類別變數比數值變數更多也不罕見。
然而機器學習模型無法直接處理像這樣的字串:
Starter
Business
Pro
因此必須透過某種方式將類別變數轉換成數值。
這就是 CatBoost 的出發點。
隨機森林是由許多決策樹獨立建立,並將結果做平均的模型。

每一棵樹都會經過以下步驟:
最後的預測,只是透過這些結果的平均值(回歸)或多數決(分類)來決定。
其中一個重要概念是:透過使用許多彼此獨立的樹,與單一樹(決策樹)相比,可以降低變異並提升穩定性。
不過,每一棵樹彼此之間並不會相互學習。
因此,和較新的 boosting 系列模型相比,通常較不容易達到高精度。
XGBoost 使用的是 梯度提升(Gradient Boosting) 手法。它不是建立彼此獨立的樹,而是依序建立樹來修正前一棵樹所犯的錯誤。

首先建立第一棵樹並做預測,接著計算誤差(或損失)。如果是回歸問題,誤差就是實際值與預測值之間的差,也就是「殘差」。這就是所謂的「梯度(Gradient)」。
行實際值預測值梯度(殘差)11073215141389-1下一棵樹不是去預測實際值本身,而是去預測這個梯度值。因為梯度會告訴模型,為了降低損失,預測結果應該往哪個方向調整。
然後,把第一棵樹的預測值與第二棵樹的預測值組合起來,作為新的模型預測值。
新預測值 = 第一棵樹的預測結果 + 學習率 × 第二棵樹的預測結果
概念上,模型會像這樣逐步演進:
第一棵樹 → 最初的預測
第二棵樹 → 修正第一棵樹的預測錯誤
第三棵樹 → 修正目前為止所有樹的預測錯誤
第四棵樹 → 持續修正
透過這個流程,通常可以得到比隨機森林更高精度的模型。
不過,隨著資料集變大,這種 boosting 型學習方法,也就是一棵一棵依序建立大量樹的方式,會產生非常高的計算成本。
這時候就出現了 LightGBM。這個模型同樣是 XGBoost 一樣的 boosting 系列模型,但它是為了「更快、也能處理更大規模的資料」而開發的。
因此,在建立樹的時候,
等各種技巧都被用上了。
尤其在以下情況中,
它在效能上能發揮非常大的優勢,因此目前也是實務上最常使用的機器學習模型之一。
詳細內容請參考這篇文章。
接著登場的就是 CatBoost。這個模型和 XGBoost、LightGBM 一樣,也是 boosting 系列模型,因此基本的學習流程也和 XGBoost、LightGBM 相同。
但它最大的特點在於,它是為了「更好地處理類別變數」而設計的。
特別是在以下這類類別數非常多的變數,也就是高基數變數(high cardinality variables)上,效果特別明顯:
處理類別變數最常見的方法是 One-Hot Encoding。
例如,訂閱方案資料原本可能是這樣:
PlanStarterProBusiness透過把每個值展開成欄位,可以轉換成以下資料:
StarterProBusiness100010001當類別數很少時,這通常沒什麼問題。
但是如果:
就會需要建立大量欄位。
這樣會導致:
等問題。
在 CatBoost 出現之前,為了處理這類問題,常使用的是目標編碼(Target Encoding)。
例如,
方案流失率Starter67%Business0%也就是用每個類別對應的目標變數彙總值(比例或平均值)來取代原本的類別。
這樣一來,就能直接把這種資訊提供給模型:
Starter 的顧客比較容易流失
但是這種做法有很大的陷阱。
例如,假設有以下資料。
顧客方案流失AStarter1BStarter0CStarter1如前面所示,如果彙總各方案的流失率,Starter 的流失率就是 67%(2 / 3 = 66.66...)。
於是替顧客 A 指派:
Starter → 0.67
但問題在這裡。
因為在計算這個 67% 的值時,有使用到「流失」這個變數。這代表這個數值已經包含了模型答案,也就是流失資訊。
換句話說,就是用正解來建立說明變數。
這就是所謂的資訊洩漏(leakage)問題。只要有這個問題,模型在訓練資料上看起來可能很準,但到了正式資料上卻無法好好預測。
CatBoost 為了避免資訊洩漏(leakage)問題,使用了名為「Ordered Target Statistics(順序式目標統計量)」的方法。
簡單來說,就是「只使用排在自己前面的資料列來計算類別統計量」。
我們用剛才的例子來看。
假設資料是以隨機順序排列如下:
順序顧客方案流失1AStarter12BStarter03CStarter14DStarter1另外,假設事前資訊(Prior)是整體平均流失率 50%。
CatBoost 會把這個「方案」類別變數轉換成如下形式:
順序顧客方案流失轉換後的值1AStarter10.502BStarter01.003CStarter10.504DStarter10.67到底發生了什麼事?
顧客 A 的情況
A 前面沒有任何 Starter 顧客。
因此會使用作為事前資訊設定的 50%。
A → 沒有 Starter 的過去資料 → 使用 0.50
顧客 B 的情況
B 前面的 Starter 顧客只有 A。
B → 過去的 Starter 顧客只有 A → 流失率 = 1 / 1 = 1.00
顧客 C 的情況
C 前面有 A 和 B。
C → 過去的 Starter 顧客有 A、B → 流失率 = (1 + 0) / 2 = 0.50
顧客 D 的情況
D 前面有 A、B、C。
D → 過去的 Starter 顧客有 A、B、C → 流失率 = (1 + 0 + 1) / 3 = 0.67
重點在於,計算每一列的轉換值時,沒有使用那一列自己本身的目標變數。
例如:
因此,雖然能夠利用到這樣有用的資訊:
「Starter 方案比較容易流失」
同時也能避免:
「把自己的答案混進說明變數裡」
這就是 CatBoost 的「Ordered Target Statistics(順序式目標統計量)」概念。
CatBoost 也有一套稱為 Ordered Boosting(順序式提升)的機制。
一般的 Gradient Boosting 會先用整個訓練資料建立模型,然後再對同一份訓練資料做預測、計算誤差,接著再建立下一棵樹來修正這個誤差。
乍看之下很合理,但其中其實有一個微妙的問題。
當你要預測訓練資料中的某一列時,那一列本身也已經被拿去訓練模型了。也就是說,訓練時是在「已經看過那一列」的模型上做預測。
但在正式環境中,預測的是尚未知道答案的未知資料。這時模型並沒有用那一列來訓練。
像這樣,訓練時的預測與正式預測之間條件稍微不同的現象,就稱為 Prediction Shift(預測位移)。
CatBoost 為了減少這種差異,會把資料打亂順序,並在預測每一列時,只使用排在該列前面的資料所建立的模型來進行預測。
例如,若資料順序是 A、B、C、D,那麼在計算 C 的誤差時,會使用只由 A 和 B 建立的模型來預測 C。C 本身的正解不會用在那次預測中。
這樣就能讓訓練時的預測,更接近正式環境中對未知資料做預測的情境。
Ordered Boosting 的優點,是可以抑制模型過度貼合訓練資料,讓它在測試資料或正式資料上更穩定地做出預測。
如果說 Ordered Target Statistics(順序式目標統計量) 是防止「轉換類別變數時的資訊洩漏」,那麼 Ordered Boosting(順序式提升) 就是抑制「以 boosting 學習誤差時的預測位移」。
而這兩種方法,也正是 CatBoost 能在類別變數很多的資料上表現優異的重要原因。
CatBoost 的另一個特色,是使用 Symmetric Trees(對稱樹)。
一般決策樹可以針對不同分支選擇不同的分裂條件。
Root
/ \
條件A 條件B
/ \ / \
條件C 條件D 條件E 條件F
而 CatBoost 的對稱樹,則是在同一深度的節點使用相同的分裂條件。
Root
/ \
條件A 條件A
/ \ / \
條件B 條件B 條件B 條件B
這種設計一開始看起來可能會覺得不夠有效率。的確,只看單棵樹的話,能針對各分支自由選條件的一般決策樹比較靈活。
但 CatBoost 並不是要做出「一棵完美的樹」,而是要透過 許多小樹相加的 boosting 模型 來達成。
也就是說,不需要讓單一棵樹表現全部能力。
第一棵樹先抓住大方向,第二棵樹修正剩下的誤差,第三棵樹以後再補上更細的模式,這才是 boosting 模型的做法。
因此,對稱樹單棵樹彈性較低的缺點,可以透過 把很多棵樹組合起來 來補足。這就是 CatBoost 的設計思路。
而且,採用這種對稱樹後,樹的結構更簡單,預測速度更快,記憶體效率也更好。同時,限制樹的自由度也有助於抑制過度擬合。
也就是說,CatBoost 是以接受對稱樹的限制為代價,換來了:
看到這裡,很容易會想:
「那 CatBoost 不就能完全防止資訊洩漏了嗎?」
但很遺憾,不能這樣說。
因為 CatBoost 能防止的,是 源自 Target Encoding 的資訊洩漏。
如果資料本身就包含了只有未來才知道的資訊,那麼 CatBoost 也無法阻止。
例如在顧客流失預測中,若你把以下變數拿來當說明變數:
這些都是在流失之後才會知道的資訊。只要使用這些變數,不論是什麼模型,都可能出現異常高的預測準確率。
因此,「只能使用在預測當下可取得的資訊作為說明變數」這個基本原則,在 CatBoost 中也一樣成立。
話說回來,XGBoost 和 LightGBM 在使用類別變數時,也不代表一定會發生資訊洩漏。其實,XGBoost 和 LightGBM 也都有機制,可以在避免這類問題的同時,將類別變數作為說明變數使用。
以下是 R 的實作;在 Exploratory 中使用時也是相同概念。
模型類別變數的轉換XGBoost將類別分組後進行分裂(也可使用 One-Hot)LightGBM將類別分組後進行分裂CatBoost使用 ordered target statistics 與 ordered boosting例如,LightGBM 會在學習分裂時,將類別分組。
Plan in {Starter, Pro}
vs
Plan in {Business, Enterprise}
接著建立如下分支:
if Plan is Starter or Pro:
go left
else if Plan is Business or Enterprise:
go right
另一方面,CatBoost 則會利用像這樣的統計量:
Starter
↓
過去 Starter 使用者的平均流失率
重點是,XGBoost、LightGBM 與 CatBoost 對類別變數的處理方式各不相同。
LightGBM 重視學習速度與擴充性,而 CatBoost 則重視類別變數的活用與資訊洩漏對策。
CatBoost 對以下這類資料特別有效:
顧客資料
行銷資料
商品資料
問卷資料
最後來看,隨機森林、XGBoost、LightGBM、CatBoost 到底該選哪一個模型?
基本上,通常是先做出模型,再看預測精度並調整參數,選出表現好的模型。不過,第一次要選哪個模型,有時候還是會讓人猶豫。
這種時候,可以用下面這樣的方式來思考:
情境建議先簡單試試看隨機森林想追求高精度XGBoost大規模資料LightGBM類別變數很多CatBoost這個列表沒有把統計學習模型(線性迴歸、邏輯斯迴歸、GLM 等)或決策樹算進去。
另外,再次強調,以下這些資料通常包含很多類別變數,所以如果你正在處理這類資料,CatBoost 很值得一試:
以下四種模型都是以決策樹為基礎的集成學習,但各自的設計思路不同。
CatBoost 最大的特點是:
能在活用類別變數資訊的同時,抑制 Target Encoding 常見的資訊洩漏
因此,在顧客分析、行銷分析、問卷分析等類別變數很多的業務資料中,是非常有力的選擇。
如果你只用過 LightGBM 或 XGBoost,不妨也試試看 CatBoost。
說不定會得到比你預期更高的預測表現。
Exploratory 自 v15.5 起新增了對 CatBoost 的支援。

在分析檢視下,可以透過 UI 輕鬆建立 CatBoost 模型。
此外,也可以從「設定」對話框中進行參數調校,在抑制過擬合的同時提升預測精度。

如果你正在處理大量類別變數的資料,不妨試著用看看。
你可以透過以下連結下載 Exploratory 最新版 v15.5,立即開始使用 CatBoost。
👉 下載 Exploratory 最新版
https://exploratory.io/download
如果你還沒有帳號,也可以從這裡註冊,開始 30 天免費試用。
即使試用期已經結束,只要啟動最新版並點擊「延長試用」,仍然可以繼續體驗。
像 CatBoost 這樣的機器學習模型,光是知道怎麼使用是不夠的。
更重要的是,要能依據資料特性選擇適當的模型、正確解讀結果,並在需要時調整參數,實際連結到決策上。
在 Exploratory 的「資料科學 Bootcamp」中,不只能學到包含 CatBoost 在內的機器學習模型分析,也能在 3 天內密集學習統計學、資料處理、視覺化、以及分析結果解讀等,資料科學所需的實務技能。
在這個 Bootcamp 中,你會實際動手學會 AI 時代所需的資料科學能力,例如:
不只是學工具操作,而是會完整體驗從提出問題、準備資料、視覺化、分析,到如何解讀結果的一整套流程。
如果你希望在實務資料分析中更有信心地使用 CatBoost 或 LightGBM 等機器學習模型,歡迎參考以下頁面。
原文出處:https://qiita.com/KanNishida/items/72a7fd6854e99506cdff