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

Скоринг лидов из Google Ads для застройщиков Астаны: Отсеиваем фрод в реальном времени через Vertex AI и BigQuery

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

Боль застройщиков: Когда лиды есть, а продаж нет

Рынок недвижимости Астаны — это настоящая мясорубка. Конкуренция зашкаливает, цена клика в Google Ads по запросам типа «купить квартиру левый берег» улетает в космос, а бюджеты на маркетинг измеряются десятками миллионов тенге. Вы настраиваете Performance Max кампании, лиды сыплются рекой, маркетологи открывают шампанское. Но через неделю приходит РОП (руководитель отдела продаж) и с суровым лицом заявляет: «Ваши лиды — мусор!».

Почему так происходит? Колл-центр обзванивает сотни заявок в день и сталкивается с суровой реальностью:

  • «Я просто смотрел» — зеваки, которые кликнули по красивой картинке ЖК.
  • Школьники и фейки — номера типа +7 777 777 77 77 или заявки от «Бэтмена».
  • Боты и скликивание (фрод) — конкуренты не дремлют, а алгоритмы Google иногда подкидывают откровенный треш в попытках найти дешевые конверсии.
  • Нецелевые — ищут студию за 15 млн, а оставили заявку на 4-комнатную бизнес-класса за 80 млн.

В итоге дорогие менеджеры по продажам тратят 70% времени на прозвон шлака. Конверсия из лида в показ падает, мотивация отдела продаж стремится к нулю, а маркетинг получает по шапке. Знакомая картина?

Именно с такой проблемой к нам пришел один из топовых застройщиков Астаны. Задача стояла амбициозная: нужно было научиться фильтровать этот поток в режиме реального времени, чтобы колл-центр звонил только «горячим» и платежеспособным клиентам, а «мусор» отправлялся в долгую SMS-воронку или вовсе отбраковывался. И мы решили расчехлить тяжелую артиллерию — BigQuery и Vertex AI.

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

Мы не стали изобретать велосипед с кастомными ML-серверами на Python. Нам нужен был Enterprise-уровень: масштабируемый, надежный и легко поддерживаемый пайплайн. Архитектура Google Cloud подошла идеально.

Как это работает (High-level):

  1. Сбор сырых кликстримов (GA4 + BigQuery): Мы связали Google Analytics 4 (GA4) с BigQuery. Каждый чих пользователя (клик, скролл, время на сайте, utm-метки) улетает в хранилище в реальном времени (Streaming Export).
  2. Обогащение данных (CRM): Из CRM-системы (amoCRM) в тот же BigQuery регулярно выгружаются исторические данные: какие номера телефонов или Client ID в итоге купили квартиру, какие ушли в отказ и по какой причине.
  3. Feature Engineering (dbt): Мы используем dbt (Data Build Tool), чтобы трансформировать сырые логи в аккуратные витрины данных — фичи для нашей модели.
  4. Обучение модели (Vertex AI): Мы скормили эти фичи в Vertex AI AutoML Tables. Модель сама подобрала алгоритмы (XGBoost, нейронки) и научилась предсказывать вероятность покупки (от 0 до 1).
  5. Real-time Inference (Cloud Functions): Когда падает свежий лид, срабатывает вебхук. Cloud Function моментально лезет в BigQuery за свежими фичами юзера, кидает запрос в API Vertex AI, получает скоринг-балл и пишет его в карточку сделки в CRM.

Этап 1: Готовим датасет и собираем фичи (Feature Engineering)

Машинное обучение — это на 80% работа с данными и на 20% математика. Если засунуть в модель мусор, на выходе тоже будет мусор (Garbage In, Garbage Out). Поэтому мы сфокусировались на правильных фичах.

Что мы анализировали по каждому пользователю (Client ID):

  • Поведенческие: Глубина просмотра, время на страницах планировок (если юзер завис на планировке 4-комнатной — это сильный сигнал), взаимодействие с ипотечным калькулятором (вводил ли первоначальный взнос?).
  • Технические: Тип устройства (iPhone 15 Pro Max или старенький Android из 2018 года?), браузер, разрешение экрана.
  • Источниковые: UTM-метки, ключевое слово, рекламная кампания.
  • Время: Время суток (лиды в 3 часа ночи часто оказываются неадекватными) и день недели.

Всю эту красоту мы собирали SQL-запросами в BigQuery. Например, расчет времени на сайте:

-- dbt модель для агрегации фичей пользователя
SELECT 
  user_pseudo_id AS client_id,
  COUNT(event_name) AS total_events,
  SUM(CASE WHEN event_name = \'view_item\' THEN 1 ELSE 0 END) AS layout_views,
  SUM(CASE WHEN event_name = \'calculator_use\' THEN 1 ELSE 0 END) AS calculator_uses,
  TIMESTAMP_DIFF(MAX(event_timestamp), MIN(event_timestamp), SECOND) AS session_duration_seconds,
  device.category AS device_category,
  device.mobile_brand_name AS phone_brand
FROM 
  `project.analytics_123456789.events_*`
GROUP BY 
  client_id,
  device_category,
  phone_brand

Этап 2: Скармливаем данные в Vertex AI AutoML

Дальше начинается магия Google Cloud. Нам не нужно было писать сотни строк кода на TensorFlow или scikit-learn. Мы использовали Vertex AI AutoML Tables — инструмент, который автоматизирует процесс обучения.

Мы указали BigQuery-таблицу в качестве источника. Целевой переменной (Target) стал столбец is_success_deal (1 — купил, 0 — мусор). AutoML сам прогнал данные через десятки архитектур (Gradient Boosting, Neural Nets), сделал кросс-валидацию, настроил гиперпараметры и выдал нам лучшую модель.

Интересные инсайты от модели, которые мы выявили на этапе Feature Importance (важность признаков):

  • Ипотечный калькулятор: Люди, которые двигали ползунки в калькуляторе более 3 раз, имели вероятность конверсии в 4 раза выше.
  • Тип устройства: Пользователи с последними моделями iPhone конвертировались в премиум-сегмент в 2.5 раза чаще (кто бы сомневался).
  • Время до заявки: Если человек провел на сайте меньше 10 секунд и оставил заявку — это почти со 100% вероятностью фрод или бот.

Этап 3: Замыкаем цикл с Cloud Functions

Модель обучена и задеплоена в Endpoint (API). Теперь нужно внедрить ее в бизнес-процесс.

Мы написали микросервис на Node.js для Google Cloud Functions. Когда пользователь оставляет заявку на сайте (через форму), фронтенд шлет webhook с номером телефона и client_id в нашу функцию.

// Фрагмент Cloud Function для скоринга лида
const { aiplatform } = require(\'@google-cloud/aiplatform\');
const { BigQuery } = require(\'@google-cloud/bigquery\');

const bq = new BigQuery();
const client = new aiplatform.v1.PredictionServiceClient({
  apiEndpoint: \'europe-west4-aiplatform.googleapis.com\',
});

exports.scoreLead = async (req, res) => {
  const { clientId, phone, crmLeadId } = req.body;

  // 1. Идем в BigQuery за свежими фичами юзера
  const query = `SELECT * FROM \`project.dbt_prod.user_features\` WHERE client_id = @clientId`;
  const [rows] = await bq.query({ query, params: { clientId } });
  
  if (!rows || rows.length === 0) return res.status(200).send(\'No data\');
  const features = rows[0];

  // 2. Отправляем фичи в Vertex AI
  const endpoint = `projects/PROJECT_ID/locations/europe-west4/endpoints/ENDPOINT_ID`;
  const instance = {
    structValue: {
      fields: {
        layout_views: { numberValue: features.layout_views },
        calculator_uses: { numberValue: features.calculator_uses },
        session_duration: { numberValue: features.session_duration_seconds },
        phone_brand: { stringValue: features.phone_brand }
        // ...
      }
    }
  };

  const [response] = await client.predict({
    endpoint,
    instances: [instance],
  });

  // 3. Получаем вероятность (score от 0 до 1)
  const predictionResult = response.predictions[0].structValue.fields;
  const score = predictionResult.classes.listValue.values[0].numberValue;

  // 4. Отправляем результат обратно в CRM (amoCRM)
  await updateCrmLead(crmLeadId, { 
    \'score\': score, 
    \'priority\': score > 0.7 ? \'HIGH\' : \'LOW\' 
  });

  res.status(200).send({ score });
};

Теперь менеджер в CRM видит не просто новый лид, а лид с оценкой и цветовой меткой (Красный — мусор, Желтый — теплый, Зеленый — VIP). Зеленые лиды сразу падают самым опытным «клоузерам» и обзваниваются в течение 1 минуты. Красные (с оценкой < 0.2) даже не попадают в колл-центр — по ним запускается автоматическая цепочка WhatsApp-рассылок.

Конверсия в показ (встречу) по сегментам

Как изменилась эффективность прозвона после внедрения ML-скоринга.

Итоги: Меньше звонков, больше денег

Внедрение ML-скоринга полностью перевернуло игру для нашего клиента.

  • Рост конверсии в сделку: Конверсия из лида во встречу (показ) выросла на 42%, так как менеджеры перестали тратить энергию на «воздух» и сфокусировались на тех, кто реально хочет купить.
  • Экономия времени ОП: Нагрузка на колл-центр упала на 35%. Меньше выгорания, больше счастливых менеджеров с премиями.
  • Оптимизация рекламы: Мы пошли дальше и начали отправлять скоринговые баллы обратно в Google Ads через Measurement Protocol (как Offline Conversions). Теперь алгоритмы Google понимают, что нам нужны не просто дешевые заявки, а заявки с высоким скором. Фрод-площадки в контекстно-медийной сети (КМС) отвалились сами собой.

Распределение скоринговых баллов (Плотность)

Какая доля лидов получает определенные баллы вероятности.

Резюме

Эпоха, когда лиды оценивались просто по факту отправки формы, ушла. Если вы продаете сложные и дорогие продукты (недвижимость, авто, B2B SaaS), каждый звонок менеджера стоит денег. Экосистема Google Cloud (GA4 + BigQuery + Vertex AI) позволяет построить Enterprise-решение за несколько недель, не раздувая штат Data Scientist-ов.

Автоматизируйте рутину, доверяйте математике, и пусть ваши менеджеры закрывают сделки, а не работают справочным бюро!

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

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

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

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

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

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