共享单车需求量登记分类及影响因素分析——基于机器学习模型的比较分析

本文主要是介绍共享单车需求量登记分类及影响因素分析——基于机器学习模型的比较分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Yiyi Hu

近年来,共享经济成为社会服务业内的一股重要力量。作为共享经济的一个代表性行业,共享单车快速发展,成为继地铁、公交之后的第三大公共出行方式。但与此同时,它也面临着市场需求不平衡、车辆乱停乱放、车辆检修调度等问题。本项目则着眼于如何不影响市民出行效率的同时,对共享单车进行合理的批量维修工作的问题,利用CART决策树、随机森林以及Xgboost算法对共享单车借用数量进行等级分类,试图通过模型探究其影响因素并分析在何种条件下对共享单车进行批量维修为最优方案。

解决方案

任务/目标

通过机器学习分类模型探究共享单车借用数量的影响因素,并分析在何种条件下对共享单车进行批量维修为最优方案。

数据源准备

该数据集有三个数据来源,分别为交通局天气数据,以及法定假期

数据预处理及可视化

(一)时间:首先从timestamp列中提取了monthhour两列,试图分别从整体、季度、月份、小时四个方面,对共享单车借用总数进行箱图分析。

解决方案

任务/目标

通过机器学习分类模型探究共享单车借用数量的影响因素,并分析在何种条件下对共享单车进行批量维修为最优方案。

数据预处理及可视化

(一)时间:首先从timestamp列中提取了monthhour两列,试图分别从整体、季度、月份、小时四个方面,对共享单车借用总数进行箱图分析。

(二)天气:观察数据特征发现,其中“weather_code”列各类别分别为:1 =晴朗;大致清晰,但有一些值与雾霾//雾斑/雾附近;2 =散云/一些云;3 =碎云/云层疏松;4 =多云;7 =/小雨阵雨/小雨;10 =雨与雷暴;26 =降雪;94 =冻雾。因此,本文对“weather_code”进行重新定义,将 1234 类天气现象定义为宜骑车天气;7102694 类天气现象定义为不宜骑车天气。

(三)共享单车借用数量:“节假日”与“双休日”中共享单车使用数量的分布较为相似,高峰期均在午后。对比发现,“工作日”中单车使用数量的高峰期在 7 点至 9 点,16 点到 19 点这两个时间段呈现为两个明显的波峰,这两个时间段往往是上班下班时间,人流量比较大,因而数据的呈现比较符合实际的规律。因此,绝对将“is_holiday”列与“is_weekend”列联合进行分组,合并为“is_non_workday,分为工作组与非工作日组。

(四)温度:图 5-4 为各变量之间的相关系数矩阵,发现温度“t1”列与体感温度“t2”列之间存在较高的相关性,且天气温度数据更加客观,因此选择仅保留“t1”列。各个变量之间的均呈现中弱相关性。此外,各变量与因变量“count_log”列均存在一定的相关性,但相关强度不一。

(五)经观察“count_log”箱图发现,该数据仍存在着少量异常值。因此,为了提高结果的准确性,选择删去 16 个过低的数值,剩余 17398 组数据。

在进行预处理后,本文已经对共享单车中的变量进行了筛选与调整,保留了 hourt1is_non_workdayweather_codewind_speedhumseason 7 个特征变量。在正 式建立模型之前,对于因变量“count_log”进行等频分箱,将其分成了五类,命名为 category。当保证类别平衡,即每类数据的样本量接近,算法会有更好的效果。对于温度、湿度等连续性变量,为使得最后结果的准确性,并未对其进行分箱。

接下来,本文对所有的特征变量进行了归一化处理,为了归纳统一样本的统计分布性, 本文选取 75%的数据划分为训练集,25%的数据作为测试集。

建模

CART决策树:

CART 算法易于理解和实现,人们在通过解释后都有能力去理解决策树所表达的意义。 并且能够同时处理分类型与数值型属性且对缺失值不敏感。

随机森林

使用随机森林模型在进行分类时,需要现在经过训练的决策树中输入测试样本,这棵决策树的分类便可以由各叶子节点的输出结果而确定;再根据所有决策树的分类结果,从而求得随机森林对测试样本的最终评价结果。

使用自助法随机地抽样得到决策树的输入样本和选取最佳的分割标准在决策树的节点上随机地选取特征进行分割是随机森林的两大优点,正是这些优势使得随机森林具备了良好的容忍噪声的能力,且使得决策树之间的相关性有所降低。随机森林中的决策树还具备了任意生长但不被修剪的特点,因此这些决策树的偏差较低,有利于提高评价的准确度。

Xgboost

Xgboost 作为一种新型的集成学习方法,优点颇多。首先,他在代价函数里加入了正则化项,用于控制模型的复杂度,有效防止了过拟合。其次,Xgboost 支持并行处理,众所周知,决策树的学习最耗时的一个步骤是对特征的值进行排序,Xgboost 在训练之前预先对数据进行了排序,然后保存为 block 结构,后面的迭代中重复使用这个结构,大大减小了计算量。再次,Xgboost 算法灵活性高,它支持用户自定义目标函数和评估函数,只要保证目标函数二阶可导即可,并且对于特征值有缺失的样本,可以自动学习出它的分裂方向。最后,Xgboost 先从顶到底建立所有可以建立的子树,再从底到顶反向进行剪枝,这样不容易陷入局部最优解。

本文分别利用 CART 决策树、随机森林以及 Xgboost 算法对共享单车借用数量进行等级分类,并对三个方法进行精度测试,发现通过 Xgboost 算法分类效果最好,经过调参后,训练集模型精确度高达 0.92,测试集精确度为 0.83。分析分类结果以及各因素的重要性发现,时间、风速、湿度、温度四个因素对共享单车使用量存在较高的影响,因此维修部门可以选在凌晨阶段,或者风速较大、温度过低或过高的时期对共享单车进行合理的批量维修,避开市民用车高峰,保证市民出行效率以及用车安全。

关于作者


在此对Yiyi Hu对本文所作的贡献表示诚挚感谢,她毕业于上海财经大学,专长时间序列预测、回归分析、多元统计、数据清洗、处理及可视化、基础机器学习模型以及集成模型。


这篇关于共享单车需求量登记分类及影响因素分析——基于机器学习模型的比较分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/319149

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J