聊天視窗

資料科學實戰:從數據到決策的完整流程 - 第 5 章

第五章:建模與模型評估

發布於 2026-03-04 21:41

# 第五章:建模與模型評估 ## 5.1 從洞察到模型 在上一章,我們透過 EDA 對週末促銷的數據進行了多角度分析,並提出了可操作的商業建議。接下來的任務是將這些洞察轉化為可量化的預測能力,進而支持決策。 > **關鍵提醒**:模型的好壞不僅取決於預測精度,更取決於其可解釋性、可維護性與實務落地的成本。這也是資料科學團隊在實務中常遇到的三難。 ## 5.2 特徵工程:把業務邏輯編碼 1. **日期特徵**:將 `date` 轉成 `week_day`、`is_weekend`、`month`、`holiday_flag` 等; 2. **價格指標**:除原始 `price` 外,計算 `price_change_pct`、`discount_rate`; 3. **銷售趨勢**:使用滾動窗口計算過去 7 天、30 天的平均銷售量,作為滯後特徵; 4. **促銷組合**:編碼 `promo_type`(折扣、贈品、滿額免運等),並與 `is_weekend` 交叉成 `promo_weekend`; 5. **商品屬性**:將 `category`、`sub_category` One‑Hot 編碼,或使用 CatBoost 內建處理。 > **實戰小技巧**:對於大類別變數,先使用 `sklearn.preprocessing.OrdinalEncoder` 進行編碼,再利用 `sklearn.compose.ColumnTransformer` 只對數值特徵做標準化。 ## 5.3 模型選擇策略 | 模型 | 優勢 | 劣勢 | 適用場景 | |------|------|------|----------| | **線性回歸** | 易解釋,計算量低 | 對非線性關係表現差 | 初步驗證、基線建模 | | **決策樹 / 隨機森林** | 免標準化,可處理非線性 | 易過擬合,特徵重要性偏差 | 中小規模、特徵多樣 | | **梯度提升機 (XGBoost / LightGBM)** | 高精度,處理缺失值好 | 訓練時間長,參數多 | 大規模、複雜關係 | | **神經網路 (多層感知器)** | 可擬合極其複雜模式 | 需要大量數據與計算資源 | 非結構化、極大規模 | > **實務建議**:先以線性回歸作為基線,評估 R²、MAE;若表現不滿意,逐步升級到樹模型,再嘗試 XGBoost;最後在需要極致準確且數據足夠時再考慮深度學習。 ## 5.4 評估指標 - **R² (決定係數)**:衡量解釋變異比例。 - **MAE / MAPE**:直觀衡量預測誤差,對異常值不敏感。 - **RMSE**:更重視大誤差,適合風險評估。 - **Cross‑Validation**:k‑fold 或時間序列 split,避免數據泄露。 - **特徵重要性**:對於樹模型可直接提取;對於線性模型可觀察係數大小。 python from sklearn.model_selection import TimeSeriesSplit, cross_val_score from sklearn.metrics import r2_score, mean_absolute_error tscv = TimeSeriesSplit(n_splits=5) for train_idx, test_idx in tscv.split(X): X_train, X_test = X.iloc[train_idx], X.iloc[test_idx] y_train, y_test = y.iloc[train_idx], y.iloc[test_idx] model.fit(X_train, y_train) preds = model.predict(X_test) print('R²:', r2_score(y_test, preds)) print('MAE:', mean_absolute_error(y_test, preds)) ## 5.5 超參數調優 - **網格搜尋 (GridSearchCV)**:穩定但計算量大; - **隨機搜尋 (RandomizedSearchCV)**:效率高,適合大參數空間; - **貝葉斯優化 (Optuna, Hyperopt)**:可探索非結構化參數。 > **案例**:對 XGBoost,常調整 `max_depth`、`learning_rate`、`n_estimators`、`subsample` 等;同時監控 **AUC‑PR** 以應對銷售量長尾分佈。 ## 5.6 模型解釋與公平性 1. **SHAP 值**:提供全局與局部解釋;可視化特徵對預測的貢獻。 2. **LIME**:針對單一樣本進行局部解釋。 3. **公平性指標**:如平均差異、受保護屬性分組對比;對於銷售預測,通常不涉及人群特徵,但若涉及消費者屬性,必須留意。 python import shap explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_test) shap.summary_plot(shap_values, X_test) ## 5.7 模型部署前的檢查 | 步驟 | 重點 | |------|------| | **性能穩定性** | 透過滑動窗口檢查預測漂移 | | **資源消耗** | 估計推論延遲與記憶體需求 | | **安全性** | 防止模型被逆向工程或數據洩漏 | | **合規性** | 確認使用的數據符合 GDPR / 個資法規 | > **部署工具**:使用 `mlflow` 追蹤實驗、`docker` 打包、`FastAPI` 提供 REST API;若需批量推論,可考慮 `AWS SageMaker` 或 `GCP Vertex AI`。 ## 5.8 案例回顧:週末促銷銷售預測 - **目標**:預測週末每個商品的銷售額,協助決定折扣幅度與庫存調整。 - **特徵**:前 30 天平均銷售、當前折扣率、是否為節日、類別 One‑Hot。 - **模型**:LightGBM,最終 MAPE < 12%。 - **商業效果**:經過模型導向的折扣調整,ROI 提升 15%。 ## 5.9 結語 - **循環迭代**:模型不是一次完成的,而是需要在新數據到來時持續更新與評估。 - **跨部門協作**:業務、IT、法務等團隊應共同參與模型開發與部署。 - **未來展望**:隨著時序資料的增多,預測模型將逐步融合強化學習、時序圖神經網路等前沿技術。 > **最終提示**:在資料科學的道路上,技術永遠是手段,洞察力與商業價值才是最終目的。祝你在建模旅程中不斷創造價值!