- Вопрос или проблема
- Ответ или решение
- Прогнозирование с помощью алгоритмов машинного обучения: советы по улучшению модели
- 1. Анализ ошибок модели
- 2. Улучшение подготовки данных
- 3. Улучшение кодирования категориальных признаков
- 4. Разбиение данных на тренировочный и тестовый наборы
- 5. Учет взаимодействий
- Заключение
Вопрос или проблема
Извините, если это слишком общий вопрос, но я застрял где-то между идеальным и адекватным в моей модели. Поэтому я хотел бы спросить здесь. Если это не подходящий вопрос, ваши негативные отзывы тоже приветствуются, извините. Но теоретически тема находится в серой зоне, и все комментарии, я думаю, ценны. Насколько я знаю, это не распространенный подход использовать машинное обучение для прогнозирования.
Наша команда продаж публикует отчет о прогнозировании в начале каждого года. Но он обычно далек от реальности, не очень научный. Он также включает субъективные оценки.
Мы решили построить модель машинного обучения для прогнозирования. Не классическое прогнозирование, потому что есть много входных переменных, которые могут влиять на результат. Так что это, на самом деле, экспериментальный проект.
На данный момент я разработал адекватную модель, которая уже намного лучше, чем у продаж. Но я все равно считаю, что это не очень хорошая модель, лишь адекватная.
Данные включают продажи по странам Заказчика-Из страны-В страну. Так что существует множество комбинаций. Исходя из подобных приложений на MachineLearningMastery.com, я разработал свою модель так:
customer-from-to-M9-M8…..M1 – месяц – квартал – movingavg3 – mov6 – mov9 – dptcountryholidaycount – arvcountryholidaycount
m9 до m1 – это продажи за предыдущие 9 месяцев предсказанного месяца M (выходная переменная) M варьируются от 0 до 800 в основном. Праздники варьируются от 0 до 6, например. Я масштабировал все эти числовые переменные в диапазоне от 0 до 1.
Переменные Customer-From-To-Month-Quarter являются категориальными, и я использовал OneHotEncoding для них.
Я перемешал все данные, так что в моем наборе данных нет временной зависимости.
Я разделил данные на 3 сегмента.
1: выше 100 в среднем за последние 3 месяца;
2: от 10 до 100 в среднем;
3: ниже 0 в среднем за 3 месяца. Я запускаю различные модели для каждого из 3 сегментов.
Существует много нулевых значений, поэтому я сначала использую LGBClassifier, чтобы определить, равен ли объем продаж 0 или нет. Затем, если он не равен 0, я использую LGBRegressor, чтобы определить величину продаж для этой входной строки. (SGDRegressor для сегмента 1, он работает лучше)
Я пытался добавить индекс сезонности месяца и индекс сезонности квартала для каждой комбинации в набор данных в качестве переменных. Но это не дало хороших результатов.
Что я могу попробовать, чтобы получить лучший результат, я не спрашиваю об алгоритмах и т.д. Моя основная цель здесь – получить идеи о построении набора данных, предварительной обработке. Ваши ценные идеи о приемах предварительной обработки перед применением алгоритма машинного обучения.
Спасибо
Боятся, что ваши данные, вероятно, слишком сложные и специфические, чтобы кто-то другой мог точно понять, что происходит.
Единственная идея, которую я могу предложить, это попытаться вручную проанализировать ошибки, которые делает ваша модель:
- Есть ли какие-либо закономерности, например, вид ошибок, который происходит довольно часто? Например, страна, которую имеет тенденцию переоценивать, месяц, который имеет тенденцию недооценивать, что-то в этом роде.
- Если да, попробуйте выяснить, почему: есть ли какие-то дополнительные признаки, которые могут помочь модели лучше прогнозировать в этих случаях?
Ответ или решение
Прогнозирование с помощью алгоритмов машинного обучения: советы по улучшению модели
Прогнозирование с использованием методов машинного обучения (ML) становится все более популярным, особенно в ситуациях, когда традиционные методы не достигают желаемых результатов. Вы упомянули, что разрабатываемая вами модель уже значительно лучше традиционного прогноза вашей команды, но все еще требует улучшений. Давайте рассмотрим несколько рекомендаций относительно улучшения вашей модели, в частности в области подготовки данных и предобработки, которые могут помочь вам добиться более точных прогнозов.
1. Анализ ошибок модели
Первым шагом к улучшению модели является тщательный анализ ошибок. Вам следует выяснить, есть ли в ваших предсказаниях закономерности или повторяющиеся ошибки:
-
Систематические ошибки: Посмотрите, существуют ли определенные комбинации, такие как страна, месяц или сегмент, для которых прогнозы либо завышены, либо занижены. Определите, какова природа этих ошибок – это может быть связано с отсутствующими или недостающими признаками.
-
Непредсказуемая изменчивость: Если некоторые данные постоянно вызывают большие ошибки в прогнозах, попробуйте проанализировать, какие факторы могут влиять на это. Возможно, вам нужны дополнительные признаки, чтобы учитывать эту изменчивость.
2. Улучшение подготовки данных
Подготовка данных играет ключевую роль в производительности модели. Вот несколько методов, которые вы можете рассмотреть для улучшения:
-
Устранение выбросов: Проверьте на наличие выбросов в ваших данных, так как они могут серьезно исказить результаты. Метод z-оценки или IQR могут использоваться для их выявления и удаления.
-
Создание новых признаков: Попробуйте комбинировать существующие переменные для создания новых показателей. Например, вы могли бы рассмотреть влияние на продажи не только самих праздников, но и их характеристик, таких как количество рабочих дней до и после праздника.
-
Лаговые переменные: Ваши текущие лаговые переменные (M9 до M1) могут быть недостаточны. Вы можете попробовать применять более сложные временные функции, которые отражают не только предыдущие значения, но и тренды или изменения за более продолжительные периоды.
-
Групповые статистические признаки: Рассмотрите возможность добавления сводных показателей по странам или компаниям, таких как средние продажи за предыдущие кварталы, что может добавить контекст к вашим данным.
3. Улучшение кодирования категориальных признаков
Использование OneHotEncoding для категориальных переменных может быть неплохим выбором, но также рассмотрите другие методы кодирования, такие как:
-
Целевое кодирование (Target Encoding): Это может помочь учесть средние значения целевой переменной (например, продаж) для каждой категории и улучшить информацию, которую модель получает из категориальных признаков.
-
Ordinal Encoding: Если ваш категориальный признак имеет упорядоченность (например, кварталы), вы можете использовать порядковое кодирование для этой категории.
4. Разбиение данных на тренировочный и тестовый наборы
Вы упомянули, что случайно перемешали данные, что может быть нежелательным в контексте временных рядов. Попробуйте разделить данные на тренировочные и тестовые наборы с учетом временной последовательности, где более ранние данные используются для обучения модели, а более поздние – для тестирования.
5. Учет взаимодействий
Некоторым моделям может быть полезно учитывать взаимодействие между признаками. Используйте полиномиальные признаки или методы, которые могут помочь модели учесть более сложные зависимости между переменными.
Заключение
Совершенствование вашей модели требует постоянного эксперимента и анализа. Уделите внимание дальнейшему исследованию ошибок, улучшению подготовки данных, а также иновационным методам кодирования и взаимодействия признаков. В результате ваш подход к прогнозированию на основе машинного обучения станет более точным и научным. Удачи вам в вашей работе, и не стесняйтесь делиться своими успехами и находками в будущем!