Инженерный хаб

«Гадание на кофейной гуще vs BigQuery ML»: Как кофейне перестать выкидывать круассаны и предсказывать спрос

17.09.2026
Шарафутдинов Р.

Утро на Панфилова. Дождь зарядил с самого рассвета. Бариста обреченно смотрит на витрину, где лежат 40 свежайших, хрустящих круассанов. Он уже знает: сегодня купят максимум 15. Остальные 25 вечером полетят в мусорку (или будут розданы стажерам). А через два дня, когда выглянет солнце и терраса забьется гостями, круассаны закончатся к 11:30, и гости уйдут к конкурентам. Знакомая картина? В общепите это называют «гадать на кофейной гуще». Мы же называем это инженерным провалом, который лечится с помощью BigQuery ML.

В чём заключалась реальная инженерная и бизнес-проблема?

Малый бизнес в сфере Horeca (особенно кофейни и пекарни Алматы и Астаны) живет в условиях жесточайшей маржинальной диеты. Фудкост круассана — около 30-35%. Но если добавить сюда списания (Food Waste), реальная себестоимость проданной выпечки улетает в космос.

Владельцы пытаются балансировать на тонкой грани:

  • Перезаказ (Overstock): Приводит к списаниям. Списал 10 круассанов — уничтожил прибыль с 30 проданных.
  • Недозаказ (Stockout): Гость пришел за кофе и выпечкой, выпечки нет. Гость расстроен, средний чек падает, LTV (Lifetime Value) клиента стремится к нулю. Вы теряете не просто 1500 тенге за круассан, вы теряете утренний ритуал клиента.

Классический подход: менеджер или старший бариста открывает Excel (в лучшем случае) или блокнот (в худшем) и пишет заказ на завтра, опираясь на свое «шестое чувство». Но мозг человека плохо справляется с многомерными временными рядами. Он забывает, что в прошлый вторник был праздник, а в этот четверг обещают аномальный снегопад. Как результат — хаос в заказах.

Почему очевидное решение (Moving Average и Excel) не подошло?

Первая мысль инженера, которого попросили помочь: «Давайте просто возьмем скользящее среднее (Moving Average) за последние 7 дней». Мы так и сделали на первом этапе. И это с треском провалилось.

Почему простые эвристики не работают для ритейла и Horeca:

  • Ярко выраженная сезонность. Спрос внутри недели имеет паттерны (вторник — мертвый день, суббота — пик).
  • Праздники. Наурыз, 8 марта, длинные выходные ломают статистику. Простое среднее не знает, что завтра праздник.
  • Каннибализация. Если вы ввели в меню «Синнабон», продажи круассанов упадут.

Тащить сюда полноценный MLOps стек (Jupyter, Python, Scikit-learn, Airflow, Kubernetes для инференса) — это архитектурное самоубийство для малого бизнеса. Затраты на поддержку такого кластера (TCO) составят от $500 в месяц. Для одной кофейни с оборотом в 5-7 млн тенге — это нерентабельно.

Нам нужен был инструмент, который позволяет обучать модели машинного обучения прямо там, где лежат данные, используя только SQL, без необходимости поднимать инфраструктуру. И тут на сцену выходит BigQuery ML.

Архитектура решения: От кассы до предикта

Вместо сложных дата-пайплайнов мы построили элегантную и практически бесплатную Serverless архитектуру. Данные из кассовой системы (например, iiko или Poster) еженощно сливаются в BigQuery. Там же работает модель машинного обучения.

Архитектурная схема / Data Flow Pipeline (ASCII)
┌──────────────┐     ┌───────────────┐     ┌───────────────────┐     ┌──────────────────┐
│  POS (iiko)  │ ──> │   Cloud Run   │ ──> │     BigQuery      │ ──> │ BigQuery ML      │
│ Webhooks/API │     │ Data Ingestion│     │ Staging & Storage │     │ (ARIMA_PLUS)     │
└──────────────┘     └───────────────┘     └───────────────────┘     └──────────────────┘
                                                                              │
                                                                              ▼
                                                                   ┌──────────────────┐
                                                                   │   Telegram Bot   │
                                                                   │ (Утренний отчет) │
                                                                   └──────────────────┘

Рис 1. Бессерверный пайплайн предсказания спроса

В основе логики лежит ARIMA_PLUS — встроенный алгоритм в BigQuery ML, созданный специально для прогнозирования временных рядов (Time-Series Forecasting). В отличие от классического ARIMA, версия от Google автоматически обрабатывает аномалии, скачки, эффекты выходных дней и сезонность. Вам не нужно быть Data Scientist'ом, чтобы затюнить гиперпараметры — BQ ML делает это под капотом (AutoML).

Давайте посмотрим на код. Сначала мы собираем витрину данных (Data Mart), агрегируя продажи по дням. А затем — обучаем модель буквально одним SQL-запросом.

-- Создаем модель машинного обучения прямо в базе данных
CREATE OR REPLACE MODEL `ozatkz-project.coffee_shop.bakery_demand_model`
OPTIONS(
  model_type='ARIMA_PLUS',
  time_series_timestamp_col='sales_date',
  time_series_data_col='quantity_sold',
  time_series_id_col='product_id', -- Обучаем сразу для всех видов выпечки!
  data_frequency='DAILY',
  auto_arima=TRUE,
  holiday_region='KZ' -- Учитываем казахстанские праздники автоматически
) AS
SELECT
  DATE(transaction_timestamp) AS sales_date,
  product_id,
  SUM(quantity) AS quantity_sold
FROM
  `ozatkz-project.coffee_shop.pos_transactions`
WHERE
  category = 'Bakery'
  AND transaction_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 365 DAY)
GROUP BY
  sales_date, product_id;

Смотреть код на GitHub (OZAT-kz)

Обратите внимание на параметр holiday_region='KZ'. Google Cloud сам знает, когда у нас Наурыз или День Независимости, и корректирует прогноз с учетом выходных! Модель обучается параллельно для десятков SKU (и круассаны, и маффины) благодаря time_series_id_col.

Теперь, когда модель обучена (мы настроили Scheduled Query запускать это обучение раз в неделю ночью), нам нужно получить прогноз на завтрашний день для отправки шеф-бариста:

-- Получаем прогноз на следующие 3 дня
SELECT
  product_id,
  CAST(forecast_timestamp AS DATE) AS target_date,
  ROUND(forecast_value) AS predicted_quantity,
  ROUND(prediction_interval_lower_bound) AS min_expected,
  ROUND(prediction_interval_upper_bound) AS max_expected
FROM
  ML.FORECAST(
    MODEL `ozatkz-project.coffee_shop.bakery_demand_model`,
    STRUCT(3 AS horizon, 0.9 AS confidence_level)
  )
WHERE
  CAST(forecast_timestamp AS DATE) = DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY);

Смотреть код на GitHub (OZAT-kz)

В результате менеджер получает в Telegram сообщение: «На завтра закажи 24 миндальных круассана. Ожидаемый диапазон продаж (с вероятностью 90%): от 21 до 28 штук». Это уже не интуиция, это Data-Driven управление бизнесом.

Что реально измерили: Метрики и FinOps

После месяца работы в production-режиме, мы сняли метрики. Результаты превзошли ожидания:

  • Снижение списаний (Food Waste): Упали на 74%. Если раньше кофейня списывала выпечки на 180 000 ₸ в месяц, то сейчас эта сумма сократилась до 45 000 ₸.
  • Упущенная выручка (Out-of-Stock): Уровень доступности товара (Availability) вырос с 82% до 96%. Мы перестали терять утренних гостей.

Ежемесячные финансовые потери от выпечки (тыс. ₸)

А теперь самое сладкое — FinOps (Стоимость владения). Сколько стоит внедрить ИИ в кофейню?

Поскольку BigQuery тарифицируется за обработанные байты, а данных у кофейни за год набирается от силы на 50 Мегабайт, обучение модели ARIMA_PLUS попадает в ежемесячный Free Tier (1 Терабайт запросов бесплатно).

Итоговые затраты на облачную инфраструктуру (Cloud Run для вебхуков + BigQuery) составили $0.00 в месяц. Мы сэкономили бизнесу больше миллиона тенге в год, не потратив ни цента на серверы. Вот почему мы в OZAT так любим Serverless!

Реальные ограничения и компромиссы

  • Проблема холодного старта: Если вы вводите новый десерт (например, меренговый рулет), модель не сможет его предсказывать первые 2-3 недели. Нужно время для накопления паттернов.
  • Внешний маркетинг: Модель не знает, что вы запустили таргет в Instagram или позвали блогера. В дни агрессивного промо-трафика прогноз будет занижен.
  • Чувствительность к чистоте данных: Если бариста забывал пробивать списания или пробивал «Слойка с вишней» как «Круассан», модель выучит этот мусор и выдаст неверный прогноз (Garbage In - Garbage Out). Требуется строгая кассовая дисциплина.

Внедрение предиктивной аналитики больше не удел корпораций с R&D-отделами. Сегодня любой Instagram-селлер, локальная кофейня или СТО может использовать инструменты уровня Enterprise за смешные (или нулевые) деньги, если правильно собрать архитектуру. Умение находить такие точки рычага — это то, чему мы учим в нашей Академии Скаутов.

Вам не нужен data-центр, чтобы перестать выкидывать деньги в мусор. Вам нужен грамотный SQL и немного здравого инженерного смысла.

💡 Совет OZAT: Готовы к внедрению? Рассчитайте архитектуру и бюджет через Scope Builder или пройдите бесплатный ИИ-аудит.

Рустам Шарафутдинов

Рустам Шарафутдинов

Автор Инженерного хаба

Эксперт в области архитектуры Google Cloud и Senior Full-Stack разработчик с более чем 15-летним опытом. Специализируется на отказоустойчивых архитектурах, оптимизации высоконагруженных проектов и интеграции AI (Vertex AI).

Экспертность: GCP, Kubernetes, Микросервисы, React, Node.js

Комментарии (0)