«Гадание на кофейной гуще vs BigQuery ML»: Как кофейне перестать выкидывать круассаны и предсказывать спрос
Утро на Панфилова. Дождь зарядил с самого рассвета. Бариста обреченно смотрит на витрину, где лежат 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.
Дашборд за 500 тысяч тенге: Как Скауту собрать сквозную аналитику для селлера, используя Looker Studio и Cloud Functions
Архитектура решения: От кассы до предикта
Вместо сложных дата-пайплайнов мы построили элегантную и практически бесплатную Serverless архитектуру. Данные из кассовой системы (например, iiko или Poster) еженощно сливаются в BigQuery. Там же работает модель машинного обучения.
┌──────────────┐ ┌───────────────┐ ┌───────────────────┐ ┌──────────────────┐
│ 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).