使用 Auto_Arima 更好地适应测试数据
Get better fit on test data using Auto_Arima
我正在使用 AirPassengers 数据集来预测时间序列。对于我使用的模型,我选择使用 auto_arima 来预测预测值。但是,似乎 auto_arima 选择的顺序无法适合模型。对应图表制作完成
我该怎么做才能更合身?
我给那些想尝试的人的代码:
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
from pmdarima import auto_arima
df = pd.read_csv("https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv")
df = df.rename(columns={"#Passengers":"Passengers"})
df.Month = pd.to_datetime(df.Month)
df.set_index('Month',inplace=True)
train,test=df[:-24],df[-24:]
model = auto_arima(train,trace=True,error_action='ignore', suppress_warnings=True)
model.fit(train)
forecast = model.predict(n_periods=24)
forecast = pd.DataFrame(forecast,index = test.index,columns=['Prediction'])
plt.plot(train, label='Train')
plt.plot(test, label='Valid')
plt.plot(forecast, label='Prediction')
plt.show()
from sklearn.metrics import mean_squared_error
print(mean_squared_error(test['Passengers'],forecast['Prediction']))
感谢您的阅读。任何建议表示赞赏。
问题是我没有指定m,在这种情况下,我将m的值指定为12,表示它是一个月循环,每个数据行是一个月。我就是这么理解的。 source
欢迎发表评论,我不太确定,因为我是 ARIMA 的新手。
代码:
model = auto_arima(train,m=12,trace=True,error_action='ignore', suppress_warnings=True)
只要加上m=12,表示数据是月度的。
结果:
这个序列不是平稳的,任何差分(注意变化的幅度不断增加)都不会使其如此。然而,首先通过获取日志来转换数据应该做得更好(实验表明它确实做得更好,但不是我所说的好)。设置季节性(正如我在 m=12 的评论中所建议的那样,并记录日志会产生这样的结果: 这本质上是完美的。
我正在使用 AirPassengers 数据集来预测时间序列。对于我使用的模型,我选择使用 auto_arima 来预测预测值。但是,似乎 auto_arima 选择的顺序无法适合模型。对应图表制作完成
我该怎么做才能更合身?
我给那些想尝试的人的代码:
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
from pmdarima import auto_arima
df = pd.read_csv("https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv")
df = df.rename(columns={"#Passengers":"Passengers"})
df.Month = pd.to_datetime(df.Month)
df.set_index('Month',inplace=True)
train,test=df[:-24],df[-24:]
model = auto_arima(train,trace=True,error_action='ignore', suppress_warnings=True)
model.fit(train)
forecast = model.predict(n_periods=24)
forecast = pd.DataFrame(forecast,index = test.index,columns=['Prediction'])
plt.plot(train, label='Train')
plt.plot(test, label='Valid')
plt.plot(forecast, label='Prediction')
plt.show()
from sklearn.metrics import mean_squared_error
print(mean_squared_error(test['Passengers'],forecast['Prediction']))
感谢您的阅读。任何建议表示赞赏。
问题是我没有指定m,在这种情况下,我将m的值指定为12,表示它是一个月循环,每个数据行是一个月。我就是这么理解的。 source
欢迎发表评论,我不太确定,因为我是 ARIMA 的新手。
代码:
model = auto_arima(train,m=12,trace=True,error_action='ignore', suppress_warnings=True)
只要加上m=12,表示数据是月度的。
结果:
这个序列不是平稳的,任何差分(注意变化的幅度不断增加)都不会使其如此。然而,首先通过获取日志来转换数据应该做得更好(实验表明它确实做得更好,但不是我所说的好)。设置季节性(正如我在 m=12 的评论中所建议的那样,并记录日志会产生这样的结果: