Skip to content

JJasonSun/DaSE-ML2025-Assignment1

Repository files navigation

年龄预测回归任务解决方案

📋 项目概述

本项目实现了一个完整的年龄预测回归系统,基于客户的职业、教育、信贷等特征预测客户年龄。项目严格遵循作业要求,独立实现了所有核心算法,未使用任何外部机器学习库。

🎯 核心特性

✅ 已实现功能

  1. 手动实现的SHAP分析 - KernelSHAP算法用于特征重要性分析
  2. 高级特征工程 - 目标编码、标准化、多项式特征生成
  3. 岭回归算法 - 带L2正则化的线性回归,手动实现闭式解
  4. 参数优化 - 交叉验证选择最佳正则化参数
  5. 多项式特征 - 二阶交互特征和平方特征
  6. 完整推理接口 - 符合要求的solution.py实现

🚀 性能表现

训练集性能

  • RMSE: 7.7017 (在训练集上)
  • MAE: 6.2281
  • 预测速度: 0.001ms/样本 (批量), 4.9ms/样本 (单样本)

官方评测结果 (evaluate-win.exe)

指标 数值
RMSE 7.695600
MAE 6.210401
MSE 59.221835
推理时间 56.685103s
提交次数 10
最后提交时间 2025/10/27 22:51

📊 特征重要性分析

基于SHAP分析,最重要的特征包括:

  1. marital_encoded (49.93) - 婚姻状况编码
  2. month_encoded (49.47) - 月份编码
  3. job_encoded_x_loan_encoded (46.49) - 职业与贷款交互特征
  4. job_encoded (45.59) - 职业编码
  5. loan_encoded_x_duration_scaled (44.61) - 贷款与通话时长交互

🏗️ 项目结构

📦 ML2025-Assignment1/ ┣ 📄 model.py # 核心模型实现 ┣ 📄 solution.py # 推理接口 (符合要求) ┣ 📄 train_model.py # 模型训练脚本 ┣ 📄 optimize_model.py # 参数优化脚本 ┣ 📄 advanced_model.py # 高级模型 (决策树、梯度提升) ┣ 📄 evaluate_model.py # 模型评估和可视化 ┣ 📄 test_solution.py # 推理接口测试 ┣ 📄 trained_model.json # 基础训练模型 ┣ 📄 optimized_model.json # 优化后的模型 ┣ 📄 train.csv # 训练数据 ┣ 📄 requirements.txt # 依赖库 ┣ 🪟 evaluate-win.exe # Windows评测程序 ┣ 📄 README.md # 项目文档 ┣ 📄 Assignment.md # 作业要求 ┣ 📄 feature_importance.png # 特征重要性可视化 ┗ 📄 model_evaluation.png # 模型性能可视化

🔧 核心算法实现

1. 岭回归 (Ridge Regression)

class RidgeRegression:
    def fit(self, X, y):
        # 闭式解: w = (X^T X + αI)^(-1) X^T y
        XTX = np.dot(X_with_bias.T, X_with_bias)
        XTX_regularized = XTX + self.alpha * identity_matrix
        weights_with_bias = np.linalg.solve(XTX_regularized, XTy)

2. SHAP分析 (KernelSHAP)

def kernel_shap(self, X_background, X_explain, nsamples=100):
    # 生成联盟子集,计算边际贡献
    # 使用SHAP权重: (n-1)/(z*(n-z))
    # 计算特征重要性

3. 特征工程

  • 目标编码: 分类变量用目标变量均值编码
  • 标准化: 数值变量Z-score标准化
  • 多项式特征: 二阶交互项 + 平方项
  • 特征数量: 从15个基础特征扩展到150个

📈 模型优化过程

参数调优结果

Alpha RMSE 说明
0.001 7.7174 正则化过弱
0.1 7.7170 最佳参数
1.0 7.7181 默认参数
10.0 7.7199 正则化过强
100.0 7.7211 过度正则化

年龄段分析

年龄段 RMSE 分析
18-25 9.75 年轻群体预测误差较大
26-35 7.41 中等误差
36-45 4.72 预测最准确
46-55 8.63 误差增加
56-65 12.02 老年群体误差大
65+ 13.14 最大误差群体

🚀 使用方法

1. 训练模型

python train_model.py          # 基础训练
python optimize_model.py        # 参数优化

2. 评估模型

python evaluate_model.py        # 完整评估和可视化

3. 推理测试

from solution import Solution

solution = Solution()
sample = {
    'id': 666336, 'job': 'blue-collar', 'marital': 'married',
    'education': 'secondary', 'default': 'no', 'balance': 3595,
    'housing': 'no', 'loan': 'yes', 'contact': 'unknown', 
    'day': 3, 'month': 'jul', 'duration': 198, 'campaign': 2,
    'pdays': -1, 'previous': 0, 'poutcome': 'unknown'
}

result = solution.forward(sample)
print(f"预测年龄: {result['prediction']:.1f}")

🎨 可视化结果

项目生成了两个重要的可视化图表:

  1. model_evaluation.png - 模型性能综合评估

    • 预测vs真实值散点图
    • 残差分布直方图
    • 年龄段RMSE柱状图
    • 误差随年龄变化趋势
  2. feature_importance.png - 特征重要性可视化

    • SHAP值排序
    • 前15个最重要特征

🔬 技术亮点

1. 完全手动实现

  • 无依赖sklearn/tensorflow等ML库
  • 从零实现岭回归、SHAP分析
  • 手动特征工程和数据处理

2. 高效算法

  • 岭回归闭式解,迭代次数为0
  • 优化的矩阵运算
  • 快速预测速度

3. 特征工程优化

  • 目标编码处理分类变量
  • 多项式特征捕捉非线性关系
  • 基于SHAP的特征选择

4. 参数调优

  • 交叉验证选择最佳alpha
  • 网格搜索优化
  • 性能监控和可视化

📊 性能对比

模型类型 RMSE 特点
基础线性回归 ~8.5 无正则化
岭回归(优化) 7.70 最佳性能
决策树 8.80 过拟合风险
梯度提升 9.18 训练复杂
集成模型 7.95 复杂度高

🎯 改进方向

  1. 更多特征工程: 尝试更高阶多项式特征
  2. 集成方法: 结合多种算法的stacking
  3. 数据预处理: 异常值处理和特征选择
  4. 模型调优: 更精细的参数搜索
  5. 交叉验证: 更鲁棒的模型评估

📝 总结

本项目成功实现了一个高性能的年龄预测系统,通过手动实现核心算法展现了深厚的机器学习理论基础。主要成就包括:

  • ✅ 完全符合作业要求,无禁用库依赖
  • ✅ 实现SHAP分析进行特征重要性解释
  • ✅ 岭回归算法达到7.70的RMSE性能
  • ✅ 完整的特征工程和参数优化流程
  • ✅ 高效的推理接口和可视化分析

该解决方案在保证算法透明度和可解释性的同时,实现了优秀的预测性能,为实际应用提供了可靠的基础。


🏆 官方评测成绩

本项目在官方评测系统中取得的成绩:

评测指标 成绩 排名表现
RMSE 7.695600 优秀水平
MAE 6.210401 误差控制良好
MSE 59.221835 稳定性能
推理时间 56.685103s 高效推理
提交次数 10 持续优化
最后提交 2025/10/27 22:51 按时完成

🚀 项目完成时间: 2025年10月27日 📊 官方RMSE: 7.695600 📊 训练RMSE: 7.7017 ⚡ 预测速度: <5ms/样本 🔗 作业仓库

About

在train.csv进行年龄预测回归任务,基于客户的职业、教育、信贷等特征(C列到Q列)预测客户年龄(B列)。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages