Reputation: 373
I want to make a time series prediction using simple moving average . I am using the below code :-
from statsmodels.tsa.arima_model import ARMA
import statistics
data=[x + random() for x in range(1,100)]
model=ARMA(data,order=(0,1))
model_fit=model.fit(disp=False)
y_hat=model_fit.predict(len(data),len(data))
I am not able to understand how to predict next 10 values as y_hat is giving me only 1 value. Also y_hat is not matching with mean of data which should match as i am using order 1 in MA. Can anyone help me on this ?
Upvotes: 0
Views: 1694
Reputation: 5757
I think you just have to give the start and end value like this
model_fit.predict(0,10)
Upvotes: 0
Reputation: 13349
y_hat=model_fit.predict(len(data),len(data))
your start value is len(data) and end value is also the same so it's giving you the single predicted value.
I used forecast() in my project. Here is my code snippet:
from statsmodels.tsa.stattools import acf
# Create Training and Test
train = df[:3000]
test = df[3000:]
# Build Model
# model = ARIMA(train, order=(3,2,1))
model = ARIMA(train, order=(1, 1, 1))
fitted = model.fit(disp=-1)
# Forecast
fc, se, conf = fitted.forecast(len(test), alpha=0.05) # 95% conf
# Make as pandas series
fc_series = pd.Series(fc, index=test.index)
lower_series = pd.Series(conf[:, 0], index=test.index)
upper_series = pd.Series(conf[:, 1], index=test.index)
# Plot
plt.figure(figsize=(12,5), dpi=100)
plt.plot(train, label='training')
plt.plot(test, label='actual')
plt.plot(fc_series, label='forecast')
plt.fill_between(lower_series.index, lower_series, upper_series,
color='k', alpha=.15)
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()
Forecasting value is constant in my graph because my data has seasonal components.
Upvotes: 1