配送距離是公里、訂單金額是元、城市是文字、建立時間是日期。把它們放在同一張表,並不表示模型已經知道該怎麼使用。
特徵工程處理的,就是這段從原始資料到模型輸入的轉換。它可能保留既有資訊、讓關係容易被某種模型學到,也可能引入假的大小順序,或把預測當下根本看不到的答案帶進去。
這篇要讓你能檢查三件事:類別是怎麼表示的,數值轉換改變了什麼,以及挑選特徵時有沒有偷看評估答案。本文用訂單建立獨立例子;原圖的汽車顏色、電影評分數與商店人數等教材資料會分別標明。
從業務問題決定輸入,先查時間可用性
如果要在下單時預測配送時間,可用的可能是當時的距離、件數與時段。實際送達時間、配送途中發生的事件,就不能在這個預測時點當輸入。
衍生特徵也一樣。「顧客過去30天訂單數」必須只統計當時之前的資料;若先用整份歷史表算總訂單數,再回填到每一張舊訂單,就把未來帶回了過去。
因此,欄位的第一個問題是「什麼時候可得」,接著才是「用哪種編碼」。一個很會洩漏答案的欄位,往往也會看起來很有預測力。
類別編號可以用來查表,不自帶大小意義
先看Google以汽車顏色建立輸入的示意。每種顏色是不同類別,沒有自然的數值距離。
假設把台北、台中、高雄編為0、1、2,再直接當一個連續數值放進線性模型,模型會用同一組斜率處理它:0到1與1到2的預測差距相同。這個等距假設來自編碼,不是城市本身。
編號2也不代表高雄有台中兩倍的機率。真正的問題是輸入表示會讓特定模型施加什麼順序、距離或函數限制。若模型原生支援類別特徵,也要按其介面指定類別,而不是假設任意整數都會自動被當成類別。
One-hot:每個類別一個位置
One-hot為每個類別建立一個位置,一筆資料只把所屬類別的位置設為1,其餘為0。以本文三個城市為例:
| 城市 | 台北欄 | 台中欄 | 高雄欄 |
|---|---|---|---|
| 台北 | 1 | 0 | 0 |
| 台中 | 0 | 1 | 0 |
| 高雄 | 0 | 0 | 1 |
它讓模型可以學習每個城市各自的作用,避免把城市代碼直接當成連續數值。若線性模型同時放入截距與全部類別欄,會有線性相依;可以依模型與正則化設定選擇保留或刪除基準類別,而不是把「永遠刪第一欄」當成所有模型的規則。
稀疏儲存與把ID直接當成數值,是不同的事。前者仍保留高維向量與位置的意義,只是省略零;後者只把一個編號交給模型。模型與套件是否支援稀疏矩陣,需要另查。
類別很多時,one-hot可能帶來龐大維度與大量低樣本欄位。可以比較合併稀有類別、雜湊或嵌入表示;若使用目標編碼,還會涉及答案統計,必須在訓練折內建立,不能先看整份資料的標籤。
還要決定未知類別怎麼辦。訓練只有三個城市,上線遇到台南時,是拒絕輸入、映射到「其他」,還是由編碼器回傳特定表示?這個規則要和缺失類別、刪除的基準類別一起設計,避免不同狀態變成無法區分的全0向量。
數值縮放:換座標尺度,不是把資料變正確
距離可能落在0到20,金額可能落在0到20,000。對近鄰、距離型方法與有些使用梯度或正則化的模型,尺度會影響距離、優化速度或懲罰的相對作用;不是金額數字大,就有比較強的真實因果效果。
常見min-max縮放是:
轉換值 = (原值 − 訓練最小值) / (訓練最大值 − 訓練最小值)
例如訓練範圍10到40,原值20轉為1/3;新資料50套用同一組參數,則轉為4/3,會超過1。除非另加截尾,min-max不會自動把未來所有輸入鎖在0到1。若某欄訓練最大值等於最小值,也要由實作明確處理零分母。
Z-score則用訓練均值與標準差換尺度:
Z = (原值 − 訓練均值) / 訓練標準差
若均值20、標準差5,原值30得到Z=2,意義是比均值高兩個標準差。
Z-score本身不要求原資料是常態分布,才有辦法計算。是否適合仍要看模型、離群值與目標。許多以單一欄位門檻分割的決策樹,對這類單調縮放通常沒有距離模型那麼敏感;不應把同一套縮放前處理硬套所有演算法。
對數與截尾:一個壓縮差距,一個放棄尾端細節
金額、次數等非負數值可能有長尾:多數很小,少數很大。對數可以壓縮大數之間的絕對差距,讓倍數關係變得容易表示。例如自然對數下,100到1,000與1,000到10,000,都增加約2.303。
普通 log(x) 需要 x>0。若使用 log1p(x)=log(1+x),非負資料中的0可以保留;但這不表示任意負值也合法。含負值、零值與特殊缺失碼時,要先處理定義域,不能直接在錯誤結果外面包一層填補。
對輸入取log,與對預測目標取log也不同。目標轉換會改變誤差衡量的方式;反轉回原單位時,不能把log尺度上的均值直接視為原尺度的平均。這需要依預測需求另外驗證。
對數仍會保留合法正值之間的大小順序與差異;截尾則把邊界外多個值合併為同一個值。選哪一種,要看尾端差異是否對你的問題有意義,不能只挑看起來比較漂亮的分布。
分箱:把連續變數改成區間,但會丟失箱內差異
若關係不是一路上升或下降,單一數值搭配一條線性斜率可能不夠。例如商店人數與氣溫,在舒適溫度附近較高,太冷或太熱反而較低。
分箱代價是箱內差異消失:12度與25度可能被當成同一類,接近邊界的11.9與12.1反而分開。箱數太多也可能讓每箱資料不足。樹模型、樣條或其他非線性表示都能處理部分相近問題,分箱只是候選之一。
箱邊界可以按領域規格、固定寬度或訓練分位數設定。這三種不是同一個概念。
如果分箱邊界來自資料,就只用訓練資料估計,再套到新資料。觀察驗證標籤後反覆移動邊界,也是在調模型,需要納入模型選擇流程。
特徵選擇:更多欄位,不代表更多可用資訊
有些欄位幾乎不變,有些彼此重複,有些只在這批樣本裡碰巧和答案有關。特徵選擇可以減少收集成本、維度與部分過擬合風險,但刪除太多也可能失去有用訊息。
常見方法包括先按簡單統計過濾、反覆訓練比較特徵子集,以及利用某些模型的係數或重要性。它們評估的關係不一樣;高度相關的欄位也可能互相替代,導致選到的集合不穩定。
不能先用全資料與答案選出「最有用的10欄」,再切分資料計算分數。這樣驗證答案早已參與選擇。每一個訓練折都應獨立擬合特徵選擇器,保留折只套用已選好的欄位。
相關或重要性排名也不是因果效果。某欄很會預測,可能只是在替另一個條件做代理,或記錄了預測當下不可得的後續事件;必須回到資料如何產生來判斷。
把編碼、縮放與選擇一起放進驗證流程
一個可檢查的流程是:先按使用情境切分資料,在訓練折中擬合類別表、填補值、縮放參數、分箱邊界與特徵選擇器,再把整組流程套到保留折。Pipeline能把這些操作連在一起,前提是你把正確的轉換器放進去,資料切分本身也正確。
選完方案後,需要把轉換器與模型一起保存。上線不能臨時用當天資料重新算一套均值,也不能讓城市欄位的順序自己改變;相同原始輸入必須走過相同的轉換定義。
評估時保留一個簡單基準,逐次加入有理由的轉換,比較同一組切分與指標。這讓你能說明「哪個改動帶來什麼差異」,而不是一次把所有方法都堆上去,最後只剩一個難以解釋的分數。
來源與圖像授權
- Google教材:類別編碼、數值轉換、分箱。圖1–11依CC BY 4.0再利用,原圖未改,見網站政策。本文另說明稀疏儲存、非等距類別與模型限制,沒有把教材的簡化比喻當成機率定理。
- scikit-learn developers:RFECV原例與交叉驗證,圖12–13依BSD 3-Clause使用,完整聲明見下方;來源曲線不是本站執行結果。
- scikit-learn,Common pitfalls:前處理一致性、特徵選擇與資料洩漏。
城市編碼與數值換尺度為本文另設的教學例子,未訓練實際配送模型。
圖像授權聲明
以下保留scikit-learn原圖的完整BSD聲明;原作者沒有為本站背書。
BSD 3-Clause License
Copyright (c) 2007-2026 The scikit-learn developers.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
封面沿用本篇已註明來源的配圖,僅等比縮放並加白邊以保留全圖;圖片原有的署名與授權條件同樣適用於封面版本。
留言0
登入後就能留言。
登入