1. 项目背景与核心目标
这个项目源于我在准备研究生复试期间的一个实战练习。当时手头正好有一份公开的新冠疫情数据集,就想尝试用回归分析的方法来预测未来几天的确诊人数变化。对于数据科学初学者来说,疫情数据具有典型的时序特征,且变量间存在明显的相关性,非常适合用来练习回归模型的构建与优化。
项目的核心目标是:基于历史疫情数据(包括每日新增确诊、治愈人数、检测数量等特征),构建一个能够预测未来3天新增确诊人数的回归模型。这不仅考验特征工程的能力,还需要处理时间序列数据特有的自相关性等问题。我选择了从最简单的线性回归开始,逐步尝试更复杂的模型,最终得到了RMSE在15以内的预测效果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与特征工程
2.1 数据来源与清洗
使用的数据集来自某公共卫生机构的公开数据,包含以下字段:
- date:日期(作为索引)
- new_cases:当日新增确诊
- tests:检测数量
- hospitalized:在院治疗人数
- recovered:当日治愈人数
清洗过程特别注意了以下几点:
- 处理缺失值:用前后7天的移动平均值填充
- 异常值处理:对超过3倍标准差的数据点进行Winsorize缩尾
- 数据平滑:对new_cases列应用7天移动平均,减少周末报告延迟的影响
python复制# 示例:数据平滑处理
df['new_cases_smoothed'] = df['new_cases'].rolling(
window=7,
min_periods=3,
center=True
).mean()
2.2 特征构造技巧
除了原始特征外,构造了以下衍生特征:
- 滞后特征:创建new_cases的1-7天滞后项
- 变化率:检测数量的周环比变化
- 交互特征:住院人数与治愈人数的比值
- 时间特征:星期几的one-hot编码
注意:滞后特征会导致前几行出现NaN,需要统一在最后才删除缺失值
3. 回归模型构建与优化
3.1 基线模型选择
从简单到复杂尝试了以下模型:
- 线性回归(LinearRegression)
- 带L2正则的岭回归(Ridge)
- 随机森林回归(RandomForestRegressor)
- XGBoost
