2016-01-21 51 views
0

我有一個包含月度數據的熊貓系列(df.sales)。我需要減去數據12個月前,以適應時間序列,所以我跑這個命令:撤消系列區別

sales_new = df.sales.diff(periods=12) 

然後我適合的ARMA模型,並預測未來:

model = ARMA(sales_new, order=(2,0)).fit() 
model.predict('2015-01-01', '2017-01-01') 

因爲我有對銷售數據進行分析,當我使用模型進行預測時,它會預測前向差異。如果這是第一階段的差異,我只會使用np.cumsum(),但因爲這是第12階段,所以它有點竅門。

什麼是「展開」差異並將其變回原始數據比例的最佳方式?

+1

你想要得到的結果是什麼可以請你告訴你有什麼的一個例子,數據幀? – firelynx

回答

1

我認爲你需要計算關閉值未來值的頭12個月:

periods = 12 
df = pd.DataFrame(data={'value': np.random.random(size=24)}, index=pd.date_range(start=date(2014, 1,1), freq='M', periods=24)) 
diffs = df.diff(periods=periods) 

restored = df.copy() 
restored.iloc[periods:] = np.nan 
for d, val in diffs.iloc[periods:].iterrows(): 
    restored.loc[d] = restored.loc[d - pd.DateOffset(months=periods)].value + val 

res = pd.concat([df, diffs, restored], axis=1) 
res.columns = ['original', 'diffs', 'restored'] 

      original  diffs restored 
2014-01-31 0.926367  NaN 0.926367 
2014-02-28 0.688898  NaN 0.688898 
2014-03-31 0.297025  NaN 0.297025 
2014-04-30 0.139094  NaN 0.139094 
2014-05-31 0.375082  NaN 0.375082 
2014-06-30 0.490638  NaN 0.490638 
2014-07-31 0.789683  NaN 0.789683 
2014-08-31 0.236841  NaN 0.236841 
2014-09-30 0.263245  NaN 0.263245 
2014-10-31 0.547025  NaN 0.547025 
2014-11-30 0.243444  NaN 0.243444 
2014-12-31 0.385028  NaN 0.385028 
2015-01-31 0.823224 -0.103142 0.823224 
2015-02-28 0.828245 0.139347 0.828245 
2015-03-31 0.753291 0.456266 0.753291 
2015-04-30 0.447670 0.308576 0.447670 
2015-05-31 0.936667 0.561584 0.936667 
2015-06-30 0.223049 -0.267589 0.223049 
2015-07-31 0.933942 0.144259 0.933942 
2015-08-31 0.325726 0.088886 0.325726 
2015-09-30 0.947526 0.684281 0.947526 
2015-10-31 0.524749 -0.022276 0.524749 
2015-11-30 0.431671 0.188227 0.431671 
2015-12-31 0.234028 -0.151000 0.234028 
+0

這有幫助嗎? – Stefan