Формула оптимального уровня сервиса (Цепь поставок)

learn menu
Автор: Жоаннес Верморель, последнее обновление в январе 2012 года

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

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

Модель и формула

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

Введем следующие переменные:

  • $${p}$$ - уровень сервиса, то есть вероятность не возникновения дефицита товара.
  • $${H}$$ - стоимость хранения единицы товара за время времени доставки (1).
  • $${M}$$ - предельная стоимость дефицита товара (2).

Загрузить файл Excel: service-level-formula.xlsx (иллюстрирующий расчет)

(1) Рассматривается временной интервал, равный времени доставки. Вместо более распространенной годовой стоимости хранения $${H_y}$$ мы рассматриваем $${H = \frac{d}{365}H_y}$$, предполагая, что $$d$$ - это время доставки, выраженное в днях.

(2) Стоимость дефицита товара включает в себя, как минимум, валовую маржу, то есть мгновенную прибыль, которая была бы получена, если бы не возникло дефицита товара. Однако потеря валовой маржи - не единственная стоимость: например, следует также учитывать разочарование клиента и потерю лояльности клиента. Как правило, мы наблюдали, что многие продовольственные розничные торговцы считают $${M}$$ равным 3-м кратным валовой марже.

Оптимальный уровень обслуживания определяется следующим образом (подробное объяснение приведено ниже):

$${p=\Phi\left(\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}\right)}$$

Где $${\Phi}$$ - это функция накопленного распределения, связанная с нормальным распределением. Это значение можно легко вычислить в Excel, $${\Phi}$$ - это функция NORMSDIST. Также, для удобства численных вычислений: $${\sqrt{2 \pi} \approx 2.50}$$

Функция стоимости

Для моделирования функции стоимости введем еще две переменные:

  • $${Q}$$ - амортизированное количество товара (3), функция, зависящая от $${p}$$.
  • $${O}$$ - средний избыточный спрос при возникновении дефицита товара.

(3) Здесь мы принимаем точку зрения амортизированного анализа. Уровень запаса товара постоянно меняется, но наша цель здесь, чтобы сделать анализ практическим, - получить значение уровня обслуживания, которое не зависит от самого прогноза спроса. Поэтому мы предположим, что $${Q}$$ равно точке повторного заказа (подробнее см. нашу статью о резервном запасе для подробностей).

Для заданного уровня обслуживания общая стоимость $${C(p)}$$, объединяющая как стоимость хранения запасов, так и стоимость дефицита товара, может быть записана следующим образом:

$${C(p) = Q(p)H + (1-p)MO}$$

Где $${Q(p)H}$$ - это стоимость запасов, а $${MO}$$ - стоимость дефицита товара, которая происходит с вероятностью $${1-p}$$. Используя формулу, представленную в нашем уроке по резервному запасу, и так как $$Q(q)$$ равно точке повторного заказа, у нас есть $${Q(p) = Z + \sigma \Phi^{-1}(p)}$$, где $${Z}$$ - это лидирующий спрос, $${\sigma}$$ - ожидаемая ошибка прогноза, а $${\Phi(p)^{-1}}$$ - обратная функция кумулятивного распределения, связанная со стандартным нормальным распределением (нулевое среднее и дисперсия равна единице).

Анализ среднего упущенного объема продаж

Анализ $${O}$$, среднего упущенного объема продаж, является сложным. Учитывая, что распределение спроса является нормальным распределением $${\mathcal{N}}$$ и что $${q}$$ - это доступный запас, $${O(q)}$$ является условным средним значением спроса $${x}$$ при условии $${x > q}$$ (за вычетом доступного запаса $${q}$$), то есть:

$${O(q)=\frac{\int_q^\infty{x\mathcal{N}(x)dx}}{\int_q^\infty{\mathcal{N}(x)dx}}-q=\frac{1}{q}+\mathcal{o}\left(\frac{1}{q}\right)}$$

Просмотрите функцию по ссылке (1).

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

Однако, по нашему опыту, ошибка прогноза не имеет такой хорошей сходимости, как предсказывает нормальное распределение. Поэтому ниже мы будем считать, что $${O=\sigma}$$, то есть среднее количество упущенных продаж равно средней ошибке прогноза. Очевидно, что это скорее правило запоминания, чем глубокий анализ, но мы обнаружили, что на практике эта аппроксимация дает разумные результаты.

Минимизация функции стоимости

Применяя замены, определенные выше, к выражению $${C(p)}$$, мы получаем:

$${C(p) = \left(Z + \sigma \Phi^{-1}(p)\right)H + (1-p)M\sigma}$$

Затем, выражение $${C(p)}$$ можно дифференцировать по $${p}$$ следующим образом:

$${\frac{\partial C}{\partial p} = \sigma H \partial \Phi^{-1}(p) - \sigma M}$$

Поскольку мы ищем минимальное значение, мы пытаемся решить уравнение $${\frac{\partial C}{\partial p} = 0}$$, которое дает:

$${\sigma H \partial \Phi^{-1}(p) - \sigma M = 0}$$

Которое можно упростить в $${\sigma}$$, с учетом:

$${H \partial \Phi^{-1}(p) - M = 0}$$

И, наконец:

$${\partial \Phi^{-1}(p) = \frac{M}{H}}$$

Затем мы будем использовать связь между $${\partial \Phi^{-1}}$$ и $${\Phi^{-1}}$$:

$${\partial \Phi^{-1}(p)=\sqrt{2\pi}e^{\frac{1}{2}\Phi^{-1}(p)^2}}$$

Для визуального доказательства равенства вы можете сравнить (1) и (2).

Это соотношение позволяет нам получить:

$${\sqrt{2\pi}e^{\frac{1}{2}\Phi^{-1}(p)^2}=\frac{M}{H}}$$

$${\frac{1}{2}\Phi^{-1}(p)^2=\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}$$

Мы берем положительное корневое решение уравнения (отрицательный корень соответствует локальному максимуму функции) с:

$${\Phi^{-1}(p)=\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}}$$

И, наконец, применяя $${\Phi}$$ к обеим сторонам, мы получаем оптимальный уровень обслуживания с:

$${p=\Phi\left(\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}\right)}$$

Обсуждение формулы

Первый интересный аспект формулы заключается в том, что оптимальный уровень обслуживания зависит только от $${H}$$ (стоимость инвентаря) и $${M}$$ (стоимость нехватки товара). Однако есть неявная зависимость от времени доставки, так как $${H}$$ была определена как стоимость хранения на протяжении времени доставки.

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

Затем, формула не является действительной для всех значений $${M}$$ и $${H}$$. Нам нужно, чтобы $${\sqrt{2\pi}\frac{M}{H} > 1}$$, иначе логарифм даст отрицательное значение, которое не подходит для внешнего квадратного корня. Это дает $${M > \sqrt{2 \pi} H}$$, что можно приближенно записать как $${M > 2.5 H}$$. Если это условие не выполняется, то это означает, что исходная функция стоимости $${C(p)}$$ не имеет минимума, или, скорее, что минимум равен $${-\infty}$$ при $${p=0}$$. С практической точки зрения, $${M < 2.5 H}$$ можно интерпретировать как патологическую ситуацию, когда наиболее прибыльным является отсутствие товара на складе (т.е. 100% нехватки товара).

Практический пример

Давайте рассмотрим упаковку молока объемом 1 литр по цене продажи 1,50 евро с маржой 10% (то есть 0,15 евро чистой прибыли). Предположим, что время доставки составляет 4 дня. Годовая стоимость хранения составляет 1,50 евро (значение высокое, потому что молоко - это продукт с высокой скоропортящейся продукт). Мы предполагаем, что стоимость отсутствия товара составляет 3 раза чистую прибыль, то есть 0,45 евро. Это дает $${M=0.45}$$ и $${H=\frac{4}{365} 1.5\approx 0.0055}$$.

Исходя из этих значений и формулы для оптимального уровня обслуживания, полученной выше, мы получаем $$ p \approx 98.5 \text{%} $$, что является типичным значением для свежих продуктов must-have, хранящихся на складах, обслуживающих сети продуктовых магазинов.

Скоропортящиеся продукты питания

Вопрос, заданный Вячеславом Гринкевичем, экспертом по цепочке поставок, 13.02.2012:

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

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

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

Вернувшись к вашей формуле, ее дальнейшее развитие может заключаться в попытке найти связь между H и p или сделать H функцией p, то есть H(p), прежде чем перейти к минимизации общей стоимости C(p). Какие у вас мысли по этому поводу?

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

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

Скоропортящиеся продукты представляют собой еще одну особенность: если запасы, то есть запасы, выраженные в днях, а не в единицах товара, приближаются к сроку годности продукта, то $${H}$$, стоимость хранения, увеличивается до бесконечного значения.

Действительно, $${H}$$ представляет собой трение, связанное с наличием запасов вообще. Запасы, превышающие срок годности продукта, представляют собой абсурдную ситуацию, при которой, предполагая FIFO (первым пришел - первым ушел) запасы, ни один продукт не покидает складское помещение, не достигнув сначала своего срока годности.

Чтобы моделировать эффект скоропортящести запасов, давайте введем несколько ключевых периодов:

  • $${\lambda}$$, срок поставки.
  • $${\lambda_\infty}$$, срок жизни продукта до достижения конечного срока годности (т.е. нулевой рыночной стоимости).
  • $${\lambda_½}$$, период, который удваивает исходную стоимость хранения продукта из-за потери его рыночной стоимости.
  • $${\lambda_c(p)}$$, запасы, выраженные в днях, а не в единицах товара. Этот период зависит от коэффициента безопасности запасов и, следовательно, зависит от $${p}$$.

С помощью этих периодов мы можем моделировать стоимость хранения следующим образом:

$${ H(p) = H \left(1 - \frac{\lambda_\infty - \lambda_½}{\lambda_\infty - \lambda} + \frac{\lambda_\infty - \lambda_½}{\lambda_\infty - \lambda_c(p)} \right) }$$

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

Во-первых, у нас есть $${H(0.5)=H}$$. Это получается из самого определения выше. Действительно, $${\lambda_c(0.5)=\lambda}$$, при уровне обслуживания 50%, запасы равны сроку поставки. Таким образом, мы заявляем здесь, что в этой модели $${H}$$ представляет собой стоимость хранения, в которую уже включены затраты на списание при уровне обслуживания 50%. Следует отметить, что нулевые запасы безопасности не означают нулевых списаний, только редкие списания.

Во-вторых, для уровня обслуживания $${p_½}$$, такого как $${\lambda_c(p_½) = \lambda_½}$$, тогда у нас есть $${H(p_½)=2H}$$. Опять же, это только следствие принятого определения для $${H(p)}$$. Интуитивно $${\lambda_½}$$ представляет собой период, который удваивает комбинацию стоимости хранения и стоимости списания по сравнению с ситуацией нулевых запасов безопасности. Ясно, что на практике накладные расходы, связанные с скидками на конец срока годности и списаниями, будут проходить через дискретные шаги. Однако мы считаем, что попытка выразить эти накладные расходы через типичный период, который на практике будет определен как определенная доля срока жизни продукта, вероятно, будет намного более устойчивой к различным приближениям, связанным с всем подходом, в отличие от более детализированной модели, основанной на еще более неопределенных переменных.

Наконец, поскольку $${p}$$ приближается к $${p_\infty}$$ с условием $${\lambda_c(p_\infty)=\lambda_\infty}$$, то $${H(p)}$$ снова стремится к бесконечности, согласно определению принятой функции для $${H(p)}$$. С первого взгляда может показаться странным, что стоимость хранения превышает стоимость единицы продукта, но здесь нет парадокса. Значение $$H(p)$$ представляет собой стоимость трения для доставки одной единицы клиенту. Если из-за массовых списаний, чтобы доставить 1 единицу конечному клиенту, склад в среднем получает 3 единицы (2 единицы просрочиваются до доставки), то стоимость трения будет намного больше исходной цены за единицу продукта.

В заключение, $${\lambda_½}$$ - это только одна неопределенная переменная, которая вводится. $${\lambda}$$ и $${\lambda_\infty}$$ можно считать известными. Мы считаем, что эту модель для $${H(p)}$$ можно считать простейшей, которая может быть достигнута путем введения только 1 дополнительной переменной. Тогда для $${\lambda_c(p)}$$, с небольшим приближением, у нас есть:

$${\lambda_c(p) = \lambda \left(1 +\frac{\sigma}{Z}\Phi^{-1}(p)\right)}$$

Действительно, $${\lambda_c}$$, запас-покрытие, можно рассматривать как отношение к времени выполнения, которое включает в себя ведущий спрос плюс нормализованный коэффициент безопасности запасов. Это дает альтернативную функцию стоимости:

$${C^*(p) = \left(Z + \sigma \Phi^{-1}(p)\right)H\left(1 - \frac{\lambda_\infty - \lambda_½}{\lambda_\infty - \lambda} + \frac{ \lambda_\infty - \lambda_½}{\lambda_\infty - \lambda \left(1 +\frac{\sigma}{Z}\Phi^{-1}(p)\right)} \right) + (1-p)M\sigma}$$

В отличие от предыдущей функции стоимости, у этой функции не кажется быть простого алгебраического минимума. Однако, приняв подход, аналогичный используемому для расчета экономического заказного количества, относительно просто найти приближенное решение, итерируясь с шагом 0,1% от 80% до 99,9%. Это представляет собой 200 итераций для достижения точности 0,1%, что будет вполне достаточно для практических целей.

Предполагаемое практическое использование

Формула уровня обслуживания имеет несколько приближений, поэтому числовые значения могут быть непригодными из коробки: обычно потребуется некоторая настройка. В частности, фактор $${\frac{1}{\sqrt(2\pi)}\approx0.4}$$ может быть скорректирован по мере необходимости. Однако мы считаем, что эта формула дает хорошее представление о том, как относительные уровни обслуживания ваших товаров должны сравниваться. Например, если для двух продуктов A и B вы получаете уровни обслуживания соответственно 95% (для A) и 90% (для B), то для конечной производственной настройки ожидается, что уровень обслуживания для A будет выше, чем уровень обслуживания для B.

Учитывая характер анализа, проведенного выше, мы считаем, что эта формула не является релевантной для товаров с низким или прерывистым спросом. Действительно, такие товары с низким объемом обычно связаны с низкой точкой перезаказа в 0 или 1 единицу; и линейное моделирование затрат на хранение товара не всегда имеет смысл, так как сложность хранения одной дополнительной ссылки также должна быть учтена.