Это пошаговое руководство по моему тематическому исследованию и моему подходу к исследовательской статье, представленной на конференции IEEE, 2017. Авторы статьи рассмотрели несбалансированный набор данных реального мира, доступный на конкурсе Kaggle Можете ли вы предсказать отставание по продукту?.

Мы подробно рассмотрим, как можно минимизировать просроченные заказы на материалы во время управления запасами. Но перед этим давайте разберемся, что такое просроченные заказы и как с ними справиться с теоретической точки зрения. Ниже приведена ссылка на исходную исследовательскую работу.



Что такое невыполненные заказы?

Размещен заказ на товар, который временно отсутствует в наличии у поставщика. Просроченный заказ означает, что спрос на конкретный продукт или услугу превышает предложение.

Просроченные заказы не следует путать с «нет в наличии». В случае «отсутствия на складе» поставка или производство продукта могут быть неопределенными. С другой стороны, отложенные заказы размещаются для продуктов, которые находятся в запланированном производстве, которые столкнулись с задержкой из-за нескольких факторов.

В этом тематическом исследовании мы подробно рассмотрим эти факторы и посмотрим, какие из них являются наиболее важной причиной того, что продукт попадает в отставку.

Каковы общие причины задержек?

Задержки - это не плохо для компании. Это действительно зависит от инвентаря и заказов. Ниже перечислены некоторые общие причины задержек.

  • Заказ размещен не сразу
  • Несоответствия на складе
  • Человеческая ошибка
  • Заводская нехватка
  • Неточные пункты заказа
  • Аномальный спрос
  • Удобство для клиентов

Какова цель этого проекта?

Цель этого проекта - свести к минимуму невыполненные заказы за счет выявления материалов, подверженных риску невыполнения заказов, до того, как произойдет событие. Это дает руководству предприятия подходящее время для реагирования и внесения соответствующих изменений.

Обзор набора данных и проблемы

Набор данных для этой проблемы состоит из двух классов: положительного и отрицательного. Положительный класс означает, что товар был отправлен в отставку, а отрицательный класс указывает на обратное. Это делает проблему проблемой классификации бинарных классов. Данные сильно несбалансированы с соотношением 1: 148 для положительного и отрицательного классов соответственно для набора поездов. Большинство классов отрицательные, т. Е. Большая часть товаров не попала в невыполненный заказ. Набор данных содержит 22 объекта и 1 метку класса. Все функции и их описания перечислены ниже:

  • артикул: Stock Keeping Unit
  • national_inv: текущий уровень инвентаризации компонента.
  • lead_time: Зарегистрированное транзитное время
  • in_transit_qty: Количество в пути
  • прогноз_3_месяц: прогноз продаж на следующие 3 месяца
  • прогноз_6_month: прогноз продаж на следующие 6 месяцев
  • прогноз_9_month: прогноз продаж на следующие 9 месяцев
  • sales_1_month: объем продаж за предыдущий 1 месяц
  • sales_3_month: объем продаж за предыдущие 3 месяца
  • sales_6_month: объем продаж за предыдущие 6 месяцев
  • sales_9_month: объем продаж за предыдущие 9 месяцев
  • min_bank: Минимальная рекомендуемая сумма на складе
  • Potential_issue: индикаторная переменная, указывающая на потенциальную проблему с элементом
  • piece_past_due: Детали просрочены из источника
  • perf_6_month_avg: эффективность источника за последние 6 месяцев
  • perf_12_month_avg: эффективность источника за последние 12 месяцев
  • local_bo_qty: количество просроченных заказов на акции
  • deck_risk: флаг общего риска
  • oe_constraint: Флаг общего риска
  • ppap_risk: флаг общего риска
  • stop_auto_buy: Флаг общего риска
  • rev_stop: Флаг общего риска
  • go_on_backorder: Товар отправлен в невыполненный заказ

Ниже ссылка на набор данных:



Существующие решения

  1. Исходный исследовательский документ - (PDF) Прогнозирование недостающих материалов в управлении запасами с использованием машинного обучения:
    В этом документе используются различные методы недостаточной и избыточной выборки перед подгонкой модели для ограничения несбалансированного набора данных проблема. Мы видим, что логистическая регрессия дает самый низкий результат, в то время как деревья решений с повышением градиента работают лучше всего. Некоторые из методов выборки, используемых перед подгонкой модели, - это случайная недостаточная выборка (RUS) и метод синтетической передискретизации меньшинства (SMOTE). В дополнение к этим моделям был использован особый случай ансамблевого обучения, который представляет собой комбинацию случайной выборки и ансамблевых моделей. Это называется Blagging, и производительность этой модели очень близка к модели повышения градиента.
  2. Прогноз незавершенного заказа Шринивасы Раджи | Аналитика Видхья:
    Подход, которого придерживается автор, очень похож на подход
    оригинальной исследовательской работы. Помимо RUS или SMOTE, в блоге показаны
    дополнительные методы выборки, такие как адаптивная синтетическая выборка
    (ADASYN), Near Miss Undersampling, ссылки Tomek и многое другое. Некоторые
    технические приемы, такие как преобразование журналов и нормализация
    , были применены к данным перед подгонкой модели. Помимо
    AUC, оценка макроса F1 была принята во внимание в качестве оценочного
    показателя, поскольку в данных присутствует дисбаланс классов. Https://medium.com/analytics-vidhya/backorder-prediction-d4f1c5362f18
  3. Прогнозирование вероятных сценариев невыполнения заказов в цепочке поставок
    с использованием распределенного случайного леса и машины градиентного ускорения
    методов обучения - Журнал больших данных:

    Они использовали распределенный случайный Алгоритмы Forest (DRF) и Gradient
    Boosted Machine (GBM) от H2O.ai. Модель случайного леса
    выбрана в качестве базовой модели, а
    второй моделью является усиление градиента. В качестве метрик оценки моделей были выбраны AUC и матрица недоразумений. Такие методы отбора проб, как RUS и
    SMOTE, применяются до подбора моделей H2O. Https://journalofbigdata.springeropen.com/articles/10.1186/s40537-020-00345-2
  4. Прогнозирование незавершенного заказа продукта с использованием глубокой нейронной сети на несбалансированных данных:
    Из доступного обзора теперь очевидно, что мы можем использовать нейронные сети, особенно полностью связанные сети, в сочетании с такими же методами выборки, как RUS и SMOTE для прогнозирования просроченных заказов. В блоге говорится, что модель глубокого обучения превзошла некоторые известные модели классификации с точки зрения стандартных показателей оценки. Https://www.tandfonline.com/doi/full/10.1080/00207543.2021.1901153?scroll=top&needAccess=true

Какие показатели производительности следует использовать?

Мы собираемся использовать точность для этого тематического исследования. Однако мы знаем, что точность не является хорошим показателем для сильно несбалансированного набора данных. Поэтому мы будем использовать дополнительные показатели, такие как кривая AUC, специально разработанная для классификации двоичных классов. Мы также собираемся использовать матрицу неточностей вместе с точностью и отзывом для лучшего понимания прогнозов модели.

Исследовательский анализ данных

Нам предоставляется набор данных, который уже разделен на набор для обучения и тестирования. Набор поездов состоит из 1 687 860 точек данных, а набор тестов состоит из 242 075 точек данных. Оба набора данных имеют 23 функции, из которых go_on_backorder является целевой меткой.

Функция sku является идентификатором, поэтому ее необходимо удалить из набора данных. Из оставшейся 21 функции (исключая метку класса go_on_backorder) мы видим, что 15 из них числовые, а 6 - категориальные. Все категориальные функции имеют либо Да, либо Нет, что показывает, что они являются двоичными по своей природе. Числовые функции включают national_inv, lead_time, in_transit_qty, прогноз_3_month, прогноз_6_month, прогноз_9_month, sales_1_month, sales_3_month, sales_6_month, sales_9_month, min_bank, sizes_past_due, perf_6_em_month_month_month_avg, возможности, include_past_due, perf_6_em_month_month_month_avg. deck_risk, oe_constraint, ppap_risk, stop_auto_buy и rev_stop.

Кроме того, мы видим, что функция lead_time - единственная функция с пропущенными значениями. Процент нулевых значений в функции lead_time в наборе поездов составляет 5,98%. Кроме того, последняя строка каждой функции имеет нулевые значения и, следовательно, может быть удалена, поскольку удаление одной строки не оказывает никакого влияния на целое.

Из одномерного анализа каждой функции по отношению к метке класса мы видим, что большинство числовых функций сильно смещены в положительную сторону.

Из приведенных выше графиков видно, что распределение in_transit_quantity немного похоже на national_inv. Обе характеристики явно искажены.

Мы знаем, что для lead_time отсутствуют значения, поэтому удалили их и построили функции плотности вероятности. Мы видим, что PDF-файл lead_time также показывает положительную асимметрию.

Гистограммы представляют собой оценку центральной тенденции (в данном случае среднего). Следовательно, по набору гистограмм мы можем сказать, что в течение 3, 6 и 9 месяцев средние прогнозируемые продажи в целом снижаются для положительного класса, в то время как средние прогнозируемые продажи кажутся постоянными для отрицательных. класс.

Чтобы понять распределения и IQR, мы построили коробчатые диаграммы и графики скрипки (графики скрипки показаны выше). Мы видим, что IQR не видны четко. И есть много выбросов, особенно для отрицательного класса для всех трех характеристик. И диапазон прогнозов выбросов на ближайшие месяцы только увеличится. Это ожидается, поскольку количество заказов со временем будет увеличиваться. Кроме того, мы видим, что распределения всех трех функций схожи, причем все функции сильно искажены. Мы можем предположить, что точки данных, расположенные ближе к хвосту, на самом деле не могут быть выбросами. И эта тенденция наблюдается по всем числовым характеристикам.

Когда мы смотрим на функции продаж, мы видим, что PDF-файлы, коробчатые диаграммы и графики скрипки очень похожи на функции прогнозов. Чтобы лучше понять данные, мы удалили весь четвертый квартал для всех четырех функций продаж и построили графики подсчета соответственно. Мы быстро видим, что есть много продуктов, которые не были проданы за все предыдущие месяцы. Точки данных с хотя бы одной проданной единицей больше по сравнению с точками данных с по крайней мере тремя проданными единицами для функции sales_1_month. Расширенная версия этого верна для всех других функций продаж, т. Е. Точки данных с хотя бы одной проданной единицей больше по сравнению с точками данных с, по крайней мере, тремя или более проданными единицами.

Из графика подсчета min_back мы можем сделать вывод, что большинство значений стремятся к нулю и очень мало точек данных со значением min_bank, равным трем или более.

Кроме того, функции sizes_past_due и local_bo_qty очень похожи на national_inv. PDF-файлы и блочные диаграммы показывают, что их распределение также искажено, как и в предыдущих функциях.

Из рисунка выше видно, что PDF-файлы для двух функций perf_6_month_avg и perf_12_month_avg очень похожи. Мы видим гауссовское распределение для обеих функций вокруг нулевой точки на шкале. Однако кривая простирается чрезвычайно к отрицательной оси, указывая на отрицательную асимметрию. Из гистограмм мы видим, что средняя производительность источника за 6 и 12 месяцев составляет около -3 для заказов, которые были отнесены к отставанию, и от -6 до -7 для заказов, которые не были отправлены в отставку. Графики в виде ящиков и скрипок также указывают на то, что распределение имеет отрицательный перекос и есть несколько выбросов для обоих классов. Среднее значение для perf_6_month_avg и perf_12_month_avg составляет 0,82 и 0,81 соответственно, а 90% процентов точек меньше 0,99 для обеих функций.

Из приведенных выше графиков видно, что количество точек данных с флагами риска oe_constraint и rev_stop очень мало. Есть приличное количество точек данных с deck_risk как Yes и значительное количество точек данных с ppap_risk и stop_auto_buy как Да. Большинство точек данных не имеют каких-либо флагов риска в наборе поездов.

Коэффициент ранговой корреляции Спирмена

Из приведенной выше тепловой карты мы видим, что in_transit_qty, прогноз_3_месяц, прогноз_6_месяц, прогноз_9_месяц, продажи_1_месяц, продажи_3_месяц, продажи_6_месяц, продажи_9_мес и min_bank сильно коррелируют друг с другом. Среди них прогноз_3_месяц, прогноз_6_месяц и прогноз_9_месяц больше коррелируют друг с другом по сравнению с остальными. Аналогичным образом, sales_1_month, sales_3_month, sales_6_month и sales_9_month больше связаны друг с другом, чем любые другие функции. Мы также видим, что perf_6_month_avg и perf_12_month_avg сильно коррелируют друг с другом.

Тест Колмогорова – Смирнова на числовые особенности

Мы используем тест KS, чтобы понять корреляцию между числовыми характеристиками и целевой меткой. Статистика Колмогорова – Смирнова количественно определяет расстояние между эмпирической функцией распределения выборки и кумулятивной функцией распределения эталонного распределения или между эмпирическими функциями распределения двух выборок.

Мы можем видеть, что большая часть функции имеет очень большое количество точек данных на уровне 0. Из теста ks для всех числовых функций мы можем сказать, что большинство функций не имеют очень хороших значений p, и поэтому нам придется отклонить нулевая гипотеза. Следовательно, эти распределения не похожи и не показывают большой корреляции с целевой переменной. Однако некоторые функции, такие как lead_time, perf_6_month_avg, perf_12_month_avg, показывают достаточно хорошую корреляцию с целевой переменной.

Матрица стохастика / вероятности для категориальных признаков

Из вышеприведенного набора матриц вероятности для всех категориальных признаков мы видим, что большинство из этих категориальных признаков имеют очень высокую вероятность иметь отрицательный флаг, когда продукт не попал в отставку. Таким образом, мы можем сказать, что, когда продукт не попадает в отставку, большая часть общего флажка риска является отрицательной.

Анализ главных компонентов

Мы использовали методы уменьшения размерности, в данном случае анализ главных компонентов, чтобы уловить суть данных. Из приведенного выше графика мы видим, что большинство точек данных лежат рядом с 0. Этот вывод верен, потому что мы видели много функций с в основном нулевыми значениями в нашем EDA. В данных есть выбросы, но эти точки данных не обязательно должны быть выбросами сами по себе.

Более того, эти потенциальные выбросы относятся скорее к отрицательному классу, чем к положительному классу. А для положительного класса почти все точки данных лежат рядом с 0.

Функциональная инженерия

Поскольку в функции lead_time отсутствуют значения, мы выполнили условное вычисление среднего значения. Кроме того, мы увидели, что для функций elements_past_due и local_bo_quantity более 95% значений равны 0. Поэтому в процессе разработки функций мы добавили дополнительные функции, которые показывают, равна ли каждая точка данных в двух функциях нулю или отлична от нуля.

В дополнение к этим характеристикам мы вменяли всем категориальным признакам вероятности из матриц вероятностей. Мы рассмотрели только вероятность нулевого класса и рассчитали ее значения по всем характеристикам.

Мы выполнили все вышеперечисленные методы проектирования функций как для обучающих, так и для тестовых наборов данных. Окончательные данные имеют форму 1687860 строк × 24 столбца для набора поездов и 242075 строк × 24 столбца для набора тестов.

Построение модели и оценка

В этом подходе мы не собираемся использовать какие-либо методы выборки, которые мы использовали в исходных исследовательских работах и ​​некоторых существующих решениях. Идея заключается не в том, чтобы повредить данные добавленными точками синтетических данных или уменьшить размер набора данных для модели. Поэтому, чтобы обуздать проблему несбалансированного набора данных, мы используем веса классов.

В качестве базовой модели я выбрал логистическую регрессию с настройкой гиперпараметров с помощью scikit-learn GridSearchCV. Были настроены следующие параметры: штраф и скорость обучения. Я построил лучшую модель логистической регрессии со скоростью обучения 0,001 и штрафом L1. Показатель точности, достигнутый на тестовом наборе, составляет 0,798, в то время как AUC на том же наборе тестов составляет 0,809.

В этом тематическом исследовании я попробовал четыре модели машинного наклона, включая базовую модель логистической регрессии со сбалансированным весом классов. Настройка гиперпараметров была проведена для получения максимальной отдачи от каждой модели. Для выполнения настройки использовались такие методы, как поиск по сетке и случайный поиск.

Мы видим, что древовидные модели работают лучше, чем линейные. Пожалуйста, проверьте приведенную ниже сводку всех показателей для всех четырех моделей, то есть логистической регрессии, деревьев решений, случайных лесов и деревьев решений с градиентным усилением.

Судя по приведенным выше графикам и сводке AUC, Random Forest является наиболее эффективной моделью с AUC 92,6, что очень близко к AUC (94,7), полученной авторами оригинального исследования. Мы смогли достичь этого результата без каких-либо методов передискретизации или недостаточной выборки, использованных в исследовательской работе. Вместо этого модель случайного леса использовала сбалансированную подвыборку в качестве веса класса, чтобы обуздать проблему несбалансированных данных.

Оценка точности для лучшей модели составляет 93,8, что хорошо по сравнению с логистической регрессией и деревом решений. Однако модель дерева принятия решений с градиентным усилением имеет наивысшую точность. Мы не использовали эту модель, поскольку установили, что точность - не лучший показатель, когда речь идет о сильно несбалансированных данных.

Развертывание на AWS с использованием Streamlit

После доработки модели я развернул ее на экземпляре EC2 с помощью Streamlit API. Вы можете перейти по ссылке ниже, чтобы просмотреть приложение.

Ссылка на приложение streamlit: http://34.238.245.11:8501/

Будущая работа

Мы всегда можем использовать методы выборки, чтобы улучшить характеристики модели. Такие методы, как SMOTE и ADASYN, доказали свою эффективность в решении проблемы несбалансированного набора данных. Будущие работы включают использование других моделей машинного обучения, таких как машина опорных векторов, и даже использование нейронных сетей в сочетании с упомянутыми методами выборки.

Весь код, связанный с этим примером, размещен в моем профиле GitHub.



Свяжитесь со мной в моем профиле LinkedIn



использованная литература

  1. Https://www.appliedaicourse.com/
  2. Https://www.researchgate.net/publication/319553365_Predicting_Material_Backorders_in_Inventory_Management_using_Machine_Learning
  3. Https://medium.com/analytics-vidhya/backorder-prediction-d4f1c5362f18
  4. Https://journalofbigdata.springeropen.com/articles/10.1186/s40537-020-00345-2
  5. Https://www.tandfonline.com/doi/full/10.1080/00207543.2021.1901153?scroll=top&needAccess=true