返回目錄
A
數據洞察:以資料科學驅動商業決策 - 第 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. 小結
預測模型與機器學習是資料驅動決策的核心。透過正確的模型選擇、嚴謹的特徵工程、可靠的交叉驗證以及可解釋性工具,能將資料轉化為可落地的商業洞察。接下來的章節將聚焦於如何將這些模型部署為數據產品,以及在實務中面臨的倫理與治理挑戰。