Платформа аналитики и прогнозирования продаж для FMCG-производителей

  • React
  • Apache ECharts
  • ClickHouse
  • PostgreSQL
  • Cube
  • Docker

Контекст

Три года мы работали с компанией «Ярмарка» – производителем каш, супов и готовых блюд, общий ассортимент 350+ SKU.

Строили систему аналитики продаж – связку трёх уровней: первичные продажи – отгрузки по прямым контрактам и дистрибьюторам, вторичные – отгрузки дистрибьюторов в розницу, третичные – продажи с полки покупателю. Рядом сервисы бюджетирования и прогнозирования.

За это время стало видно общее: FMCG-производители обладают широким набором данных по продажам, но их использование – это хаос из десятков Excel-файлов. К моменту, когда цифры сведены, решение чаще всего уже принято – без них.

Идея

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

Фокус – компании с выручкой 1–6 млрд рублей в год. У таких компаний, как правило, нет хранилища данных и единой системы аналитики – всем правит Excel.

  • Федеральные и локальные сети

    Пятёрочка, Магнит, Лента и другие

  • Региональные дистрибьюторы

  • Маркетплейсы

    Wildberries, Ozon, Яндекс Маркет, Мегамаркет

  • Онлайн-магазины

    Самокат, Лавка и другие сервисы доставки

  • B2B

    Производства, которые покупают продукцию как сырьё

Структура платформы

Платформа построена по принципу – от общей картины к конкретному действию

Аналитика

Прогнозирование

Обзор

Группа дашбордов для ежедневного контроля продаж: компания в целом и каждый канал. План-факт, прогноз закрытия периода, продажи с полки (sell-out), дебиторская задолженность, динамика новинок, алерты.

Объекты управления

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

Алерты

Система сама находит проблемы: товара нет на полке (OOS), затоваривание, падение продаж с полки, отставание от плана. Утренняя сводка и уведомления о срочных событиях.

Self-service

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

Форкастирование

Базовый прогноз объёма продаж и отгрузок в сеть (sell-in) на 1–12 месяцев вперёд: модели машинного обучения учитывают план торгового маркетинга и заданные предпосылки. Прогноз утверждает и правит менеджер.

Бюджетирование

Планирование коммерческого P&L – отчёта о прибылях и убытках – по каналам, клиентам и SKU. Сценарное моделирование: что будет, если изменить состав продуктов, состав клиентов, набор промоакций, цены реализации, себестоимость единицы.

Марк

AI-аналитик, который понимает контекст и не галлюцинирует

В отличие от внешних AI-ассистентов, Марк работает со структурированным аналитическим слоем данных. Поэтому он не галлюцинирует и может отвечать на вопросы, соединяющие метрики разных уровней – от sell-in до sell-out – в единую картину. Чем больше источников данных подключено к системе, тем сильнее Марк.

Марк не привязан к конкретному дашборду или экрану сервиса: прямо в чате он открывает нужные дашборды, выставляет фильтры и ведёт диалог по всем данным компании – от вопроса к вопросу в одном окне.

Марк – AI-аналитикДанные, метрики и выводы – в одном диалоге

Как выглядит система

Примеры четырёх экранов платформы – Монитор, Клиенты 360, Алерты и Self-service.

Ключевые метрики отдела продаж на одном экране: план-факт, алерты, динамики новинок, заказы и уровень сервиса и т.д.

Монитор

Показателибез НДСс НДСМарт 2026vsМарт 2025
КатегорияБрендЛинейкаSKUМенеджер+1 ещё+2 ещё
Сбросить
26% периода (8/31 дн.)Актуальность данных:Sell-in: 30.03.2026Sell-through: 30.03.2026Sell-out: 16.03.2026, лаг – 14 днейПокрытие sell-in: 80%
Выручка (sell-in)
1 064М ₽/ 1 270М ₽
+4,5%
Объём продаж
3М ед./ 2М ед.
+5,8%
Коммерческая прибыль
548М ₽/ 640М ₽54,5% / 56,0%
+3,2%
Дебиторская задолженность
170М ₽
−3,2%
25% просрочено
SI/SO
1,35x
−1,5%
Активные ТТ
2 375ед.
+3,2%
Off-take/SKU
18,5ед./ТТ
+6,2%
Управленческий P&L
Учитывать заказыДаНетПоказывать рентаб.ДаНет
ПоказательПрошл.ПланФактΔ пр.Δ %Δ план.% вып.
Объём продаж2,76М ед.2,30М ед.2,76М ед. ед.0,0%+460к ед.120,0%
Выручка до промо980М ₽1 120М ₽1 064М ₽+84М ₽+8,6%−56М ₽95,0%
Промо и EDLP42М ₽48М ₽46М ₽+4М ₽+8,6%−2М ₽95,0%
Выручка938М ₽1 072М ₽1 018М ₽+80М ₽+8,6%−54М ₽95,0%
Торговые расходы84М ₽92М ₽88М ₽+4М ₽+5,0%−4М ₽95,9%
Net выручка854М ₽980М ₽930М ₽+76М ₽+8,9%−50М ₽94,9%
Себестоимость520М ₽580М ₽554М ₽+34М ₽+6,5%−26М ₽95,5%
Валовая прибыль334М ₽400М ₽376М ₽+42М ₽+12,6%−24М ₽94,0%
Коммерческая прибыль245М ₽310М ₽290М ₽+45М ₽+18,4%−20М ₽93,5%
Детализация по выручке
ПоказательПрошл.ПланФактΔ пр.Δ %Δ план.% вып.
Сети580М ₽700М ₽664М ₽+84М ₽+14,5%−36М ₽94,9%
Дистрибьюторы280М ₽340М ₽318М ₽+38М ₽+13,6%−22М ₽93,5%
Ecom128М ₽182М ₽163М ₽+35М ₽+27,3%−19М ₽89,6%
Прочие30М ₽32М ₽35М ₽+5М ₽+16,7%+3М ₽109,4%
Итого1 018М ₽1 254М ₽1 180М ₽+162М ₽+15,9%−74М ₽94,1%
Заказы и уровень сервиса
ЗаказыСервис
Получено132М ₽
Выполнено29,0М ₽
Отменено5,3М ₽
В пути23,8М ₽
В работеВ путиВыполненоОтменено
Заказ(10)Сумма
«ОптТорг» · #4850 · 18 SKUОтгружен · без нарушений4,5М ₽
ТД «Мегаполис» · #4855 · 9 SKUОтгружен · с нарушениями3,8М ₽
ТД «Градиент» · #4840 · 15 SKUНа исполнении3,2М ₽
ТД «Мегаполис» · #4821 · 12 SKUОтгружен · с нарушениями2,4М ₽
ТД «Градиент» · #4852 · 10 SKUВ пути2,1М ₽
«Уральский дом» · #4843 · 6 SKUОтгружен · с нарушениями1,8М ₽
«Континент» · #4858 · 7 SKUНа исполнении1,5М ₽
«Сибирский альянс» · #4835 · 8 SKUВ пути · без нарушений1,1М ₽
«Восток-Сервис» · #4860 · 5 SKUОтгружен · без нарушений0,9М ₽
«Регион-Трейд» · #4847 · 4 SKUГотов к отгрузке0,7М ₽
Промо
АктивныеВсе
Объём
20,5М
Скидка
25,0%
Ср. период
14дн.
ТМА(8)ОбъёмT %SO
ТД «Мегаполис» · Красное&БелоеСкидка25,0%Отгр. 12–26 мар · Промо 15–28 марТМА-1204 · 12 SKU4,2М ₽85%78%
ТД «Градиент» · МонеткаСкидка20,0%Отгр. 08–21 мар · Промо 10–23 марТМА-1198 · 8 SKU3,8М ₽100%82%
«Регион-Трейд»Скидка25,0%Отгр. 10–23 мар · Промо 12–25 марТМА-1201 · 7 SKU3,4М ₽92%68%
«Сибирский альянс» · Мария-РаСкидка15,0%Отгр. 20 мар–2 апр · Промо 22 мар–4 апрТМА-1218 · 6 SKU2,8М ₽38%70%
ТД «Мегаполис» · Светофор1+150,0%Отгр. 16–29 мар · Промо 18–31 марТМА-1210 · 5 SKU2,1М ₽69%55%
ТД «Мегаполис» · БристольЖёлтый ценник20,0%Отгр. 27 фев–12 мар · Промо 01–14 марТМА-1185 · 10 SKU1,9М ₽100%42%
«Уральский дом»планСкидка30,0%Отгр. 18–31 мар · Промо 20 мар–2 апрТМА-1215 · 3 SKU1,5М ₽46%
«Континент» · МетроСкидка20,0%Отгр. 16–29 мар · Промо 18–31 марТМА-1212 · 4 SKU0,8М ₽69%28%
Дебиторская задолженность
ДистрибьюторСуммаΔ прошл.1–15 дн.15–30 дн.30–40 дн.>40 дн.
ТД «Мегаполис»48М ₽↓ 5%14М ₽16М ₽11М ₽7М ₽
ТД «Градиент»38М ₽↑ 4%11М ₽12М ₽9М ₽6М ₽
«Сибирский альянс»30М ₽↓ 10%9М ₽10М ₽7М ₽4М ₽
«Уральский дом»22М ₽↑ 6%6М ₽7М ₽5М ₽4М ₽
«Регион-Трейд»16М ₽↓ 3%5М ₽5М ₽4М ₽2М ₽
«ОптТорг»12М ₽↑ 2%4М ₽4М ₽3М ₽1М ₽
«Континент»9М ₽↓ 1%3М ₽3М ₽2М ₽1М ₽
«Восток-Сервис»6М ₽↑ 8%2М ₽2М ₽1М ₽1М ₽
KZ «Алма-Трейд»5М ₽↓ 2%2М ₽1М ₽1М ₽1М ₽
BY «БелДистр»4М ₽↑ 1%1М ₽1М ₽1М ₽1М ₽
Итого190М ₽↑ 0%57М ₽61М ₽44М ₽28М ₽
Активные алерты
Критический5
Предупреждения5
Информационный4
АлертГруппаПосл.
Падение sell-out WBCoolJet Cola 1.5л · −22% WoW, без промоМаркетплейсы12.05
SO = 0 в сетиAqua Plus 0.5л б/газ · ТД «Градиент» · 5 днейДистрибьюторы12.05
Маржинальность ниже планаЭнергетики · −6,1% к плану MTDФинансовые12.05
Рост возвратов по дистрибьютору«ОптТорг» · +2,3σ за 14 днейДистрибьюторы11.05
Падение sell-out WBTea Time Лимон 0.5л · −18% WoWМаркетплейсы11.05
Падение SO в сетиBoost! Energy Tropic 0.5л · ТД «Мегаполис» · −34%Дистрибьюторы12.05
Рост возвратов по дистрибьютору«Регион-Трейд» · +1,8σ за 14 днейДистрибьюторы11.05
OOS в дарксторахТоп-50 SKU · доступность 78%Офлайн / DS11.05
Падение sell-out OzonEco Green Sparkling 0.5л · −15% WoWМаркетплейсы11.05
SKU без движения 14 днейVita Sun Апельсин 0.5л · «Континент»Офлайн / DS10.05
Остатки на РЦ выше нормыЛимонады · оборот 47 днейДистрибьюторы12.05
Аномальный всплеск заказов OzonVita Sun Гранат 0.5л · +3,1σ за 30 днейМаркетплейсы10.05
SKU без движения 14 днейTea Time Персик 1л · «Восток-Сервис»Офлайн / DS09.05
Аномальный всплеск заказов OzonBoost! Energy 0.5л · +2,7σ за 30 днейМаркетплейсы08.05
Новинки
Кол-во
10SKU
Off-take
↑ 5↓ 5
Ср. off-take
15,2ед./ТТ
+15,5%
DP
8 420ед.
+500 ед.
SKUDPOff-take
CoolJet Cola Zero 0.5л82 дн. · 3 дистрибьютора1 240ед.+500 ед.18,5ед./ТТ+12,3%
Vita Sun Мульти 0.5л65 дн. · 4 дистрибьютора1 850ед.+320 ед.22,1ед./ТТ+8,7%
Aqua Plus Mint 0.5л56 дн. · 3 дистрибьютора1 420ед.+210 ед.16,8ед./ТТ+6,2%
Eco Green Lime 0.5л52 дн. · 2 дистрибьютора1 180ед.+180 ед.14,2ед./ТТ+4,8%
Крем для рук Silk 75мл45 дн. · 2 дистрибьютора620ед.−40 ед.8,4ед./ТТ−2,1%
Vita Sun Гранат 0.5л38 дн. · 4 дистрибьютора1 640ед.+420 ед.19,4ед./ТТ+9,6%
Boost! Energy Sport 0.5л34 дн. · 3 дистрибьютора1 380ед.+290 ед.17,2ед./ТТ+7,4%
Boost! Energy Zero 0.5л30 дн. · 5 дистрибьюторов2 100ед.+870 ед.28,3ед./ТТ+15,5%
CoolJet Лайм 0.5л28 дн. · 3 дистрибьютора980ед.+310 ед.12,6ед./ТТ+5,8%
Vita Sun Виноград 0.5л24 дн. · 2 дистрибьютора740ед.+95 ед.9,8ед./ТТ+2,4%
Tea Time Холодный лимон 0.5л20 дн. · 2 дистрибьютора480ед.−15 ед.5,2ед./ТТ−0,8%
Aqua Plus 1.5л (б/газ)16 дн. · 4 дистрибьютора1 820ед.+540 ед.21,6ед./ТТ+11,4%
Tea Time Имбирь 0.5л12 дн. · 2 дистрибьютора540ед.+110 ед.7,4ед./ТТ+2,8%
Eco Green Premium 0.5л9 дн. · 3 дистрибьютора860ед.+230 ед.11,2ед./ТТ+4,6%
Операционные метрики ритейл и дарксторы
Sell-in / Sell-outВыручкаОбъёмПоказывать измененияДаНет
Тип ТТSell-inSell-outSI/SOАктив. ТТГлубинаOff-take/SKUСр. цена
Магазины у дома380М ₽280М ₽1,361 250ед.9,2ед./ТТ28ед./ТТ398 ₽
Супермаркеты290М ₽220М ₽1,32420ед.8,7ед./ТТ22ед./ТТ412 ₽
Гипермаркеты180М ₽142М ₽1,2785ед.7,8ед./ТТ18ед./ТТ445 ₽
Специалисты68М ₽50М ₽1,36190ед.8,1ед./ТТ15ед./ТТ362 ₽
Дарксторы52М ₽45М ₽1,1665ед.5,4ед./ТТ10ед./ТТ385 ₽
Традиц. розница45М ₽35М ₽1,29320ед.6,8ед./ТТ14ед./ТТ348 ₽
Мини-маркеты35М ₽24М ₽1,46210ед.7,5ед./ТТ16ед./ТТ356 ₽
Итого1 050М ₽796М ₽1,322 540ед.7,6ед./ТТ18ед./ТТ387 ₽
Голос покупателя
CCI
25,2
+3,1%
Средний рейтинг
4,5
+0,2%
Отзывов
1 248шт.
+12,5%
Структура оценок за период
5★58%4★24%3★9%2★5%1★4%
ЛидерАутсайдер
CCIИзм
CoolJet Cola Zero 0.5л62,8+8,4%
Tea Time Лимон 0.5л54,1+5,2%
Boost! Energy Tropic 0.5л48,3+3,1%

Фундамент системы

Chain превращает разрозненные данные в единую систему аналитики и прогнозирования продаж, которая выявляет проблемы в момент их возникновения

Пользователи

  • Аналитические дашбордыобзор и объекты управления
  • Система алертовнаходит проблемы без запроса
  • Прогноз и бюджетпрогноз продаж и бюджет до уровня коммерческой прибыли
  • Self-serviceлюбой срез без запроса к аналитику
  • AI-аналитикМарк: вопрос и разбор в одном диалоге

Семантический слой

Метрики и измерения на языке бизнеса: выручка, маржа, канал, категория. Дашборды и модели обращаются сюда, а не к таблицам источников, – поэтому определение метрики одно на всех.

Core слой

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

Staging слой

Сырые данные как есть из источников, без правок. Нужен, чтобы перезапустить расчёт и увидеть, что именно прислала система, когда цифры разошлись.

Источники данных

  • Учётная система
  • CRMсделки и клиенты
  • Третичные продажиЧестный знак и прочие источники
  • Вторичные продажиCISLINK и аналоги
  • Продажи на маркетплейсахWB, Ozon, Яндекс Маркет, Мегамаркет
  • МерчандайзингОптимум и аналоги
  • Сайты-отзовикиОтзовик, irecommend и прочие
  • Мониторинг ассортимента и цен в торговых точкахMetacommerce
  • Мониторинг цен в интернет-магазинахPriceva и аналоги
  • Прочие источники

В результате

Продажи всех каналов сведены в одну систему: разбор начинается с чтения цифр, а не с их сбора, и решение принимается, пока оно ещё что-то меняет.

  • 01

    Одна версия правды

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

  • 02

    Проблему находит система

    Пороги задаёт пользователь, а следит за ними платформа и присылает уведомление, когда метрика вышла за границы. Отклонение больше не зависит от того, открыл ли кто-то нужный экран.

  • 03

    План и факт из одного места

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

  • 04

    Ответ без очереди к аналитику

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