Appearance
淘天 Problem 5:自行车共享需求预测
- 来源:
noai-mis/淘天/Problem 5 - 类型:Tabular ML / time series regression
- 原始资料:
baseline.ipynb、scoring.py、data/day.csv、data/hour.csv、NOAI竞赛实战课程大纲最终版.pdf - 题面完整性:baseline notebook 完整
- 解法资料完整性:完整 baseline
题面大意
根据天气、季节、日期等特征预测 Washington D.C. 自行车租赁需求。Notebook 使用 day.csv 日粒度数据构建回归 baseline,hour.csv 可用于进阶模型。课程大纲将本题定位为“时序数据与信号处理”,重点是时序切分、滞后特征、滑动窗口统计、傅里叶变换和低通滤波。
数据特点
目标 cnt 是总租赁数,且 casual + registered = cnt,这两列会造成直接泄漏,必须排除。特征包含年份、月份、星期、季节、天气、温度、湿度、风速等,存在明显时间趋势和季节性。小时级数据有强烈的 24 小时日周期和 168 小时周周期,适合用频谱图理解需求变化。
考点
核心考点是时间序列验证和信号特征工程。由于数据按日期排列,普通随机 KFold 会让未来信息混入训练,得到过乐观分数;课程大纲要求对同一模型分别使用随机 KFold 与时序切分,比较交叉验证分数差异。另一个重点是构造滞后特征和滑动窗口统计,并理解移动平均相当于最简单的低通滤波。
涉及知识点
- 时间特征:年、月、星期、季节、趋势。
- Expanding Window 与 Rolling Window。
- 泄漏识别:
casual、registered。 - 滞后特征:lag 1、lag 7/24/168。
- 滑动窗口统计:rolling mean/std。
- 傅里叶变换、频谱图、低通滤波。
- Ridge/Lasso、RandomForest、GradientBoosting。
- KFold 与 TimeSeriesSplit。
- RMSE。
解法思路
按课程大纲,解法应先从验证方式做起。删除 instant、原始 dteday、casual、registered 等不应使用列,保留天气和时间字段;然后对同一模型分别使用随机 KFold、Expanding Window 和 Rolling Window/TimeSeriesSplit,比较 RMSE 差异,说明为什么时序任务不能随机打乱。
特征工程分三层。第一层是日历特征:年份趋势、月份、星期、周末、节假日、季节、天气、温度、湿度、风速,以及月份/星期的 one-hot 或 sin/cos 周期编码。第二层是时序统计:在 hour.csv 上构造滞后 1 小时、7 小时、24 小时、168 小时等特征,并计算滚动均值、滚动标准差、近期最大/最小等滑动窗口统计;构造时必须只使用当前时刻之前的信息。第三层是信号分析:对需求序列做傅里叶变换,绘制频谱图,定位能量最强的周期成分,预期包括 24 小时和 168 小时;再用低频成分重构信号,与原序列对比,理解低通滤波/移动平均对趋势的提取作用。
模型可以从 Ridge/RandomForest/GBDT 开始,用时序切分 RMSE 选型。日粒度 day.csv 适合讲基础回归流程,小时级 hour.csv 更适合展示周期、滞后和频域特征,上限也更高。
可选/多种解法
日粒度 GBDT:强 baseline,适合快速跑通。
小时粒度时序模型:加入 lag、rolling 和周期特征,上限更高。
随机 KFold 对照实验:用于演示时序泄漏造成的分数偏差。
傅里叶/低通滤波分析:不一定直接作为最终模型,但能帮助发现周期结构。
特殊技巧
casual 和 registered 是目标的组成部分,不能用于预测。所有 lag/rolling 特征必须先按时间排序,并只使用过去窗口。温度、季节、年份趋势通常很强。对月份/星期/小时可用 one-hot 或周期 sin/cos 编码。频谱图中的强峰值可帮助选择 lag 周期和 rolling 窗口。
调参优化
共享单车需求预测应把验证方式和时序特征作为主要调参对象。建议比较 Expanding Window 与 Rolling Window、lag 周期(1/7/24/168)、rolling 窗口大小、低通滤波窗口、小时/星期/月周期编码、节假日特征、天气分箱、目标 log 变换,以及 GBDT 的深度、叶子数、学习率和迭代轮数。随机切分只适合作为陷阱演示,不应用于最终选参。若峰值需求预测偏低,可调损失函数、目标变换或对高需求样本加权。
注意事项
随机切分可能让未来信息间接进入训练,若目标是未来预测,应使用 TimeSeriesSplit。异常天气和节假日可能导致误差大,需要单独分析。
推广意义
这是需求预测类表格回归的标准模板,适用于共享出行、零售销量、用电负荷等场景。