Что возвращает statsmodels.tsa.arima_model.ARIMA.predict (...)? - PullRequest
0 голосов
/ 29 сентября 2019

Я работаю над следующей проблемой: нам дан набор {DateTime, Price} , представляющий цены акции. Некоторые из цен являются нулевыми, и мы должны определить их, интерполируя между ненулевыми записями. Я пробовал различные интерполяторы - линейный, кубический сплайн и т. Д., Но точность интерполированных значений недостаточно хороша.

Итак, я решил использовать ARIMA для моделирования ненулевых записей, а затем использовать эту модель для прогнозирования значений в DateTime записей Null. Вот код:

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 вернет одну прогнозируемую цену для каждой нулевой записи. Однако то, что я вижу из утверждений печати:

len(train_price) 126
len(missing_datetime_ms) 20
len(missing_price) 125

Похоже, что вместо того, чтобы возвращать мне интересующие меня значения, он возвращает обучающие значения (меньше одного).

Можете ли вы объяснить, как я ругаю ARIMA, и как я могу заставить ее делать то, что я намереваюсь?

...