0

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 ?

2 Answers 2

1
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()

enter image description here

Forecasting value is constant in my graph because my data has seasonal components.

Sign up to request clarification or add additional context in comments.

Comments

0

I think you just have to give the start and end value like this

 model_fit.predict(0,10)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.