龙空技术网

如何使用向量自回归 (VAR) 来预测多元数据

白袍丸子 55

前言:

而今咱们对“怎么用拟合做预测数据”都比较关怀,你们都需要剖析一些“怎么用拟合做预测数据”的相关知识。那么小编也在网摘上汇集了一些对于“怎么用拟合做预测数据””的相关文章,希望大家能喜欢,同学们一起来学习一下吧!

在过去的几天里,我整理了一个数据集,该数据集涉及非营利组织中某个部门的培训状态,个人可以在其数据科学项目中使用该数据集。

我将这个数据集称为 Analyse_Training,它是一个多元数据集,可以在这里找到:

该数据集是一个多元时间序列数据集,具有三列数据,分别是:

Month 列,表示收集数据的时间。No_Employees 列,表示该月该部门有多少员工。Training_Deficicies 列,表示部门人员当月需要参加多少培训课程才能保持符合强制性培训要求。

开发过程使用的 VS Code + Jupyter 插件。我导入了执行所需的库。我导入的库是:

Pandas:用于数据处理的,包括 DataFrame 的创建和维护Numpy:用于数值计算和创建 numpy 数组Math:执行高级数学计算Datetime:执行诸如时间戳数据之类的操作Statsmodels:执行统计和时间序列操作Tqdm Notebook:提供了进程栏并对嵌套循环和 Jupyter 笔记本提供了良好的支持Itertools:用于迭代可以使用 for 循环逐步遍历的数据结构Matplotlib:它将数据点绘制到图表上Seaborn:更高级别的图形包

导入库后,我使用 pandas 将数据集读入程序:

将日期作为索引列:

将数据调整为适合预测的方式后,我就使用 matplotlib 将其绘制成图表:

然后,我使用 for 循环迭代两列数据来执行ADF测试,该测试用于确定时间序列是否平稳。

如果时间序列不是平稳的,我会使用差分来尝试使其平稳。差分可以通过消除时间序列水平的变化来帮助稳定时间序列的平均值,从而消除(或减少)趋势和季节性:

然后我进行了格兰杰因果关系检验(Granger causality test),这是一种统计假设检验,用于确定一个时间序列是否有助于预测另一个时间序列,于 1969 年首次提出:

执行这两个测试后,我创建了一个新的DataFrame,它包含两个选定的时间序列:

然后,我将数据集分为训练集和测试集,分别占数据集的 80% 和 20%:

当数据预处理后,我选择了模型。在本例中,我选择了 statsmodels 的向量自回归(VAR)。VAR 是一种统计模型,用于捕获多个数量随时间变化时之间的关系。VAR 是一种随机过程,是通常定义为一系列随机变量的数学对象。

VAR 的公式为:

然后我使用sorted_order函数来排序并选择滞后顺序。因为数据集很小,所以我只选择了 3 阶滞后。打印出摘要,第二行数据旁边的 “*” 显示 2 阶滞后时训练和拟合训练集的最合适数字:

然后我对训练集进行训练并将其加载到 VAR 模型中,并为其设置 2 阶滞后。然后,我打印出经过训练和拟合的数据的摘要,作为回归结果的摘要:

使用 VAR 模型训练和拟合训练数据后,我使用 k_ar 确定滞后,k_ar 是使用卡尔曼滤波器计算的值。卡尔曼滤波器(Kalman filter)使用随时间观察的一系列测量值,并通过估计每个时间帧的变量的联合概率分布来生成对未知变量的估计,该估计往往比仅基于单个测量的估计更准确。

然后,我使用滞后作为计算的基础来预测训练和拟合的数据:

执行预测和其他计算后,我为预测的每个特征创建一个DataFrame,并将真实值与预测值进行比较:

然后我将这两个预测绘制在图表上:

最后检查了两个预测的错误率,发现 No_Employees 列的错误比 Training_Deficicies 列的错误要好得多:

总结一下,这是我第一次尝试对多元时间序列模型进行预测。目前可以算是了解了 VAR 模型的大致用法,后续将研究其他多元时间序列数据集,以及其他模型。

标签: #怎么用拟合做预测数据