【问题标题】:How to use moving average in python?如何在python中使用移动平均线?
【发布时间】:2019-09-25 06:43:46
【问题描述】:

我想使用简单的移动平均线进行时间序列预测。我正在使用以下代码:-

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

我无法理解如何预测接下来的 10 个值,因为 y_hat 只给了我 1 个值。 y_hat 也与数据的平均值不匹配,因为我在 MA 中使用订单 1 时应该匹配。谁能帮我解决这个问题?

【问题讨论】:

    标签: python time-series moving-average


    【解决方案1】:
    y_hat=model_fit.predict(len(data),len(data))
    

    你的起始值是 len(data) 并且结束值也是一样的,所以它给你一个预测值。

    我在我的项目中使用了 forecast()。这是我的代码 sn-p:

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

    预测值在我的图表中保持不变,因为我的数据具有季节性成分。

    【讨论】:

      【解决方案2】:

      我认为你只需要像这样给出开始和结束值

       model_fit.predict(0,10)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-01
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 2019-02-16
        • 2019-12-26
        相关资源
        最近更新 更多