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)
我尝试在时间序列数据集(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)