聊天視窗

數據洞察:以資料科學驅動商業決策 - 第 5 章

第五章:預測模型與機器學習

發布於 2026-03-02 03:05

# 第五章:預測模型與機器學習 > 本章將帶領讀者從基礎概念到實際實作,掌握回歸、分類、聚類與時間序列等核心模型,並學習特徵工程、交叉驗證、模型選擇與評估指標。透過實務範例與商業案例,我們將說明如何將資料科學方法落地為可執行的決策工具。 ## 1. 模型類型與概念 | 類型 | 主要用途 | 常見演算法 | 適用情境 | |------|----------|-----------|----------| | 監督式學習 | 依訓練標籤預測 | 線性回歸、決策樹、隨機森林、XGBoost、SVM、神經網路 | 價格預測、客戶流失、信用評分 | | 非監督式學習 | 發掘結構與分群 | K‑Means、階層聚類、DBSCAN、t‑SNE | 市場細分、異常偵測 | | 時間序列預測 | 捕捉時間相關性 | ARIMA、SARIMA、Prophet、LSTM、XGBoost + lag features | 季節性銷售預測、需求計劃 | > **選擇模型小技巧**: > - 若資料高度非線性且特徵相互依賴,先考慮樹模型或梯度提升。 > - 若資料量極大、結構簡單,可用線性模型或簡易樹模型快速迭代。 > - 時間序列需保留時間依賴,避免隨機切分。 ## 2. 特徵工程 1. **數值特徵** - **縮放**:StandardScaler、MinMaxScaler(線性模型必須)。 - **多項式特徵**:PolynomialFeatures(提高非線性擬合能力)。 2. **類別特徵** - **單熱編碼**:OneHotEncoder(對於樹模型可選不編碼)。 - **目標編碼**:TargetEncoder(高基數類別,減少維度)。 3. **時間特徵** - **週期性編碼**:`sin(2π * day_of_year/365)` 用於捕捉季節性。 - **滾動統計**:rolling mean / std、lag features。 4. **特徵選擇** - **統計檢定**:ANOVA、Chi‑square。 - **L1 正則化**:Lasso、ElasticNet。 - **遞歸特徵消除**(RFE)。 python from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline numeric_cols = ['age', 'income'] cat_cols = ['gender', 'occupation'] preprocess = ColumnTransformer([ ('num', StandardScaler(), numeric_cols), ('cat', OneHotEncoder(handle_unknown='ignore'), cat_cols) ]) ## 3. 評估指標 | 任務 | 指標 | 解釋 | |------|------|------| | 回歸 | MSE / RMSE | 平方誤差,對大誤差敏感 | | | MAE | 平均絕對誤差,解釋直觀 | | | R² | 解釋變異比例 | | 分類 | Accuracy | 正確率 | | | Precision / Recall / F1 | 分類平衡度 | | | ROC‑AUC | 分類閾值獨立性 | | 聚類 | Silhouette | 內聚與分離度 | | | Calinski‑Harabasz | 群內方差與群間方差比例 | | 時間序列 | MAPE / SMAPE | 百分比誤差,易解釋 | | | RMSE | 量化波動 | > **商業考量**:對於風險評估,常以 **Precision** 為主;對於營銷轉化,偏向 **Recall**;對於客戶分群,則用 Silhouette 評估群聚品質。 ## 4. 交叉驗證與模型選擇 | 規則 | 使用場景 | 主要參數 | |------|----------|-----------| | K‑Fold | 通用 | `n_splits=5~10` | | StratifiedKFold | 分類 | 保持類別比例 | | TimeSeriesSplit | 時間序列 | `n_splits=5`,前面資料作為訓練 | | Nested CV | 超參數調優 | 外層選模型、內層調參 | python from sklearn.model_selection import GridSearchCV, TimeSeriesSplit tscv = TimeSeriesSplit(n_splits=5) param_grid = { 'n_estimators': [100, 200], 'max_depth': [None, 10, 20] } grid = GridSearchCV(RandomForestRegressor(random_state=42), param_grid, cv=tscv, scoring='neg_mean_squared_error') > **小技巧**:當樣本量極大,先用 **RandomizedSearchCV** 進行粗調,再用 **GridSearchCV** 精調;若計算資源有限,可使用 **Optuna** 進行 Bayesian 最適化。 ## 5. 常見演算法實作範例 | 需求 | 模型 | 主要參數 | 代碼片段 | |------|------|----------|-----------| | 連續預測 | 線性回歸 | `fit_intercept=True` | `LinearRegression().fit(X, y)` | | 連續預測 | 隨機森林 | `n_estimators=500` | `RandomForestRegressor(n_estimators=500).fit(X, y)` | | 連續預測 | XGBoost | `learning_rate=0.05` | `XGBRegressor(learning_rate=0.05).fit(X, y)` | | 分類 | 隨機森林 | `class_weight='balanced'` | `RandomForestClassifier(class_weight='balanced').fit(X, y)` | | 分類 | XGBoost | `objective='binary:logistic'` | `XGBClassifier(objective='binary:logistic').fit(X, y)` | | 聚類 | K‑Means | `n_clusters=4` | `KMeans(n_clusters=4, random_state=42).fit(X)` | | 時間序列 | ARIMA | `order=(p,d,q)` | `ARIMA(y, order=(2,1,2)).fit()` | | 時間序列 | Prophet | `daily_seasonality=True` | `Prophet().fit(df)` | > **實務案例:客戶流失預測** > 1. 資料:客戶基本資料 + 交易紀錄 + 服務使用頻率。 > 2. 特徵:滾動支付額、最近一次登入距離、滾動平均交易金額。 > 3. 模型:XGBoost + `class_weight='balanced'`。 > 4. 評估:Recall(預期能召回 80% 可能流失客戶)+ AUC。 > 5. 結果:提升 15% 的流失預測精度,商業決策可針對高風險客戶提供定制優惠。 ## 6. 模型解釋與可解釋性 - **特徵重要性**:`feature_importances_`(樹模型)或 `coef_`(線性模型)。 - **SHAP**:全局 + 局部解釋,適用於任何模型。 - **LIME**:解釋單個預測,適合快速排查。 python import shap explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_test) shap.summary_plot(shap_values, X_test) > **商業溝通**:利用 SHAP 的「特徵效應圖」說明為何某客戶被標記為高風險,避免黑盒批評。 ## 7. 商業洞察與決策支援 | 步驟 | 目的 | 商業價值 | |------|------|----------| | 模型評估 | 量化績效 | 確保投資回報率 (ROI) | | 風險度量 | 識別偏差 | 降低預測失誤成本 | | 影響分析 | 找出關鍵驅動 | 精準行銷、產品優化 | | 持續監控 | 檢測漂移 | 保持模型效能 | > **例子**:在金融信用評分模型中,通過將 **Gini** 指標與 **預算成本** 結合,實現 3% 的利潤提升。 ## 8. 實務建議與常見陷阱 | 陷阱 | 症狀 | 解決方案 | |------|------|-----------| | **資料泄漏** | 模型在測試上表現異常好 | 僅在訓練集內完成特徵縮放、交叉驗證 | | **過擬合** | 內部指標高、外部指標低 | 使用正則化、早停、交叉驗證 | | **樣本不平衡** | 精度高但召回低 | SMOTE、類別加權、Cost‑Sensitive Learning | | **時間依賴** | 隨機切分破壞序列 | 使用 `TimeSeriesSplit` 或前視窗切分 | | **模型漂移** | 監測數據分佈變化 | 定期重新訓練、監控預測分佈 | | **可解釋性缺失** | 結果難以說服決策者 | 引入 SHAP、LIME、特徵重要性圖 | ## 9. 小結 預測模型與機器學習是資料驅動決策的核心。透過正確的模型選擇、嚴謹的特徵工程、可靠的交叉驗證以及可解釋性工具,能將資料轉化為可落地的商業洞察。接下來的章節將聚焦於如何將這些模型部署為數據產品,以及在實務中面臨的倫理與治理挑戰。