一种基于融合时序预测模型的钢卷仓储吞吐量的预测方法
技术领域
本发明公开一种基于融合时序预测模型的钢卷仓储吞吐量的预测方法,涉 及数据分析预测技术领域。
背景技术
钢卷仓储吞吐是指钢卷由商家订购运输到产业园仓库储存再由商家卖出运 输出产业园的这一过程。而各种类型的钢卷产品可以分为两大类:热卷和冷卷。
因此对钢卷仓储吞吐量的预测可以分为四种情况:
未来一段时间中热卷的入库、出库重量,
未来一段时间中冷卷的入库、出库重量。
钢卷仓储吞吐是钢卷产品重要的参考参数,但不易测量获得,现有的时间 序列预测方法对钢卷仓储吞吐的预测还存在以下弊端:
1)对数据质量要求过高,一般要求数据要有较严格的周期性与平稳性;
2)不同的时间序列预测方法对数据的侧重点不同,难以精确的拟合并刻划 出完整的时间序列走势。
本发明提出一种基于融合时序预测模型的钢卷仓储吞吐量的预测方法,基 于ARMA方法的时间序列预测模型和基于时间序列分解的时间序列预测模型,通 过对上述两种模型的融合,对整个时间序列数据进行拟合,不仅对时间序列的 整体变化走势有良好的预测,还将时间序列分解成趋势、周期、余项三部分, 将时间序列的趋势和周期性刻画出来,再进行加权求出最终融合后的结果,通 过此种方法可以结合两种方法的优势提高准确率,进而对未来时间的数据进行 可靠预测,提高预测结果精确性和鲁棒性。
发明内容
本发明针对现有技术的问题,提供一种基于融合时序预测模型的钢卷仓储 吞吐量的预测方法,统计收集历史数据构成时间序列,利用现有的时间序列模 型对历史数据进行分析拟合,进而对未来时间的数据进行可靠预测,提高预测 结果精确性和鲁棒性。
本发明提出的具体方案是:
一种基于融合时序预测模型的钢卷仓储吞吐量的预测方法:
收集钢卷仓储吞吐量的历史数据并构成时间序列数据,
对时间序列数据的平稳性进行检验,对非平稳时间序列数据进行平稳性处 理,利用ARMA模型对处理后获得的平稳时间序列数据进行拟合,获得ARMA模 型的预测数据,
同时利用时间序列分解模型对时间序列数据进行分解,分解成趋势数据、 周期数据和余项数据,时间序列分解模型对趋势数据进行拟合,并结合对应的 周期数据,获得时间序列分解模型的预测数据,
对ARMA模型的预测数据和时间序列分解模型的预测数据进行评估,并根据 评估结果确定ARMA模型和时间序列分解模型的权重,得到预测结果。
所述的预测方法中利用单位根检验的方法对时间序列数据的平稳性进行检 验。
所述的预测方法中平稳性检验过程为:
利用adfuller函数,假设检验的时间序列数据具有单位根,
在adfuller函数中输入时间序列数据后,得到的结果中若给定的置信水平 显著,则时间序列数据为平稳时间序列数据,若给定的置信水平不显著,则时 间序列数据为非平稳时间序列数据。
所述的预测方法中利用差分法或者平滑法或者对数变换法对非平稳的时间 序列数据进行平稳性处理。
所述的预测方法中利用ARMA模型对处理后获得的平稳时间序列数据进行 拟合,根据处理后获得的平稳时间序列数据的自相关系数和偏相关系数确定拟 合阶数。
所述的预测方法中利用ployfit函数对趋势数据进行多项式拟合,并结合 对应的周期数据,获得时间序列分解模型的预测数据。
所述的预测方法中利用均方误差对对ARMA模型的预测数据和时间序列分 解模型的预测数据进行评估,并根据均方误差评估结果确定ARMA模型和时间序 列分解模型的权重,得到预测结果。
一种基于融合时序预测模型的钢卷仓储吞吐量的预测工具,包括收集单元、 检验单元、ARMA模型预测单元、时间序列分解模型预测单元和评估单元,
收集单元收集钢卷仓储吞吐量的历史数据并构成时间序列数据,将时间序 列数据发送给检验单元和时间序列分解模型预测单元,
检验单元对时间序列数据的平稳性进行检验,对非平稳时间序列数据进行 平稳性处理,检验单元将平稳时间序列数据发送给ARMA模型预测单元,
ARMA模型预测单元利用ARMA模型对处理后获得的平稳时间序列数据进行 拟合,获得ARMA模型的预测数据,将ARMA模型的预测数据发送给评估单元,
时间序列分解模型预测单元同时利用时间序列分解模型对时间序列数据进 行分解,分解成趋势数据、周期数据和余项数据,时间序列分解模型对趋势数 据进行拟合,并结合对应的周期数据,获得时间序列分解模型的预测数据,将 时间序列分解模型的预测数据发送给评估单元,
评估单元对ARMA模型的预测数据和时间序列分解模型的预测数据进行评 估,并根据评估结果确定ARMA模型和时间序列分解模型的权重,得到预测结果。
本发明的有益之处是:
本发明提供一种基于融合时序预测模型的钢卷仓储吞吐量的预测方法,可 对钢卷仓储吞吐量的历史数据进行收集,利用历史数据构成时间序列数据,对 时间序列数据进行平稳性进行检验,对非平稳时间序列数据进行平稳性处理, 利用ARMA模型对处理后获得的平稳时间序列数据进行拟合,获得更关注于时间 序列数据整体变化走势的预测数据,而时间序列分解的预测模型将时间序列数 据分解成趋势、周期、余项三部分,通过拟合预测可以将时间序列数据的趋势 和周期性刻画出来,再通过评估,根据评估结果确定ARMA模型和时间序列分解 模型的权重,得到预测结果,不仅在同等准确率的条件下,本发明方法对数据 质量要求低,更具有通用性,提高了预测结果的鲁棒性,同时实现了ARMA模型 和时间序列分解的预测模型的优势互补,提高了预测结果的准确性与可靠性。
附图说明
图1是本发明方法原理示意图;
图2自相关系数图;
图3偏相关系数图;
图4本发明方法流程示意图。
具体实施方式
本发明提供一种基于融合时序预测模型的钢卷仓储吞吐量的预测方法:
收集钢卷仓储吞吐量的历史数据并构成时间序列数据,
对时间序列数据的平稳性进行检验,对非平稳时间序列数据进行平稳性处 理,利用ARMA模型对处理后获得的平稳时间序列数据进行拟合,获得ARMA模 型的预测数据,
同时利用时间序列分解模型对时间序列数据进行分解,分解成趋势数据、 周期数据和余项数据,时间序列分解模型对趋势数据进行拟合,并结合对应的 周期数据,获得时间序列分解模型的预测数据,
对ARMA模型的预测数据和时间序列分解模型的预测数据进行评估,并根据 评估结果确定ARMA模型和时间序列分解模型的权重,得到预测结果。
同时提供与上述方法相对应的一种基于融合时序预测模型的钢卷仓储吞吐 量的预测工具包括收集单元、检验单元、ARMA模型预测单元、时间序列分解模 型预测单元和评估单元,
收集单元收集钢卷仓储吞吐量的历史数据并构成时间序列数据,将时间序 列数据发送给检验单元和时间序列分解模型预测单元,
检验单元对时间序列数据的平稳性进行检验,对非平稳时间序列数据进行 平稳性处理,检验单元将平稳时间序列数据发送给ARMA模型预测单元,
ARMA模型预测单元利用ARMA模型对处理后获得的平稳时间序列数据进行 拟合,获得ARMA模型的预测数据,将ARMA模型的预测数据发送给评估单元,
时间序列分解模型预测单元同时利用时间序列分解模型对时间序列数据进 行分解,分解成趋势数据、周期数据和余项数据,时间序列分解模型对趋势数 据进行拟合,并结合对应的周期数据,获得时间序列分解模型的预测数据,将 时间序列分解模型的预测数据发送给评估单元,
评估单元对ARMA模型的预测数据和时间序列分解模型的预测数据进行评 估,并根据评估结果确定ARMA模型和时间序列分解模型的权重,得到预测结果。
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人 员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
利用本发明方法对某商家订购运输到产业园仓库储存再由商家卖出运输出 产业园的这一过程为例进行钢卷仓储吞吐量预测,钢卷仓储吞吐量的预测中包 括未来一段时间中热卷的入库、出库重量及未来一段时间中冷卷的入库、出库 重量;
具体过程如下:
步骤1:以天为单位,分别对冷卷与热卷两种类型的产品每天的出库出货、 入库进货重量进行历史数据的收集,构成时间序列数据,
步骤2:利用单位根检验的方法对时间序列数据的平稳性进行检验,其中 利用python中adfuller函数对时间序列数据进行单位根检验,假设检验的时 间序列数据具有单位根,
具体为:利用python中封装好的单位根检验函数,即statsmodels函数下 的子函数Adfuller函数。
Adfuller函数的安装方法是:
在终端下输入pipinstallstatsmodels。
Adfuller函数的使用方法是:
fromstatsmodels.tsa.stattools import adfuller
adfuller(ts)
ts指代timeseries时间序列数据,Adfuller函数可以直接输入待检验的 时间序列数据ts,其余参数不必设定,全部为默认值即可,返回的结果内容可 如下所示:
其中我们需要关注的值为p-value,当p-value小于0.05时可拒绝原假设 并表示所检验的时间序列为平稳序列,反之p-value大于0.05时不能拒绝原假 设所检验序列为非平稳序列,则需要对时间序列进一步做平稳性处理的操作。
正如例子中所示,p-value大于0.05,不能拒绝假设,所以检测的ts为非 平稳序列,需要进行平稳处理;
对非平稳时间序列数据可通过差分,平滑,或者对数变换对时间序列数据 进行平稳处理,可分别通过diff函数rolling函数和log函数实现;
步骤3:利用ARMA模型对处理后获得的平稳时间序列数据进行拟合,获得 ARMA模型的预测数据,
其中可利用python中plot_acf和plot_pacf,将平稳时间序列数据输入 plot_acf函数和plot_pacf函数,输出得到平稳时间序列数据的自相关系数图 和偏相关系数图,参考图2和图3,通过图2和图3可看出本例具有明显的一 阶相关性,所以设定自相关系数和偏相关系数都为1,根据数据的自相关系数 和偏相关系数来确定ARMA模型的拟合阶数,获得ARMA模型的预测数据;
步骤4:利用时间序列分解模型对时间序列数据进行分解,分解成趋势数 据、周期数据和余项数据,时间序列分解模型对趋势数据进行拟合,并结合对 应的周期数据,获得时间序列分解模型的预测数据,
其中时间序列分解模型中的seasonal_decomposed函数对时间序列数据进 行分解,得到趋势、周期、和余项数据,如下:
seasonal_decompose函数是时间序列分解函数,使用方法:
from statsmodels.tsa.seasonal import seasonal_decompose
decomposition=
seasonal_decompose(ts,model=’additive’,extrapolate_trend=1)
trend=decomposition.trend趋势数据
seasonal=decomposition.seasonal周期数据
residual=decomposition.resid余项数据
利用最小二乘法拟合线性函数ployfit函数对趋势数据进行多项式拟合, 并结合周期数据得到时间序列分解方法预测的数据;
步骤5:利用均方误差对ARMA模型的预测数据和时间序列分解模型的预测 数据进行评估,并根据评估结果确定ARMA模型和时间序列分解模型的权重,得 到预测结果,
其中利用mean_squard_error函数对两组预测数据进行误差估计得到MSE, 利用MSE的倒数1/MSE作为评分,并用评分的比值作为数据融合时的权重,即 评分越高权重越大,即通过1/MSE的比值求得权值后对预测数据进行融合,得 到最终预测数据,
Result1是方案一的测试集预测结果,mse1是方案一通过训练集得到的预 测结果与标签(实际值)之间的误差,1-mse1即为准确率,
Result2是方案二的测试集预测结果,Mse2是方案二通过训练集得到的预 测结果与标签(实际值)之间的误差,1-mse2即为准确率。
同样的实例,利用本发明工具时,与上述方法过程相似。
具体过程如下:
包括收集单元、检验单元、ARMA模型预测单元、时间序列分解模型预测单 元和评估单元,
收集单元收集钢卷仓储吞吐量的历史数据并构成时间序列数据,将时间序 列数据发送给检验单元和时间序列分解模型预测单元,
检验单元对时间序列数据的平稳性进行检验,对非平稳时间序列数据进行 平稳性处理,检验单元将平稳时间序列数据发送给ARMA模型预测单元,
ARMA模型预测单元利用ARMA模型对处理后获得的平稳时间序列数据进行 拟合,获得ARMA模型的预测数据,将ARMA模型的预测数据发送给评估单元,
时间序列分解模型预测单元同时利用时间序列分解模型对时间序列数据进 行分解,分解成趋势数据、周期数据和余项数据,时间序列分解模型对趋势数 据进行拟合,并结合对应的周期数据,获得时间序列分解模型的预测数据,将 时间序列分解模型的预测数据发送给评估单元,
评估单元对ARMA模型的预测数据和时间序列分解模型的预测数据进行评 估,并根据评估结果确定ARMA模型和时间序列分解模型的权重,得到预测结果。
步骤1:收集单元以天为单位,分别对冷卷与热卷两种类型的产品每天的 出库出货、入库进货重量进行历史数据的收集,构成时间序列数据,收集单元 将时间序列数据发送给检验单元和时间序列分解模型预测单元,
步骤2:检验单元利用单位根检验的方法对时间序列数据的平稳性进行检 验,其中检验单元利用python中adfuller函数对时间序列数据进行单位根检 验,假设检验的时间序列数据具有单位根,
具体为:利用python中封装好的单位根检验函数,即statsmodels函数下 的子函数,在终端下输入pipinstallstatsmodels,
Adfuller函数的使用方法是:
fromstatsmodels.tsa.stattools import adfuller
adfuller(ts)
ts指代timeseries时间序列数据,Adfuller函数可以直接输入待检验的 时间序列数据ts,其余参数不必设定,全部为默认值即可,返回的结果可如下 所示:
其中我们需要关注的值为p-value,当p-value小于0.05时可拒绝原假设 并表示所检验的时间序列为平稳序列,反之p-value大于0.05时不能拒绝原假 设所检验序列为非平稳序列,则需要对时间序列进一步做平稳性处理的操作。
正如例子中所示,p-value大于0.05,不能拒绝假设,所以检测的ts为非 平稳序列,需要进行平稳处理;
对非平稳时间序列数据可通过差分,平滑,或者对数变换对时间序列数据 进行平稳处理,可分别通过diff函数rolling函数和log函数实现,
检验单元将平稳时间序列数据发送给ARMA模型预测单元;
步骤3:ARMA模型预测单元利用ARMA模型对处理后获得的平稳时间序列数 据进行拟合,获得ARMA模型的预测数据,
其中ARMA模型预测单元可利用python中plot_acf和plot_pacf,将平稳 时间序列数据输入plot_acf函数和plot_pacf函数,输出得到平稳时间序列数 据的自相关系数图和偏相关系数图,参考图2和图3,通过图2和图3可看出 本例具有明显的一阶相关性,所以设定自相关系数和偏相关系数都为1,根据 数据的自相关系数和偏相关系数来确定ARMA模型的拟合阶数,获得ARMA模型 的预测数据;
ARMA模型预测单元将ARMA模型的预测数据发送给评估单元,
步骤4:时间序列分解模型预测单元利用时间序列分解模型对时间序列数 据进行分解,分解成趋势数据、周期数据和余项数据,时间序列分解模型对趋 势数据进行拟合,并结合对应的周期数据,获得时间序列分解模型的预测数据,
其中时间序列分解模型预测单元利用时间序列分解模型的seasonal_decomposed函数对时间序列数据进行分解,得到趋势、周期、和余 项数据,如下:
seasonal_decompose函数是时间序列分解函数,使用方法:
from statsmodels.tsa.seasonal import seasonal_decompose
decomposition=
seasonal_decompose(ts,model=’additive’,extrapolate_trend=1)
trend=decomposition.trend趋势数据
seasonal=decomposition.seasonal周期数据
residual=decomposition.resid余项数据
利用最小二乘法拟合线性函数ployfit函数对趋势数据进行多项式拟合, 并结合周期数据得到时间序列分解方法预测的数据,
时间序列分解模型预测单元将时间序列分解方法预测的数据发送给评估单 元,
步骤5:评估单元利用均方误差对ARMA模型的预测数据和时间序列分解模 型的预测数据进行评估,并根据评估结果确定ARMA模型和时间序列分解模型的 权重,得到预测结果,
其中评估单元利用mean_squard_error函数对两组预测数据进行误差估计 得到MSE,利用MSE的倒数1/MSE作为评分,并用评分的比值作为数据融合时 的权重,即评分越高权重越大,即通过1/MSE的比值求得权值后对预测数据进 行融合,得到最终预测数据,
Result1是方案一的测试集预测结果,mse1是方案一通过训练集得到的预 测结果与标签(实际值)之间的误差,1-mse1即为准确率,
Result2是方案二的测试集预测结果,Mse2是方案二通过训练集得到的预 测结果与标签(实际值)之间的误差,1-mse2即为准确率。
本发明方法或工具基于ARMA模型的方法对时间序列进行拟合并预测,基于 时间序列分解模型的方法对数据进行分解后拟合预测,依据准确率对两种方法 的结果进行加权融合输出最后结果,提升预测结果的精度和鲁棒性。
以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的 保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或 变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。