Расчетные данные временного ряда в python с использованием заданного набора функций - PullRequest
0 голосов
/ 18 июня 2020

Итак, мои данные выглядят так:

year, y, x1, x2, x3, x4
2009, 0.5, 0.4, 0.4, 0.9
2013, nan, 0.4, 0.5, 0.8
2020, 0.8, 0.39, 0.51, 0.7

Данные указаны по годам, но интервал между каждым годом не согласован. Значение y зависит как от времени, так и от характеристик. Но в некоторых случаях y отсутствует, что мне нужно больше всего. Другие функции тоже могут отсутствовать, но в основном все они есть. Я попытался ввести данные с помощью функции df.interpolate(), но значения не подходят для большинства функций в интервале. Я пробовал ARIMA, LSTM и другие, но они не учитывают функции ввода. Я тоже рассматривал возможность использования методов регрессии, но они не учитывают характер данных временных рядов.

Итак, какой подход является лучшим для этого случая. т.е.

Как рассчитать значения временных рядов на основе входных характеристик?

Ответы [ 4 ]

2 голосов
/ 13 июля 2020

Интересный вопрос, нет правила или хорошего ответа на вашу проблему ...

Похоже, вы хотите предсказать t + n точек, начиная с t + 1, где t - ваша последняя известная точка.

Если это так, вам необходимо:

  • Скорректировать ваши данные: Чтобы предсказать t + 1 непрерывного временного ряда Кажется, что ваши данные не имеют регулярного интервала. Поэтому существует метод под названием Croston, который помогает работать с прерывистыми данными. Простыми словами, вы можете сгруппировать свои данные, чтобы уменьшить количество длинных 0 точек данных (и неизвестных функций). Pandas предлагает хороший метод для повторной выборки (?) Вашего фрейма данных для создания данных регулярных интервалов временных рядов (метод называется resample).

Важно удалить неизвестные целевые значения (y с nans ). Но при этом вы потеряете важную информацию, поэтому один из способов - создать две модели. Один для вменения данных для заполнения неизвестных значений y. Вторая для прогнозирования будущих значений y.

Первая модель может быть представлена ​​как AutoEncoder, где функции представляют текущее время. Другими словами, данные n функций предсказывают y. Где n и y были получены в одно и то же время t (та же строка).

Вторая модель может предсказывать будущее (прогнозирование), поэтому после ввода недостающих значений y предсказывайте будущее t + n, где n существует {1 -> + inf}.

Еще один хороший подход к работе с пропущенными значениями - это создание трех моделей вместо двух.

Первая - это вышеупомянутое для вменения данных.

После заполнения отсутствующих целевых значений используйте новую матрицу для ввода второго автокодировщика.

Используйте скрытое состояние второго AE в качестве входных данных для третьей модели, таким образом, у вас могут быть пропущенные значения, и AE может получить сжатое представление этих значений, используя лучшее для предсказания будущего.

Лучшая архитектура варьируется от проблемы к проблеме. Например, в вашем случае вы можете просто отбросить отсутствующие целевые значения и получить хорошую окончательную модель.

Одна корректировка, которая должна быть необходима, - это ввести отсутствующие значения функций, но я бы попробовал с отсутствующими значениями перед добавлением некоторого шума . При необходимости вы можете добавить среднее, медианное, минимальное или максимальное значение скользящего окна (используйте метод прокрутки pandas).

1 голос
/ 10 июля 2020

Если вы используете TensorFlow, я считаю, что этот пример довольно близок к тому, что вы ищете. Он показывает, как включить несколько функций в вашу нейронную сеть. Я думаю, что раздел, который вы ищете, является многомерной одношаговой моделью:

https://www.tensorflow.org/tutorials/structured_data/time_series#part_2_forecast_a_multivariate_time_series

0 голосов
/ 13 июля 2020

Вы можете сделать это задачей регрессии, создав цель, используя функцию опережения. Добавьте переменную, которая определяет, сколько [периодов_перед] целевой переменной. Затем вы используете periods_ahead как входную функцию в регрессионную модель. Обратной стороной здесь является то, что вам также необходимо добавить запаздывающие функции или создать разницу во времени (целевые преобразования), чтобы сделать вашу цель стационарной вручную, вместо того, чтобы полагаться на алгоритм временных рядов.

0 голосов
/ 18 июня 2020

Думали ли вы о смешивании подходов, основанных на функциях и времени? Вы можете, например, обучить линейную регрессию на непропущенных значениях и получить коэффициенты функций для прогнозирования пропущенного значения, а затем простую / взвешенную скользящую среднюю / ARIMA / LSTM et c. для временной составляющей. Затем присвойте веса результатам из них обоих, чтобы получить прогноз, основанный как на характеристиках, так и на временных рядах.

...