ADF 测试结果与 arima 的 ndiff 不匹配

The result of ADF test doesn't match to ndiff of arima

我尝试在时间序列数据集(stock sp-500)上使用 ARIMA 模型。

在向 ARIMA 模型输入数据之前,我想知道时间序列是否具有平稳性。

所以,我选择了代码为“APA”(Apache Corporation)的股票,我使用包 statsmodels.tsa.stattools 中的 adfuller 来测试时间序列是否具有平稳性。

我还使用了 pmdarima.arima 包中的 ndiff 来为 ARIMA 模型找到合适的差异数(据我所知,在 ARIMA 模型上设置这个数字会使时间序列具有平稳性)。

并且adfuller的p值大于0.05,所以我认为时间序列没有平稳性(我在这里找到结论:

但是ndiff的结果是0.

根据我的理解,这有点奇怪,因为 adfuller 表明时间序列没有平稳性,而 ndiff 表明不需要设置 ARIMA 差分项。

我的问题是:如果时间序列不平稳ndiff的结果不应该大于0吗?

测试代码:

数据集:https://www.kaggle.com/hanseopark/prediction-of-price-for-ml-with-finance-stats/data

完整代码:https://gist.github.com/bab6426c0e8a10472c924755c1f5ff67.git

pmdarima 中的函数很棒,但并非万无一失。此外,这实际上取决于您的数据。差分是使数据平稳的好方法,但有时它不起作用。它通常用于去除数据中的趋势,季节差分用于去除季节性。

股票价格或标准普尔指数等指数不是季节性的,甚至趋势也很难检测或量化。相反,这样的时间序列通常有很多不规则性、起伏等,在这种情况下,您可能需要应用对数(或组合,或其他东西......)来使数据平稳,这样的事情可以' pmdarima 甚至 ADF 测试总是检测不到。它们是很棒的工具,但您不能完全依赖它们。

对数解是这样的:

your_dataframe["your_stationary_feature"] = numpy.log(your_dataframe["your_feature"])

如果你预测的是对数数据,那么需要倒数:

inverted_data = numpy.epx(your_predictions)