Вопрос или проблема
У меня есть набор данных (CPP (среднемесячный), канал, шоу, месяц, год) для прогнозирования возврата маркетинга. Набор данных содержит рекламу с 2022 по 2023 годах и имеет около 130 тысяч точек. У меня есть модель, XGBOOST, и обучающие, и тестовые наборы работают хорошо, но моя главная цель – получить прогноз на январь 2024 года, что, я знаю, не является идеальным случаем использования для машинного обучения. Но я могу допустить некоторую приличную погрешность, и это все равно будет полезно. Моя проблема в том, что, когда я передаю этой модели январь 2024 года, она делает те же прогнозы, что и в январе 2023 года, и это повторяется, как и год, но не в январе или феврале 2022 года. Мое предположение заключается в том, что это происходит из-за структуры дерева этой модели. 2024 год проходит тем же путем, что и 2023 год. Как я могу это решить, другие модели не работают хорошо, так как набор данных достаточно случайный, но xgboost, кажется, справляется неплохо.
Что еще вы можете предложить для такого проекта, может быть, нейронные сети с методами прогнозирования?
Проблема в том, что в вашем наборе данных мало информации для работы (только 1 непрерывная и 4 дискретных переменных).
Деревья, полученные в результате этого, легко переобучаются на данные, потому что существует не так много возможных конфигураций. Таким образом, это приводит к идентичным прогнозам.
Ваше предположение…
… вероятно, верное.
Год 2024 отсутствовал в обучающих данных, поэтому для этих входных данных XGBoost должен сделать расщепление на основе ранее изученных данных. Поскольку xgb делит числа по порогу, а 2024 больше, чем самое большое обученное значение (2023), он всегда будет делать тот же выбор, что и в 2023 году.
Что вы можете сделать?
Существует несколько способов использовать xgb для задач экстраполяции, таких как ваша. В основном, вы можете трансформировать или обогатить ваши данные таким образом, чтобы разницу между 2024 и 2023 годами можно было изучить. Это можно сделать путем:
Определение другой цели
Вместо того чтобы предсказывать значения для месяца, вы можете предсказывать разницы по сравнению с предыдущим месяцем. Вопрос (на который вам придется ответить): сколько вы хотите вперед планировать. Хотите ли вы предсказывать разницу между декабрем 2023 года и январем 2024 года или имеет ли смысл предсказывать разницу между январем 2023 года и январем 2024 года?
Инженерия признаков
Вы можете обогатить свои признаки, чтобы образцы различались между 2023 и 2024 годами, даже если все ваши базовые признаки (кроме года) остаются одинаковыми. Вы могли бы, например, ввести некоторые статистические данные о предыдущих месяцах, такие как среднее значение, дисперсия и т.д. по некоторой характеристике. Если вы рассматриваете одну характеристику и 3 месяца, вы получите 3 новых признака. Если вы используете среднее и стандартное отклонение для одной исходной характеристики и 3 месяцев, вы уже получите 6 новых признаков.
Делая это, вы легко получите новые признаки, из которых xgb сможет изучить разницу между 2023 и 2024 годами. Теперь вам нужно понять вашу задачу и данные и выяснить, что имеет смысл.
Вы даже можете комбинировать оба подхода.
Ответ или решение
Вопрос о предсказаниях модели XGBoost для значений, выходящих за пределы диапазона данных для обучения, задает интересную задачу. Вы сталкиваетесь с классической проблемой в машинном обучении, называемой экстраполяцией, где модель должна делать предположения для значений, которые не были представлены в обучающей выборке. В данном случае, проблема заключается в том, что ваши типичные предсказания для января 2024 года совпадают с предсказаниями для января 2023 года. Давайте разберем эту ситуацию подробно на теоретическом уровне, рассмотрим практический пример и предложим решения для приложения.
Теория
Модель XGBoost является популярным выбором для решения задач регрессии и классификации, так как она основывается на деревьях решений, которые объединяются в усиленный ансамбль. Основное преимущество этой модели заключается в ее способности работать с набором данных, в которых присутствуют сложные зависимости и взаимодействия между признаками. Однако, что необходимо учитывать, так это то, что XGBoost, как и другие модели, страдает от невозможности экстраполировать данные, которых нет в обучающем наборе.
Когда вы обучаете модель для предсказания значений в 2023 году, значение "Год 2023" становится верхней границей в разбиении данных в деревьях. Таким образом, когда вы предоставляете модели данные за 2024 год, дерево решений трактует их так же, как данные за 2023 год, если нет дополнительных признаков, которые могли бы на это повлиять. Это означает, что модель, не зная как именно 2024 год отличается от 2023 года, делает идентичные предсказания для всех сделок.
Пример
Предположим, у вас есть набор данных, содержащий признаки: CPP (среднемесячное значение), Канал, Шоу, Месяц, Год, и вы хотите предсказать возврат на инвестиции в рекламу для января 2024 года. Так как обучающая выборка охватывает данные до 2023 года, ваша модель не обладает информацией о том, что делает январь 2024 уникальным. Без дополнительных апостериорных признаков, которые могли бы описать новую ситуацию, модель делает выводы, основываясь на известной информации, а именно на данных за январь 2023 года.
Приложение
-
Переопределение задачи
Чтобы разобраться с ограничениями модели, первым шагом может быть переопределение целевой переменной. Вместо предсказания абсолютной метрики для месяца, вы можете настроить модель для предсказания изменения относительно предыдущего месяца или аналогичного месяца прошлого года. Например, если ваша цель — предсказать изменения возврата на рекламные инвестиции между декабрем 2023 и январем 2024 года, ваша модель будет изучать динамику изменения, а не сами значения.
-
Инженерия признаков
Расширение набора данных путем добавления новых признаков может помочь модели отличать 2023 и 2024 годы. Рассмотрим возможность внедрения времени как непрерывного признака, например, путем кодирования месяца и года как отдельных переменных. Это позволит XGBoost учитывать постепенные изменения во времени. Также полезно добавить статистические признаки: средние, стандартные отклонения или медианные значение показателей за последние несколько месяцев. Это предоставит модели больше информации для понимания трендов и сезонности.
-
Дополнительные методы
Нейронные сети, особенно те, которые специализированы для временных рядов, такие как рекуррентные нейронные сети (RNN) или временные свёрточные сети (TCN), могут быть рассмотрены в качестве альтернативы или дополнения к XGBoost. Эти сети могут лучше справляться с включением временных зависимостей и могут более эффективно моделировать не линейные отношения и тренды.
Сочетание этих подходов может значительно улучшить способность модели делать предсказания для времени, которого еще не было в обучающих данных. Каждое решение следует адаптировать к специфике вашего набора данных и бизнес-требованиям, а также тестировать на валидационных данных, чтобы оценить его эффективность.