Оптимальная формула уровня сервиса (Цепочка поставок)

learn menu
От Joannès Vermorel, последнее обновление: январь 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{%} $$, что является типичным значением для товаров первой необходимости, таких как свежие продукты, хранящиеся на складах, обслуживающих сети продуктовых магазинов.

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

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

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

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

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

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

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

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

Скоропортящиеся продукты представляют еще один нюанс: если количество дней запаса (то есть запасы, выраженные в днях, а не в единицах товара) приближается к сроку годности продукта, тогда $${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%, уже включены в стоимость $${H}$$. Примечательно отметить, что нулевые страховые запасы не означают нулевых списаний, а лишь редкие списания.

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

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

В итоге, $${\lambda_{1/2}}$$ является лишь одной неопределённой переменной, которая вводится. $${\lambda}$$ и $${\lambda_\infty}$$ можно смело считать известными. Мы считаем, что данная модель для $${H(p)}$$ является одной из самых простых, которую можно получить, введя только одну дополнительную переменную. Затем, для $${\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_{1/2}}{\lambda_\infty - \lambda} + \frac{\lambda_\infty - \lambda_{1/2}}{\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 единице; и линейное моделирование затрат на хранение продукта не всегда имеет смысл, поскольку также следует учитывать сложность хранения ещё одной позиции.