实习之后一直很好奇公司的道路情况预测模型是怎么构建的。找到一些资料有了一点业内的概念,结合相关数据挖掘赛题数据,动手做了一点东西,稍微总结一下。
XGBoost,LBM,LSTM
模型倒是其次,总结想落在关于时序数据的处理过程。
定义
时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。
构成要素
时间序列可以分为长期趋势(trend)、季节变动(seasonal)、循环变动(cycling)和随机波动(irregular)四个部分。
由于实验室处理数据大多是金融时间序列的原因,第一开始想到的做法大概是AR、MA、ARMA、ARIMA等等。
时间序列分析是机器学习中常见的一种类型。经常用来以下几种问题:
时间序列分析这个领域内通常有两种解决问题的方式:
目前常用第二种方法。下面默认时间序列分析方法指的是第二种。
时间序列分析一个重要的假设就是序列是平稳的,包括AR(自回归Auto Regressive)、MA(Moving Average 移动平均)以及ARMA(Auto Regressive Moving Average) 这几个模型都对待建模序列有这个要求。ARIMA(Auto Regressive Integrated Moving Average Model 差分整合移动平均模型) 可以对非平稳的序列进行预测,前提是ARIMA可以通过差分获得平稳序列。
故进行时间序列分析需要进行以下几步:
检测序列平稳性
方法有 ADF-Test(Augmented Dickey-Fuller Test)
如果存在单位根,则序列非稳定,无法进行分析
对不平稳的序列进行差分
可以差分一次或者多次,然后对数据进行稳定性分析。可以通过 绘图或者ADF-Test进行
直到处理后的自相关函数和偏自相关函数数值非显著非零。
建模
如果偏自相关函数是截尾,而自相关函数是拖尾,则建立AR模型
如果偏自相关函数是拖尾,而自相关函数是截尾,则建立MA模型
如果偏自相关函数和自相关函数都是拖尾,则建立ARMA模型
模型检验
判断残差序列是否为白噪声,如果是,则表示建模成功
https://blog.csdn.net/livan1234/article/details/80863021
https://www.jianshu.com/p/c7cb0de104f4
虽然道路交通流量是一个时序数据,利用tableau对数据情况作了探查也发现流量具有时间序列的趋势,但考虑到要充分利用hive表中的其他相关特征,并且在特征工程部分需要根据表中数据尽可能多的构造相关特征,还是选择xgboost等模型大杀器。
总体思路是,对于给出数据集中缺失时间片流量的预测,采用时序和XGBoost相结合的方法预测。对未知时间片流量的预测,选取滑动窗口数据及构造特征进行XGBoost建模。
对于时序数据的处理,主要体现在对提供的数据集中部分缺失时间段流量的预测处理中。核心思想,是用插值和拟合方法求时间趋势对流量的影响因子后,用剩下的流量数据与剩余特征(道路宽度、出入口个数)用机器学习模型去做分析。时间因子影响下流量+其他特征影响下流量=最终预测的缺失流量。
完成补缺后,就是对未知时间窗口的流量预测。我们选择滑动窗口数据(前20min,前15min,前10min,前5min的流量)及道路特征、时间特征(周末、节假日)使用XGBoost及LSTM共同预测。
1.对数据进行log变化
对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布
因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布
进行log变化,就是对数据使用np.log(data+1) 加上1的目的是为了防止数据等于0,而不能进行log变化
https://www.cnblogs.com/my-love-is-python/p/10322080.html
2.离散数据特征编码
离散特征的编码分为两种情况:
https://blog.csdn.net/qq_29756665/article/details/81748323
3.插入缺失时间片(MultiIndex多级索引)
https://blog.csdn.net/weixin_38168620/article/details/79580272
4.Python datetime模块详解(时序数据处理)
https://www.cnblogs.com/awakenedy/articles/9182036.html