交通流特征工程小技巧与思考

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

小编最近参与了一些工程方面的工作,感触颇深,也逐渐意识到了一些做工程和做研究的区别,作为一个OR人,当面对工程问题时,ML也不得不被提上日程,对于一个OR的研究来说,很多参数可以假设,只需合理,但在工程中就需要数据清洗,分析以及准确的预测。今天就对交通流的特征工程方面做一些小小的分享,也欢迎各位大佬一起学习交流


提示:以下是本篇文章正文内容

一、交通流是什么?

交通流数据直接反映了交通状态,因此对于描述交通状况或者做交通方面的研究时具有重要性。交通流量数据主要记载了一段时间内,通过道路某一卡口的交通实体数,其具有时间相关性,表现为流量分布随着时间变化而变化,且不同的时间段有着显著不同的特征。所以一般来说我们都将交通流作为一个时间序列来进行分析。
而时间序列的研究一直是极为困难的:
问题1:特征维度数高,计算时间长
问题2:数据不充分和不平衡
问题3:时间依赖跨度未知,周期性和规律性难以把握。

当然对于交通流来说还存在空间上的问题,所以对于交通流预测这个老生常谈的问题一直都在出新,就是因为这个问题实际来说是很困难的。

二、特征工程是什么?

“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。”特征工程目的是最大限度地从原始数据中提取特征以供算法和模型使用。因为对于机器学习来说,input 的定义是极其重要的,而当我们拿到一组交通流时间序列时,就要考虑如果把他们定义为更好的输入,通过总结和归纳,人们认为特征工程包括以下方面:
在这里插入图片描述图源知乎大佬:https://www.zhihu.com/question/29316149

对于交通流时间序列大致可以分为如下几类:【1】
1.形状特征。(序列的波形,波峰波谷等, 常见方法如DTW,CNN等)
2.时间依赖特征 (相邻或不相邻的片段提取依赖特征,常见方法如LSTM等)
3.序列变化特征 (空间变换,抑制噪声,常见方法如自编码,sequence2sequence等)

而对于交通流序列来说,一般都具有很明显的周期性,同时大部分都会存在早高峰和晚高峰两个峰值,而项链路段的交通流也会有很明显的相关性,于是GNN,GCN各种图神经网络便开始发挥出他们对地理位置的特征学习的优势,这也是现在交通流预测的一大主流方式之一。
当然一般来说如果人工选择了一些特征,如统计学特征:均值,方差,中位数,四分位数,众数等,或者形态学特征如:斜率,峰值等。我们需要做一些相关性分析。
做相关性检验可以使用相关系数、卡方检验、平均互信息、 条件熵、后验概率、逻辑回归权重等方法。

同时现在也出现了一些跳过feature space,直接使用end 2 end 的方法,如下图【2】,效果也非常不错,但是多多少少缺失了一些可解释性。仁者见仁智者见智。

Zhang X Y, Liu C L, Suen C Y. Towards robust pattern recognition: a review[J]. Proceedings of the IEEE, 2020, 108(6): 894-922.
在这里插入图片描述


三、处理数据时的一些小技巧

1.pd.read_csv()应该是我们最常见的读取数据的方式之一了,而其中有一个chunksize参数,可以选定每次读取数据的行数,当面对大规模数据时可以使用这个参数,防止memoryerror。

2.pandas检查数据缺失值
df.isna().sum()

3.⽤ isin 描述条件,而不是用for 加 if 的办法

4.异常值检测
孤立森林算法: from sklearn.ensemble import IsolationForest
该算法是一种基于聚类的无监督学习,实际效果还是不错的。

5.数据补全
a.贝叶斯张量分解(基于统计的方法)
b.可以用建立一个回归模型的方法来填补缺失值。(基于预测的方法)
c. 用GAN生成数据进行补全 (基于生成模型的方法)
安利一个好用的工具包 pandas-profiling.他可以很方便地生成分析报告。(包括特征之间的相关性分析)

6.数据预处理时不仅要出重和异常值,还要注意主键的唯一性验证,很多数据本身可能不符合三范式,数据属性要做有效性检验,这部分也要结合业务场景具体考虑。

7.对于交通流序列而言,一定要留心长尾情况,做一些处理。

8.数据的增强也是必要的,比如将数据倒叙,重新组合,变形等,可以达到扩大样本数量的作用,但要依实际情况考虑。

四、一些常用的机器学习python库

1.标准化
from sklearn.preprocessing import StandardScaler
2.min-max归一化
from sklearn.preprocessing import MinMaxScaler
3.二值化
from sklearn.preprocessing import Binarizer
4.缺失值补充(这里更新更好的方式包括贝叶斯张量分解等方法)
from sklearn.preprocessing import Imputer(默认为mean(均值)填充)
5.9种常见的机器学习回归模型
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from xgboost import XGBRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import BaggingRegressor
(树模型的效果一般来说还是要更优秀的!)
6.可视化
import seaborn as sns
sns.tsplot() / sns.heatmap()

总结

以上内容都是一些不成熟不成体系的见解,而对于特征工程本身而言,如果想做一些创新就需要更加敏锐的sense,能够针对数据和问题的特性设计一些不那么“显而易见”的特征,使得你的feature和model更加work! 这也算是一种小创新。

【1】任守纲,张景旭,顾兴健,熊迎军,王浩云,徐焕良.时间序列特征提取方法研究综述[J].小型微型计算机系统,2021,42(02):271-278.
【2】Zhang X Y, Liu C L, Suen C Y. Towards robust pattern recognition: a review[J]. Proceedings of the IEEE, 2020, 108(6): 894-922.

作者:
王基光,清华大学,深圳国际研究生院,TBSI

关注我们
在这里插入图片描述

运小筹公众号
运小筹公众号是致力于分享运筹优化(LP、MIP、NLP、随机规划、鲁棒优化)、凸优化、强化学习等研究领域的内容以及涉及到的算法的代码实现。编程语言和工具包括Java、Python、Matlab、CPLEX、Gurobi、SCIP 等。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值