共享单车需求预测:时间特征工程 + 随机森林,R² 达到 0.931

📅 2026/6/16 16:38:23
共享单车需求预测:时间特征工程 + 随机森林,R² 达到 0.931
属性内容链接bike-sharing-demand-randomforest-time-features摘要基于 UCI Bike Sharing 数据集通过高峰时段、夜间、周末等时间特征工程使用随机森林回归预测每小时共享单车租赁量并解释关键影响因素。描述本文基于 UCI Bike Sharing 数据集展示时间序列回归的完整流程构造高峰时段、夜间、周末等特征使用随机森林回归预测每小时租车量R² 达到 0.931并分析哪些时间因素最影响需求。本项目由 星枢 支持星枢官网https://claudeaihub.cloud/共享单车需求预测时间特征工程 随机森林R² 达到 0.931前面几个项目覆盖了分类、回归、聚类、医疗二分类和特征工程二分类。这次做一个时间序列回归用 UCI Bike Sharing 数据集预测每小时共享单车租赁量。重点是展示时间特征工程的价值—— hour、是否高峰、是否夜间、是否周末这些特征对预测结果影响巨大。项目已开源https://github.com/coderWang404/xingshuProjects/tree/main/2026-06-14-bike-sharing-demand核心结论数据规模17,379 条小时级记录模型RandomForestRegressorR²0.9307RMSE46.84MAE28.73最强特征is_night是否夜间1. 数据集数据来自 UCI Machine Learning Repository 的 Bike Sharing Dataset包含华盛顿特区 Capital Bikeshare 系统 2011-2012 年的每小时租车记录。原始字段包括字段含义season季节1春2夏3秋4冬yr年份0201112012mnth月份hr小时0-23holiday是否节假日weekday星期几workingday是否工作日weathersit天气状况temp归一化温度atemp归一化体感温度hum归一化湿度windspeed归一化风速casual临时用户租车数registered注册用户租车数cnt总租车数目标目标cnt casual registered。为了防止数据泄漏训练时去掉了casual和registered只用时间、气象和构造的特征预测总量。2. 环境准备pandas numpy scikit-learn matplotlib seaborn requestsgitclone https://github.com/coderWang404/xingshuProjects.gitcdxingshuProjects/2026-06-14-bike-sharing-demand python-mvenv venvsourcevenv/bin/activate pipinstall-rrequirements.txt3. 运行实验python experiments/bike-sharing/run_experiment.py4. 时间特征工程这个项目的核心是构造有效的时间特征。原始数据里hr已经很有用但模型很难直接理解0-5 点是夜间、7-9 点和 17-19 点是通勤高峰这些业务知识。我构造了三个关键二值特征data[is_rush_hour]((data[workingday]1)(data[hr].isin([7,8,9,17,18,19]))).astype(int)data[is_weekend](data[weekday].isin([0,6])).astype(int)data[is_night]((data[hr]22)|(data[hr]5)).astype(int)另外还加了一个气象交互特征data[temp_atemp_diff]data[atemp]-data[temp]分类变量season, yr, mnth, hr, holiday, weekday, workingday, weathersit做了 one-hot 编码。最终输入模型的特征有 57 个。5. 建模与结果模型参数RandomForestRegressor(n_estimators300,max_depth15,min_samples_leaf2,random_state42,n_jobs-1,)测试集结果指标数值R²0.9307RMSE46.8373MAE28.7267R² 0.93 非常高说明模型能解释 93% 的租车量方差。对于共享单车这种受天气、节假日、突发事件影响很大的业务场景这个表现已经很好。散点图显示预测值和实际值高度集中在对角线附近。按小时聚合后模型几乎完美复刻了实际租车量的双峰模式早高峰和晚高峰。这说明hr和is_rush_hour两个特征捕获了主要的日内周期。6. 特征重要性夜间是最强信号Permutation Importance 排名前 10排名特征重要性1is_night0.67072is_rush_hour0.49403temp0.19304yr_10.19165workingday_10.09296hum0.06397hr_90.05918hr_70.04059atemp0.036110hr_60.0355is_night 排名第一这很合理夜间22:00-05:00租车量几乎降到接近 0这个二值特征能直接切掉一大块方差。is_rush_hour 排名第二说明通勤时段是工作日的核心需求。temp 排名第三温度对共享单车需求有显著正向影响——天气越暖和骑车的人越多。yr_12012 年排名第四说明租车量在逐年增长系统用户基数在扩大。一个有趣的观察是hr_9、hr_7、hr_6这些单个小时 one-hot 特征也进入了前十说明通勤高峰的具体小时有额外的信息不是光靠is_rush_hour就能完全捕捉。7. 这个实验的业务含义共享单车需求预测是一个典型的时间序列回归问题。这个结果可以指导实际业务调度高峰前把车辆调度到通勤热点维护夜间低需求时段进行车辆维护营销温度高的晴天加大推广力度容量规划根据年增长趋势yr_1扩容当然真实系统还需要考虑更复杂的因素特殊事件、地铁罢工、共享单车竞争、实时天气预警等。但这个实验展示了基础时间特征工程就能达到很好的效果。8. 实验输出运行脚本后experiments/bike-sharing/outputs/会生成metrics.json # 完整指标 JSON feature_importance.csv # 全部特征重要性 dataset_profile.csv # 数据统计 actual_vs_predicted.png # 实际 vs 预测散点图 residuals.png # 残差分布图 hourly_pattern.png # 按小时聚合趋势图 feature_importance.png # 特征重要性图 summary.md # 实验摘要9. 总结这个实验让我重新认识了时间特征工程在回归任务中的价值业务知识可以转化为强特征。“夜间租车少”、早晚高峰租车多这些常识通过is_night和is_rush_hour变成模型能直接使用的信号。随机森林对时间周期模式学习能力强。配合 one-hot 编码的hr模型能准确拟合双峰曲线。温度是气象因素中最关键的。这和日常经验一致。R² 0.93 不代表可以无脑上线。真实业务中还需要考虑极端天气、特殊事件、实时性等更复杂因素。如果想继续优化可以试试用 Gradient BoostingXGBoost / LightGBM对比加入前一天同时段的滞后特征lag features加入移动平均特征把预测目标从总量拆分为 casual 和 registered 分别建模本项目由 星枢 支持星枢官网https://claudeaihub.cloud/