聊天視窗

洞察數據:從數據科學家到策略決策者的轉型指南 - 第 5 章

第5章:建模基礎與評估

發布於 2026-03-01 00:31

# 第5章:建模基礎與評估 在上一章,我們完成了探索性資料分析(EDA),了解了資料的分布、關聯與缺失情況。此章將帶你進入機器學習模型的核心——**建模**。我們會從三大學習類型(監督式、非監督式、強化學習)說起,並深入探討評估指標、交叉驗證、模型選擇與調參技巧。 --- ## 5.1 監督式學習 監督式學習(Supervised Learning)是最常見的機器學習類型,目標是從有標籤的資料中學習映射關係,並對新資料做預測。 ### 5.1.1 分類 vs 回歸 | 類型 | 目標 | 典型演算法 | |------|------|------------| | 分類 | 預測離散標籤 | Logistic Regression, SVM, Random Forest, XGBoost | | 回歸 | 預測連續數值 | Linear Regression, Ridge/Lasso, Gradient Boosting Regressor | ### 5.1.2 典型流程 1. **資料分割**:將資料分為訓練集、驗證集、測試集。 2. **特徵工程**:編碼類別變量、標準化、特徵選擇。 3. **模型訓練**:選擇演算法並擬合。 4. **評估**:使用適當指標衡量性能。 5. **部署**:將模型部署至線上服務或批量作業。 ### 5.1.3 代碼範例(Python) python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix # 1. 讀取資料 X = df.drop(columns=['target']) y = df['target'] # 2. 分割 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y) # 3. 特徵縮放 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 4. 訓練 clf = LogisticRegression(max_iter=200) clf.fit(X_train_scaled, y_train) # 5. 評估 pred = clf.predict(X_test_scaled) print('Accuracy:', accuracy_score(y_test, pred)) print('Confusion Matrix:\n', confusion_matrix(y_test, pred)) --- ## 5.2 非監督式學習 非監督式學習(Unsupervised Learning)不依賴標籤,主要用於資料探索、聚類、降維等。 ### 5.2.1 典型應用 - **聚類**:將相似樣本聚為一組(K-Means, DBSCAN, Hierarchical)。 - **降維**:壓縮資料維度,保留主要資訊(PCA, t-SNE, UMAP)。 - **異常偵測**:找出與大多數不同的樣本(Isolation Forest, One-Class SVM)。 ### 5.2.2 評估挑戰 - 無標籤:需要使用**無監督評估指標**(如輪廓係數、Calinski-Harabasz 指標)或**主觀檢驗**。 - 聚類質量往往依賴先驗參數(如 k 值)與初始隨機性。 ### 5.2.3 代碼範例(K-Means 聚類) python from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score k = 4 kmeans = KMeans(n_clusters=k, random_state=42) clusters = kmeans.fit_predict(X_scaled) print('Silhouette Score:', silhouette_score(X_scaled, clusters)) --- ## 5.3 強化學習 強化學習(Reinforcement Learning, RL)是讓代理(Agent)在環境中透過試錯(Trial‑and‑Error)學習策略,以最大化累積回報。 ### 5.3.1 基本概念 | 元素 | 說明 | |------|------| | 狀態 (State) | 環境在某時刻的資訊 | | 動作 (Action) | 代理可選擇的行動 | | 報酬 (Reward) | 代理對動作的即時回饋 | | 策略 (Policy) | 從狀態到動作的映射 | | 值函數 (Value Function) | 對策略未來回報的估計 | ### 5.3.2 典型演算法 - **Q‑Learning**:離線學習價值表。 - **SARSA**:同步更新值函數。 - **Deep Q‑Network (DQN)**:使用深度神經網絡逼近 Q 值。 - **Policy Gradient**:直接優化策略(REINFORCE、Actor‑Critic)。 ### 5.3.3 開發流程 1. 定義環境與狀態空間。 2. 選擇 RL 演算法與參數。 3. 進行訓練(多次迭代)。 4. 評估策略(累積回報、收斂曲線)。 5. 部署至實際系統(如自動化倉儲、金融交易) --- ## 5.4 模型評估指標 ### 5.4.1 分類指標 | 指標 | 定義 | 公式 | |------|------|------| | Accuracy | 正確預測比例 | (TP+TN)/(TP+TN+FP+FN) | | Precision | 真陽性占所有陽性預測 | TP/(TP+FP) | | Recall (Sensitivity) | 真陽性占所有實際陽性 | TP/(TP+FN) | | F1‑Score | 精度與召回的調和平均 | 2·(Precision·Recall)/(Precision+Recall) | | ROC‑AUC | 真陽性率對假陽性率的曲線下面積 | – | > **實務提醒**:當正負樣本極度不平衡時,Accuracy 會誤導,應以 Precision‑Recall 曲線或 F1‑Score 為主。 ### 5.4.2 回歸指標 | 指標 | 定義 | 公式 | |------|------|------| | MSE | 平均平方誤差 | (1/n) Σ (y_pred−y_true)² | | RMSE | MSE 的平方根 | √MSE | | MAE | 平均絕對誤差 | (1/n) Σ |y_pred−y_true| | | R² | 解釋變異比例 | 1−Σ(y_pred−y_true)² / Σ(y_true−ȳ)² | > **小結**:RMSE 受極端值影響較大,MAE 更能反映一般預測誤差;R² 越接近 1 表示模型越好。 --- ## 5.5 交叉驗證(Cross‑Validation) 交叉驗證能有效減少因資料分割不均造成的偏差,提升模型泛化評估。 ### 5.5.1 K‑Fold CV 將資料分成 K 個子集,輪流將其中一個子集作為驗證集,其餘 K−1 個作為訓練集。最後取平均績效。 python from sklearn.model_selection import cross_val_score scores = cross_val_score(clf, X_scaled, y, cv=5, scoring='accuracy') print('CV Accuracy:', scores.mean(), '+/-', scores.std()) ### 5.5.2 留一法(LOOCV) 每次留下 1 個樣本作驗證,適用於小樣本集,但計算成本高。 ### 5.5.3 分層 K‑Fold 對於分類問題,保持每個子集的類別比例與整體相同,以避免偏差。 --- ## 5.6 模型選擇與調參 ### 5.6.1 超參數搜尋 | 方法 | 優點 | 缺點 | |------|------|------| | 網格搜尋(Grid Search) | 系統性、易實現 | 計算量大 | | 隨機搜尋(Random Search) | 範圍更廣、效率高 | 可能錯過最佳點 | | Bayesian 優化 | 利用先前結果加速 | 需要專業庫 | python from sklearn.model_selection import GridSearchCV param_grid = { 'n_estimators': [100, 200, 300], 'max_depth': [None, 10, 20, 30], } grid = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring='f1') grid.fit(X_train, y_train) print('Best params:', grid.best_params_) ### 5.6.2 早停(Early Stopping) 對於梯度提升、深度學習模型,可在驗證集上性能不再提升時停止訓練,避免過擬合。 ### 5.6.3 風險評估與模型結合 - **模型集成**:Bagging、Boosting、Stacking 可提升穩定性。 - **模型堆疊**:將多個模型預測作為新特徵輸入第二層模型。 --- ## 5.7 案例實戰:信用風險評估 ### 5.7.1 問題描述 某銀行想預測客戶是否違約,目標是減少不良貸款。 ### 5.7.2 資料 - **特徵**:年齡、職業、收入、貸款金額、信用歷史等。 - **標籤**:0(未違約),1(違約)。 ### 5.7.3 實施步驟 1. **EDA**:發現收入與違約率負相關。 2. **特徵工程**:標準化數值、One‑Hot 編碼類別。 3. **模型比較**:Logistic Regression、Random Forest、XGBoost。 4. **評估**:使用 AUC‑ROC 與 F1‑Score。 5. **交叉驗證**:5‑Fold Stratified CV。 6. **調參**:XGBoost 進行 Random Search。 7. **最終模型**:XGBoost,AUC 0.88,F1 0.71。 8. **部署**:封裝為 REST API,與風控系統對接。 ### 5.7.4 結果與洞察 - **關鍵特徵**:過去逾期次數、收入與負債比率。 - **商業價值**:每提升 0.01 的 AUC,平均可節省 10 萬元違約成本。 - **後續迭代**:引入交易行為資料,使用 CatBoost 進一步提升 1–2%。 --- ## 5.8 小結 1. 監督式學習是最常用的預測工具,適用於有標籤資料的分類與回歸任務。 2. 非監督式學習協助我們在缺乏標籤的情境下探索資料結構與異常。 3. 強化學習則在需要動態決策與長期回報評估時發揮關鍵。 4. 選擇合適的評估指標與交叉驗證策略能確保模型泛化力。 5. 超參數調優、早停與模型集成是提升性能的關鍵技術。 6. 真實案例展示了從資料探索到模型部署的完整流程,並說明了商業價值的落地。 > **實務提醒**:在任何模型開發中,**商業目標**與**資料品質**同等重要。始終以 ROI 為導向,將技術決策與商業策略緊密結合。 --- ## 5.9 進一步閱讀 - Géron, A. (2019). *Hands‑On Machine Learning with Scikit‑Learn, Keras, and TensorFlow.* O’Reilly. - James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). *An Introduction to Statistical Learning.* Springer. - Sutton, R. S., & Barto, A. G. (2018). *Reinforcement Learning: An Introduction.* MIT Press. --- > **下一章(第6章)** 將深入探討模型可解釋性與決策支援工具(SHAP、LIME、決策樹可解釋性),協助你把預測結果轉化為具體的商業洞察。