数据挖掘#道路流量预测的一些思考(时序数据相关)

实习之后一直很好奇公司的道路情况预测模型是怎么构建的。找到一些资料有了一点业内的概念,结合相关数据挖掘赛题数据,动手做了一点东西,稍微总结一下。

使用模型

XGBoost,LBM,LSTM

模型倒是其次,总结想落在关于时序数据的处理过程。

传统时间序列处理

定义

时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。

构成要素

时间序列可以分为长期趋势(trend)、季节变动(seasonal)、循环变动(cycling)和随机波动(irregular)四个部分。

  • 长期趋势( T )现象在较长时期内受某种根本性因素作用而形成的总的变动趋势
  • 季节变动( S )现象在一年内随着季节的变化而发生的有规律的周期性变动
  • 循环变动( C )现象以若干年为周期所呈现出的波浪起伏形态的有规律的变动
  • 不规则变动(I )是一种无规律可循的变动,包括严格的随机变动和不规则的突发性影响很大的变动两种类型

由于实验室处理数据大多是金融时间序列的原因,第一开始想到的做法大概是AR、MA、ARMA、ARIMA等等。

时间序列分析是机器学习中常见的一种类型。经常用来以下几种问题:

  1. 销量预测 2. 金融分析

时间序列分析这个领域内通常有两种解决问题的方式:

  • 谱分析:通过傅里叶变换将时域变换到频域,然后对频域数据进行分析
  • 时域分析:从序列自相关的角度揭示时间序列的发展规律

目前常用第二种方法。下面默认时间序列分析方法指的是第二种。

时间序列分析一个重要的假设就是序列是平稳的,包括AR(自回归Auto Regressive)、MA(Moving Average 移动平均)以及ARMA(Auto Regressive Moving Average) 这几个模型都对待建模序列有这个要求。ARIMA(Auto Regressive Integrated Moving Average Model 差分整合移动平均模型) 可以对非平稳的序列进行预测,前提是ARIMA可以通过差分获得平稳序列

故进行时间序列分析需要进行以下几步:

  1. 检测序列平稳性

    方法有 ADF-Test(Augmented Dickey-Fuller Test)
    如果存在单位根,则序列非稳定,无法进行分析

  2. 对不平稳的序列进行差分

    可以差分一次或者多次,然后对数据进行稳定性分析。可以通过 绘图或者ADF-Test进行
    直到处理后的自相关函数和偏自相关函数数值非显著非零。

  3. 建模

    • 如果偏自相关函数是截尾,而自相关函数是拖尾,则建立AR模型

    • 如果偏自相关函数是拖尾,而自相关函数是截尾,则建立MA模型

    • 如果偏自相关函数和自相关函数都是拖尾,则建立ARMA模型

  4. 模型检验

    判断残差序列是否为白噪声,如果是,则表示建模成功

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.离散数据特征编码

离散特征的编码分为两种情况:

  • 离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码
  • 2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3} 离散特征的取值有大小意义的处理函数map pandas.Series.map(dict) 参数 dict:映射的字典 

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

发布了10 篇原创文章 · 获赞 2 · 访问量 1793

猜你喜欢

转载自blog.csdn.net/weixin_41814051/article/details/104284491