Вопрос или проблема
У меня есть набор данных, состоящий из нескольких временных рядов для нескольких пользователей. У каждого пользователя есть несколько временных шагов, значение для предсказания на каждом временном шаге и список признаков на каждом временном шаге. В настоящее время я использую модель LSTM, но я не совсем уверен, как разбить набор данных на обучающую/валидационную/тестовую выборки. Я могу подумать о двух вариантах
- Разделить по пользователям. То есть обучаться на нескольких пользователях, а затем тестироваться на нескольких других пользователях.
- Удалить последние несколько временных шагов всех временных рядов. То есть обучаться на первых x % временных шагов каждого пользователя, а затем тестироваться на оставшихся временных шагах.
Для меня первый метод кажется более справедливым, так как это совсем неизвестные данные. Но второй метод кажется более схожим с реальной жизненной ситуацией, в которой у вас уже есть временной ряд для пользователя и вы хотите предсказать следующий временной шаг. Но я боюсь, что это может создать некоторую предвзятость к последним временным шагам. Если все последующие временные шаги сходятся к какому-то значению, модель автоматически будет предсказывать более точно.
Может кто-то дать мне несколько советов в правильном направлении или показать мне связанную литературу? Спасибо!
Если временные ряды отдельных пользователей коррелируют хоть как-то, даже незаметно, и если ваша модель имеет достаточную мощность, она определенно будет использовать информацию из уже увиденных будущих временных шагов. Поэтому, если ваши временные ряды не на 100% некоррелированы, я настоятельно рекомендую не использовать разделение по пользователям, а вместо этого сделать разделение по временным шагам. Учитывая, что вы объединяете этих пользователей в общий набор данных, я предполагаю, что существует высокая вероятность того, что между их временными рядами есть корреляция. Так что попробуйте разделение по времени; вы можете прочитать о методе walkforward testing как ключевом слове.
Для одного временного ряда я обычно делаю разделение на различные обучающие и тестовые выборки, например:
- У вас есть данные с августа 2020 года по август 2021 года.
- Разделите, беря 2 месяца по 2 месяца, этот процесс называется “скользящим окном”, тогда у вас будет “окно” из двух месяцев данных, на основе которого вы можете обучаться, проводить инференцию и вычислять свои метрики, используя тестовую выборку, которая будет взята из значений после этих 2 месяцев.
Ответ или решение
Когда вы работаете с временными рядами, особенно в контексте множественных пользователей и их таймстепов для предсказания значений, важно правильно разделять данные на обучающую, валидационную и тестовую выборки. Давайте рассмотрим два подхода, упомянутые вами, и определим, какой из них лучше всего подходит для вашей задачи, а также познакомимся с некоторыми лучшими практиками и литературными источниками, которые могут оказать помощь.
1. Метод разделения по пользователям
Согласно вашему описанию, первый подход предполагает использование данных от нескольких пользователей для обучения и тестирования на нескольких других пользователях. Это может показаться «честным» способом, так как вы проверяете модель на совершенно новых данных. Однако, существует риск того, что временные ряды пользователей могут иметь скрытые корреляции. Это означает, что модель, обученная на одних пользователях, может не обобщаться на других, несмотря на то, что они и не пересекаются напрямую.
2. Метод отбрасывания последних временных шагов
Второй подход основан на удалении последних нескольких таймстепов из всех временных рядов и обучении модели на начальных x% данных. Этот метод более реалистичен в сценариях, когда вы имеете уже собранные данные и хотите предсказать будущие шаги. Однако, как вы правильно отметили, этот метод может привести к смещению модели, если все последние значения временных шагов конвергируют к одному и тому же значению. Это возможно, если тенденции в данных приводят к однообразным результатам в конце временных рядов.
Рекомендации по выбору метода
Выбор метода: При наличии взаимосвязи между временными рядами пользователей, метод отбрасывания временных шагов окажется более подходящим. Это связано с тем, что он уважает временные зависимости и избегает случайного смещения. Если вы все же решите использовать метод по пользователям, убедитесь, что ваши данные разнообразны и нет явных паттернов, которые могут улучшить результаты предсказаний.
Использование метода «прогулки вперед» (Walkforward Testing): Этот метод включает в себя последовательное обучение и тестирование на временных рядах, что аналогично рассуждениям по второму подходу. Вам необходимо будет подготовить «окна» данных, в каждом из которых вы будете обучать модель на одном наборе данных и тестировать на следующем. Например, если у вас есть данные за два года, вы можете сначала использовать данные первых шести месяцев для обучения и последующие два месяца для теста. Затем сдвиньте «окно» и повторите, чтобы получить множественные оценки.
Заключение
С определённостью можно сказать, что для подхода к разделению временных рядов вам стоит выбирать между методами, учитывая их взаимосвязь, а также стратегию проверки систем. Обратите внимание на литературу по «прогулке вперед», чтобы изучить состояние современного подхода к работе с временными рядами.
Таким образом, подход с временным разделением не только сделает ваши предсказания более обоснованными, но и позволит лучше учесть характер данных. Следуя этим рекомендациям и подходам, вы будете на шаг ближе к созданию эффективной модели LSTM для ваших временных рядов.