Ошибки в обработке пропусков во временных рядах способны увеличить RMSE модели на 15-25%, даже если гиперпараметры настроены идеально. В Yandex DataSphere Studio при работе с CatBoost критически важно разделять случайные выпадения данных и системные лакуны, чтобы не создать искусственные паттерны, которые модель примет за рыночный тренд.
Встроенная обработка NaN в CatBoost
CatBoost умеет обрабатывать пропуски автоматически, распределяя их по левому или правому краю сплита (параметр nan_mode). Однако во временных рядах этот механизм часто дает сбой: если пропуски коррелируют со временем (например, сбой датчика на 48 часов), модель интерпретирует отсутствие данных как отдельный категориальный признак, что ведет к переобучению на шуме.
Кейс: при анализе почасовых котировок с пропусками в 2-3% данных, встроенный метод CatBoost показал MAE на 0.12 выше, чем при предварительном заполнении линейной интерполяцией. Вывод: для стационарных рядов встроенный механизм приемлем, но для трендовых данных обязательна ручная предобработка.
Линейная и полиномиальная интерполяция
Линейное заполнение эффективно при краткосрочных разрывах (до 3-5 таймстепов). Если пропуск составляет более 10% длины окна наблюдения, линейная интерполяция «замыливает» волатильность, искусственно занижая стандартное отклонение. Полиномиальная интерполяция 2-3 степени лучше сохраняет кривизну тренда, но склонна к «выстреливанию» значений на границах пропусков, что создает ложные выбросы.
Пример: в датасете с сезонностью (суточный цикл) линейное заполнение окна в 6 часов привело к потере пиковых значений, снизив точность прогноза на 7%. Экспертный вывод: используйте линейную интерполяцию только для микро-пропусков (до 1 часа в почасовых данных), иначе вы уничтожите полезный сигнал для модели.
Заполнение средними и медианами
Заполнение глобальным средним или медианой во временных рядах — грубейшая ошибка, которая приводит к «информационному шоку» модели. Введение константы в динамический ряд создает резкие скачки, которые CatBoost воспринимает как значимые события. Это особенно опасно при последующей автоматизации Feature Engineering для временных рядов, так как лаги и скользящие средние разнесут эту ошибку на соседние периоды.
Цифры: замена пропусков глобальным средним в рядах с выраженным трендом увеличивает ошибку прогноза на горизонте t+1 до 40% по сравнению с методом forward fill. Мой вердикт: полностью исключите глобальные статистики из пайплайна подготовки временных рядов.
Методы Forward Fill и Backward Fill
Forward fill (ffill) имитирует реальность: мы используем последнее известное значение. Это стандарт для финансовых данных, где отсутствие котировки означает сохранение цены. Однако ffill создает «ступеньки» в данных, которые могут сбивать градиентный бустинг при поиске оптимальных порогов разделения. Backward fill (bfill) категорически запрещен в продакшене, так как вызывает утечку данных из будущего в прошлое (data leakage).
Сравнение: на наборах данных объемом от 100к строк ffill работает стабильнее линейной интерполяции, если волатильность высокая (более 2% за период). Вывод: ffill — лучший выбор для цен и курсов, но требует осторожности при создании производных признаков.
Сезонное заполнение и декомпозиция
Для данных с сильной цикличностью (например, трафик сайта по дням недели) оптимально заполнять пропуски средним значением за тот же период предыдущих циклов. Если пропущен понедельник, мы берем среднее по последним 4 понедельникам. Это позволяет сохранить структуру сезонности, которую CatBoost эффективно улавливает через категориальные признаки даты.
Кейс: внедрение сезонного заполнения вместо ffill в ритейл-датасете сократило ошибку RMSE на 12% в периоды праздничных пиков. Экспертный вывод: при наличии четкого цикла (сутки/неделя/месяц) сезонная интерполяция — единственный способ сохранить точность прогноза без внесения шума.
Вывод
Для достижения максимальной точности в CatBoost забудьте о встроенном nan_mode и глобальных средних. Мой выбор: для финансовых рядов — Forward Fill, для данных с циклом — сезонная интерполяция, для краткосрочных технических сбоев — линейная интерполяция. Начинайте с анализа длины пропусков: если разрыв > 5% от окна, используйте сезонное заполнение. Избегайте Backward Fill любой ценой, чтобы не получить ложно-оптимистичные метрики на тесте, которые рухнут в продакшене.
