Данные во времени: частота, пропуски, календарь
Прогнозирование и временные ряды · Урок 2 / 22
Ряд — это не таблица со столбцом даты
Табличные данные допускают любой порядок строк. Временной ряд — нет: порядок и есть содержание. Отсюда набор проверок, которых нет в обычной подготовке данных, и которые ломают прогноз тише всего.
Частота и выравнивание
Сначала приведите ряд к регулярной сетке: одна строка на один период, без дыр и без дублей. Проверка занимает минуту и находит удивительно много: пропущенные дни, два значения на одну дату из-за перезаливки, смену часового пояса, переход на летнее время, где один день содержит 23 или 25 часов.
Диагностика сетки (до любой модели) периодов ожидается: Sum(календарь от min до max даты) = 1095 строк в данных: 1081 дублей по дате: 3 пропущенных дат: 17 из них подряд: 2024-03-08 .. 2024-03-19 нулевых значений: 142 последняя дата: 2026-05-02 (лаг 3 дня к сегодня)
Пропуск и ноль — разные вещи
Строка отсутствует — данных не было. Значение равно нулю — продаж не было. Смешать их значит либо заявить нулевой спрос там, где просто не работала выгрузка, либо потерять реальные нули. Правило простое: сначала разберитесь, почему периода нет, и только потом решайте, чем его заполнить.
- Не работала выгрузка. Заполнять нулём нельзя — модель выучит фиктивные провалы. Либо восстанавливайте, либо помечайте период как отсутствующий.
- Магазин был закрыт. Ноль корректен, но должен сопровождаться признаком «закрыто», иначе модель решит, что спрос упал.
- Товара не было на полке. Ноль в продажах, но не ноль в спросе. Это самый дорогой случай: модель учится на подавленном спросе и занижает заказ, из-за чего товара снова нет.
Календарь — половина точности
Для дневных рядов календарь объясняет больше, чем любая модель: день недели, праздники, предпраздничные закупочные пики, дни зарплаты, длинные выходные, смещающиеся даты вроде Пасхи, номер недели месяца. Если календарь не подан явно, модель попытается вывести его из ряда — и выведет плохо, потому что праздник в истории встречался три раза.
Отдельная ловушка — сравнение месяцев. Февраль короче января на три дня, а число рабочих дней в месяце гуляет на два-три. Значительная часть «сезонности выручки по месяцам» в реальности является календарным артефактом и исчезает при нормировке на число рабочих дней.
Агрегация меняет задачу
Один и тот же ряд на разной гранулярности ведёт себя по-разному. Дневные продажи шумны, недельные заметно ровнее, месячные почти гладкие. Соблазн агрегировать до того уровня, где ошибка выглядит прилично, велик, но гранулярность диктует решение, а не отчёт: если заказ делается по дням, недельная точность вас не спасёт. И обратное правило тоже верно: не дробите ряд мельче, чем принимается решение, иначе вы платите шумом за детализацию, которой никто не воспользуется.
Шпаргалка
- Приведите ряд к регулярной сетке и посчитайте дыры и дубли.
- Пропуск, ноль и отсутствие товара — три разных факта.
- Продажи не равны спросу.
- Календарь подавайте явно; месяцы нормируйте на рабочие дни.
Возьмите свой реальный ряд (продажи, обращения, нагрузку) минимум за год. Приведите его к регулярной сетке и приложите диагностику: сколько периодов ожидается по календарю, сколько строк есть, сколько дублей, сколько пропущенных дат и идут ли они подряд, сколько нулей, каков лаг последней даты к сегодня. Для каждого типа пропуска объясните причину и что вы с ним сделали и почему.