簡體   English   中英

statsmodels ARMA預測樣本外

[英]statsmodels ARMA to predict out-of-sample

我想預測時間序列的返回,我首先擬合數據集但是當我預測明天的回報時它不起作用。 我的代碼是

    date = datetime.datetime(2014,12,31)
    todayDate = (date).strftime('%Y-%m-%d')
    startdate = (date - timedelta(days = 1)).strftime('%Y-%m-%d') 
    enddate = (date + timedelta(days = 2)).strftime('%Y-%m-%d')         
    data = get_pricing([symbol],start_date= date1, end_date = todayDate, frequency='daily')
    df =  pd.DataFrame({"value": data.price.values.ravel()},index = data.major_axis.ravel())
    result = df.pct_change().dropna() 

    degree = {}
    for x in range(0,5):
        for y in range(0,5):
            try:
                arma = ARMA(result, (x,y)).fit()
                degree[str(x) +str(y)] = arma.aic

            except:
                continue

    dic= sorted(degree.iteritems(), key = lambda d:d[1])

    p = int(dic[0][0][0])
    q = int(dic[0][0][1])
    arma = ARMA(result, (p,q)).fit()
    predicts = arma.predict()
    exogx = np.array(range(1,4))
    predictofs = arma.predict(startdate,enddate, exogx)

最后一行不起作用,它產生了一個錯誤

ValueError:如果未提供數據,則必須提供freq參數

我不明白。 有人遇到過同樣的問題嗎?

我遇到了同樣的問題,因為你的索引缺少Freq參數。 如果你打印data.index,你會看到類似的東西

DatetimeIndex(['2015-06-27','2015-06-29','2015-06-30','2015-07-01','2015-07-02','2015-07-03' ,'2015-07-04','2015-07-06','2015-07-07','2015-07-08','2015-07-09','2015-07-10',' 2015-07-11','2015-07-13','2015-07-14','2015-07-15','2015-07-16','2015-07-17','2015- 07-18','2015-07-20','2015-07-21','2015-07-22','2015-07-23','2015-07-24','2015-07- 25','2015-07-27','2015-07-28','2015-07-29','2015-07-30','2015-07-31'],dtype ='datetime64 [ns ]',name = u'Date',freq = None)]

注意'Freq = None'

你可以這樣做:

data = Series(data.values, data.index)
data = data.asfreq('D')

您也可以通過執行來硬指定頻率

data.index.freq = 'D'

如果這有點幫助,請告訴我。


如果這不起作用,您可以簡單地使用整數來進行預測,然后手動填充索引

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM