问题标签 [sarimax]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
660 浏览

python - 在 SARIMAX 预测中使用 dynamic =True 和 dynamic = False 时的方法

我在 Stack Overflow 中提到过之前的查询,但仍然无法得出结论。

我有一个包含每月商品价格的数据集。我想使用 SARIMAX 预测价格。我想预测未来 24 个月的价格。最初,我有 509 行实际月度价格。现在我想预测未来 24 个月(或 24 行)的价格,我已经为其创建了新的 Dataframe。新的 Dataframe 还包含实际的 Dataframe 行。

当我使用下面的代码时,我使用“dynamic =True”得到这个图:

在此处输入图像描述

当我使用下面的代码时,我使用“dynamic = False”得到这个图:

在此处输入图像描述

现在实际问题来了,我得到了不同的图表。

当我使用下面的代码使用“dynamic =True”或“dynamic =False”时,我得到了不同的图表,以前不是这种情况。

future_df['forecast'] = results.predict(start = 400, end =533, dynamic =True)

px.line(future_df, x='Date', y= ['Price','forecast'],template = 'plotly_dark')

在此处输入图像描述

future_df['forecast'] = results.predict(start = 400, end =533, dynamic =False)
px.line(future_df, x='Date', y= ['Price','forecast'],template = ' plotly_dark')

在此处输入图像描述

我的问题

  1. 为什么我的图表有所不同?我可以注意到动态 = 假与动态 = 真相比提供了更好的预测。
  2. 在预测(开始 = 508,结束 = 533)和验证(例如,开始 = 400,结束 = 533 或开始 = 400,结束 = 508)时,我应该遵循哪种方法(动态 = 假或动态 = 真)?

我还有几个疑问:

Q1) 最初我有 509 行,即 509 个时间段的每月价格(= 行)。现在我想预测未来 24 个月的价格。

我已经使用所有 509 行(价格)构建了 SARIMAX 模型。我想验证每个图的模型。我应该使用哪种方法 "dynamic = True" 或 "dynamic = False" ?例如,我想使用 plotly 验证 509 行内最后 133 行的价格。我可以看到“future_df['forecast'] = results.predict(start = 400, end =533, dynamic =False)”与“future_df['forecast'] = results.predict(start = 400,结束 = 533,动态 = True)"。请指教。

Q2)我使用 dynamic =true 和 false 的预测是相同的。请参阅下面的带有输出的代码。

使用动态 =True 进行预测

future_df['forecast'] = results.predict(start = 510, end =533, dynamic =True)

![509 NaN 510 4697.509465 511 4856.310742 512 4755.252961 513 4787.155811 514 4663.267482 515 4797.953182 516 4888.939789 517 4867.187318 518 4914.688052 519 5096.828530 520 5220.873406 521 5295.573417 522 5542.382493 523 5575.436461 524 5475.326039 525 5524.854306 526 5314.567943 527 5512.470648 528 5556.571233 529 5434.857829 530 5363.764829 531 5541.740158

## 使用动态 =False 进行预测

future_df['forecast'] = results.predict(start = 510, end =533, dynamic =False)

509 NaN 510 4697.509465 511 4856.310742 512 4755.252961 513 4787.155811 514 4663.267482 515 4797.953182 516 4888.939789 517 4867.187318 518 4914.688052 519 5096.828530 520 5220.873406 521 5295.573417 522 5542.382493 523 5575.436461 524 5475.326039 525 5524.854306 526 5314.567943 527 5512.470648 528 5556.571233 529 5434.857829 530 5363.764829 531 5541.740158][6] ][6]

现在我很困惑使用哪种方法来预测未来 24 个月的价格,如果未来 24 个月的预测相似的话。请指教。感谢您提前提供帮助!

0 投票
0 回答
91 浏览

python - 如何理解 SARIMAX 结果中的参数动态?

我正在研究 python SARIMAX 包。这是我的代码:

但我对 results.get_prediction 中的参数动态感到困惑。功能文档中的解释对我来说不清楚,其中说:

例如,

那么图是:

在此处输入图像描述

如果我做:

那么图是:

在此处输入图像描述

如果我使用整数:

那么图是:

在此处输入图像描述

我无法弄清楚这种动态意味着什么。以及为什么我们需要这个参数。

那么任何人都可以帮助我:

  1. 请详细解释这个参数。
  2. 我们在做预测的时候,如何使用这个参数呢?
0 投票
0 回答
71 浏览

python - Sarimax 预测:如何正确处理非工作日

(免责声明:我在时间序列建模领域很新)

我正在尝试建立一个 Sarima 模型来逐日预测几个度量的预期值(分别),关键是在一定时期内有超过 X 值不在置信区间内时检测异常。
模型将在前 2 个月的每一天进行重新训练(目前,在我设法获得更好的结果之前,这还不是固定的)并预测接下来的 24 小时

其中一些措施在非工作日(周末/节假日或公司因其他原因关闭的日子)有显着差异
这是一个例子(5 月 1 日和 2 日是周末):
时间序列可视化

我已经构建了一个数组(1 或 0)来表示那些非工作日并将其作为 sarima 的 exog 传递,类似这样:

多亏了这一点,我可以清楚地看到预测的变化,下班时间的预测值较低:
带有预测的时间序列

(我已经在历史数据上模拟了数据流,并重建了序列以进行可视化和控制,但这些是分开的 24 小时预测和 2 个月的训练数据滑动窗口)

我知道我的预测即使在工作日也不是很精确,但是大尖峰之间的大多数点都非常不稳定,只有大致相似的形状,所以我只是使用足够宽的置信区间来测试我的异常需要几个异常达到警报级别(否则只是噪音)。

所以我在这里的问题是,即使该系列在非工作日有效地向下移动,我的预测的每日概况仍然与工作日相同(降级),因此更平坦的曲线在 1-2 上徘徊下一个工作日

有没有办法处理这种事情?
我曾考虑将我的 24 小时季节性更改为 7*24 小时(每周),这可能有助于周末效果,但所有其他下班日仍然会遇到同样的问题。
我还考虑在第二个模型中分离下班日,但丢失的信息可能太大,两种模型都无法比唯一模型更好地执行。

也许我已经达到了我对 Sarima 所能做的极限?如果是这样,我会喜欢一些不需要超过几个月数据的建议。

提前感谢您阅读我,祝您有美好的一天

0 投票
2 回答
103 浏览

python - Python 中是否有计算 SARIMAX 模型的最佳值的函数?

向大家致以诚挚的问候。我正在处理时间序列,并试图用 SARIMAX 预测它。

因为有许多变化可以调整变量 order (p, d, q) 和seasonal_order (P, D, Q, s) 的值。

我想知道,是否有一个库可以自动计算 order 和seasonal_order 变量的值?以获得最佳结果。

感谢您在这方面给我的帮助。谢谢。

0 投票
1 回答
40 浏览

python - AutoArima - 为 m 选择正确的值

因此,为了论证,这里是一个用于日常数据的 autoarima 示例:

现在在该示例中,在运行显示每周季节性的季节性分解后,我“认为”您为 m 选择了 7?这是否正确,因为季节性显示为每周一次?

我的第一个问题如下 - 如果季节性是每月你使用 12 吗?如果是每年,您使用 1 吗?有没有理由每天选择 365?

其次,如果您获得的数据已经是每周一次,例如

你做的季节性分解将 m=1 用于每周,m=4 用于每月,m=52 用于每年。

最后,如果它每月像这样:

并且您进行季节性分解,每月 m=1,每年 m=12。

任何帮助将不胜感激,我只是希望能够自信地选择正确的标准。

0 投票
0 回答
49 浏览

python - 使用 SARIMAX 在 python 上获得预测错误

在使用从今年 1 月开始的数据的疫苗每日计数时,我使用 SARIMAX 预测未来几天的计数。我使用以下代码:

我得到以下输出。有人可以帮我解决问题吗? 在此处输入图像描述

0 投票
0 回答
58 浏览

python - Statsmodels SARIMAX 中包含零的外生数据的预处理和日志转换

我使用的 statsmodels SARIMAX 算法是确定外生数据对因变量的影响。我的外生列通常包含零,并且是自变量中的自然组成部分。

当外生数据经过对数转换时,模型的准确性会提高。在对 exog 数据执行 EDA 之后,在对数转换之后总是倾向于更好地拟合线性拟合——我假设是因为非线性关系被删除了。

但是,那些包含零的列会导致导致结果模型中的系数不正确的问题。在试图了解正在发生的事情时,我已经在预处理的每个步骤中绘制了数据并包括了差异。我知道 SARIMAX 不使用简单的差分,但是我知道结果是相似的。

预处理选项

选项 1显示记录的和差异的数据。

这不能用作 exog 数据,因为原始零在对数转换后变为 -inf - 因此存在间隙。

选项 2显示了将 0 替换为 1 的位置。

这会在变化非常大的地方引入大峰值。

选项 3显示用非零最小值替换零

这看起来不错,在原始零点所在区域之后的差异数据中没有大的尖峰。

选项 4显示用数据中的平均值替换的零

与选项 2相反的情况发生了,我们的数据再次出现大峰值。

我担心的是,使用选项 2 或 4 会导致完全相反的结果。选择如何预处理数据,特别是我们如何处理数据中的零点会导致两个完全相反的结论。

选项 3在此示例中看起来不错,但是,(非零)最小值总是有些随意,我担心的是系数的值取决于数据中的随机方面。

因为我使用的是 SARIMAX 自己的去季节化,所以我不确定内部使用的确切机制。这使得在对数转换之前选择零处理变得棘手。

问题:

在用作 SARIMAX 中的外生序列之前,任何人都可以就处理零的最佳方法提供任何建议,以避免差异数据中的大峰值?

应该注意的是,零值是数据中的自然特征。

0 投票
0 回答
162 浏览

python - 将 ARIMAX 预测分解为 exog 变量和 ARIMA 参数的贡献

我正在使用 statsmodel 包拟合 ARIMAX 模型以生成时间序列预测,我选择 ARIMAX 的原因之一是因为理论上线性形式可以很容易地解释模型输入和系数值如何生成预测。我试图分离出每个外生变量、AR 和 MA 参数对通过使用以下方法重建预测而生成的预测的影响:

  • 外生参数的系数
  • 我正在预测的时间段的第一个差分外生参数值
  • AR系数
  • 滞后的一阶差分 endog 变量(与 AR 系数一起使用)
  • MA 系数
  • 先前运行的残差(与 MA 系数一起使用)

将系数乘以值并将其添加到前一个 Y 值可以让我接近模型生成的预测值,但它总是稍微偏离(太远而不能成为舍入误差)。我是否遗漏了预测的某些组成部分,误解了 ARIMAX 如何生成预测,或者只是我的数学或代码中有错误?

0 投票
1 回答
189 浏览

python - 将 exog 变量添加到 SARIMAX 网格搜索中

我遵循了 Jason Brownlee 关于 SARIMAX 网格搜索的优秀教程,并在使用单变量系列进行预测时使其工作。但是,我需要添加一个外生变量。我知道要做到这一点,您需要在 SARIMAX 调用中添加一个 exog 参数,并在我的主脚本中使用它,但无法弄清楚如何将它包含在本教程中使用的函数范围中。

我的代码如下:

以上是摘录,如果我在核心代码中遗漏了任何内容,敬请见谅。我尝试了各种添加它们的方法,包括为几个函数添加额外的参数,但由于它们都是嵌套的,似乎没有一个起作用,所以我决定将它添加为配置的一部分。

作为参考,dataexog都是长度为 31 的数组。

目前scores返回为[],这意味着我不能在我的主模型中使用它。任何帮助将非常感激。

0 投票
1 回答
40 浏览

python - 无法使用 SARIMA 绘制预测值

我正在使用statsmodels.tsa.statespace.sarimaxpmdarima 构建 SARIMA 时间序列,因为没有安装。我的数据每季度有 10 年的 44 次观察。我的目标是预测未来 1 或 2 年。谁能告诉我我需要什么来预测预测。我不精通 Python,但我认为我的季度数据和期望的预测之间存在误解。我从面向数据科学、来自这里的文章和 youtube 编译算法。在使用 min AIC 评估 P、D、Q、m 参数并拟合模型后,这是结果 - 无法绘制预测值缺失 我制作的预测步骤 2 列 - 日期和 GVA - 我正在寻找的总附加值数据集在这里

如果有人可以帮助..

Google 协作笔记本在这里 我收集的数据集在这里