- Вопрос или проблема
- Ответ или решение
- Прогнозирование относительного распределения объемов заказов по доступным сортам яблок
- 1. Использование SparseMax
- 2. Параметрическая регрессия и ансамблирование
- 3. Сглаживание меток (Label Smoothing)
- 4. Улучшение архитектуры нейросети
- 5. Исследование новых функций
- 6. Адаптация функции потерь
- Заключение
Вопрос или проблема
Я работаю над моделью, которая должна предсказать, как объем заказов распределяется по доступным товарам в розничной торговле. Для простоты предположим, что я розничный продавец, который покупает яблоки у разных фермеров и поставщиков и продает их супермаркетам. У меня нет всех яблок все время, поэтому в любой момент времени есть набор доступных сортов яблок. Исходя из того, что я могу предложить в данный момент, и заданного прогнозируемого объема яблок в общем, мне необходимо предсказать, как объем распределяется среди моих текущих доступных сортов яблок.
У меня есть список заказов с информацией о времени, товаре, ценах и несколькими другими метаполями.
Мой текущий подход заключается в том, чтобы агрегировать эти заказы по дням и товарам, а затем построить двоичный датафрейм, чтобы указать наличие, обогащенный характеристиками цен и скидок.
Затем я строю фрейм меток, который содержит относительное распределение, нормализованное так, чтобы сумма равнялась 1:
Я обучаю собственную нейронную сеть, которая изучает эти распределения, но сталкиваюсь с проблемами шума и переобучения.
Мой типичный прогноз выглядит так:
Модель не учится действительно предсказывать 0 для товаров, которые в данный момент недоступны. Всегда существует значительный уровень шума, который ослабляет прогнозы для реально доступных товаров. Я посмотрел на слой SoftMax, чтобы очистить прогнозы, и на пользовательские функции потерь, которые сильнее наказывают недоступные товары, но, честно говоря, я немного застрял.
Я ищу изменения, которые могу внести в свой текущий подход, а также совершенно различные подходы, так как не могу найти много информации о таких проблемах.
Softmax, по определению, не может выдавать нулевые вероятности. Если эта ненулевая вероятность является проблемой для ваших прогнозов, вам стоит рассмотреть SparseMax, который является разреженной вариацией softmax и может фактически назначать ноль части пространства вероятностей.
Он был введен в статье От Softmax к Sparsemax: разреженная модель внимания и многометочной классификации (опубликованной на ICML’16). Вы можете найти реализации как в Pytorch, так и в Tensorflow на github.
Может быть интересно ознакомиться с недавними исследованиями первого автора, Андрэ Ф.Т. Мартинса (см. его профиль на Google Scholar, который работает над разреженными нейронными сетями.
Один из вариантов – использовать сглаживание меток. Пере编码ируйте целевые метки, используя эту формулу:
$$ \text{new_labels}= \text{(original_labels)} * (1 – \text{label_smoothing}) + (\text{label_smoothing} / \text{num_classes})$$
Где label_smoothing – это гиперпараметр. Если label_smoothing выбран как 0.3, метки [0, 1, 2] станут [0.1, 0.8, 1.5].
Модель может лучше изучить целевые значения 0.1, по сравнению с 0.
Ответ или решение
Прогнозирование относительного распределения объемов заказов по доступным сортам яблок
Ваша задача прогнозирования распределения объемов заказов между доступными сортами яблок — сложная, но интересная задача в области предсказательной аналитики в ритейле. Предлагаю несколько стратегий и методов, которые могут вам помочь улучшить модель и справиться с проблемами, с которыми вы сталкиваетесь, такими как шум и переобучение.
1. Использование SparseMax
Ваше беспокойство о том, что Softmax не позволяет предсказывать нулевые вероятности, вполне обосновано. Рассмотрите возможность применения SparseMax. Эта альтернатива Softmax позволяет модели устанавливать нулевые вероятности для некоторых классов, что особенно полезно, если ваш набор данных сильно сжат из-за доступности товаров. Это поможет устранить ненужный шум и сосредоточиться только на доступных сортам яблок.
2. Параметрическая регрессия и ансамблирование
Попробуйте использовать методы, которые менее подвержены переобучению, например, регрессию на основе деревьев решений (или их ансамбли) — Random Forest или Gradient Boosting. Эти алгоритмы могут быть более устойчивыми к шуму в данных и могут лучше интерпретировать сложные взаимосвязи между признаками, такими как цена и наличие.
3. Сглаживание меток (Label Smoothing)
Определите метки как вектор, который не содержит жестких нулей и единиц. Используйте сглаживание меток, чтобы немного «размазывать» истинные метки. Например, если у вас есть метка, которая должна быть 1 (доступный сорт) или 0 (недоступный), вы можете применить сглаживание, чтобы превратить ее в 0.1 и 0.9 соответственно. Это может помочь модели избежать жесткой привязанности к нулям и улучшить обобщение.
4. Улучшение архитектуры нейросети
Проверьте архитектуру вашей нейронной сети. Возможно, стоит уменьшить количество слоев или нейронов. Обратите внимание на использование регуляризации, такой как Dropout, чтобы уменьшить переобучение. Это поможет модели научиться выделять ключевые признаки, связанные с доступностью сортов яблок, без запоминания шумов.
5. Исследование новых функций
Разработайте дополнительные функции, которые могут улучшить предсказания. Например:
- Добавьте временные признаки (день недели, праздники, сезонность).
- Используйте данные о продажах в прошлом (например, дни, когда определенные сорта продавались лучше).
- Включите внешние факторы, такие как погода или статистические данные по урожаю, если они доступны.
6. Адаптация функции потерь
Разработайте кастомную функцию потерь, которая будет более жестко штрафовать модель за предсказания ненадежных (недоступных) сортов. Например, вместо традиционной функции потерь, можно использовать весовые коэффициенты для доступных и недоступных сортов, чтобы модель больше внимания уделяла только релевантным меткам.
Заключение
Эти предложенные методы могут максимально эффективно улучшить ваше предсказание относительного распределения объёмов заказов. Используя комбинацию различных подходов, вы сможете добиться более точных предсказаний, справиться с шумом в данных и настроить модель для учета доступности сортов яблок. Важно постоянно тестировать и адаптировать вашу модель, используя новые данные и методы, что поможет вам оставаться конкурентоспособным в быстро меняющемся мире ритейла.