Вопрос или проблема
Я вижу этот учебник, чтобы узнать, как использовать LSTM для прогнозирования временных рядов, и заметил, что он сдвинул целевую/метки вверх, чтобы все признаки были на момент времени t, а целевая величина – на t+1.
Так что мой простой вопрос: всегда ли нужно так делать при работе с временными рядами?
У меня есть данные временного ряда, и я хочу использовать их для создания регрессионной модели с RNN. Сначала я использовал нейронную сеть с прямой связью, но это не сработало достаточно хорошо, поэтому я решил использовать RNN/LSTM. Мой вопрос: следует ли оставить набор данных таким, какой он есть сейчас, где в каждой строке есть признаки и целевая величина на момент времени t, или мне следует сдвинуть столбец с целевой величиной так, чтобы признаки всегда были на момент времени t, а целевая величина всегда была сдвинута (t+1) вперед?
Да, вы делаете прогноз, что означает использование исторических признаков (таких как на момент времени t) для предсказания целевой величины в будущем (скажем, t+1). Во многих случаях вы можете использовать признаки за несколько прошлых временных меток (скажем, t-n, t-n+1, … t) для прогнозирования. Предварительно обработайте ваши данные таким образом (X_исторические, y_будущие), чтобы избежать утечки данных.
Ответ или решение
При разработке модели временных рядов с использованием рекуррентных нейронных сетей (RNN) или долгосрочной краткосрочной памяти (LSTM) непосредственно важно понимать, как правильно формировать ваши входные и целевые данные. Рассмотрим ваши вопросы по поводу смещения целевой переменной.
1. Прогнозирование — ключевая задача:
Ваша цель заключается в том, чтобы использовать исторические данные для прогнозирования будущих значений. Когда вы работаете с временными рядами, особенно с LSTM, важно четко понимать, что входные данные (признаки) должны представлять информацию, доступную на момент времени t
, в то время как целевая переменная (target) должна быть значением, которое вы хотите предсказать на следующий временной шаг t+1
.
2. Смещение целевой переменной:
Смещение целевой переменной — это более чем легкая манипуляция с данными. Убедитесь, что ваши модели не используют информацию о будущем при обучении, поскольку это приведет к утечке данных (data leakage). Утечка данных приводит к неэффективным моделям, которые работают хорошо на обучающем наборе, но плохо на тестовом. Следовательно, рекомендуется сдвинуть вашу целевую переменную так, чтобы каждая строка вашего набора данных содержала признаки на момент времени t
, а целевая переменная соответствовала времени t+1
.
3. Учет временной зависимости:
Важно отчётливо осознать, что временные ряды характеризуются зависимостью от предыдущих значений. Используя только данные времени t
, вы упускаете возможность использовать информацию о предыдущих временных точках, что может значительно увеличить предсказательную силу вашей модели. В большинстве случаев важно не только текущее значение, но и последовательные прошлые значения, что можно реализовать, создавая окна для ваших данных (t-n
, t-n+1
, …, t
). При этом основная идея заключается в том, что модель должна иметь возможность "видеть" контекст, т.е. каковы были значения в предыдущих временных шагах, чтобы эффективно предсказать значение на следующем.
4. Практическое применение в RNN/LSTM:
Работа с RNN и LSTM включает в себя подготовку данных в формате, который модель может обрабатывать. Обычно можно использовать подход "упаковки" (batching), который требует, чтобы ваши данные были структурированы в виде трёхмерного массива. Размерности массива – [количество образцов, размер окна, количество признаков]. Это значит, что вы сможете включить несколько временных шагов (например, 5 предыдущих значений) для предсказания следующего значения.
5. Итоговые рекомендации:
Советую вам принять следующие меры:
- Сдвиньте целевые переменные: Убедитесь, что целевая переменная соответствует прогнозируемому значению на следующий шаг времени.
- Используйте окна: Рассмотрите возможность использования нескольких предыдущих временных точек в ваших признаках для более глубокого анализа и адекватного прогнозирования.
- Избегайте утечек данных: Проверяйте, чтобы модель не имела доступа к данным будущих временных шагов на этапе обучения.
Следуя этим принципам, вы сможете создать более точные и надежные модели для задач временных рядов с использованием RNN и LSTM.