Data 1
Medical Cost Personal Datasets
Medical Cost Personal Datasets
資料名稱:Medical Cost Personal Datasets
總共筆數:1339
變數:7
預測目標:`charges`(醫療費用)
資料來源:Kaggle. https://www.kaggle.com/datasets/mirichoi0218/insurance [6]
step1:將特徵分類。
📍連續型特徵:'age', 'bmi', 'children'
📍類別型特徵:'sex', 'smoker', 'region'
📍目標變數:'charges'
step2:進行特徵工程。
📍使用 ColumnTransformer 進行特徵轉換:
📌連續型特徵標準化 (StandardScaler)
📌類別型特徵獨熱編碼 (OneHotEncoder),並捨棄第一個類別以避免共線性
📍建立多項式特徵 (PolynomialFeatures) 擴展特徵空間,設定 degree=2,並將其存入 X_twin 為孿生資料集
📍將原始特徵集和孿生特徵集以列方向合併,形成完整的特徵矩陣X_combined
step3:資料分割。
📍將資料以 8:2 比例分割為訓練集和測試集
step4:使用 Optuna 超參數調優,並且使用最佳超參數訓練基礎模型。
📍定義基礎模型列表,包含:
📌XGBoost
📌CatBoost
📌Random Forest
📌Gradient Boosting
📌Histogram-based Gradient Boosting
📌Support Vector Regression
📌Decision Tree
📌Bayesian Ridge
📌Linear Regression
step5:使用 K-fold 交叉驗證。
📍使用 3-fold 交叉驗證來獲取每個基礎模型的 Out-of-Fold (OOF) 預測結果
📍這些 OOF 預測將用作元學習器的輸入特徵
step6:訓練模型。
📍Stacking
📍Covariate Dependent Stacking (CDST)
📍Optimal Linear Stacked Generalization with Bias Reduction and Covariation Modification
(OPEC-Stacking)
step7:進行模型評估。
📍計算每個基礎模型以及集成模型的訓練集和測試集 RMSE(Root Mean Square Error)
📍根據測試集 RMSE 對模型進行排序
📍繪製陡坡圖 (steep curve) 比較不同模型的表現
step8:結果可視化。
📍生成顯示所有模型訓練集和測試集 RMSE 的圖表
所有模型 RMSE 結果:
模型: XGBoost Regressor
測試集 RMSE: 4304.0101
訓練集 RMSE: 4630.1791
模型: CatBoost Regressor
測試集 RMSE: 4264.7095
訓練集 RMSE: 4644.0024
模型: Random Forest Regressor
測試集 RMSE: 4499.4243
訓練集 RMSE: 4650.1024
模型: Gradient Boosting Regressor
測試集 RMSE: 4402.8398
訓練集 RMSE: 4655.0412
模型: Histogram-based Gradient Boosting Regressor
測試集 RMSE: 4370.8119
訓練集 RMSE: 4687.2573
模型: Support Vector Regression(SVR)
測試集 RMSE: 5753.7061
訓練集 RMSE: 6847.4789
模型: Decision Tree Regressor
測試集 RMSE: 4538.7750
訓練集 RMSE: 4782.0309
模型: Bayesian Ridge
測試集 RMSE: 4551.0683
訓練集 RMSE: 4929.7990
模型: Linear Regression Regressor
測試集 RMSE: 4551.1324
訓練集 RMSE: 4931.3346
模型: Stacking
測試集 RMSE: 4211.8082
訓練集 RMSE: 4528.9107
模型: CDST
測試集 RMSE: 4230.1913
訓練集 RMSE: 4528.4797
模型: OPEC-Stacking
測試集 RMSE: 4307.1619
訓練集 RMSE: 4183.0305
從上圖中可以看出:
模型性能排名:整體來看,左側的集成模型(如Stacking、CDST)和梯度提升類模型(CatBoost、XGB)表現最佳,RMSE值最低;而右側的模型,特別是SVR表現明顯較差。
訓練與測試集差異:所有模型在測試集上的表現(黃線)優於訓練集(藍線),這種情況比較少見,可能與數據特性或模型配置有關。
集成模型優勢:Stacking在測試集上表現最佳(RMSE約4211),其次是CDST(4230),表明這些集成學習方法確實能提高預測準確性。
OPEC模型表現:值得注意的是,OPEC模型在訓練集上表現特別好(4163),是所有模型中最低的RMSE,但測試集表現(4330)略遜於Stacking和CDST。
個別模型分析:
梯度提升類模型(CatBoost、XGB、HistGB、GB)整體表現良好
隨機森林(RF)和決策樹(DecisionTree)表現中等
線性回歸(Linear)和支持向量回歸(SVR)表現較差,特別是SVR的RMSE高達5750(測試集)和6847(訓練集)
過擬合/欠擬合情況:大多數模型的訓練集RMSE高於測試集,這種反向差距表明可能存在特殊的數據分布或模型未充分學習訓練數據的複雜性。
實用建議:基於此結果,Stacking方法是最優選擇,其次是CDST和CatBoost。應避免使用SVR和Linear模型,因其誤差明顯較大。
總之,此圖清晰展示了各模型在該數據集上的預測性能,集成方法(特別是Stacking和CDST)效果最佳,而傳統的線性模型和SVR效果較差。OPEC模型雖在訓練集表現突出,但可能需要進一步調整以改善其泛化能力。
我們篩選了 4 個結果最佳的基礎模型,重新對 3 個集成模型進行訓練:
XGBRegressor
CatBoost Regressor
Gradient Boosting Regressor
HistGradientBoosting Regressor
模型: Stacking
測試集 RMSE: 4301.5600
訓練集 RMSE: 4659.8900
模型: CDST
測試集 RMSE: 4362.5800
訓練集 RMSE: 4570.8200
模型: OPEC-Stacking
測試集 RMSE: 4332.7700
訓練集 RMSE: 3957.6000
從上圖中可以看出:
三種模型選擇策略比較:圖表比較了三種模型選擇策略 - Stacking_Select、OPEC_Select 和 CDST_Select 的性能表現。
訓練集與測試集差異:
OPEC_Select 在訓練集上表現最佳,RMSE 值最低(約 3957.6),但在測試集上的表現(約 4332.8)略遜於 Stacking_Select
Stacking_Select 在測試集上表現最佳(RMSE 約 4301.6),但在訓練集上 RMSE 較高(約 4659.9)
CDST_Select 在訓練集(約 4570.8)和測試集(約 4362.6)上都表現較差
泛化能力分析:
Stacking_Select 在訓練集上表現較差但測試集上表現最好,顯示出良好的泛化能力
OPEC_Select 在訓練集上表現突出,但測試集表現略有下降,可能存在輕微過擬合
三種方法的測試集 RMSE 差異相對較小(4301-4362),表明它們的實際預測能力相近
訓練穩定性:
Stacking_Select 和 CDST_Select 的訓練集 RMSE 較高,OPEC_Select 明顯較低,表明 OPEC_Select 在訓練過程中能更好地擬合訓練數據
模型選擇建議:
如果優先考慮測試性能,Stacking_Select 是最佳選擇
如果需要在訓練和測試表現間取得平衡,OPEC_Select 可能是較好選擇
CDST_Select 雖然整體表現略遜,但訓練和測試差異較小,可能在某些穩定性要求高的場景有用
結論:圖表清晰顯示 Stacking_Select 在預測未見數據方面表現最佳,OPEC_Select 在訓練數據擬合上表現突出,而 CDST_Select 則相對平穩但整體性能略遜。實際應用時可根據特定需求選擇合適的模型選擇策略。