Подтвердить что ты не робот

Использование анализа Фурье для прогнозирования временных рядов

Для данных, которые, как известно, имеют сезонные или дневные шаблоны, я хотел бы использовать анализ Фурье для прогнозирования. После запуска fft на данных временных рядов я получаю коэффициенты. Как я могу использовать эти коэффициенты для прогнозирования?

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

Проще говоря: я запускаю fft для t = 0,1,2,.. 10, то используя ifft on coef, могу ли я использовать регенерированные временные ряды для t = 11,12,... 20?

4b9b3361

Ответ 1

Похоже, вы хотите сочетание экстраполяции и шумоподавления.

Вы говорите, что хотите повторять наблюдаемые данные за несколько периодов. Ну, тогда просто повторите наблюдаемые данные. Нет необходимости в анализе Фурье.

Но вы также хотите найти "шаблоны". Я предполагаю, что это означает поиск доминирующих частотных составляющих в наблюдаемых данных. Тогда да, возьмем преобразование Фурье, сохраняем наибольшие коэффициенты и исключаем остальные.

X = scipy.fft(x)
Y = scipy.zeros(len(X))
Y[important frequencies] = X[important frequencies]

Что касается периодического повторения: пусть z = [x, x], т.е. два периода сигнала x. Тогда Z[2k] = X[k] для всех k в {0, 1,..., N-1} и нулей в противном случае.

Z = scipy.zeros(2*len(X))
Z[::2] = X

Ответ 2

Я знаю, что этот вопрос может быть для вас не актуальным, но для других, которые ищут ответы, я написал очень простой пример экстраполяции четырьера в Python https://gist.github.com/tartakynov/83f3cd8f44208a1856ce

Перед запуском script убедитесь, что у вас установлены все зависимости (numpy, matplotlib). Не стесняйтесь экспериментировать с ним. enter image description here Постскриптум Локально Стационарный Вейвлет может быть лучше экстраполяции Фурье. LSW обычно используется для прогнозирования временных рядов. Основным недостатком экстраполяции Фурье является то, что он просто повторяет вашу серию с периодом N, где N - длина вашего временного ряда.

Ответ 3

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

Экстраполяция всегда опасна, но вы можете попробовать ее. Вы используете прошлую информацию для прогнозирования будущего, когда вы это делаете: "Предсказать завтрашнюю погоду, глядя сегодня". Просто имейте в виду риски.

Я бы рекомендовал прочитать "Черный лебедь" .

Ответ 4

вы можете использовать библиотеку, отправленную @tartakynov, и, чтобы не повторять точно такие же временные ряды в трансляции (overfitting), вы можете добавить новый параметр к функции под названием n_param и исправить нижнюю границу h для амплитуд частот.

def fourierExtrapolation(x, n_predict,n_param):

обычно вы обнаружите, что в сигнале есть частоты, которые имеют значительно более высокую амплитуду, чем другие, поэтому, если вы выберете эти частоты, вы сможете изолировать периодический характер сигнала

вы можете добавить две строки, которые определяются определенным числом n_param

h=np.sort(x_freqdom)[-n_param]
x_freqdom=[ x_freqdom[i] if np.absolute(x_freqdom[i])>=h else 0 for i in range(len(x_freqdom)) ]

просто добавив это, вы сможете прогнозировать приятное и плавное

еще одна полезная статья о FFt: прогноз FFt в R