作者| wxdhxc
编辑责任|卡罗尔
展出| AI技术大本营(ID:rgznai100 ) ) ) ) ) ) ) ) ) ) )。
背景
时间序列问题是数据分析领域的常见问题,有必要通过观察一种现象的一定时期状态来判断其未来一定时期的状态。 所谓时间序列,是指存在该现象的统计指标在不同时间的数值按照时间序列顺序排列而成的。
时间序列分析主要针对时间序列问题的两个领域,一个是历史区间数据的分析,根据历史数据特征的提取总结进行异常检测和分类; 另一种是对未来数据的分析,即基于过去时间点的数据来预测未来某个时间点或某些时间点的状态或实际值。
时序预测类问题在金融领域较为常见,如股价预测、网站现金流预测等,也广泛应用于气象、人口密度预测等领域。 传统的时间序列预测模型是典型的ARMA系列一样的统计学模型,建立在统计学的基础上,需要满足平稳性假设等基本假设,因此适用场景少,在现实中容易受限。 随着机器学习和深度学习的兴起,时间序列预测类问题越来越多地抽象为回归问题,可以使用机器学习和深度学习的关联模型。 不必受限于基本假设,适用范围广,很受欢迎。
本文以疫情期间北京重点地区人口密度状况预测为例,分别采用统计学模型ARMA、机器学习模型Xgboost和深度学习模型LSTM进行建模,并比较分析这三种建模方案在实际操作时的复杂度、运行效率和预测精度,进而
准备数据
为了便于模型间的比对,本文使用的数据集仅包含北京997个重点领域2020/01/17至2020/02/15天的每小时人口密度数据,共有717840条记录。 数据包含三个维:区域ID、时间戳和人口密度指数,数据格式如图1所示。
图1培训示例
培训数据和测试数据均以时间为最小时间步长,其中部分地区30天人口密度指数趋势如图2所示。
图2部分重点地区30天人口密度指数趋势
在进行时间序列预测建模之前,首先进行时间序列的自相关分析,以确保训练数据满足时间序列的要求。 时间序列的自相关性可以理解为时间序列自身与自身(不同滞后项)的相关性。 在本论文中,如图3所示,使用将与时间序列的值相同的序列在时间轴上延迟的值汇总显示的时间图来观察时间序列的自相关性。
图3部分重点领域人群密度指数时滞图
从时滞图可以看出,各区域的群体密度指数聚集在对角线附近,呈明显的正相关,表明各区域的群体密度指数序列满足时间序列要求,可以利用相关模型进行预测。 为了便于模型的评价,在共计30天的数据中选择前27天的数据作为训练集进行模型训练,将后3天的数据作为测试集进行模型测试。
模型构建
传统统计学模型、机器学习模型和深度学习模型的建立方法各不相同,本文选取各自领域的经典模型,探索建模流程,比较各种构建方案的优缺点和适用性。
3.1、统计学模型ARMA建模流程
ARMA模型全称自回归滑动平均模型是研究时间序列的重要方法,由自回归模型(简称AR模型)和移动平均模型)为基础的“混合”构成。 其基本思想是,某个时间序列是一组依赖于时间t的随机变量,构成该时间序列的各个序列值具有不确定性,但整个序列的变化具有一定的规律性,可以用对应的数学模型近似描述。 通过对该数学模型的分析研究,可以更本质地认识时间序列的结构和特征,达到最小方差意义上的最佳预测,其具体建模过程如图4所示。
图4 ARMA模型建模流程图
/p>
由于ARMA模型是统计领域的模型,使用它必须首先满足序列平稳性这一前提条件。这是因为在大数定理和中心定理中要求样本同分布(这里同分布等价于时间序列中的平稳性),而统计领域的模型中有很多都是建立在大数定理和中心极限定理的前提条件下的,如果它不满足,得到的许多结论都是不可靠的。本文使用观察法和单位根法进行序列平稳检验。
观察法主要是通过序列自相关图和偏自相关图来观察序列的分布是否始终围绕一个常数上下浮动。单位根法是指通过单位根检验来检查序列中是否存在单位根,如果存在单位根就是非平稳时间序列了。单位根检验的原假设是存在单位根,因此如果得到的统计量显著小于3个置信度(1%,5%,10%)的临界统计值时,说明是拒绝原假设的。另外需要观察P-value是否非常接近0(4位小数基本即可)。
平稳序列
非平稳序列
图5 平稳序列和非平稳序列平稳性检验结果比对(观察法和单位根法)
观察图5的平稳序列可以发现,该序列的自相关图和偏自相关图都是围绕坐标轴上下浮动,存在拖尾现象,其单位根检验统计量为-4.175107明显小于其3个置信度的临界统计值(-3.439740,-2.865684,-2.568977),且P-value为0.000726,接近0,可以拒绝原假设,即该序列不存在单位根,判断是平稳序列。而图5右侧图中,自相关图并未围绕坐标轴上下浮动,且其单位根检验统计量为-3.313199,比99%概率下的临界统计-3.439740值大,且P-value没有明显接近0,不能拒绝原假设,即该序列存在单位根,判断是非平稳序列。
平稳序列可以直接开始建模,如果是非平稳的序列,可以通过差分的方式将其先转化为平稳序列,再进行建模。
ARMA模型建模时通过自相关图和偏自相关图进行模型选型和定阶,其规则如表1所示。
AR(p)
MA(q)
ARMA(p,q)
自相关图
拖尾
Q步截尾
拖尾(p步收敛)
偏自相关图
P步截尾
拖尾
拖尾(q步收敛)
表1 ARMA模型选型和定阶规则
选型确定后的定阶可以根据模型的AIC/BIC准则确定,能够弥补自相关图和偏自相关图定阶的主观性。AIC准则全称最小化信息量准则,是衡量统计模型拟合优良性的一种标准,建立在熵的概念上,可以权衡所估计模型的复杂度和此模型拟合数据的优良性。BIC准则是hxdwg信息准则,在AIC准则的基础上有所改进,AIC和BIC的值都是越小越好。
ARMA模型参数确定后就可以使用时间序列数据进行训练。训练结束后可以对残差进行白噪声检验,来判断所建模型是否提取了原数据的足够信息,白噪声检验也可以借助自相关图和偏自相关图来判断,观察各期滞后是否还有显著的自相关性和偏自相关性。
由于ARMA模型是单变量时间序列模型,一次只能对一个重点区域进行建模,总共997个重点区域,需要为每个区域单独建模,共需建立模型997个,且每个序列的平稳性都不确定,需要单独进行检验,过程比较繁琐。部分区域预测结果如图6所示。
图6 部分区域ARMA模型预测结果
3.2、机器学习模型XGBoost建模流程
XGBoost是一个优化的分布式梯度增强库,旨在实现高效,灵活和便携。它在Gradient Boosting框架下实现机器学习算法。XGBoost提供了并行树提升(也称为GBDT,GBM),可以快速准确地解决许多数据科学问题。使用XGBoost模型处理时间序列预测类问题,需要将其转换成回归问题再进行构建,其具体建模流程如下图所示。
图7 XGBoost模型建模流程图
使用机器学习类的模型进行时间序列预测,不需要进行平稳性检验,直接对训练数据进行相关预处理即可,包括查重、查缺、清洗错误等。
由于需要转换成回归问题,机器学习类模型往往需要通过特征工程,从单一的时序特征中构造适合回归模型的特征集,再基于特征集而非时序特征本身进行模型的训练。一般来说可以提取时间截面特征、统计特征、滑窗特征等,也可以借助一些特征提取工具,例如tsfresh工具包等,将一维时序特征转换成多维截面特征。
训练数据和测试数据都需要通过特征工程提取出特征集,然后把训练特征集输入XGBoost模型,进行训练。这一过程中可以通过调节参数来提高模型的准确率,降低过拟合。
XGBoost模型的调参相对比较复杂,包括三大类参数:通用参数、booster参数以及学习目标参数。通用参数控制在提升(boosting)过程中使用哪种booster,常用的booster有树模型(tree)和线性模型(linear model)。Booster 参数具体取决于使用哪种booster。学习目标参数用于控制学习的场景,例如在回归问题中会使用不同的参数控制排序。除了以上参数还可能有其它参数,在命令行中使用。XGBoost模型的调参通过交叉验证函数CV来实现,通过遍历参数设定值找到最优的迭代次数等。
XGBoost模型的优化主要通过是特征工程和模型调参的迭代来实现,这是一个相对复杂并且需要技巧和时间的过程,需要在实践中摸索经验。
XGBoost模型的构建不需要区分区域,只需把区域当作一维特征输入模型即可,可以进行整体建模。使用XGBoost模型预测部分区域的结果如图8所示。
图8 部分区域XGBoost模型预测结果
3.3.神经网络模型LSTM
除了统计学模型和机器学习模型以外,深度学习的神经网络模型在时间序列预测类问题上也有比较好的表现,其中LSTM模型应用最为广泛。LSTM模型全名长短期记忆人工神经网络,是一种时间递归神经网络(RNN),可以很好地解决长时依赖问题。使用LSTM模型建模流程如图所示。
图9 LSTM模型建模流程图
神经网络类模型在做数据预处理时,往往需要对数据进行归一化处理,将每组数据都变为-1到1之间的数,这样可以加快网络的训练速度。训练数据和测试数据应该通过同样的归一化处理再进行训练和预测,输出的预测结果再进行反归一化还原成原始的数据。
神经网络的特征工程比较简单,只需要将原始的时序数据通过时间滑窗进行时间步的拼接即可。例如需要根据过去9天的历史数据预测未来3天的数据,将时间滑窗设定为12天,沿着时间序列滑行,每次选出12天的数据,前9天做为训练数据,后3天做为训练数据的标签,如图10所示。
图10 利用时间滑窗构建时序特征集
构建完时序特征集后即可设计合适的网络结构,这也是神经网络模型的构建重点。时间序列预测的类型和对应可行的LSTM模型网络结构有以下几种,可以根据具体训练数据调整LSTM模型的网络结构参数。本文进行的预测属于输入输出均为单序列多个时间步的类型,选择双层LSTM网络结构。
类型
示意图
LSTM网络结构
输入单序列多个时间步,输出单序列单个时间步
单层,隐藏单元50个
输入多序列多个时间步,输出单序列单个时间步
单层,隐藏单元50个
输入多序列多个时间步,输出多序列单个时间步
单层,隐藏单元100个
输入单序列多个时间步,输出单序列多个时间步
两层,第一层隐藏单元100个,第二层隐藏单元100个
输入多序列多个时间步,输出单序列多个时间步
两层,第一层隐藏单元100个,第二层隐藏单元100个
输入多序列多个时间步
输出多序列多个时间步
两层,第一层隐藏单元200个,第二层隐藏单元200个
表2 时序序列预测类型和对应LSTM网络结构
设定完模型迭代次数epoch即可开始进行LSTM模型的训练,神经网络类型的模型训练时间相对其他模型而言比较久,对内存的消耗也比较大,为了减轻内存压力,可以采用批处理的策略进行训练,即将训练样本划分批次,一次处理一批样本。使用LSTM模型预测部分区域的结果如下图所示。
图11 部分区域LSTM模型预测结果
结论和展望
三种不同类型的模型在时间序列预测领域各有优缺点,它们人工介入的程度,构建时间和在测试集上的准确率(用MSE错误率表示)如下表所示。
模型类别
人工介入程度
构建时间
平均MSE错误率
统计模型ARMA
较大,需要人工进行平稳性判断和模型定阶
约83分钟
7.779
机器学习模型XGBoost
中等,需要进行特征工程和模型调参
约20分钟
6.67040
深度学习模型LSTM
较小,只需设定网络结构和特征集
约36分钟
16.427
表12 模型对比
通过三种类型模型的建模流程和预测效果比对,可以发现统计模型ARMA需要更大程度的人工参与,本身又是单变量模型,不能整体构建,必须分区域单独构建,即使模型拟合本身速度不慢,构建所花费的时间也较其他两种模型多的多,并不是特别适合工业环境使用。
机器学习模型XGBoost在三种模型里,构建时间花费最小,同时预测效果最好,唯一不足的地方是准确率比较明显的依赖于特征工程和模型调参,这两部分也对使用者的经验要求比较高。
深度学习模型LSTM的人工参与程度最小,基本上只需设定下网络结构和简单构建时序特征集,也不需要专门去做特征提取和模型调参。但是其构建时间明显要比机器学习时间长,并且在不是大数据量的情况下准确率并没有明显的优势。
综上所述,三种类型的模型各有所长和不足,一般来说,统计类模型适合于数据量较小同时工业化需求不高的情况,机器学习类模型更广泛适合于工业化情境,而深度学习模型在大数据量的预测上更具备优势。
作者介绍:
wxdhxc,毕业于南开大学,中国农业银行研发中心高级工程师
本文为作者原创投稿,未经授权请勿转载。
饿了么交易系统5年演化史
360金融首席科学家xfdgz:别指望AI Lab做成中台
我们想研发一个机器学习框架,6 个月后失败了
那个分分钟处理10亿节点图计算的Plato,现在怎么样了?中国 App 出海“变形记”
詹克团反攻比特大陆:一场失去人心的自我挽留
快三最准高手教学c=”https://p5.toutiaoimg.com/origin/pgc-image/RyHfTRN6kyPi8H?from=pc”>
图8 部分区域XGBoost模型预测结果
3.3.神经网络模型LSTM
除了统计学模型和机器学习模型以外,深度学习的神经网络模型在时间序列预测类问题上也有比较好的表现,其中LSTM模型应用最为广泛。LSTM模型全名长短期记忆人工神经网络,是一种时间递归神经网络(RNN),可以很好地解决长时依赖问题。使用LSTM模型建模流程如图所示。
图9 LSTM模型建模流程图
神经网络类模型在做数据预处理时,往往需要对数据进行归一化处理,将每组数据都变为-1到1之间的数,这样可以加快网络的训练速度。训练数据和测试数据应该通过同样的归一化处理再进行训练和预测,输出的预测结果再进行反归一化还原成原始的数据。
神经网络的特征工程比较简单,只需要将原始的时序数据通过时间滑窗进行时间步的拼接即可。例如需要根据过去9天的历史数据预测未来3天的数据,将时间滑窗设定为12天,沿着时间序列滑行,每次选出12天的数据,前9天做为训练数据,后3天做为训练数据的标签,如图10所示。
图10 利用时间滑窗构建时序特征集
构建完时序特征集后即可设计合适的网络结构,这也是神经网络模型的构建重点。时间序列预测的类型和对应可行的LSTM模型网络结构有以下几种,可以根据具体训练数据调整LSTM模型的网络结构参数。本文进行的预测属于输入输出均为单序列多个时间步的类型,选择双层LSTM网络结构。
类型
示意图
LSTM网络结构
输入单序列多个时间步,输出单序列单个时间步
单层,隐藏单元50个
输入多序列多个时间步,输出单序列单个时间步
单层,隐藏单元50个
输入多序列多个时间步,输出多序列单个时间步
单层,隐藏单元100个
输入单序列多个时间步,输出单序列多个时间步
两层,第一层隐藏单元100个,第二层隐藏单元100个
输入多序列多个时间步,输出单序列多个时间步
两层,第一层隐藏单元100个,第二层隐藏单元100个
输入多序列多个时间步
输出多序列多个时间步
两层,第一层隐藏单元200个,第二层隐藏单元200个
表2 时序序列预测类型和对应LSTM网络结构
设定完模型迭代次数epoch即可开始进行LSTM模型的训练,神经网络类型的模型训练时间相对其他模型而言比较久,对内存的消耗也比较大,为了减轻内存压力,可以采用批处理的策略进行训练,即将训练样本划分批次,一次处理一批样本。使用LSTM模型预测部分区域的结果如下图所示。
图11 部分区域LSTM模型预测结果
结论和展望
三种不同类型的模型在时间序列预测领域各有优缺点,它们人工介入的程度,构建时间和在测试集上的准确率(用MSE错误率表示)如下表所示。
模型类别
人工介入程度
构建时间
平均MSE错误率
统计模型ARMA
较大,需要人工进行平稳性判断和模型定阶
约83分钟
7.779
机器学习模型XGBoost
中等,需要进行特征工程和模型调参
约20分钟
6.67040
深度学习模型LSTM
较小,只需设定网络结构和特征集
约36分钟
16.427
表12 模型对比
通过三种类型模型的建模流程和预测效果比对,可以发现统计模型ARMA需要更大程度的人工参与,本身又是单变量模型,不能整体构建,必须分区域单独构建,即使模型拟合本身速度不慢,构建所花费的时间也较其他两种模型多的多,并不是特别适合工业环境使用。
机器学习模型XGBoost在三种模型里,构建时间花费最小,同时预测效果最好,唯一不足的地方是准确率比较明显的依赖于特征工程和模型调参,这两部分也对使用者的经验要求比较高。
深度学习模型LSTM的人工参与程度最小,基本上只需设定下网络结构和简单构建时序特征集,也不需要专门去做特征提取和模型调参。但是其构建时间明显要比机器学习时间长,并且在不是大数据量的情况下准确率并没有明显的优势。
综上所述,三种类型的模型各有所长和不足,一般来说,统计类模型适合于数据量较小同时工业化需求不高的情况,机器学习类模型更广泛适合于工业化情境,而深度学习模型在大数据量的预测上更具备优势。
作者介绍:
wxdhxc,毕业于南开大学,中国农业银行研发中心高级工程师
本文为作者原创投稿,未经授权请勿转载。
饿了么交易系统5年演化史
360金融首席科学家xfdgz:别指望AI Lab做成中台
我们想研发一个机器学习框架,6 个月后失败了
那个分分钟处理10亿节点图计算的Plato,现在怎么样了?中国 App 出海“变形记”
詹克团反攻比特大陆:一场失去人心的自我挽留