a close up shot of a graph on a paper

Прогноз продажів: чому аналіз попиту починається з доступності товару

Продажі показують не весь попит. Вони показують тільки ту частину попиту, яку компанія змогла задовольнити. Якщо в періоді були lost sales, фактичні продажі треба читати як нижню межу попиту, а не як сам попит. Тому перед аналізом sales history треба поставити перше питання: чи товар був доступний для продажу?

Чому продажі не дорівнюють попиту?

Продажі показують не весь попит. У багатьох компаніях попит аналізують через продажі. Продали 1 000 одиниць – значить, попит був 1 000. Продали 600 – значить, попит впав. Продали нуль – значить, попиту не було. На перший погляд це логічно. Але для прогнозування попиту й управління запасами це небезпечна пастка.

Продажі показують тільки ту частину попиту, яку компанія змогла задовольнити. Якщо товар був доступний, продажі справді можуть бути нормальним сигналом попиту. Але якщо товару не було, він був доступний лише частково або компанія могла виконати тільки частину замовлення, продажі вже не показують чистий попит. Вони показують обмежений результат. Попит міг бути вищим. Клієнти могли хотіти купити. Але в історії продажів цього не буде видно. Система зафіксує не реальний попит, а лише межу того, що компанія змогла продати. І якщо модель прогнозування сприйме цю цифру як попит, вона почне вчитися не на ринку, а на обмеженнях доступності товару.

З якого питання починати аналіз продажів перед прогнозуванням?

Перед тим як аналізувати sales history, пояснювати падіння продажів, оновлювати baseline forecast або подавати дані в модель, треба поставити перше питання: чи товар був доступний для продажу? Ця метрика – перший фільтр перед інтерпретацією продажів. Поки доступність не перевірена, не можна робити висновок, що попит справді впав.

Треба спочатку відповісти на простіше питання: клієнти справді купували менше — чи компанія просто не могла продати більше? Не MAPE. Не точність моделі. Не вибір алгоритму. Спочатку — доступність. Якщо товару не було або він був доступний частково, історія продажів уже обрізана. І якщо цього не помітити, модель може сприйняти обмеження доступності як зміну попиту. Продажі можуть спотворювати попит і з інших причин: промо, ціна, канібалізація, заміщення SKU, сезонність, зміна каналів або поведінка конкурентів. в цій статті фокус тільки на першому фільтрі перед прогнозуванням, а саме доступності.

Що таке недоступність товару і чому це не лише нульовий залишок на складі?

Коли говорять про дефіцит, часто уявляють просту ситуацію: на складі нуль. Але в реальному бізнесі недоступність не завжди виглядає як нульовий залишок. Товар може фізично бути в системі, але не бути доступним для продажу.

Це різні речі: фізичний залишок показує, що товар десь є; доступний залишок показує, що його реально можна продати; здатність задовольнити попит показує, чи вистачить цього товару в потрібному місці, каналі й періоді. Наприклад:

  • товар є, але не в потрібній локації;
  • товар доступний не в усіх магазинах або каналах;
  • частина залишку зарезервована під інші замовлення;
  • товар заблокований через якість, документи або системний статус;
  • товар у дорозі або на прийманні;
  • компанія може виконати тільки частину клієнтського замовлення. У звіті продажів усе це може виглядати як слабший попит. Але з погляду управління попитом це не обов’язково слабший попит. Це може бути обмежена можливість його задовольнити. Саме тому перед аналізом падіння продажів треба перевірити не тільки факт продажу, а й умови, в яких цей продаж міг відбутися.

Що таке lost sales (втрачені продажі) і чому фактичні продажі — це нижня межа попиту?

Якщо клієнти хотіли купити 100 одиниць, а доступно для продажу було тільки 60, у sales history залишиться 60. Але для прогнозування це не означає, що попит був 60. Це означає тільки одне: компанія змогла задовольнити щонайменше 60 одиниць попиту. Наскільки попит був вищим за цю межу, звичайний звіт продажів може не показати.

Саме ця невидима частина і є lost sales — тобто попит, який міг стати продажем, але не став ним через обмежену доступність товару. Практичний висновок простий: якщо в періоді були lost sales, фактичні продажі треба читати як нижню межу попиту, а не як сам попит. Тому після дефіциту не можна автоматично знижувати baseline forecast тільки тому, що продажі впали. Спочатку треба перевірити, чи були сигнали незадоволеного попиту. Не всі ці сигнали є в кожній системі, але саме їх варто шукати:

  • незакриті замовлення;
  • відхилені або скорочені замовлення;
  • відмови клієнтам;
  • stockout days;
  • падіння рівня виконання замовлень;
  • продажі до дефіциту й після відновлення запасу;
  • продажі схожих SKU або точок, де товар був доступний. Якщо такі сигнали є, період треба маркувати як обмежений. Далі його можна коригувати, порівнювати з періодами нормальної доступності, інпутувати або виключати з навчання моделі. Але його не можна без перевірки використовувати як доказ того, що попит справді впав.

Що таке censored demand (цензурований попит) і чому модель бачить не попит, а обмеження системи?

Lost sales показує невидиму частину попиту на рівні бізнес-наслідку. Censored demand важливий з іншої причини: він показує, що сама історія продажів стає пошкодженим навчальним сигналом. Проблема не лише в тому, що компанія втратила частину продажів, а в тому, що система зберегла цей період так, ніби він був нормальним. У таблиці буде дата, SKU, канал і кількість продажів. Але без статусу доступності ця цифра виглядатиме як реальний попит. Хоча насправді вона може показувати лише межу доступного товару. Саме це і є censored demand: ми бачимо не весь попит, а тільки ту його частину, яка пройшла через обмеження запасу, локації, каналу або виконання замовлення.

Для моделі це критично. Продажі часто використовують як цільову змінну для прогнозу попиту. Але в періоди обмеженої доступності ця цільова змінна уже спотворена. Модель не знає, що продажі впали через stockout. Вона не знає, що товар був доступний лише половину періоду. Вона не знає, що частина замовлень була скорочена або відхилена. Якщо ці статуси не передані в даних, модель бачить тільки одне: продажі стали нижчими. І може зробити неправильний висновок: попит знизився.

Тому censored demand — це попередження про якість даних. Такий період не повинен потрапляти в модель як звичайне спостереження. Його треба або маркувати окремою ознакою, або коригувати, або замінювати оціненим попитом, або виключати з навчання моделі. Перед тим як використовувати історію продажів у прогнозуванні, треба зрозуміти: ця цифра описує поведінку ринку чи обмеження компанії? Якщо цього не зробити, модель буде навчатися не на реальному попиті, а на тій частині попиту, яку компанія змогла зафіксувати у продажах.

Де в даних шукати ознаки обмеженої доступності товару?

Проблема censored demand не вирішується самим розумінням терміна. Її треба знайти в даних. І тут важливо не змішувати всі можливі показники в один список. Не кожен сигнал однаково надійний. Є сильні сигнали обмеженої доступності:

  • товар мав нульовий або критично низький доступний залишок;
  • були stockout days;
  • замовлена кількість була більшою за відвантажену;
  • частина рядків замовлення була скорочена або відхилена;
  • був backorder / незакрите замовлення;
  • падав рівень виконання замовлень (fill rate).

    Це прямі ознаки того, що компанія могла бути обмежена у здатності задовольнити попит. Вони не дають автоматично точний обсяг lost sales, але добре показують, що фактичні продажі могли бути нижчими за реальний попит. Є середні сигнали:
  • товар був доступний не в усіх магазинах, складах або каналах;
  • товар був фізично в системі, але не був available-to-sell;
  • частина залишку була зарезервована або заблокована;
  • товар був не в тій локації, де виникав попит;
  • загальні продажі падали, але продажі на доступну точку залишались нормальними.

Останній пункт важливий. Якщо товар був доступний у меншій кількості точок, загальні продажі могли впасти не через слабший попит, а через менше покриття доступності. Наприклад, якщо товар був доступний у 50 магазинах замість 100, загальні продажі могли впасти майже вдвічі, хоча продажі на доступний магазин залишилися нормальними. Такі сигнали не завжди доводять lost sales напряму, але показують, що sales history треба читати обережно.

Є також допоміжні сигнали, особливо в e-commerce. Вони не доводять lost sales самі по собі, але можуть підтримати гіпотезу, якщо поруч є дані про обмежену доступність. В e-commerce іноді видно не тільки продаж, а й незавершений намір купити. Але такі сигнали треба читати дуже обережно. Самі по собі перегляди сторінки або пошукові запити не доводять попит. Людина могла просто порівнювати ціни, дивитися характеристики або не мати реального наміру купити. Вони стають корисними лише тоді, коли поєднуються з обмеженням доступності.

Наприклад, товар фізично є в системі, але для клієнта він недоступний: сайт показує out of stock, товар не доступний у його регіоні, не переданий на канал, заблокований, зарезервований або ще не став available-to-sell.

Схожа ситуація може виникати на Amazon. У системі продавця залишок є. Але лише невелика частина цього запасу має статус доступного для продажу, а інша частина знаходиться у FC transfer, на прийманні або не на тих складах, з яких Amazon може швидко доставити товар конкретному клієнту. Формально товар є. Але для покупця він може виглядати як недоступний або як товар із надто довгим терміном доставки. І це критично, якщо клієнт не готовий чекати: наприклад, йому потрібна запчастина для ремонту або подарунок до Різдва. У такій ситуації пошукові запити по товару, перегляди сторінки, підписки “повідомити, коли з’явиться” або звернення щодо наявності стають не доказом попиту, а допоміжним сигналом: інтерес був, але продаж міг не відбутися через доступність.

Окремо корисно дивитися на продажі після відновлення доступності. Якщо товар повернувся в наявність і продажі різко відновилися, це не доводить автоматично весь обсяг lost sales. Але це підсилює гіпотезу, що попит під час недоступності не зник – він просто не міг бути задоволений. Тому e-commerce-сигнали не варто використовувати як прямий замінник продажів. Їхня роль інша: вони допомагають перевірити, чи падіння продажів було наслідком слабкого попиту, чи наслідком того, що товар був недоступний для клієнта в момент покупки.

Головне правило просте: якщо продажі впали одночасно з погіршенням доступності, це ще не доказ падіння попитуякщо продажі впали одночасно з погіршенням доступності, це ще не доказ падіння попиту. Це сигнал, що період треба маркувати як обмежений, перевірити на lost sales та censored demand і не використовувати як звичайне спостереження попиту без корекції.

Як маркувати періоди за статусом доступності (availability_status)?

Після того як ми знайшли ознаки обмеженої доступності, наступний практичний крок — не одразу коригувати модель. Спочатку треба позначити якість даних. Бо без маркування модель бачить тільки продажі. Воно не вирішує всю проблему автоматично. Але воно не дозволяє моделі сприймати операційне обмеження як поведінку ринку. На практиці для старту достатньо додати в датасет одне поле: availability_status Якщо даних більше, можна додати додаткові ознаки:

  • is_stockout;
  • availability_rate;
  • stockout_days;
  • order_fill_rate / рівень виконання замовлень;
  • demand_signal_quality. availability_rate може показувати частку часу, точок або каналів, де товар був доступний.

Важливо правильно вибрати рівень маркування. Статус доступності має стояти не “десь на рівні товару взагалі”, а на тому рівні, де реально виникає попит і приймається рішення: SKU + локація, SKU + канал, SKU + магазин, SKU + тиждень.

Якщо агрегувати надто високо, часткова недоступність знову сховається. На рівні компанії товар може виглядати доступним, але в конкретному каналі, регіоні або магазині клієнт все одно не міг його купити.

Правила можуть бути простими.

Якщо доступний залишок був нормальним протягом усього періоду і рівень виконання замовлень не падав — це normal availability. Якщо були stockout days або stockout hours, статус треба деталізувати залежно від масштабу періоду: повний stockout, partial stockout або partial availability. Якщо товар був доступний не в усіх точках, складах або каналах — це partial availability. Якщо замовлена кількість була більшою за відвантажену — це partial fill. Якщо фізичний залишок є, але available-to-sell дорівнює нулю — це blocked, reserved або unavailable. Якщо даних недостатньо, краще чесно позначити період як unknown або unreliable demand signal, ніж використовувати його як нормальний попит. Після такого маркування спеціаліст уже може приймати різні рішення для різних періодів:

  • stockout-періоди не використовувати як доказ нульового попиту;
  • partial availability — нормалізувати або порівнювати з подібними періодами;
  • normal availability — використовувати для оцінки baseline;
  • unreliable періоди — перевіряти окремо або виключати з навчання.
    Маркування доступності — це не бюрократія. Це спосіб додати до sales history те, чого їй зазвичай бракує: контекст, у якому продаж міг або не міг відбутися. Без цього модель бачить лише цифру продажів, але не бачить, чи бізнес мав шанс продати більше.

Що робити з періодами обмеженої доступності в даних для прогнозу?

Після маркування з’являється головне практичне питання: що робити з періодами, де продажі не є чистим сигналом попиту? Тут важливо не шукати одне універсальне правило. Обмежений період можна обробити кількома способами — залежно від того, що саме сталося з доступністю і наскільки якісні дані має компанія.

Перший варіант: залишити період у датасеті, але з явною ознакою обмеження. Це доречно, якщо модель або аналітик можуть врахувати цю ознаку: stockout, partial availability, partial fill, blocked stock, unreliable demand signal. У такому випадку період не зникає з історії, але модель не повинна сприймати його як звичайне спостереження попиту.

Другий варіант: виключити період із навчання baseline forecast. Це доречно, якщо товар був повністю недоступний або дані настільки спотворені, що неможливо оцінити реальний попит. Краще не навчати модель на такому періоді, ніж змусити її сприйняти дефіцит як падіння ринку.

Третій варіант: нормалізувати продажі. Це підходить для часткової доступності. Наприклад, якщо товар був доступний не в усіх магазинах, каналах або регіонах, загальні продажі не можна напряму порівнювати з періодами повної доступності. Тоді корисніше дивитися на продажі на доступний день, доступну точку, доступний канал або регіон, де товар справді був available-to-sell.

Четвертий варіант: скоригувати або інпутувати попит. Це доречно, якщо є достатньо даних, щоб оцінити, яким міг бути попит без обмеження. Наприклад, через:

  • періоди з нормальною доступністю;
  • схожі SKU;
  • схожі магазини або канали;
  • продажі до дефіциту й після відновлення доступності;
  • backorders;
  • замовлену, але не відвантажену кількість;
  • рівень виконання замовлень.

Не можна просто підставити середнє значення й вважати проблему вирішеною. Спочатку треба зрозуміти, чому дані пошкоджені: stockout, partial availability, blocked stock, channel limitation, location issue чи partial fill.

П’ятий варіант: залишити період тільки для діагностики, але не використовувати його для навчання прогнозу. Це корисно, коли період показує операційну проблему, але не дає надійного сигналу попиту. Наприклад, він може бути важливим для аналізу service level, availability або supply issues, але небезпечним для розрахунку baseline demand. Головне правило: обмежений період не можна бездумно подавати в модель як звичайне спостереження.

Після маркування треба прийняти рішення: залишити з ознакою, виключити, нормалізувати, скоригувати, інпутувати або використати лише для діагностики. Інакше модель буде вчитися не на попиті, а на тому, як компанія не змогла цей попит задовольнити.

Які фактори, крім доступності, спотворюють продажі?

Доступність — не єдина причина, чому продажі можуть не дорівнювати попиту. Продажі також можуть спотворюватися через канібалізацію між SKU, заміщення товарів, промо, зміну ціни, сезонність, зміну каналів, поведінку конкурентів або зміну клієнтської поведінки. Наприклад, клієнт міг хотіти купити один SKU, але купив інший через промо, ціну або наявність. У продажах це виглядає як попит на другий SKU, хоча частина цього попиту могла бути перенесена з першого.

prodagi ananliz

Продажі — це не весь попит

Продажі — це попит, який компанія змогла задовольнити. Якщо товар був доступний, продажі можуть бути нормальним сигналом для прогнозування. Але якщо доступність була обмежена, історія продажів стає обрізаною історією попиту. У таких періодах фактичні продажі показують не реальний попит, а нижню межу того, що компанія змогла продати.

Саме тому availability треба перевіряти до того, як продажі були прийняті за попит. Не після вибору моделі. Не після розрахунку MAPE. Не після того, як forecast уже знизили. А до цього. Бо якщо модель не бачить обмеження доступності, вона може навчитися не на ринку, а на наслідках власного дефіциту. І тоді прогноз починає закріплювати проблему, яку мав допомогти вирішити.

Автор: Ярослав Степченков — Kaizen Practitioner, Lean Six Sigma Green Belt, IPMA (D).

Доєднуйтеся до спільноти, замовляйте книги з управління ланцюгами поставок, отримуйте аналітику ринку, огляди подій зі сфери логістики та ділиться вашою експертизою.

Залишити відповідь