假设我使用statsmodels.tsa.statespace.sarimax
中的SARIMAX在数据集dataset1
上拟合了一个模型 – 那么是否可以使用这个拟合结果在另一个数据集dataset2
上进行预测?
具体来说,请考虑以下情况:
from statsmodels.tsa.statespace.sarimax import SARIMAXimport pandas as pdimport numpy as np# 生成示例数据n=90idx = pd.PeriodIndex(pd.date_range(start = '2015-01-02',end='2015-04-01',freq='D'))dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10dataset1 = pd.Series(dat, index = idx)# 拟合模型fit = SARIMAX(dataset1, order = (1,0,1)).fit()# 在dataset1上进行30天的预测fit.forecast(30)
我该如何使用fit
在dataset2
上进行预测?
dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10dataset2 = pd.Series(dat, index = idx)
理想情况下,应该有一个非常简单的操作,类似于fit(dataset2).forecast(30)
,但显然不是这样的。
我知道我可以提取估计的参数fit.params
,但除了这种繁琐的过程之外,是否有内置的方法或技巧可以使用现有的fit
实例?
回答:
你可以使用apply
结果方法:
from statsmodels.tsa.statespace.sarimax import SARIMAXimport pandas as pdimport numpy as np# 生成示例数据n=90idx = pd.PeriodIndex(pd.date_range(start = '2015-01-02',end='2015-04-01',freq='D'))dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10dataset1 = pd.Series(dat, index = idx)# 拟合模型fit = SARIMAX(dataset1, order = (1,0,1)).fit()# 在dataset1上进行30天的预测fit.forecast(30)# ------------------------------------# 获取新数据集dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10dataset2 = pd.Series(dat, index = idx)# 将`fit`中的参数应用到新数据集fit2 = fit.apply(dataset2)# 在dataset2上进行30天的预测fit2.forecast(30)