Инженерный блог

«Хрустальный шар» для маркетинга: Как предсказать отток клиентов фитнес-сети в Астане с помощью GA4 и Vertex AI

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

Представьте: вы — владелец премиальной фитнес-сети в Астане. У вас красивые залы, новые беговые дорожки Technogym и кулеры с водой, в которой плавает лимончик. Вы льете трафик, люди покупают абонементы, но через три месяца... исчезают. Как песок сквозь пальцы. Маркетологи жгут бюджеты на ретаргетинг в стиле «Вернись, мы все простим!», рассылают пуши всем подряд, но конверсия стремится к нулю.

Знакомая боль? Вот и к нам пришел клиент с точно такой же проблемой. LTV (Lifetime Value) падал, стоимость привлечения (CAC) росла. Они пытались угадывать отток (Churn) «на глаз»: если человек не ходил месяц — значит, отвалился. Гениально, но слишком поздно. Это как лечить перелом подорожником после того, как кость уже срослась криво. Нам нужен был «хрустальный шар» — система, которая скажет: «Эй, этот парень с вероятностью 85% не продлит абонемент на следующей неделе, сделай что-нибудь прямо сейчас!»

И мы собрали такой шар. Без магии, смс и регистрации. Только суровый инжиниринг: Google Analytics 4, BigQuery и Vertex AI. В этой статье я расскажу (с примерами кода и инженерным юмором), как мы натравили машинное обучение на сырые логи юзеров и снизили отток на 15% за два месяца.

Анатомия оттока, или Почему GA4 из коробки тут бессилен

Стандартные отчеты GA4 классные, если вам нужно узнать, сколько людей кликнуло на синюю кнопку. Но они абсолютно бесполезны для предиктивной аналитики. Чтобы предсказывать будущее, вам нужны сырые данные в формате временных рядов (time series) по каждому конкретному user_id.

Что мы имели на старте? У клиента было мобильное приложение для записи на тренировки. Пользователи чекинились по QR-коду (эти ивенты летели в GA4). Мы настроили ежедневный экспорт сырых событий из GA4 в BigQuery. И вот тут начался настоящий data engineering.

Мы сели смотреть на датасет. В логах были сотни фичей (признаков), но алгоритму нельзя просто скормить json'ы и сказать «предсказывай». Ему нужен плоский, как шутки джуна, датасет (Flattened Table). И тут в игру вступает SQL.

Feature Engineering: Как мы собирали "досье" на юзеров

Что влияет на то, продлит ли человек абонемент? Не цвет его кроссовок, а поведенческие паттерны. Мы сформировали гипотезы и с помощью SQL-магии в BigQuery собрали следующие признаки (features) для каждого юзера за последние 30 дней:

  • workouts_count_30d: количество посещений за месяц.
  • avg_days_between_workouts: среднее время между тренировками (если раньше ходил через день, а теперь раз в неделю — это красный флаг).
  • cancellations_count: количество отмененных записей на групповые занятия.
  • app_opens_7d: сколько раз открывал приложение за последнюю неделю (снижение активности в апке — первый симптом).
  • weekend_warrior_flag: ходит только по выходным (1) или нет (0).
-- Пример SQL-запроса для сборки фичей в BigQuery (упрощенно)
WITH user_activity AS (
  SELECT
    user_id,
    COUNTIF(event_name = 'gym_checkin') AS workouts_count_30d,
    COUNTIF(event_name = 'class_cancelled') AS cancellations_count,
    MAX(event_timestamp) AS last_active_ts
  FROM
    `project.analytics_123456789.events_*`
  WHERE
    _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)) 
    AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
    AND user_id IS NOT NULL
  GROUP BY
    user_id
)
SELECT * FROM user_activity;

Vertex AI: Натравливаем AutoML на наши данные

Когда таблица с фичами была готова (и мы добавили туда таргетную переменную is_churned — ушел человек в итоге или нет на исторических данных), мы решили не изобретать велосипед (то есть не писать кастомные модели на TensorFlow с нуля). Для бизнеса важен time-to-market, а не эго дата-саентиста. Поэтому мы использовали Vertex AI AutoML Tabular.

AutoML — это как умная мультиварка для ML-инженеров. Закинул данные, выбрал колонку-таргет (что предсказывать), нажал "Train" и пошел пить кофе. Под капотом Vertex AI сам перебрал десятки архитектур (XGBoost, нейронки, логистические регрессии), настроил гиперпараметры и выдал нам лучшую модель.

И знаете, что оказалось самым важным фактором оттока (Feature Importance)? Не количество тренировок! А резкое изменение дисперсии (разброса) между тренировками. То есть, если человек стабильно ходил по понедельникам и средам, а потом вдруг начал ходить в случайные дни и реже — он «остывает».

Снижение уровня оттока (Churn Rate) после внедрения ML

Динамика оттока до и после использования Vertex AI.

Деплой и Оркестрация: Делаем магию ежедневной

Модель обучена, она выдает точность (AUC-PR) на уровне 0.85 — это отличный результат. Но модель в вакууме денег не приносит. Ее нужно внедрить в прод (Production).

Мы развернули Batch Prediction Pipeline. Каждую ночь Cloud Scheduler пинает Cloud Functions. Функция запускает SQL-скрипт в BigQuery, который собирает свежие фичи за прошедший день. Затем данные отправляются в наш эндпоинт Vertex AI на предсказание. На выходе мы получаем таблицу со списком user_id и вероятностью оттока (от 0.0 до 1.0).

# Псевдокод пайплайна на Python (Cloud Functions)
from google.cloud import aiplatform, bigquery

def trigger_churn_prediction(event, context):
    # 1. Запускаем сборку свежих фичей в BQ
    bq_client = bigquery.Client()
    bq_client.query("CALL `project.dataset.update_user_features`()").result()
    
    # 2. Пинаем Vertex AI для Batch Prediction
    aiplatform.init(project='my-project', location='europe-west4')
    model = aiplatform.Model('projects/my-project/locations/europe-west4/models/123456')
    
    batch_job = model.batch_predict(
        job_display_name='daily_churn_prediction',
        bigquery_source='bq://my-project.dataset.latest_features',
        bigquery_destination_prefix='bq://my-project.dataset',
        sync=False
    )
    print("Пайплайн запущен, идем спать.")

От инсайтов к экшену: Как мы заставили маркетинг работать

Теперь самое сладкое. Утром маркетинговая платформа (CRM) клиента автоматически забирала из BigQuery список пользователей, чья вероятность оттока превышала 0.7 (70%). И тут начиналась персонализированная магия, а не спам.

  • «Потеряшки» с вероятностью 70-85%: Им улетал Push с предложением бесплатного массажа или персональной тренировки (чтобы вернуть привычку ходить в зал).
  • Критические (85-99%): Таким клиентам звонил живой менеджер (Premium поддержка) с вопросом: «Все ли вам нравится? Может, заморозим карту на время отпуска?». Никаких скидок в лоб, только забота.
  • Те, кто точно останется (вероятность < 20%): Их вообще не трогали скидками! Зачем давать скидку лояльному клиенту? Им предлагали купить мерч или абонемент для друга (Upsell/Cross-sell).

Эффективность удержания (Retention) по сегментам

Конверсия в продление абонемента для разных групп риска после таргетированных кампаний.

Инсайты и Инженерные Советы (Tips & Tricks)

  • Garbage In, Garbage Out (GIGO): Если у вас криво настроен GA4 (события дублируются, user_id теряется при перезапуске апки), никакой AI вас не спасет. Сначала почините трекинг, потом внедряйте ML.
  • Утечка данных из будущего (Data Leakage): Самая частая ошибка ML-джунов. Убедитесь, что при обучении модели вы не используете фичи из "будущего" (например, флаг того, что юзер нажал кнопку "отменить подписку"). Иначе модель покажет 99% точности, а в проде не угадает ничего.
  • Стоимость инференса: Не делайте предсказания в реальном времени (Online Prediction), если вам это не нужно. В нашем случае достаточно обновлять прогнозы раз в сутки (Batch Prediction) ночью. Это стоит сущие копейки.

Итоги: Профит без заклинаний

За два месяца использования нашего «хрустального шара» фитнес-сеть снизила Churn Rate (показатель оттока) на 15%. Но самое главное — они сэкономили кучу денег на промокодах, перестав раздавать их всем подряд. Конверсия из «уходящего» в «оставшегося» выросла втрое.

Этот кейс доказывает: машинное обучение сегодня — это не удел гигантских корпораций с бюджетами как у NASA. Благодаря связке GA4 + BigQuery + Vertex AI, предиктивная аналитика стала доступна обычному локальному бизнесу. Главное — правильно приготовить данные и не бояться немного испачкать руки в SQL.

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

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

Автор инженерного блога

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

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

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