Сравнение прогноза временного ряда с сезонной базовой моделью
Постройте опорный прогноз на основе предыдущего сезона, оцените его на последующих наблюдениях и отличайте календарное выравнивание от утечки данных и пропусков.
В этом материале
Короткий ответ
Сезонная базовая модель предсказывает значение с использованием данных из соответствующего периода предыдущего сезона. Для регулярных ежемесячных наблюдений с годовой сезонностью это означает сдвиг на двенадцать периодов назад. Сравнивайте вашу модель и базовую модель на одних и тех же будущих датах, используя только информацию, доступную на момент каждого прогноза. Низкая ошибка на обучающей выборке сама по себе не доказывает, что модель лучше простого сезонного ориентира.
Выберите опорную модель, соответствующую задаче
Общее среднее значение игнорирует положение точки внутри повторяющегося цикла. Если спрос систематически различается между месяцами, данные за аналогичный месяц прошлого года могут служить более информативным ориентиром. Это - гипотеза, требующая проверки, а не доказательство того, что каждый ряд является сезонным.
Период следует выбирать на основе графика наблюдений и реального процесса. Двенадцать строк означают год только при полном месячном временном ряде. В случае ежедневных данных или таблицы с пропущенными месяцами интервал будет другим. Базовая модель должна соответствовать целевому горизонту прогнозирования, а не просто удобной длине массива.
Поддерживайте регулярность и явность временного индекса
Упорядочьте наблюдения хронологически и проверьте наличие дубликатов меток времени, разрывов и единиц измерения. В pandas сдвиг значений на число периодов отличается от сдвига индекса с заданной частотой. Для лагового прогноза значения должны быть выровнены по тем будущим датам, которые они предсказывают.
Не заполняйте пропуски молча данными из будущего, так как это может раскрыть информацию, недоступную на момент прогноза. Если ряд нерегулярный, явно выравнивайте соответствующие календарные периоды или выберите другой ориентир. Решения о пропущенных наблюдениях должны одинаково применяться как к модели, так и к базовой модели.
Небольшой пример с месячными данными
Пример использует стандартную библиотеку Python и двадцать четыре синтетических равномерно распределённых ежемесячных наблюдения. Первые двенадцать значений представляют первый год, следующие двенадцать - те же значения плюс два. Эти данные иллюстративны, а не являются реальными измерениями или доказательством эффективности прогнозирования.
Для второго года прогноз строится со сдвигом в двенадцать наблюдений, то есть используются значения первого года. Первые двенадцать позиций в этом наборе не имеют предыдущего сезона, поэтому по ним нельзя рассчитать ошибку базовой модели. Никогда не заменяйте отсутствующие ссылки данными из будущего.
# Illustrative monthly observations, January through December twice.
values = [10, 12, 15, 18, 20, 22, 21, 19, 17, 14, 12, 11]
values += [value + 2 for value in values]
period = 12
actual = values[period:]
predicted = values[:-period]
mae = sum(abs(a - p) for a, p in zip(actual, predicted)) / len(actual)
print(predicted[:3])
print(mae)
# Expected illustrative output:
# [10, 12, 15]
# 2.0Интерпретируйте ошибку в исходных единицах
Здесь каждый прогноз отклоняется на два пункта, поэтому средняя абсолютная ошибка (MAE) равна 2.0. Это арифметическое описание лишь иллюстрирует предоставленные учебные данные и ничего не говорит о поведении реального ряда или допустимости ошибки в два пункта для конкретного применения.
Оценивайте свою модель на тех же самых датах и в тех же единицах. Сравнивайте ошибки не только в целом, но и по сезонам: среднее значение может скрывать систематические ошибки в критические месяцы. Фиксируйте, какие наблюдения были исключены из-за отсутствия корректной цели или лагового ориентира.
Разделяйте прошлое и будущее
Случайное разделение на обучающую и тестовую выборки может поместить будущие данные в обучение, а более ранние - в тест. Для прогнозирования необходимо использовать хронологическую оценку. На каждой временной точке конструируйте признаки и выполняйте предобработку, используя только информацию, доступную к этому моменту.
TimeSeriesSplit по умолчанию предоставляет последовательные временные окна обучения и тестирования с растущим обучающим набором. Его интерпретация с равной продолжительностью предполагает равномерные интервалы. Выбирайте test_size и возможные разрывы в соответствии с задачей; библиотека не определяет горизонт бизнес-прогнозирования за вас.
Различайте одношаговые и многошаговые прогнозы
При скользящей оценке значение, недоступное на одном этапе, может стать известным до следующего момента прогноза. Прогноз, сделанный сразу на несколько месяцев вперёд, имеет другое информационное множество. Не оценивайте такой многошаговый прогноз так, будто каждое промежуточное фактическое значение уже известно.
Сезонный лаг можно использовать только если соответствующее наблюдение было доступно на момент прогноза. При горизонтах длиннее одного сезонного периода некоторые лаги будут указывать в будущее, что требует чёткой стратегии. Определите эту стратегию заранее, до сравнения ошибок, а не после просмотра результатов.
Проанализируйте причины успеха или неудачи базовой модели
Изменение уровня, тренда, перенос праздника или изменение бизнес-процесса могут сделать предыдущий сезон плохим предиктором. Изучайте временные остатки и известные события. Преимущество над базовой моделью в течение одного аномального периода - слабое доказательство, в отличие от стабильного улучшения на нескольких представительных участках.
Сравнивайте с другими простыми моделями, например, с предыдущим наблюдением, если сезонная модель работает плохо. Сохраняйте одинаковые даты оценки. Избегайте подбора множества моделей по финальному удерживаемому периоду, чтобы он не стал частью обучающей выборки.
Оцените практическую полезность модели
Более сложная модель полезна, если она существенно улучшает значимую метрику на будущих данных, оправдывая затраты на её обслуживание и эксплуатацию. Уточните, что важно: типичная абсолютная ошибка, крупные промахи, определённые сезоны или стоимость переоценки против недооценки.
Сохраняйте базовую модель как ориентир даже после внедрения. Изменения в процессе генерации данных могут свести преимущество на нет. Мониторинг сопоставимых ошибок позволяет принимать обоснованные решения о сохранении, доработке или упрощении модели без ложных гарантий производительности.
Что проверить
- Убедитесь в регулярности временного индекса и обоснованности выбранного сезонного периода.
- Используйте только те наблюдения, которые были известны на момент каждого прогноза.
- Оценивайте модель и базовую модель на одинаковых будущих целевых значениях.
- Укажите горизонт прогнозирования и политику обработки пропущенных данных.
Границы применения
Сезонная базовая модель требует наличия предыдущих совпадающих наблюдений и достаточной стабильности повторяемости. Она не устанавливает причинно-следственные связи, не гарантирует точность и не справляется автоматически с structural breaks, нерегулярными метками времени или многошаговыми горизонтами прогнозирования.