【投稿吗?有稿费的那种!】(点击看详情),是由城市数据派主办的征稿活动,我们希望能够提供更新鲜、更好玩、更有价值的内容,因此决定为派友们开放平台,提供交流和展示才能的机会。小派在此恭候派友们投稿分享!
transdim是面向时空交通数据缺失修复的GitHub开源项目,缩写取自transportation data imputation (译为“交通数据修复”) 的部分首字母,由于项目本身在开放数据、开放问题、开放算法三方面的优秀表现,受到了开源社区的广泛好评。
在大数据技术与感知技术日益成熟的当下,尽管数据获取渠道趋于多元化、数据规模不断扩大,但由于感知器时空覆盖不完备、通讯故障、失灵与数据传输紊乱等导致的数据质量问题依然严重困扰着智能交通系统的建设与发展。
以美国纽约城市交通管理部门发布的实时路网车速数据集为例,该数据集覆盖了纽约城区范围内近150条路段,其中,大多数路段为主干路与快速路。
(如需获取美国纽约城市交通管理部门发布的2015-2019年的部分实时路网车速数据集,请关 注城市数据派微信号,在微信号中回复 “ 车速 ” 两个字,即可获得下载链接。)
下图描述了该数据集由2015年4月至2019年3月的基本数据量与数据完备情况,该数据集在此期间的有效观测记录超过4000万条。通过分析发现,该数据集中存在较为严重的数据缺失现象,数据集的整体缺失率约为23%,但值得注意的是,部分月份的数据缺失率已经高达80%。由此可见,对缺失交通数据进行精准修复极具现实意义。

transdim项目是面向时空交通数据修复的项目,项目名取自transportation data imputation的部分首字母,开源内容包括开放公测数据、开放标准问题、开放机器学习算法,项目网址为 https://github.com/xinychen/transdim。截至目前,transdim项目已在GitHub社区获得了200+次标星 (star) 和60+次fork。
为方便广大读者测试各类交通数据修复算法,transdim项目目前将几组公开的交通数据集进行了整理,以下五组数据已经放在了的transdim项目里面,可自由下载使用,包括:
-
广州城市路网车速数据集
-
伯明翰停车数据集
-
杭州地铁客流量数据集
-
纽约出租车流量数据集
-
西雅图高速公路车速数据集
注:处理后的数据均已放在仓库的子文件datasets中,下载即可使用。
为进一步降低交通数据修复算法的测试门槛,transdim项目定义了两种不同的数据缺失场景:

在这两种数据缺失场景基础上,transdim 项目给出了两类数据修复问题。第一类数据修复问题是对缺失交通数据直接做修复,如下图所示,transdim 项目采用了张量复原等技术进行实现,实现过程包括时空多维交通数据的张量化组织、张量复原与数据重构。

第二类数据修复问题侧重于预测,主要考察不完备数据下的交通预测,即数据本身带有缺失值的情况下如何进行有效的交通预测,如下图所示,transdim项目采用了带有时间序列建模的矩阵分解模型进行实现。

在transdim项目中,开发者放弃了常用的Matlab语言,而是采用了Python语言中的Numpy对众多机器学习算法进行编译,并结合了实际的交通数据进行测试,最终以Jupyter Notebook代码文档的形式开放出来。下图归纳了transdim实现的算法及其代码文档网址。

不妨先看一下缺失数据修复效果,以贝叶斯张量分解 (BGCP) 为例,下图给出了广州城市路网车速数据集某条路段在两段时间内的数据修复结果 (上图为8月1日至8月14日,下图为9月12日至9月25日),其中红色区域表示数据丢失,红色曲线表示贝叶斯张量分解算法的修复结果,蓝色曲线为真实车速数据。从图中可发现,即使某条路段丢失若干天的车速数据,贝叶斯张量分解算法依然能够精准修复出来。


对于带有缺失数据的交通预测,开发者们给出了贝叶斯时序张量分解算法,如下图所示是纽约出租车流量数据的预测效果,开发者们选取了两组时段 (第一行的时段为6月27日8点至9点,第二行的时段为6月27日9点至10点),使用热力图直观展现了OD流量矩阵,为方便对比,开发者们分别给出了真实数据的流量热力图、完备数据下的预测流量热力图、30%缺失数据下的预测流量热力图。

另外,开发者们选取了3组OD对 (区域17至区域13,区域17至区域27,区域27至区域27),将流量曲线进行绘制,蓝色为真实的流量曲线,红色为30%缺失数据下的预测流量曲线。

注:这里只为展现结果,具体细节以transdim项目及相应代码为准。
开发者实现了众多矩阵/张量复原算法,这里不妨以贝叶斯张量分解 (BGCP) 为例来简单看一下如何用Python实现一个交通数据修复算法。相应的Jupyter Notebook网址为:
https://nbviewer.jupyter.org/github/xinychen/transdim/blob/master/experiments/Imputation-BGCP.ipynb
调用Numpy、Scipy及其部分常用函数。常用函数包括生成多元正态分布随机数、生成Wishart分布随机数、求解逆矩阵。

编译在张量分解中常用到的运算规则,如Khatri-Rao积。开发者为了让读者对张量分解中常用的运算规则有较深的理解,特地在Notebook中给出了具体的定义及简单的算例,针对该算例,开发者也使用了编译好的函数kr_prod对其进行实现。

介绍模型形式并采用Numpy进行编译。这里的贝叶斯张量分解模型是建立在正态分布 (高斯分布) 基础上,将张量分解结构作为正态分布的均值项,从而根据共轭先验分布设置准则,可对张量分解结构中的参数设置多元正态分布的先验;为了求解张量分解结构中的参数,需进一步对超参数设置共轭的Gaussian-Wishart分布。尽管模型看上去较为复杂,但开发者们编译的代码却极为简洁。


读入数据集、设置缺失场景与缺失率,采用已定义的张量分解函数进行测试。开发者已将原始数据组织成张量 (tensor) 进行保存 (格式为.mat),这里只需要借助Scipy读入即可。在测试模型之前,还需指定张量分解的秩 (rank)、最大迭代次数 (burnin_iter和gibbs_iter)。


开发者们通过transdim项目为广大读者提供了一个接触数据、认识问题、测试算法的渠道,并且在一定程度上降低了交通数据修复算法的开发门槛。除此之外,开发者们也将transdim项目涉及到的科学绘图进行了规整,创建了名为awesome-latex-drawing的GitHub项目 (网址为https://github.com/xinychen/awesome-latex-drawing),该项目主要介绍如何使用LaTeX绘制各类图形,包括贝叶斯网络、张量结构示意图、框架图,截至目前,已经获得了超过400次标星 (star)。

商业合作、投稿等,请联系客服小派派微信号 xiaopaipai_udparty,加好友必须备注:合作+机构名称/个人姓名
原文始发于微信公众号(城市数据派):【投稿】交通数据缺失值怎么办?开源项目帮你修复(数据+代码)丨城市数据派