我正在解决以下问题:我们得到了一组 {DateTime,Price} 来代表股票的价格。一些价格为空,我们需要通过在非空条目之间进行插值来确定这些价格。我尝试了各种插值器-线性,三次样条曲线等,但是插值的精度不够好。
因此,我决定使用ARIMA对非Null条目进行建模,然后使用该模型来预测Null条目的DateTime处的值。这是代码:
def fill_in_dataframe_ARIMA( df ):
price_is_not_NaN = df[ 'price' ].notnull()
price_is_NaN = np.logical_not( price_is_not_NaN )
# Convert the datetimes of the index into milliseconds:
datetime_ms = df.index.map( to_ms ) * 1000.0
# Train the ARIMA model:
train_datetime_ms = datetime_ms[ price_is_not_NaN ]
train_price = df.price[ price_is_not_NaN ]
print( "len(train_price)", len(train_price), file = sys.stderr )
arima_model = ARIMA( train_price, ( 5, 1, 2 ), train_datetime_ms ).fit()
# Use model to predict the missing prices:
missing_datetime_ms = datetime_ms[ price_is_NaN ]
print( "len(missing_datetime_ms)", len(missing_datetime_ms), file = sys.stderr )
missing_price = arima_model.predict( exog = missing_datetime_ms, typ = "levels" )
print( "len(missing_price)", len( missing_price ), file = sys.stderr )
我期望的是predict
调用将为每个Null条目返回一个预测的价格。但是,我从打印语句中看到的是:
len(train_price) 126
len(missing_datetime_ms) 20
len(missing_price) 125
似乎不是返回我感兴趣的值,而是返回训练值(少了一个)。
您能解释一下我如何滥用ARIMA,以及如何按照我的意愿去做吗?