特徵工程(Feature Engineering)就是把「原始資料」變成「模型能理解、而且更容易學到規律」的有用特徵的整套方法與流程。簡單講:餵模型之前,先把食材洗好、切好、調味到剛剛好。
為什麼要做?
-
提升可學性:把複雜關係用更直覺的表示法表達,模型更容易收斂、準確度更高。
降低資料噪音與偏差:處理缺值、離群值、尺度差異,避免模型被亂流帶著走。
融入領域知識:把業務 know-how 轉成特徵,例如「近 7 日平均下單量」「每班停機次數」。 -
做什麼事?
-
常見步驟可以想成一條清洗台:
-
清理與標準化:處理缺值、異常值、單位與時區統一、數值縮放(Standard/MinMax)。
-
編碼:把類別型變數轉可學的表示(One-Hot、Target Encoding、Embedding)。
-
衍生特徵:時間窗統計(移動平均、最大/最小)、比率、交互項(A×B)、分箱(Binning)。
-
降維/壓縮:PCA、UMAP,讓資訊密度更高、噪音更低。
-
選擇:用相關係數、L1 正則、樹模型重要度、遞迴特徵消除(RFE)挑重點。
-
驗證:用交叉驗證檢查「這些特徵真的有幫助嗎?」避免資料洩漏(leakage)。
依資料型態的差異
-
結構化資料(表格):上面那套幾乎全用得上;樹模型(XGBoost/LightGBM)對手工衍生與分箱很友好。
-
低結構化(文本、影像、聲音):較適合特徵學習(Feature Learning)—讓模型自己學特徵:
-
文本:詞向量(word2vec、GloVe)、Transformer 向量(BERT/LLM embedding)。
-
影像:CNN/ViT 的中間層表徵;也可用自監督學習(SimCLR、MAE)。
-
然而,前處理仍重要:分詞/正規化、影像尺寸與色彩校正、資料增強(augmentation)。
-
什麼時候少做、甚至不做?
深度學習端到端在影像/語音/NLP 通常少量手工特徵就夠;但在資料量不大、特徵雜亂、或強烈領域規則的場景(例如製造良率、設備稼動、信貸評分),精心的手工特徵常比盲目加深模型更有效。
常見地雷
-
資料洩漏:用到「未來資訊」做特徵(例如用 T+1 的數據計算 T 的特徵)→ 練功神準、上線崩潰。
-
過度衍生:造出一堆看似高級、其實噪音的特徵;指標要用驗證數據說話。
-
未管控尺度:距離型模型(kNN、SVM、K-means)對尺度很敏感,不縮放會出事。
-
類別高基數:直接 One-Hot 會爆維度;改用 Target Encoding 或 Embedding。
工程化與可重現
把特徵工程管線化:
fiton train → 同樣的轉換器transformon validation/test/online。
工具:scikit-learnPipeline/ColumnTransformer、Feature Store(Feast)、Airflow/Prefect 編排。 -
~鈳恩智聯,莊濠禧
