基于Python的共享单车租赁数据分析与预测系统,技术栈flask+boostrap+随机森林+XGBoost
1 绪论
1.1 项目背景
近年来,随着城市交通拥堵及环境污染问题越来越严峻,共享单车作为绿色、快捷的短距离出行方式在全球范围得到快速发展。共享单车借助移动互联网实现了无桩、随取随还,解决了城市居民出行中的“最后一公里”难题,并逐步成为了城市交通系统中不可或缺的部分。但共享单车存在不少问题,如何科学地进行共享单车租赁量预测,并据此对单车数量进行调配是共享单车面临的最大难题。
传统调度方式多基于经验判断及简单统计模型,无法满足复杂的时空动态变化特性。共享单车骑行需求受诸多因素的影响:时间因素(如季节性和周期性)、天气因素(如温度、湿度、风速、降水)、节假日、周围环境等,并相互交织在一起,具有较强的非线性特征及复杂的时空相关性,难以直接进行有效预测。因此,利用数据挖掘技术和机器学习方法构建需求预测模型是降低生产成本的重要途径。
1.2 研究意义
本文的研究意义主要包括理论意义及现实意义两方面,在理论层面上,本文探究的是机器学习算法对时间序列进行预测,尤其是集成学习(Random Forest、XGBoost、LightGBM) 在处理高维、非线性的数据上具有的优越性。此外,还采用 SHAP(Shapley Additive Explanations) 可解释模型挖掘出各个变量对于最终预测值产生的边际效应,在一定程度上解释了共享单车的需求驱动因素。
1.3 研究现状
1.3.1 国内研究现状
目前国内外针对共享单车的需求预测方面的研究有很多,国外的研究多是基于传统的统计学的方法,例如 ARIMA 模型、指数平滑法等等,这些模型都是假设时间序列具有线性和稳定性,在面对共享单车这种需求不具有稳定性和线性等特点的情况下无法进行准确的描述;而国内的相关研究则更多地引入了机器学习算法来进行单车需求预测。在大数据背景下,越来越多的学者采用机器学习的方法进行研究。
1.3.2 国外研究现状
国外共享单车发展较早,在该领域的研究更为成熟。Capital Bikeshare、Citi Bike、Velib 等大规模的共享单车系统运行数据为学术研究提供数据支持[10]。
1.4 系统概述
本文所设计的系统是基于 Python 编程语言的共享单车租赁数据分析以及预测系统,“数据驱动+模型对比+解释性分析+系统实现” 的整体研究思路贯穿于数据清洗、特征构造、建模、结果可视化之中;系统的后端采用 Flask 轻量级 Web 开发框架,前端利用 Bootstrap 响应式布局和 ECharts 数据可视化库,数据库选用 SQLite 轻量级关系型数据库。
本系统的具体主要功能有以下几点:数据采集及预处理部分,对真实的 CSV 数据做数据清洗工作;特征构造部分,生成时间周期特征、滞后特征、滑动窗口特征等;模型训练比较部分,实现 Linear Regression、Random Forest、XGBoost、LightGBM 四个模型的训练以及比较等功能。超参数调优单元,使用 Optuna 贝叶斯搜索结合5折交叉验证找到最佳参数组合;可解释性单元,利用 SHAP 提供全局及部分特征重要性的解释;网页展示单元,支持24h需求预测、敏感度实验、智能排产推荐等功能。
本文采用 Capital Bikeshare 的真实运营数据(2017-2018),该数据集具有完整的天气信息以及租赁信息,共包括了10886组数据,并将这些数据按照时间进行切分,其中80%的数据作为训练集,另外20%作为验证集。最终 LightGBM 模型表现最好,R²=0.968,RMSE=60.26,提示本系统的准确度高,可操作性强。
2 系统分析
2.1 系统需求分析
2.1.1 功能需求
系统的功能需求从用户和管理员两个角度进行分析。
1.用户
通用用户的函数需求为用户认证、预测分析及结果可视化。
2.管理员
管理员的功能需求除了一般用户的全部权限之外,还包含系统管理以及模型管理功能。
2.3 业务流程分析
单车租赁数据分析与预测系统从业务流的角度从用户的业务流程以及管理员的业务流程来分析。
用户流程从用户注册和登录开始,一个新用户首先访问系统,输入用户名和密码完成注册功能,在此过程中系统会校验用户名是否唯一,并采用 SHA256 加密算法对密码进行加密,最终将信息保存在数据库中。注册完成后,利用用户名和密码进入系统,当系统校验成功后,生成 Session 并重定向到主页上。在登录页面之后,用户进入预测分析功能,在 Web 页面中填入未来一天的天气预报情况,如温度、湿度、风力大小以及天气等级。然后将这些数据输入到系统中,并对其进行特征变换,最后利用 LightGBM 模型进行推理,得到各个时间段的租赁需求预测数值。并且利用 ECharts 动态折线图显示预测出的结果。用户可通过对图表进行缩放、移动,查看详细的图表信息;用户也可进入数据分析页签中,查看模型性能比较图、特征重要性排名、残差分析等信息;SHAP 分析页签显示全局特征重要性和局部样本解释,方便用户了解各个影响因素对于预测值的影响作用;AI 智能建议页签把预测结果输入到 Deepseek API 中,提供专业的车辆调度意见,如增补多少辆车、调走几辆车等具体的调度意见;将预测结果以 CSV 文件形式导出或者修改个人资料及登录密码。
管理者流程从管理者登录后台管理开始。管理者以拥有管理员权限的账号登录到管理系统中,并进入管理后台,可以看到全部注册用户的列表(包含用户名、注册时间、最近一次登录时间、进行过多少次预测等统计数据),可对违规用户账号进行禁用、清理僵尸用户、重置用户密码等处理。Model Retraining 功能由管理员手动调用,后台将读取最新的 CSV 文件,并进行相应的预处理、特征转换以及机器学习模型训练并发布新的预测模型;Hyperparameter Tuning 可以根据管理者的意愿来设定 Optuna 的采样范围、迭代次数、CV 分组数量等超参数调节机制;System Setting 模块用于指定访问 API 所需的 Token Key、PostgreSQL 路径、Debug 模式、Session Timeout 时间等信息。监控:显示当前服务器各资源占用情况、API 调用次数、预测任务队列数等,同时对超限的资源进行告警提示。日志查看:提供日志查看及下载页面,在该页面中可按照时间、级别以及模块等条件进行日志检索,并可通过该页面下载日志到本地。方便故障处理及系统调试。
用户部分业务流程图如图2-1所示。

图2-1 用户部分业务流程图
管理员部分业务流程图如图2-2所示。

图2-2 网站管理员部分业务流程图
3 系统设计
3.1 系统物理环境配置
系统硬件平台的最低配置:
1.CPU:Intel Core i5处理器。
2.内存:8G DDR。
3.硬盘:100GB。
4.基本的输入、输出设备。
系统软件平台的配置:
软件配置环境为:
1.操作系统:Windows 10 Professional Edition。
2.数据库软件:MySQL8.0及以上。
3.系统开发软件:pycharm2023及以上。
本系统按照三层体系进行搭建:即数据层 + 应用层 + 表现层。其中,数据层采用了 SQLite 嵌入式数据库,并将其放置于服务器上的 data 文件夹中。SQLite 数据库不需要单独的服务程序来运行,消耗的资源少,在数据量不大的情况下,是较好的选择;数据库中的文件采用典型的三级模式设计,包括原生数据表、清洗后数据表、用户表以及预测结果表,保证了数据的一致性及完整性。
3.2 项目规划
共享单车租赁数据分析与预测系统在Python开发平台之下,Python 3.8+语言被选择为开发语言。Flask框架和scikit-learn核心组件对程序的执行负责。采用了由数据存储层、业务逻辑层和表现层组成的B/S模式的三层结构。未注册用户可以浏览系统的登录页面和注册页面,但当未注册用户出现预测分析、查看数据分析、SHAP分析等操作时,系统将提醒用户登录并且引导未注册用户先行注册。系统设计具有如下功能:
1. 通过用户注册带来的信息导入和连接、用户登录登出操作、天气参数输入、24小时需求预测、预测结果可视化、数据分析图表浏览、特征重要性查看、残差分析、SHAP全局与局部解释、智能调度建议查看、个人信息的变更等。
2. 对模型的管理、面向用户的模型重新训练、超参数优化策略调整、系统配置管理、系统资源监控、日志管理、用户账号管理等。
3.3 系统概要设计
设计过程中,将系统功能按照层次划分,最终形成现有系统。如图3-1所示。

图3-1 系统功能模块结构图
用户模块主要为普通用户提供全面的预测分析服务。
管理员模块针对系统管理员,提供系统管理和高级管理功能。
3.4 数据库设计
3.4.1 概念设计
数据库概念设计采用实体-关系(ER)模型,描述系统中的主要实体及其关系。系统包含五个主要实体:用户、原始数据、预处理数据、预测结果和日志记录。
用户实体属性图如图3-2所示。

图3-2 用户实体属性图
原始数据实体属性图如图3-3所示。

图3-3 原始数据实体属性图
预处理数据实体属性图如图3-4所示。

图3-4预处理实体属性图
预测数据实体属性图如图3-5所示。

图3-5预测数据实体属性图
系统E-R图如图3-6所示。

图3-6 系统E-R图
3.4.3 数据库各表明细
数据库中的表都是与代码中的实体相关联,因此数据库中共建立了5张数据库表。
users表(用户表)如表3-1所示。
表3-1 用户表表
|
字段名 |
说 明 |
类 型 |
长 度 |
可否为空 |
主键 |
|
id |
用户唯一标识 |
INTEGER |
否 |
是 |
|
|
username |
用户名 |
varchar |
否 |
否 |
|
|
password_hash |
密码SHA256哈希值 |
varchar |
50 |
否 |
否 |
|
created_at |
账号创建时间 |
TIMESTAMP |
否 |
否 |
|
|
last_login |
最后登录时间 |
TIMESTAMP |
否 |
否 |
raw_data表(原始数据表)如表3-2所示。
表3-2 raw_data表
|
字段名 |
说 明 |
类 型 |
长 度 |
可否为空 |
主键 |
|
id |
记录唯一标识 |
INTEGER |
否 |
是 |
|
|
datetime |
日期时间 |
TIMESTAMP |
否 |
否 |
|
|
season |
季节编号(1-4) |
INTEGER |
否 |
否 |
|
|
holiday |
是否为节假日 |
BOOLEAN |
否 |
否 |
|
|
workingday |
是否为工作日 |
BOOLEAN |
否 |
否 |
|
|
weather |
天气等级(1-4) |
INTEGER |
否 |
否 |
|
|
temp |
温度(摄氏度) |
FLOAT |
否 |
否 |
|
|
atemp |
体感温度(摄氏度) |
FLOAT |
否 |
否 |
|
|
humidity |
湿度百分比 |
FLOAT |
否 |
否 |
|
|
windspeed |
风速(km/h) |
INTEGER |
否 |
否 |
|
|
casual |
非注册用户租赁数量 |
FLOAT |
否 |
否 |
|
|
registered |
注册用户租赁数量 |
INTEGER |
否 |
否 |
|
|
count |
总租赁数量 |
INTEGER |
否 |
否 |
processed_data表(预处理数据表)如表3-3所示。
表3-3 processed_data表
|
字段名 |
说 明 |
类 型 |
长 度 |
可否为空 |
主键 |
|
id |
记录唯一标识 |
INTEGER |
否 |
是 |
|
|
raw_data_id |
关联原始数据 |
INTEGER |
否 |
否 |
|
|
hour_sin |
小时正弦编码 |
FLOAT |
否 |
否 |
|
|
hour_cos |
小时余弦编码 |
FLOAT |
否 |
否 |
|
|
dayofweek_sin |
星期正弦编码 |
FLOAT |
否 |
否 |
|
|
dayofweek_cos |
星期余弦编码 |
FLOAT |
否 |
否 |
|
|
month_sin |
月份正弦编码 |
FLOAT |
否 |
否 |
|
|
month_cos |
月份余弦编码 |
FLOAT |
否 |
否 |
|
|
count_lag_24 |
24小时前租赁量 |
FLOAT |
否 |
否 |
|
|
count_lag_48 |
48小时前租赁量 |
FLOAT |
否 |
否 |
|
|
count_rolling_mean_72 |
72小时滑动均值 |
FLOAT |
否 |
否 |
|
|
count_rolling_std_72 |
72小时滑动标准差 |
FLOAT |
否 |
否 |
|
|
temp_weather_interaction |
温度天气交叉特征 |
FLOAT |
否 |
否 |
processed_data表中的衍生特征是提升模型预测能力的关键。下面对正弦余弦编码和交叉特征进行详细说明:
正弦余弦编码(hour_sin/hour_cos, dayofweek_sin/dayofweek_cos, month_sin/month_cos)正弦余弦编码是一种处理周期性时间特征的技术,用于解决普通数值编码无法表达周期性的问题。以小时特征为例:小时是0-23的整数,如果直接使用数值编码,模型会认为23点和0点相差很远(距离为23),但实际上它们是相邻的(只差1小时)。同样,星期一到星期日(1-7)、月份1月到12月也存在类似的周期性问题。将周期性特征映射到单位圆上,使用正弦和余弦两个值共同表示一个周期性特征:
hour_sin = sin(2π × hour / 24)
hour_cos = cos(2π × hour / 24)
具体示例:
0点:sin(0)=0, cos(0)=1 → (0, 1)
6点:sin(π/2)=1, cos(π/2)=0 → (1, 0)
12点:sin(π)=0, cos(π)=-1 → (0, -1)
18点:sin(3π/2)=-1, cos(3π/2)=0 → (-1, 0)
23点:sin(23π/12)≈-0.26, cos(23π/12)≈0.97 → (-0.26, 0.97)
24点(即0点):回到(0, 1),与0点完全相同。同理,星期特征使用周期7进行编码,月份特征使用周期12进行编码。
温度天气交叉特征(temp_weather_interaction),交叉特征是将两个或多个特征进行组合,以捕捉它们之间的交互效应。温度天气交叉特征的计算公式为:
temp_weather_interaction = temp × (5 - weather)
其中:
temp:实际温度(已归一化到0-1范围)
weather:天气等级(1=晴朗,2=多云,3=小雨/小雪,4=恶劣天气)
(5 - weather):将天气等级反转,天气越好值越大(晴朗=4,恶劣=1)
此变量综合表达了 “骑得舒服程度”,weather=1(晴) 时:系数为4,温度影响被放大;weather=4(恶劣) 时:系数为1,温度影响被削弱;符合现实情况:晴天温度合适骑车意愿大,恶劣天气就算温度合适骑车意愿也不大。
具体示例:
晴朗天气(weather=1),温度25°C(temp≈0.75):交叉特征 = 0.75 × 4 = 3.0
多云天气(weather=2),温度25°C(temp≈0.75):交叉特征 = 0.75 × 3 = 2.25
恶劣天气(weather=4),温度25°C(temp≈0.75):交叉特征 = 0.75 × 1 = 0.75
通过这种方式组合起来的特征能够让模型学到 “ 温度“ 和 ”天气“共同影响 ”骑行需求“的规律,会比单纯的温度或者天气特征更加有利于对骑行需求 进行预测。
predictions表(预测结果表)如表3-4所示。
表3-4 predictions表
|
字段名 |
说 明 |
类 型 |
长 度 |
可否为空 |
主键 |
|
id |
预测唯一标识 |
INTEGER |
否 |
是 |
|
|
user_id |
关联用户ID |
INTEGER |
否 |
否 |
|
|
prediction_time |
预测发起时间 |
TIMESTAMP |
否 |
否 |
|
|
hour |
预测时段(0-23) |
INTEGER |
否 |
否 |
|
|
predicted_count |
预测租赁量 |
float |
否 |
否 |
|
|
confidence_score |
预测置信度 |
float |
200 |
否 |
否 |
|
weather_input |
输入天气参数(JSON) |
TEXT |
200 |
否 |
否 |
3.5 系统详细设计
系统详细设计采用时序设计方法,描述各组件之间的交互流程。
3.5.1 用户模块设计
用户时序设计涉及用户、前端界面、Flask后端、SQLite数据库、LightGBM模型和DeepSeek API等多个组件。
用户注册流程:用户在前端注册页面输入用户名和密码,前端进行表单验证后发送POST请求到/api/auth/register接口,Flask后端接收请求后查询数据库验证用户名唯一性,使用SHA256算法加密密码,将用户信息插入users表,返回注册成功响应,前端跳转到登录页面。注册流程时序如图3.7所示:

图3-7 注册时序图
用户登录流程:用户输入用户名和密码,前端发送POST请求到/api/auth/login接口,Flask后端查询数据库验证用户名和密码,验证成功后创建Session存储用户信息,返回用户数据,前端跳转到主页面。登录时序如图3-8所示

图3-8 登录时序图
预测分析流程:用户在预测页面输入24小时天气参数,前端发送POST请求到/api/predict接口,Flask后端接收天气数据,调用特征工程模块进行特征转换(计算时间周期特征、滞后特征、滑动窗口特征、交叉特征),使用StandardScaler标准化特征,加载LightGBM模型文件进行推理,输出24小时预测值,同时将预测结果发送到DeepSeek API获取智能调度建议,前端接收响应后通过ECharts绘制折线图展示预测结果和调度建议。预测分析时序图如图3-9所示:

图3-9 预测分析时序图
数据分析流程:用户访问数据分析页面,前端发送GET请求到/api/data-analysis接口,Flask后端查询数据库获取模型训练日志、特征重要性数据、残差数据,生成ECharts配置对象,返回图表数据,前端渲染模型性能对比图、特征重要性排序图、残差分析图等。数据分析时序如图3-10所示;

图3-10 数据分析时序图
SHAP分析流程:用户访问SHAP分析页面,前端发送GET请求到/api/shap-analysis接口,Flask后端加载SHAP解释器,计算全局特征重要性,生成局部样本解释,返回SHAP值数据,前端绘制 beeswarm图和瀑布图。如图3-11SHAP分析时序图所示:

图3-11 SHAP分析时序图
登出流程:用户点击登出按钮,前端发送POST请求到/api/auth/logout接口,Flask后端清除Session,返回登出成功响应,前端跳转到登录页面。具体如图3-12所示。

图3-12 登出时序图
3.5.2 管理员模块设计
管理员时序设计包括管理员、管理后台界面、Flask 后端、SQLite 数据库、模型训练模块等。
用户管理过程:由管理员登录管理后台,前端发到 /api/admin/users 的一个 get 请求,Flask 后台对 users 表做一个查找得到所有的用户表并返回给前端(包含用户名、注册时间、最后登录时间和预测次数),前端显示是一个用户列表表格。管理员点击其中一个用户的禁用按钮,前端向 /api/admin/users/{id}/disable 发送 PUT 请求,Flask 后端修改 users 表 disabled 字段为 true,并返回 success 响应结果。如图3-13 用户管理时序图

图3-13 用户管理时序图
模型管理流程:管理员点击重新训练模型按钮,前端发送POST请求到/api/admin/model/train接口,Flask后端调用DataFetcher加载最新CSV数据,调用DataPreprocessor进行数据清洗,调用FeatureEngineer提取特征,调用ModelTrainer训练四种模型,使用Optuna进行超参数优化,选择最优模型保存到models目录,返回训练进度和性能指标,前端实时展示训练日志。如图3-14 模型管理时序图

图3-14 模型管理时序图
参数调整流程:管理员在参数配置页面修改Optuna搜索空间参数,前端发送PUT请求到/api/admin/config/params接口,Flask后端更新配置文件,重新加载参数,返回配置成功响应。具体如图3-15所示。

图3-15 参数调整时序图
4 系统实现
4.1 系统技术实现
4.1.1 python简介
Python 是一种计算机程序设计语言,是一个高层次的结合了 解释性语言 和 编译性语言 特色的脚本语言,类似 Perl 脚本。简单易学,特色丰富。它是由 Guido van Rossum 于1991年开发,而且现在仍在积极地开发。Python 是免费的,而且有着一个很有活力的社群。它的设计哲学上强调查阅性以及清晰的语法(使用空白来指定语法结构而不是大括号或者小数点) 。Python 的标准库和第三方库非常多,并且在数据分析、机器学习、Web开发、自动脚本等领域都有大量的应用,所以 Python 是目前数据科学以及机器学习领域的最流行语言之一。
4.1.2 Bootstrap概述
Bootstrap 是由 Twitter 开发的一组前端框架,可以用来快速创建响应式的、面向移动端 Web 项目。它包含了 CSS 样式库以及 JavaScript 插件,其中包括了网格系统、排版样式、表格、表单、按钮、导航栏、模态框、轮播图等常用的组件。开发者只需要在 HTML 中加入对应的 CSS 类名,就可以使用预先设定好的样式,而不需要自己手动去写 CSS 的代码了,可以节省不少时间。
4.1.3 模型算法简介
系统实现了四种机器学习算法:线性回归、随机森林、XGBoost和LightGBM。线性回归是最简单的回归算法,假设因变量与自变量之间存在线性关系,通过最小化预测值与真实值之间的平方误差来拟合模型参数。线性回归的优点是模型简单、解释性强,计算速度快。缺点是只能捕捉线性关系,对非线性数据的拟合能力有限。在本系统中,线性回归作为基线模型,用于评估其他模型的性能提升。
4.1.4 数据库简介
SQLite 是一个嵌入式的关联式数据库系统,它由 D. Richard Hipp 在2000年开发完成。不同于 MySQL 或 PostgreSQL 这类传统的数据库,SQLite 并没有单独的服务程序,在磁盘上 SQLite 数据库是作为单个文件存在的。应用通过 SQLite 提供的 C 库来使用数据库,库文件被编译进应用内或者作为 dll 加载进来,所以 SQLite 是一个嵌入式的数据库,特别适合于小型的应用程序以及移动应用。
4.2 算法实现
4.2.1 随机森林模型实现
随机森林模型的实现包含数据准备、模型训练、预测和评估四部分。在数据准备中,对数据进行特征工程处理,提取时间周期特征、滞后特征和滑动窗口特征。之后将数据按照时间先后顺序划分成训练集和测试集两部分,并设定其比值为80:20,保证测试集的数据时间晚于训练集的日期,防止未来泄露。最后用 StandardScaler 对数值型属性做归一化处理,求出训练集的平均数及标准差,并在训练集和测试集上同时使用同样的转换。评估指标在测试集上计算,反映模型的泛化能力。如同4-1所示:
图4-1随机森林评估结果
根据随机森林评估结果显示,随机森林模型在测试集上的RMSE为77.71,MAE为49.12,R²为0.8609,显著优于线性回归基线模型(RMSE=110.52,MAE=79.32,R²=0.7187)。特征重要性分析表明,滞后特征(count_lag_24, count_lag_48)和滑动窗口特征(count_rolling_mean_72)是最重要的特征,这说明历史租赁量对当前租赁量有很强的预测能力。主页面如图4-1所示。
4.2.2 XGBoost模型实现
XGBoost 模型构建步骤与随机森林相似,不同的是 XGBoost 的算法原理以及超参设置。其中,在数据预处理过程中,XGBoost 可以自行处理缺失值,因此不需要做缺失值填补操作;在该系统的训练中,为与其他方法统一,仍然做了缺失值填补工作。在特征处理上,XGBoost 对特征缩放并不敏感,可省略 StandardScaler 步骤,直接使用原始特征。XGBoost 支持类别特征的原生处理,在天气等级、季节等类别型特征上,直接输入即可,不需要做独热编码。
如图4-2所示

图4-2 xgboost评估结果
SHAP分析显示,XGBoost模型的特征重要性排序与随机森林类似,滞后特征和滑动窗口特征排名靠前。局部解释表明,单个预测结果的主要影响因素与全局特征重要性一致,但也存在样本特异性,例如某些样本的天气特征贡献更大。如图4-3所示

图4-3 SHAP分析结果
4.2.3 LightGBM模型实现
LightGBM 模型实现充分利用了 LightGBM 的特点,在数据准备方面,LightGBM 可以处理类别特征,如小时、星期、天气等级等类别型特征可声明为 category 类型,LightGBM 内部会自动处理,不用进行独热编码。LightGBM 对数据量大的情况有特别的优化,建议能够从文件读入数据以节省内存,在本系统中由于数据量较小(大约1万条),所以将所有数据都加载进内存进行处理。
如图4-4所示

图4-4 LightGBM模型评估结果
评估结果显示,LightGBM模型在测试集上的RMSE为60.26,MAE为38.55,R²为0.9164,在四种模型中表现最佳。训练时间方面,LightGBM比XGBoost快约3倍,比随机森林快约5倍。内存占用方面,LightGBM比XGBoost低约40%,比随机森林低约60%。这些优势使得LightGBM成为本系统的最优模型。
4.2.4 模型对比

图4-5 模型对比结果
如图4-5所示,从预测精度角度看,LightGBM表现最佳,R²达到0.9164,能够解释91.64%的方差。其次是 XGBoost 的 R²=0.9116;然后是随机森林的 R²=0.8609;最后是线性回归的 R²=0.7187。Boosting 类模型(XGBoost、LightGBM) 明显好于 Bagging 类模型(随机森林),说明对于共享单车的需求预测这一任务来说,并行集成的学习方式不如逐步纠错学习的方式有效。
4.2.5 预测分析
为验证系统的实际预测效果并展示完整的数据分析与预测流程,本节选取一个具体案例进行详细分析。
(1)案例背景
预测场景:假设运营人员需要在2018年1月15日(周一,工作日)预测当天24小时的共享单车租赁需求,以便提前安排车辆调度。
历史数据情况:系统已收集2017年1月至2018年1月14日的完整租赁记录,包含天气信息和租赁数量。预测时需要使用历史数据计算滞后特征和滑动窗口特征。
(2)模型输入数据
输入参数(用户在系统界面输入),如表4-1所示。
表4-1 输入参数表
|
参数 |
输入值 |
说明 |
|
日期 |
2018-01-15 |
预测日期 |
|
温度 |
8°C |
当日平均温度 |
|
体感温度 |
5°C |
考虑风寒效应 |
|
湿度 |
65% |
相对湿度 |
|
风速 |
12 km/h |
平均风速 |
|
天气等级 |
2 |
多云,适合骑行 |
|
是否节假日 |
否 |
正常工作日 |
|
是否工作日 |
是 |
周一 |
系统自动计算的衍生特征,根据输入参数,系统自动计算以下特征:如表4-2所示。
表4-2 衍生特征表
|
特征名称 |
计算值 |
计算方法 |
|
hour_sin |
每小时计算 |
sin(2π × hour / 24) |
|
hour_cos |
每小时计算 |
cos(2π × hour / 24) |
|
dayofweek_sin |
0.78 |
sin(2π × 1 / 7) = sin(0.897) |
|
dayofweek_cos |
0.62 |
cos(2π × 1 / 7) = cos(0.897) |
|
month_sin |
0.50 |
sin(2π × 1 / 12) = sin(0.524) |
|
month_cos |
0.87 |
cos(2π × 1 / 12) = cos(0.524) |
|
count_lag_24 |
使用历史数据 |
2018-01-14同小时租赁量 |
|
count_lag_48 |
使用历史数据 |
2018-01-13同小时租赁量 |
|
count_rolling_mean_72 |
使用历史数据 |
前72小时滑动平均 |
|
count_rolling_std_72 |
使用历史数据 |
前72小时滑动标准差 |
|
temp_weather_interaction |
0.81 |
0.27(temp) × 3(5-weather) |
以8点时段为例,完整特征向量如下,特征向量(24维):
[0.00,-0.87,0.78,0.62,0.50,0.87,1,0,1,2,0.27,0.22,0.65,0.32,156.0,142.0,148.5,18.3, ... ]
(3)预测结果
24小时预测值,系统调用LightGBM模型,输出2018年1月15日24小时的租赁需求预测如表4-3所示:
表4-3 衍生特征表
|
时段 |
预测租赁量 |
置信区间下限 |
置信区间上限 |
特征影响分析 |
|
0:00-1:00 |
45 |
35 |
55 |
深夜,需求低 |
|
1:00-2:00 |
28 |
20 |
36 |
需求最低时段 |
|
2:00-3:00 |
18 |
12 |
24 |
深夜低谷 |
|
3:00-4:00 |
12 |
8 |
16 |
全天最低点 |
|
4:00-5:00 |
15 |
10 |
20 |
开始回升 |
|
5:00-6:00 |
35 |
28 |
42 |
早高峰前奏 |
|
6:00-7:00 |
78 |
65 |
91 |
早高峰开始 |
|
7:00-8:00 |
156 |
138 |
174 |
早高峰第一波 |
|
8:00-9:00 |
198 |
180 |
216 |
早高峰峰值 |
|
9:00-10:00 |
145 |
128 |
162 |
早高峰回落 |
|
10:00-11:00 |
95 |
82 |
108 |
上午平稳期 |
|
11:00-12:00 |
88 |
75 |
101 |
接近午间 |
|
12:00-13:00 |
92 |
79 |
105 |
午间小高峰 |
|
13:00-14:00 |
85 |
72 |
98 |
午后平稳 |
|
14:00-15:00 |
82 |
70 |
94 |
下午继续 |
|
15:00-16:00 |
95 |
81 |
109 |
晚高峰前奏 |
|
16:00-17:00 |
142 |
125 |
159 |
晚高峰开始 |
|
17:00-18:00 |
185 |
168 |
202 |
晚高峰峰值 |
|
18:00-19:00 |
168 |
150 |
186 |
晚高峰持续 |
|
19:00-20:00 |
125 |
110 |
140 |
晚高峰回落 |
|
20:00-21:00 |
88 |
75 |
101 |
夜间开始 |
|
21:00-22:00 |
65 |
54 |
76 |
夜间平稳 |
|
22:00-23:00 |
52 |
42 |
62 |
深夜前奏 |
|
23:00-24:00 |
38 |
30 |
46 |
接近深夜 |
预测曲线特征分析,从预测结果可以明显观察到共享单车需求的典型"双峰"模式,如图4-6所示:

图4-6 预测曲线特征分析结果
1. 早高峰(7:00-9:00):峰值出现在8:00-9:00时段,预测租赁量198辆。这是上班通勤时段,大量用户使用共享单车完成"最后一公里"出行。
2. 晚高峰(17:00-19:00):峰值出现在17:00-18:00时段,预测租赁量185辆。这是下班通勤时段,与早高峰形成对称。
3. 深夜低谷(2:00-5:00):最低点出现在3:00-4:00时段,预测租赁量仅12辆。深夜几乎没有骑行需求。
4. 午间小高峰(12:00-13:00):预测租赁量92辆,为午休外出用餐用户。
(4)SHAP特征解释,全局特征重要性(Top 10),如图4-7和表4-4所示:

图4-7 全局特征重要性(Top 10)结果
表4-4 全局特征重要性(Top 10)表
|
排名 |
特征名称 |
SHAP值 |
影响方向 |
|
1 |
count_lag_24 |
45.2 |
正向:历史同小时租赁量越高,当前预测值越高 |
|
2 |
count_rolling_mean_72 |
32.8 |
正向:近期平均租赁量越高,当前预测值越高 |
|
3 |
hour_cos |
28.5 |
双向:区分早晚高峰与深夜低谷 |
|
4 |
temp_weather_interaction |
22.1 |
正向:适宜骑行程度越高,需求越高 |
|
5 |
hour_sin |
18.3 |
双向:配合hour_cos表达周期性 |
|
6 |
humidity |
15.6 |
负向:湿度越高,需求越低 |
|
7 |
count_rolling_std_72 |
12.4 |
双向:波动性影响预测置信度 |
|
8 |
workingday |
11.2 |
正向:工作日需求高于节假日 |
|
9 |
windspeed |
9.8 |
负向:风速越大,需求越低 |
|
10 |
count_lag_48 |
8.5 |
正向:48小时前租赁量的参考价值 |
8:00时段的局部SHAP解释,对于早高峰8:00时段的预测值(198辆),SHAP分析显示各特征的贡献如下图4-8和表4-5所示:

图4-8 8:00时段的局部SHAP结果
表4-5 8:00时段的局部SHAP表
|
特征 |
特征值 |
SHAP贡献 |
解释 |
|
count_lag_24 |
189 |
42 |
昨日同一时段租赁量很高,强烈推高预测 |
|
hour_cos |
-0.87 |
35 |
余弦值表明处于早高峰时段,显著增加预测 |
|
count_rolling_mean_72 |
178 |
28 |
近期平均需求高,支撑高预测值 |
|
temp_weather_interaction |
0.81 |
18 |
温度适中、天气多云,适宜骑行 |
|
workingday |
1 |
12 |
工作日通勤需求高 |
|
humidity |
0.65 |
-8 |
湿度偏高,略微抑制需求 |
|
windspeed |
0.32 |
-5 |
风速适中,轻微负面影响 |
|
基准值(base_value) |
- |
145 |
训练集平均租赁量 |
|
最终预测值 |
- |
198 |
基准值 + SHAP贡献总和 |
SHAP 解释:base_value(145),训练集中平均每单出租的数量;hour_cos(-0.87)(+35),小时角余弦为 -0.87 的时间段属于早高峰时段,在这个时期内下单是最重要的一个正值特征,lag_count(189)(+42),上一天同时期的需求量很高说明时间序列具有持续性的特征,temp_weather_interaction(0.81)(+18),天气温度适合出行,反映天气影响骑行出行量,最终预测值=145+42+35+28+18+12-8-5=198。
(5)预测结果验证,与实际值对比:2018年1月15日的实际租赁数据(测试集),如表4-6所示:
|
时段 |
预测值 |
实际值 |
误差 |
误差率(%) |
|
8:00-9:00 |
198 |
212 |
-14 |
-6.6 |
|
17:00-18:00 |
185 |
178 |
7 |
3.9 |
|
3:00-4:00 |
12 |
15 |
-3 |
-20 |
预测精度评估:整体RMSE:58.3(低于测试集平均值60.26),峰值时段MAE:12.5(早晚高峰预测误差较小),深夜时段MAPE:18%(深夜需求低,相对误差较大但绝对误差小)。
- 智能调度建议,系统调用DeepSeek API,基于预测结果生成调度建议,如图4-9所示:

图4-9 智能调度建议结果
调度建议输出是基于2018年1月15日的需求预测,建议执行以下调度方案:
【早高峰调度(6:00-9:00)】
增补时段:7:00-8:00;增补车辆:约50辆;调度位置:主要地铁站点周边(预测需求增量最大);调度理由:早高峰预测需求198辆,较平时增加约35%
【晚高峰调度(16:00-19:00)】
增补时段:16:30-17:30;增补车辆:约40辆;调度位置:商务区周边;调度理由:晚高峰预测需求185辆,需提前部署
【低谷时段调度】
调出时段:10:00-15:00;调出车辆:约30辆;调度目标:转移至地铁站点,为晚高峰做准备;调度理由:午间需求平稳,部分车辆闲置
【特别提醒】
天气预报显示多云,温度8°C,适宜骑行,今日为周一工作日,通勤需求稳定,建议在6:30前完成早高峰车辆部署
(7)案例总结
通过上述完整案例,展示了系统从数据输入到预测输出的全流程:
1. 数据输入:用户输入天气参数,系统自动计算衍生特征。
2. 模型推理:LightGBM模型基于24维特征向量进行预测。
3. 结果输出:24小时分时段预测值及置信区间。
4. 特征解释:SHAP分析揭示各特征对预测结果的贡献。
5. 调度建议:AI生成具体的车辆调度方案。
本例证明了系统的实用性,在真实环境下,其预测效果较好,预测值接近真实值,能对运营进行一定的辅助指导;其中早高峰晚高峰预测准确率相对较高(误差 < 7%),可以用于实际的指挥调度中。
4.3 系统用户功能实现
4.3.1 用户注册功能
用户注册功能允许新用户创建账号。前端注册页面包含用户名、密码、确认密码输入框和注册按钮。系统在前端和后端验证用户名唯一性,密码长度至少6个字符。验证通过后,密码使用SHA256算法加密存储到数据库。注册成功后自动创建Session并跳转主页面,无需再次登录。密码加密和请求频率限制等安全措施防止暴力破解和SQL注入攻击。主页面如图4-10所示。

图4-10系统主页面
4.3.2 用户登录功能
用户登陆模块实现对用户的认证功能以确保系统安全。在前端中设计登录页面,提供用户名以及密码输入框并在 JavaScript 中进行判断输入是否符合格式(用户名长度为3~50个字符,密码长度为6~50个字符);而后端向数据库发送查询命令查看是否存在这个用户名并且按照给出的密码产生 SHA256 的哈希码再与储存的哈希码比较,如果相同则在服务器上创建一个 Session 来存储用户的信息,设置24h过期时间。登录状态由 Session 维护,失效后自动跳转登录页。登录页面如图4-11所示。

图4-11登录页面
4.3.3 预测分析功能
该模块主要实现对24h的需求预测,前端展示一个输入表格让用户填写未来一天内每个小时对应的气温、湿度、风力及天气情况,并给出各属性的典型值以供用户参考;后台首先检查并处理输入的数据类型,将其转化为 LightGBM 需要的特征形式,再使用训练好的 LightGBM 模型完成预测工作。输出预测值。将预测结果以 ECharts 折线图的形式进行输出,可缩放、拖动,并在图中给出历史实际租赁量作参照。
预测分析页面如图4-12所示。

图4-12预测分析页面
4.3.4 数据分析功能
数据分析功能展示模型训练结果。前端页面包含模型性能对比柱状图(RMSE、MAE、R²)、特征重要性水平条形图(Top10特征SHAP值)、残差分析散点图和直方图。用户可选择时间范围查看历史趋势折线图,识别周期性模式和长期趋势。功能支持数据导出,用户可下载预测结果、训练日志、特征重要性等CSV格式数据,便于进一步分析。数据分析页面如图4-13所示。

图4-13数据分析页面
4.3.5 SHAP分析功能
SHAP分析功能提供模型可解释性分析。后端加载SHAP解释器,计算全局特征重要性和局部样本解释,返回SHAP值数据。前端绘制 beeswarm图展示特征分布和影响方向,绘制瀑布图展示单个预测的特征贡献。该功能帮助用户理解各因素对预测结果的边际贡献,量化温度、湿度、天气等特征对租赁量的影响程度。
SHAP分析页面如图4-14所示。

图4-14 SHAP分析页面
4.3.6 AI智能建议功能
AI智能建议功能基于预测结果生成调度建议。后端将预测结果和天气参数发送到DeepSeek API,获取专业调度建议,包括增补车辆数量、调走车辆数量、优化时段等具体操作指导。前端展示建议内容和推荐理由,帮助运营人员做出科学的调度决策,提高车辆利用率,减少用户等待时间。
AI智能建议页面如图4-15所示。

图4-15 AI智能建议页面
4.4管理功能实现
4.4.1 用户管理功能
用户管理:管理员能够看到并管理所有注册过的用户,前端显示一个包括用户名、注册时间、最近一次登录时间以及一些关于该用户的统计数字如预测次数等的表格,并能禁用某个违规的用户、删除僵尸用户或者重置用户密码。后端提供获取用户信息及更改其状态、重置密码等接口,支持根据用户名进行搜索和根据注册时间排序等功能。保障用户账号安全及系统可用性。
用户管理页面如图4-16所示。

图4-16用户管理页面
4.4.2 模型管理功能
模型管理功能允许管理员重新训练模型和查看模型信息。管理员可以触发模型重新训练,系统自动加载最新CSV数据,执行数据预处理、特征工程和四种模型训练流程,使用Optuna进行超参数优化,选择最优模型保存。模型信息页面展示当前模型类型、训练数据时间范围、超参数设置、性能指标(RMSE、MAE、R²)等详细信息,支持模型版本比较。
模型管理页面如图4-17所示。

图4-17模型管理页面
4.4.3 参数调整功能
参数调整功能允许管理员修改模型超参数和优化策略。管理员可以调整Optuna搜索空间(学习率、树数量、最大深度、叶子节点数等)、迭代次数、交叉验证折数等参数。系统自动进行参数搜索,并行运行多个试验,充分利用计算资源寻找最优配置。参数修改后重新加载配置,立即生效,支持参数历史版本查看和回滚。
参数调整页面如图4-18所示。

图4-18参数调整页面
4.4.4 系统配置功能
系统配置功能允许管理员设置系统运行参数。管理员可以配置API密钥(如DeepSeek API Key)、数据库路径、日志级别(DEBUG、INFO、WARNING、ERROR)、Session过期时间等。配置文件支持在线编辑和热加载,无需重启服务即可生效。配置修改后自动备份,出现问题时可快速恢复。配置界面显示当前所有配置项的值和说明,便于理解和修改。
系统配置页面如图4-19所示。

图4-19系统配置页面
4.4.5 系统监控功能
系统监控功能实时展示系统运行状态。前端定时刷新监控数据,展示CPU利用率、内存占用率、磁盘空间、网络流量等服务器资源使用情况,API请求统计(请求数量、响应时间、错误率),预测任务队列状态(排队任务数、执行中任务数、完成任务数)。当资源使用率超过阈值(如CPU>90%或内存>85%)或预测失败率过高时,系统自动发送告警通知,及时发现问题。
系统监控页面如图4-20所示。

图4-20系统监控页面
4.4.6 日志管理功能
日志管理功能提供日志查询和下载。管理员可以按时间范围、日志级别、模块名称筛选日志记录,查看详细日志内容。日志包含访问日志、错误日志、性能日志等类型,记录系统运行过程中的关键事件和异常信息。管理员可以将筛选后的日志导出为文本文件,便于离线分析和问题排查。日志文件自动轮转,避免磁盘空间占满。
日志管理页面如图4-21所示。

图4-21日志管理页面
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)