基于Xgboost算法的共享自行车短时需求预测研究*
2019-04-30胡郁葱张筑杰王晓晴
胡郁葱 张筑杰 王晓晴
(华南理工大学土木与交通学院1) 广州 510641) (华南师范大学生命科学学院2) 广州 510631)
0 引 言
共享自行车系统由于利用移动互联网与传统的公共自行车结合而摆脱了传统停车桩的限制,通过与公共交通“最后一公里”衔接,给居民带来了极大的便利.然而,共享自行车需求的区域不均衡性,导致局部区域的资源过剩与资源短缺矛盾突出,影响了用户对共享自行车的使用意愿.合理确定使用需求,优化投放规模和调度策略是提高共享自行车资源使用效率的重要途径,而其核心技术就是对共享自行车的短时需求进行预测,即在前一时段预测下一时段各站点的共享自行车需求数量,利用调度手段调整各站点自行车规模,以最大限度地满足用户需求.
国外对于有固定站点的公共自行车系统需求预测研究比较深入,针对性地对自行车站点的数据的规律进行研究,包括考虑自行车的历史使用模式,乘客出行习惯的影响.其主要使用的预测方法主要包括数据挖掘的方法、机器学习方法及传统的参数方法(如ARMA)[1-2].国内学者主要是基于交通出行理论[3],对公共自行车需求进行预测,以预测结果来确定调度车数并建立租赁点短期需求预测模型;也有对不同用地性质租赁点借还需求进行分析,对交通小区的公共自行车的需求量进行预测[4],国内学者们关注的多是宏观上公共自行车系统整体的调配需求总量,较少对具体公共自行车站点的短时借还需求研究.
基于此,目前对无桩式共享自行车的短时需求预测的研究成果几乎未见报道.总结国内外研究成果,针对自行车短时需求预测研究,主要存在以下两个问题:
1) 研究的相关因素太少,多数研究为了简化运算,选择的相关因素(特征向量)都比较理想化,并没有将天气,特殊节假日等因素考虑进去,而自行车需求很大程度上会受到天气,特殊节假日这些因素的影响;并且,现有研究多数只是针对单个站点的短时需求预测,而忽略了站点与站点之间的相关性.
2) 目前自行车短时需求预测方法,主要采用参数模型进行预测.常用的参数模型主要包括移动平均法、指数平滑法、Box-Jenkins、ARIMA等,这类方法大多都是非常有效的,而且得到的结果是严格的.但是这些方法是建立在有效的先验知识(例如交通参数)的前提下的,并且依赖于一系列的假设,这往往无法解决一些高度非线性的,复杂的问题.
非参数模型在处理高度非线性数据比传统参数模型具有优势,其实现起来更加简单.近年来,非参数模型开始广泛应用于短时交通预测,主要有高斯最大似然估计、Kalman滤波模型、支持向量机模型、小波分析法、贝叶斯网络等.非参数模型的优点是处理快速,可以对大量非线性,复杂的数据进行处理.
Xgboost算法属于非参数模型,也是监督学习的一种[5].它是一种基于分类和回归树的算法,属于连续的集成学习模型,其基本思想通过一系列弱分类器的迭代计算实现准确的分类效果.使用Xgboost的优势在于快速对特征级数据进行训练,预测结果精度高,并且Xgboost可以有效解决高维度问题,避免了“维度的诅咒”.由于其具有数据处理快和准确度较高的特点,Xgboost活跃于各种大型数据竞赛中,在2015年的Kaggle的29个赛题中,17个赛题的解决方案使用了Xgboost算法.
为准确实现对共享自行车站点短时需求的预测,文中考虑加入天气、特殊节日和站点之间相关性因素的影响,这会增加计算的复杂度,而应用Xgboost算法进行短时需求预测可以提高预测的精确度,并且能高效的处理短时需求预测问题.由于共享自行车企业一般不直接提供数据,本文以某市公共自行车系统数据模拟聚类后的共享自行车站点需求,使用Xgboost算法进行站点需求短时预测,并对该方法的效果进行了检验.
1 基于Xgboost算法的预测
极端梯度提升树(extreme gradient boosting,Xgboost)是梯度提升机器算法(gradient boosting machine)的扩展[6].Boosting是一种连续的集成学习模型,其基本思想通过一系列弱分类器的迭代计算实现准确的分类效果.该模型不断迭代,每次迭代生成一棵新的树,如何在每一步生成合理的树是boosting分类器的核心.gradient boosting machine算法在生成每一棵树的时候采用梯度下降的思想,以上一步生成的所有树为基础.在合理的参数设置下,Boosting算法往往要生成一定数量的树才能达到令人满意的准确率.
Xgboost的目标函数(包括训练误差和正则化项)为
(1)
2 实例分析
2.1 数据准备
数据主要来源于某市2015年1—8月的公共自行车数据,将其类比成已经过一次聚类后的共享自行车数据.整个数据集一共有2 132 694条记录,训练集里只有318个站点的数据.对于一些数据记录不完整或者记录较少的站点给予剔除,最后得出有效站点117个.数据包含的主要的信息包括:借车日期、借车时间、骑行分钟、超时分钟、借车站点号、车位、车卡、借车卡、还车站点号、还车车位、还车日期、还车时间、操作类型、操作名称.另外,抓取该市2015年1—8月份的天气信息,将天气分成了四种情况晴天、阴天、雨天、暴雨.
主要选取2015年1月1日—8月24日的公共自行车的各站点借车数据作为训练数据.考虑到每天站点借车数量较小,选取1 d作为时间间隔进行划分,得出117个站点中,每个站点包含216组数据,将2015年8月25—31日1周的各站点借车数据作为测试数据,117个站点中每个站点包含7组数据.
2015年1月1日—8月31日部分站点的借车数量图见图1.由图1可知,数据呈非线性,站点的借车数量的波动并没有强规律性,随时间波动的规律也不是很明显,初步分析站点的借车数量受多种因素的影响,用传统的参数方法难以准确预测.
图1 部分站点借车数量图
2.2 聚类分析
当站点数量较少时,可以直接进行相关分析之后再选取相关系数高的站点进行下一步分析.但是考虑到目前共享自行车的现状,一个大城市虚拟停车站点数量通常超过几千个,此时相关分析的时间复杂度为O(n)=n·n·y,n为站点数,y为站点的数据量,因此,当n和y都变得很大时,直接进行相关分析的时间复杂度呈指数级增加.此时,先进行聚类,再针对聚类的结果进行相关分析,可以提高算法的效率.
目前,主流的聚类算法有k-means (KM),EM算法(expectation maximization algorithm)还有sIB算法(sequential Information-bottleneck)[7].另外,在进行聚类分析之前要先确定聚类的类别的数量.主要的方法有DBI(davies-bouldin index)方法[8]、DI(dunn index)方法[9].DBI越小,说明聚类效果越好.相反,DI越高,聚类效果越好.DBI方法使用欧氏距离,在应用于k-means聚类方法上具有良好的效果.本文主要使用k-means聚类方法,并且采用欧式距离进行聚类,因此本文采用DBI方法来判断聚类的类别的数量.
本文将自行车的站点定义为初始点,假设任意一点X为维度d,对于A,B两点,则A=[a1,a2,…,ad],B=[b1,b2,…,bd],则A与B点的欧氏距离被定义为
(2)
然后根据DBI方法对聚类数量进行判断,见图2.由图2可知,在k=9次,DBI值降到最低.根据肘部法则,确定最佳的聚类数量的值为9.
图2 DBI指标图
训练数据中包含117个站点,以每个站点2015年1月1日—8月24日的每日借车数量作为该站点的向量,每个向量包含237个元素,共计117个向量,利用k-means聚类算法对这117个向量进行聚类,距离测度选用欧式距离,算法采用误差平方和准则函数作为聚类准则函数,当算法迭代至14次,达到损失值最小,之后保持不变.
2.3 相关分析
常用的相关分析的方法主要有图表相关分析、协方差及协方差矩阵、相关系数(相关系数主要有Pearson相关系数、Spearman秩相关系数、Kendall相关系数)[10].由于图表的相关分析局限于低维度的数据,当数据超过二维时,难以通过观察图表得出特征之间的相关性.另外,协方差通过数字衡量变量间的相关性,正值表示正相关,负值表示负相关,但无法对相关的密切程度进行度量.因此,本文选择相关系数法进行相关分析.考虑到Spearman秩相关系数,Kendall 相关系数均需要利用数据的秩,在进行高维的相关分析均比较复杂,因此本文选择Pearson相关系数进行相关分析.当相关系数超过0.5则认为两种因素呈强相关关系.
根据聚类分析的结果,对各类别的站点之间进行相关分析.本文一共得出9类数据,表1为第3类的相关系数数据.
表1 部分站点相关系数表
由表1可知,各站点之间的相关系数均大于0.6,表示各站点呈强相关关系,这也反映出聚类结果的有效性.
但是,由于此时的相关分析是针对各站点同时期进行的,然而在进行某一站点需求预测时,并不能获取其他与之相关站点的需求量,因为其他站点的需求量同样是未知的.所以,要进一步对与该站点相关的几个站点前几期的需求进行相关分析, 得出该站点当天的需求量与其他与之相关的站点的前1 d的需求量相关性最高,并且随着时间越长,相关性越低,因此,主要选取与该站点相关的其他站点的前1 d的需求量作为特征值.并对聚类行成的站点当天需求量与其他站点前1 d需求量进行相关分析,部分站点数据见表2.
表2 站点20与其他站点的前1 d需求量相关系数表
通过相关相关分析结果选取相关程度高的站点的前1 d需求量作为特征向量.如站点20,根据商标,站点30和170对应的相关系数大于0.5,故选取站点30,170的前1 d需求量作为其特征向量.
2.4 构建特征向量
本文选取的特征向量主要包括前2周每天的借车数量、工作日、周末、天气、寒暑假、特殊节假日、季节,其中前两周每天的借车数量一共包含14个特征,工作日包含星期一至星期五5个特征,周末包括星期六,星期天2个特征,寒暑假则包含寒假,暑假2个特征,特殊节假日不具体细分,包含1个特征,季节包含冬天,春天,夏天3个特征,一共27个特征.根据相关分析的结果,加入新的特征向量.构建的特征向量为:前两周每天的借车数量,工作日,周末,天气,寒暑假,特殊节假日,季节,相关程度高的站点的前1 d借车数量.
2.5 利用Xgboost进行预测
而优化Xgboost的目标函数主要通过求解CART树(回归树)的结构和叶分数.首先,目标函数的训练误差主要通过加法训练进行优化,具体步骤如下.
…
(2)
运用加法训练,分步骤优化目标函数,首先优化第一棵树,结束之后再优化第二棵树,直至优化完K棵树.首先假设模型初始估计值,每次添加一个新的函数(树),迭代计算第t轮模型输出预测值.
然后对模型正则化项进行优化,将模型正则化项定义为叶结点总数和叶节点权值平方和函数.
(3)
Xgboost算法中对树的复杂度项增加了一个L2正则化项,针对每个叶结点的得分增加L2平滑,目的也是为了避免过拟合.
然后将上文提到的特征值进行构建特征向量,利用Xgboost法进行预测当前时段的借还车数量,并计算目标函数 ,并找出最优树结构和叶子节点的值.并对特征向量进行评分,按照特征向量的重要性进行排序.
对所有站点的特征重要性进行分析得出,前1 d借车数量对预测当天的借车数量影响最大,117个站点中105个站点的前1 d借车数量的重要性都是排第一的,所占比率为89.7%;当天的前2 d,前3 d的借车数量同样对预测当天的借车数量影响也很大,前2 d借车数量的重要性都是排第二的站点所占比率为77.8%,前3 d的借车数量的重要性都是排第三的站点所占比率为52.1%.其他特征的重要性依次下降,因不同站点而异.
另外,冬天这个因素对大部分站点影响则很少,有14个站点中的冬天的重要性几乎为0.而天气因素的重要性在所有因素中除了前2周的借车数量这些因素之外,重要性最大.寒暑假因素则对于个别站点影响较大,比如,站点30,70,78则受暑假的影响较大,而站点84,158则受寒假的影响较大.特殊假节日这个因素对于部分站点影响较大,比如站点8,101,其重要性排在第六.
3 共享自行车短时需求预测结果评估
文中使用平均绝对误差(mean absolute error,MAE),平均绝对百分比误差(mean absolute percentage error,MAPE),均方根误差(root mean square error,RMSE),模型训练时间(time)四项指标对模型的精度和有效性进行评价.
2015年8月25—31日部分站点1周的预测值与真实值的对比图见图3,总体上利用Xgboost进行预测,预测值与真实值的十分接近,变化的趋势也基本一致,比如,站点5,6,7(还有大部分站点),但是也有出现部分站点(如站点8),使用Xgboost对于一些波动比较大的数据无法准确预测.
图3 部分站点真实值与预测值对比图
另外,为分析本文方法的预测准确性与效率,将Xgboost和基于BP神经网络的、基于参数方法ARMA的、基于K最近邻方法的短时需求预测方法结果进行比较(训练时间是包括所有站点的训练时间).评价结果见表3.
表3 四种算法的1周的指标平均值对比表
分析上面的评价结果图和表,比较所有预测数据的预测结果,Xgboost算法的预测效果好于其他算法:
1) Xgboost算法的MAE,MAPE均低于另外三个模型,说明其预测结果与真值的差距更小,模型精度更高.
2) Xgboost算法的RMSE也均低于另外三个模型,说明其预测结果与真值的偏差波动幅度更小,模型结果更可靠.
3) 模型的训练时间,KNN与 Xgboost算法模型表现的最好,模型训练时间在2 min以内,ARMA模型耗时最长.Xgboost算法计算速度也相当可观,得益于其原生语言为C/C++,在进行节点的分裂时,支持各个特征多线程进行增益计算,因此算法计算速度更快.
而Xgboost的缺点使用Xgboost对于一些波动比较大的数据无法准确预测.对于当自行车站点数量比较少的情况下,整体站点的误差容易受到个别误差大的站点所影响,使得整体误差变大.当自行车站点数量比较大的情况下,使用Xgboost进行预测整体的平均误差比较小,使用Xgboost效果则比较好.
4 结 束 语
相对于以往的只是针对站点自身的需求数据进行短时需求预测的研究,从特征级的角度考虑了天气因素,节假日因素,还有站点之间的相关性,并将这些因素加入到特征向量应用于共享自行车站点短时需求预测.并利用Xgboost算法求解,将结果与BP神经网络模型、ARMA模型和K最近邻算法进行了对比分析,得出Xgboost算法预测的效果最为稳定,各天的指标值波动都较小,具有很强的鲁棒性.但是,在应用Xgboost算法的过程中,Xgboost对于一些波动比较大的数据无法准确预测,造成个别站点的误差较大,后续可以针对这些特点对Xgboost算法进行改进.另外,所采用的数据为公共自行车数据,每日的借车数量相对较少,只是针对以天为时间间隔进行预测的实时性较低,未来使用共享自行车数据时,可以通过进一步分时段进行预测(例如分成每个小时的借车数量),以提高短时预测的实时性和精确度.