Прогнозирование многомерного временного ряда tsfresh с несколькими временными - PullRequest
0 голосов
/ 01 сентября 2018

Я собираюсь использовать библиотеку tsfresh для выбора функций в задаче прогнозирования многомерного временного ряда с несколькими временными рядами. Моя проблема похожа на проблему, описанную в https://github.com/blue-yonder/tsfresh/blob/master/notebooks/timeseries_forecasting_google_stock.ipynb,, но с некоторыми изменениями (я перечислил эти корректировки в контексте связанной проблемы).

1) Вместо того, чтобы делать прогнозы только для акций Google, я хотел бы делать прогнозы для различных акций (например, набор технологических акций). Таким образом, будет единственная модель, способная делать прогнозы для всего набора акций.

2) Вместо того, чтобы просто прогнозировать следующий шаг по времени (например, насколько хорошо акции будут работать завтра), я бы хотел предсказать, насколько акции будут расти в течение следующей недели / двух недель / и т.д.

3) Я хотел бы включить данные из других акций (возможно, как некоторый предопределенный набор для каждой акции) для выбора функции.

4) Вместо того, чтобы просто использовать высокое значение в качестве функции, я бы хотел использовать все значения (высокое, низкое и т. Д.)

Я пытался и не смог реализовать это с помощью tsfresh. Можно ли это сделать, и если да, то как? Вот код, который я написал, чтобы рассчитать свои собственные функции с помощью метода прокрутки

def get_past_days_features(row, var, daysback):
if 'rainfall' in var:
    rainfall_df = mean_rainfall_unstacked
    rainfall_df.date = pd.to_datetime(rainfall_df.date, dayfirst = True)
    gov_data = rainfall_df[rainfall_df.gov_iso == row.gov_iso].set_index('date')
    x_days_date = row.date - pd.to_timedelta(daysback, unit='d')
    relevant_gov_data = gov_data.loc[(gov_data.index >= x_days_date) & (gov_data.index < row.date)].sort_index()
    return (pd.Series([np.mean(relevant_gov_data[var]), np.max(relevant_gov_data[var]), kurtosis(relevant_gov_data[var])]))        
else:  
    gov_data = case_death_rainfall_data[case_death_rainfall_data.gov_iso == row.gov_iso].set_index('date')
    x_days_date = row.date - pd.to_timedelta(daysback, unit='d')
    relevant_gov_data = gov_data.loc[(gov_data.index >= x_days_date) & (gov_data.index < row.date)].sort_index()
    return (pd.Series([np.mean(relevant_gov_data[var]), np.max(relevant_gov_data[var]), kurtosis(relevant_gov_data[var])]))

где full_data - это сплющенный фрейм данных со столбцами: date, stock_id и несколькими временными рядами (максимум, минимум и т. Д.)

...