Анализ продаж при наличии товаров - выявление случаев когда товар присутствует на складе но не продается
Современная торговля сталкивается с необходимостью поддерживать баланс между доступностью товаров и эффективностью продаж. Техника выявления ситуаций, когда товар присутствует на складе, но не продается, позволяет снизить издержки, оптимизировать ассортимент и повысить оборачиваемость запасов. В данной главе рассматриваются архитектурные решения, алгоритмы и интеграционные подходы, обеспечивающие непрерывный контроль запасов, детальное анализирование причин неэффективной купли-продажи и оперативное реагирование бизнес-подразделений.
Введение в контекст проблемы опирается на данные о запасах, продажах и характеристиках товаров. Основной признак проблемы - наличие на складе значимого объема единиц товара, которые не переходят в реализации в течение разумного горизонта. Причины могут быть разнообразны: несоответствие ассортимента спросу в конкретном регионе, завышенная цена, неэффективные промо-мероприятия, ошибки в ценообразовании или в привязке к складам, задержки в обновлении данных о запасах. Эффективная аналитика не должна ограничиваться простым суммированием остатков и продаж: требуется архитектура, обеспечивающая точную агрегацию по складам, категориям, точкам продаж и времени, а также методологии для перевода выводов в управленческие решения.
- В контексте товародвижения задача анализа наличия товаров без продаж - это шаг к управлению «мертвым» запасом и к выработке практик ликвидации узких мест в цепочке поставок и продаж.
- В качестве цели рекомендуется определить пороги и сценарии оповещений, которые минимизируют ложно-положные сигналы и не перегружают операционные команды.
Краткое содержание главы
- Архитектура данных и источники информации, необходимых для точного анализа.
- Модели данных, метрики и пороги, обеспечивающие детектирование "непродаваемого запаса".
- Инженерные решения по интеграции данных и построению пайплайнов: от источников к дашбордам и тревогам.
- Реализация на практике: примеры SQL-запросов, концепции данных и принципы контроля качества.
- Управление изменениями в процессах и внедрением: роли, SLA, governance и тестирование гипотез.
Далее следует подробное изложение темы, начиная с концепций и переходя к практическим реализациям.
Архитектура данных и источники
Эффективный анализ требует комплексной архитектуры данных, где данные о запасах, продажах и характеристиках товаров объединяются в единое пространство для аналитики. Основные слои архитектуры:
- Источники данных: ERP/WMS (учет запасов и движения), POS и онлайн-магазины (реализация в реальном времени), OMS (channels) и промо-данные (цены, акции, скидки). Встроенная согласованность между этими системами критична, поскольку расхождения в единицах учёта приводят к ложным выводам.
- Слой обработки: научно-аналитическая платформа, объединяющая события продаж и движения запасов. Здесь применяются ETL/ELT-процессы, в зависимости от скорости обновления данных: пакетная обработка для исторических анализов и стриминг для оперативного мониторинга.
- Хранилище данных: data warehouse или data lakehouse, где организованы предметные области и модели данных. Рекомендуются слои staging, core и presentation для упрощения поддержки, тестирования и разворачивания новых метрик.
- Пайплайны и интеграции: архитектура должна поддерживать как пакетную обработку, так и стриминг через такие технологии как Kafka, Spark Streaming, Flink, а также батчевые задачи через Airflow или аналогичные оркестраторы. В качестве базы данных для аналитики используются PostgreSQL, ClickHouse или Snowflake в зависимости от объема данных и требований к задержке.
- Контроль качества и данные о происхождении: механизмы мониторинга качества данных, трекинг источников, lineage и воспроизводимость расчётов. Важно обеспечить idempotent-load и обработку дубликатов, особенно в условиях объединения данных из нескольких систем.
Универсальная схема данных должна включать следующие элементы:
- Таблица товаров (items): item_id, name, category, brand, price, атрибуты сегмента.
- Таблица складов (warehouses): warehouse_id, location, type (DC, розничный точка продаж).
- Таблица запасов (stock_on_hand): item_id, warehouse_id, on_hand, reserved, updated_at.
- Таблица продаж (sales): sale_id, item_id, warehouse_id, quantity, sale_date, channel.
- Таблица цен и акций (pricing, promotions): item_id, effective_from, effective_to, price, promotion_id, promo_type.
- Таблица фактов времени (date_dim): date_key, date, week, month, quarter, year.
- Метрики по времени (time_decay, lead_time): для учета задержек в обновлении запасов и движении.
Пример взаимодействия систем можно описать в виде высокоуровневой схемы потоков: источники данных → слой стейджинга → слой ядра (facts и dimensions) → слой представления (дашборды, тревоги).
На практике для открытых решений чаще всего применяются PostgreSQL или ClickHouse для агрегированных моделей и Apache Kafka + Spark для стриминга, а для внедрения в российской реальности - 1C: Предприятие может быть важной точкой интеграции с ERP и логистикой. Важно избегать перегрузки архитектуры: подбирать решения, исходя из скорости обновления данных и необходимой точности.
Табличная структура и примеры модели
- Товары (items): item_id, name, category, subcategory, supplier_id, unit, standard_cost, list_price.
- Склады (warehouses): warehouse_id, name, region.
- Запасы (stock_on_hand): item_id, warehouse_id, on_hand, reserved, last_update.
- Продажи (sales): sale_id, item_id, warehouse_id, quantity, sale_date, channel, price_at_sale.
- Параметры ассортимента (assortment): item_id, region, effective_date, stock_priority.
Эти таблицы образуют факт- и измерение-слоям, где торговые компании могут строить подпроекты для анализа «непродаваемого запаса» по регионам, каналам продаж и категориям.
Модели данных, метрики и пороги
Определение понятия «непродаваемый запас» требует формальной постановки метрик и порогов. Основные концепции:
- Упорство запаса (dead stock) - запасы, которые не были проданы в течение заданного окна времени T (например, 90-180 дней).
- Непроданный запас с высокой доступностью - товары, имеющиеся на складе, но продажи отсутствуют или очень низкие по нескольким регионам/каналам.
- Оборачиваемость (turnover) и скорость продажи (velocity): Sell-Through Rate SR = sold_qty / (sold_qty + on_hand). Низкая SR может сигнализировать проблему.
- Распределение по месту (region/cromo): возможно наличие запасов в одном регионе, в то время как спрос в этом регионе низок.
Формулы (упрощённые примеры):
- Unused stock = on_hand - sold_qty (за выбранный период).
- Days of inventory on hand (DOH) = on_hand / average_daily_sales.
- Sell-through rate (SR) = sold_qty / (sold_qty + on_hand).
Эти метрики можно рассчитывать как в рамках отдельных складів, так и по объединенной группе товаров. Важно обеспечить корректную агрегацию и обработку нулевых значений.
- Пороговые правила: товары с on_hand > threshold_on_hand и on_hand > sold_qty и DOH > threshold_doh и SR < threshold_sr попадают в режим «непродаваемого запаса». Пороговые значения подбираются за счёт анализа исторических данных, сезонности и характеристик товарной группы.
Ключевой принцип - пороги не должны слепо следовать общему правилу. Необходимо учитывать сезонность, акционные периоды, изменения в спросе и динамику цен. Часто применяют подходы калибровки порогов на исторических данных с пересмотром через окно (например, квартал), чтобы минимизировать ложные сигналы и сохранить оперативную восприимчивость к изменениям.
Пример SQL-запроса для детекции
Чтобы выявить товары с высоким запасом на складе и отсутствием продаж в заданном периоде, можно использовать следующий упрощённый пример (PostgreSQL):
SELECT i.item_id, i.name AS item_name, w.warehouse_id, w.name AS warehouse_name, SUM(sso.on_hand) AS on_hand, ## COALESCE(SUM(s.qty), 0) AS sold_qty, (SUM(sso.on_hand) - COALESCE(SUM(s.qty), 0)) AS unused_stock FROM stock_on_hand sso JOIN items i ON sso.item_id = i.item_id JOIN warehouses w ON sso.warehouse_id = w.warehouse_id LEFT JOIN sales s ON s.item_id = i.item_id ## AND s.warehouse_id = w.warehouse_id AND s.sale_date BETWEEN :start_date AND :end_date GROUP BY i.item_id, i.name, w.warehouse_id, w.name HAVING SUM(sso.on_hand) > 0 AND COALESCE(SUM(s.qty), 0) = 0 ORDER BY unused_stock DESC
Этот запрос даёт базовую выборку для дальнейшего анализа. В реальной системе его следует адаптировать под конкретные схемы, типы каналов продаж и требования к скорости обновления данных.
Алгоритмы обнаружения и пороги
С точки зрения методологии имеется два основных подхода: простые пороговые правила и более сложные методы на основе статистического анализа и машинного обучения.
- Правила на основе порогов: первоначально задаются числовые пороги по DOH, SR, on_hand и периоду продаж. Это позволяет быстро запустить систему тревог и определить первичные списки кандидатов на ревизию запасов. Далее пороги корректируются по результатам верификации и тестирования на реальных данных.
- Статистические методы: проверка стационарности, анализ сезонности и аномалий, Z-скор и межквартальные пороги. Такой подход помогает охватывать сезонные паттерны и изменчивость спроса.
- Машинное обучение: построение моделей детекции аномалий на основе исторических данных по запасам и продажам, кластеризация по группам товаров, регионов и каналов. Мощный инструмент, однако требует качественных данных, валидации и контроля за интерпретируемостью.
Важно сохранять интерпретируемость»: бизнес-задачи требуют объяснимых выводов. Поэтому в большинстве случаев целесообразно начинать с правил-порогов и постепенно переходить к более сложным методам, если пороги перестали давать устойчивые сигналы.
Инженерная реализация и интеграции
Реализация требует четко регламентированных процессов интеграции данных и эксплуатационных процедур. Основные аспекты:
- Пайплайны данных: регламентированная загрузка запасов и продаж, с поддержкой CDC-обновлений и задач для отбора изменений. Необходимо обеспечить консистентность между источниками и устранение дубликатов.
- Структура пайплайна: staging, core, presentation layers. В staging - выгрузка из разных систем: ERP, WMS, POS; в core - расчёт метрик и формирование фактов; в presentation - дашборды и тревоги.
- Технологический стек: для больших объёмов** - ClickHouse или Snowflake; для оперативной аналитики - PostgreSQL; стриминг - Apache Kafka; обработка и расчёты - Apache Spark или Flink; оркестрация - Apache Airflow; моделирование и версия моделей - dbt.
- Интеграции и API: для оперативного реагирования на тревоги могут быть REST API в рамках системы управления запасами, чтобы автоматически формировать запроса на корректировку ассортимента, кросс-канальные акции или переориентирование товаров между складами.
- Контроль качества и проверки: тесты на консистентность, валидацию итоговых метрик, тестирование гипотез по порогам с использованием исторических дат. Важно обеспечить регрессионный тест для новых версий дашбордов и моделей.
Практическое внедрение включает, как минимум, создание моделей данных, настройку периодических агрегаций и построение представлений для аналитических панелей. В реальных условиях для интеграций часто применяют сочетание открытых технологий и готовых решений (например, PostgreSQL + Airflow + dbt + Tableau/Power BI), а в российской реальности - интеграцию с 1C: Предприятие для синхронизации данных об остатках.
Пример архитектурного паттерна
- Источники данных: ERP (остатки), WMS (локальные движения), POS/онлайн-каналы (продажи), ценовые и промо-данные.
- Интеграционный слой: потоковые коннекторы в Kafka, периодические экспорт-импорты в формате CSV/Parquet.
- Модель данных: дата-слой с размерностями по товарам, складам, времени; факт-таблица с запасами и продажами.
- Аналитика и визуализация: Power BI / Data Studio / Grafana.
- Управление обновлениями: SLA на обновление запасов, SLA на агрегацию продаж, мониторинг задержек.
Реализация на практике: примеры и практические подходы
- Локальная проверка данных: сначала валидируем отсутствие расхождений между запасами и продажами по каждому складу. Это позволяет обнаружить некорректные обновления данных, задержку в обновлении цен или ошибок в интеграции.
- Построение дашбордов: создаются дэшборды по регионам, каналам продаж, категориим. Включаются тревоги на основе порогов «непродаваемого запаса» и графики динамики запасов.
- Операционная работа с предупреждениями: команды, отвечающие за ассортимент, получают уведомления о кандидатах на ревизию запасов. В процессе обсуждения анализируются причины и принимаются решения: перераспределение товара между складами, изменение цены или активизация промо.
Пример кода: базовый SQL-запрос для расчета кандидатов
SELECT i.item_id, i.name AS item_name, w.warehouse_id, w.name AS warehouse_name, SUM(sso.on_hand) AS on_hand, ## COALESCE(SUM(s.qty), 0) AS sold_qty, (SUM(sso.on_hand) - COALESCE(SUM(s.qty), 0)) AS unused_stock, NOW() AS analysis_time FROM stock_on_hand sso JOIN items i ON sso.item_id = i.item_id JOIN warehouses w ON sso.warehouse_id = w.warehouse_id LEFT JOIN sales s ON s.item_id = i.item_id ## AND s.warehouse_id = w.warehouse_id AND s.sale_date BETWEEN DATEADD(day, -90, CURRENT_DATE) AND CURRENT_DATE GROUP BY i.item_id, i.name, w.warehouse_id, w.name HAVING SUM(sso.on_hand) > 0 AND COALESCE(SUM(s.qty), 0) = 0 ORDER BY unused_stock DESC
Данный запрос показывает кандидатов на внимание за последний 90-дневный период: товары, имеющиеся на складе, но не реализованные за указанный период. В реальной среде его дополняют проверками по порогам и учетом сезонности, чтобы выявлять устойчивую проблему, а не единичное отклонение.
Протоколы интеграции и безопасность
- Безопасность доступа к данным и контроль версий: ограничение доступа к чувствительным данным запасов и продаж, логирование каждого доступа и изменений.
- Управление версиями моделей и схем: версия данных, миграции схем и обратная совместимость.
- Документация и аудит: наличие документации по источникам данных, трансформациям и логике вычислений, а также аудит изменений в порогах и правилах тревог.
Ключевые принципы и организационные аспекты
- Вовлечение стейкхолдеров: бизнес-область, аналитики, логистика, маркетинг и продажи должны совместно формировать пороги и интерпретацию сигналов.
- Постепенная эволюция: начинать с простых правил и затем переходить к более продвинутым методам анализа по мере накопления качества данных и опыта.
- Эффективность действий: тревоги должны приводить к конкретным действиям - перераспределение запасов, корректировка цен, изменение промо или корректировка ассортимента.
- Тестирование гипотез: использование A/B тестирования и периодов ретроспекции для оценки экономической эффективности решений, принятых на основе анализа.
- Управление изменениями: регламентированные процедуры управления изменениями в порогах, моделях и правилах тревог, с обязательным регистром изменений и тестов.
Key takeaways
- Эффективный анализ наличия запасов без продаж требует интегрированной архитектуры данных и согласованных источников: ERP/WMS, POS и промо-данных.
- Метрики типа on_hand, sold_qty, unused_stock, DOH и SR служат базисом для идентификации кандидатов на ревизию запасов, но требуют учёта сезонности и каналов продаж.
- Правильная инженерия пайплайна: от источников к хранилищу, через расчёты и представления, обеспечивает устойчивость и воспроизводимость анализа.
- Применение пороговых правил для оперативных тревог должно сопровождаться тестированием и мониторингом ложных срабатываний.
- Интеграции должны поддерживать как пакетную, так и потоковую обработку данных, с акцентом на качество данных и мониторинг.
- Простые SQL-запросы позволяют быстро выявлять кандидатов на ревизию запасов, но для масштабирования следует внедрять модульные модели и автоматизированные тревоги.
- Включение бизнес-подразделений в процесс интерпретации сигналов и действий повышает скорость реакции и качество принятых решений.
FAQ
Какие данные являются критически необходимыми для анализа наличия товара на складе, но не продажи?
Необходимо иметь актуальные данные о запасах (on_hand, reserved), продажи (quantity, sale_date, channel), характеристики товаров (item_id, category), а также данные по складам (warehouse_id, location). Цены и акции (price_at_sale, promo_type) помогают учитывать влияние промо на спрос. Источник данных должен поддерживать синхронизацию с минимальной задержкой и обладать корректной идентификацией товаров (item_id) и складів (warehouse_id).
Как правильно выбрать пороги для тревог?
Пороги следует устанавливать с учётом сезонности, категории товара, региональных особенностей и исторической динамики спроса. Начните с анализа исторических периодов и применяйте устойчивые квантильные пороги (например, нижние 20-25 percentile по SR в конкретной группе). Важно тестировать пороги на выработке ложных срабатываний и регулярно обновлять их по мере появления новых данных.
Какие архитектурные паттерны подходят для масштабирования?
Комбинация пакетной обработки и стриминга - оптимальный выбор: пакетная обработка для исторических анализов и стриминг для оперативного мониторинга. Используйте Kafka для передачи событий запасов и продаж в Spark/Flink для расчётов, хранение в ClickHouse или Snowflake, а визуализацию - через BI-инструменты. Для интеграции с ERP и 1C: Предприятие применяйте устойчивые коннекторы и механизмы синхронизации, чтобы поддерживать консистентность данных.
Какие методы аналитики подходят для выявления причин несоответствий между запасами и продажами?
Комбинация анализов по корреляциям между ценой, акциями и спросом, а также кластеризация по сегментам и регионам. В качестве следующего шага можно использовать модели детекции аномалий и ML-подходы для группировки товаров по аналогичным паттернам спроса и запасов. Важно сохранять транспарентность решений и давать бизнесу объяснения к выводам.
Как интегрировать процесс анализа в операционную деятельность?
Необходимо определить ответственных за анализ, каналы уведомлений и процесс реагирования на тревоги. В системе должны быть правки по действию: перераспределение запасов, корректировка цен, изменение промо-акций. Внедрите регулярные ревизии и ревизионные встречи, на которых рассматриваются кандидатные товары и принимаются решения.
Какие KPI наиболее релевантны для оценки эффективности анализа?
- Доля непродаваемого запаса по региону/каналу.
- Средний DOH по категориям.
- Улучшение Sell-Through Rate после проведённых действий.
- Время от обнаружения до принятия решения и реализации коррекции.
- Экономический эффект от перераспределения запасов и изменений в ценовой политике.
Какие типичные ошибки встречаются при реализации анализа наличия товаров без продаж?
Ошибки обычно связаны с несогласованностью источников данных, задержками в обновлениях запасов, некорректной агрегацией по временем и регионам, а также использованием неадекватных порогов, что ведёт к ложным тревогам и «усталости тревог» у бизнес-пользователей. Важно уделять внимание качеству данных, прозрачности расчётов и постепенной эволюции методик.
Какой вклад в бизнес-цели вносит анализ «непродаваемого запаса»?
Он снижает операционные издержки, улучшает оборачиваемость запасов, позволяет перераспределять товары между складами и регионами, а также обосновывает скорректированные промо-акции; в конечном счете - повышает маржинальность и удовлетворенность клиентов за счёт более точного соответствия ассортимента спросу.
Какие технологии можно применить в рамках российской и международной экосистемы?
В рамках открытого стека - PostgreSQL, ClickHouse, Apache Kafka, Apache Spark, Airflow, dbt. Для интеграции с ERP-решениями можно рассмотреть 1C: Предприятие как точку подключения к системе учёта запасов и продаж. В международной практике полезны Snowflake или BigQuery, а для стриминга - Kafka и Spark Streaming.
Какие действия следует предпринять после внедрения анализа?
- Постепенно расширять набор товаров и регионов, учитывая сезонность и ассортимент.
- Внедрять нормированную стратегию реагирования: перераспределение, переработка цен, промо.
- Регулярно пересматривать пороги и метрики на основе новых данных и результатов изменений.
- Обеспечить информированность бизнес-подразделений и обучить команду интерпретировать сигналы и принимать решения на основе данных.
Глава завершается тем, что детальная архитектура данных, продуманные пороги и устойчивые интеграционные пайплайны позволяют не только выявлять проблемы, но и оперативно реализовывать решения, обеспечивая эффективный товародвижение и устойчивую оборачиваемость запасов.



