Вы замечали, что при попытке построить модель churn на исторических данных в BigQuery приходится выгружать десятки миллионов строк во внешний кластер? Pandas падает, пайплайны рвутся, версии моделей теряются. Мы решили эту проблему иначе: BigQuery ML позволяет обучать модели прямо в SQL, без копирования данных. Прототипирование ускоряется в 3 раза по сравнению с выгрузкой в Spark, а затраты на инфраструктуру снижаются на 70%. Как это работает и когда стоит переходить на Vertex AI — разберём ниже.
Стек: Python (bigframes, skl2bq), SQL, Vertex AI Pipelines, Docker. В основе — стандартные алгоритмы Google: от простой логистической регрессии до XGBoost и ARIMA. Под капотом — BigQuery ML с автоматическим масштабированием и встроенной оптимизацией под слоты. Наш опыт — 30+ проектов на GCP, включая финтех и e-commerce, где экономия бюджета достигала 70%.
Проблемы, которые решаем
Перенос данных из BigQuery в отдельную ML-инфраструктуру — узкое горлышко. Типичные последствия:
- Утечка памяти: pandas падает на 50M+ строках — теряем до 30% времени на Data Engineering.
- Дрейф данных: модель учится на срезе, а предсказывает на новом распределении — метрики падают на 15-20% за квартал.
- Отсутствие MLOps: версии моделей не отслеживаются, переобучение вручную — риск устаревания.
BigQuery ML ликвидирует эти проблемы одной строкой CREATE MODEL. Данные не покидают сторадж, версионирование идёт через Git + BQ snapshots, а пайплайны деплоятся в Vertex AI одним кликом. Дополнительно используем DATA_SPLIT_METHOD для автоматического разделения выборки — дрейф обнаруживается на этапе валидации.
Как это делаем: от SQL до Production-пайплайнов
Базовые модели через SQL
-- Логистическая регрессия для churn prediction
CREATE OR REPLACE MODEL `project.ml_models.churn_model`
OPTIONS(
model_type='LOGISTIC_REG',
input_label_cols=['churned'],
l2_reg=0.1,
max_iterations=50,
data_split_method='AUTO_SPLIT',
enable_global_explain=TRUE
) AS
SELECT
user_id,
days_since_last_session,
avg_session_duration_sec,
purchases_last_30d,
support_tickets_count,
subscription_months,
churned
FROM `project.features.user_churn_training`
WHERE split_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY);
-- Оценка модели
SELECT *
FROM ML.EVALUATE(MODEL `project.ml_models.churn_model`,
(SELECT * FROM `project.features.user_churn_test`))
-- Предсказания
SELECT
u.user_id,
pred.predicted_churned,
pred.predicted_churned_probs[OFFSET(1)].prob as churn_probability
FROM ML.PREDICT(MODEL `project.ml_models.churn_model`,
(SELECT * FROM `project.features.users_current`)) pred
JOIN `project.raw.users` u USING(user_id)
WHERE pred.predicted_churned_probs[OFFSET(1)].prob > 0.7
ORDER BY churn_probability DESC;
-- Feature importance через SHAP
SELECT *
FROM ML.GLOBAL_EXPLAIN(MODEL `project.ml_models.churn_model`);
Оптимизация гиперпараметров встроена — CREATE MODEL принимает num_parallel_tree, learn_rate, max_iterations. Тюнинг идёт автоматически через AUTO_ML или ручной подбор для градиентного бустинга. Подробнее — в BigQuery ML documentation.
Gradient Boosted Trees и AutoML Tables
-- Gradient Boosted Trees (XGBoost под капотом)
CREATE OR REPLACE MODEL `project.ml_models.revenue_forecast`
OPTIONS(
model_type='BOOSTED_TREE_REGRESSOR',
num_parallel_tree=1,
max_tree_depth=6,
subsample=0.8,
colsample_bytree=0.8,
learn_rate=0.05,
max_iterations=200,
early_stop=TRUE,
min_rel_progress=0.001,
data_split_method='RANDOM',
data_split_eval_fraction=0.2,
input_label_cols=['revenue_next_30d']
) AS
SELECT * EXCEPT(user_id, split_date)
FROM `project.features.revenue_training`;
-- Time Series Forecasting с ARIMA_PLUS
CREATE OR REPLACE MODEL `project.ml_models.sales_forecast`
OPTIONS(
model_type='ARIMA_PLUS',
time_series_timestamp_col='date',
time_series_data_col='daily_revenue',
holiday_region='RU',
auto_arima=TRUE,
data_frequency='DAILY'
) AS
SELECT date, daily_revenue
FROM `project.analytics.daily_revenue`
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY)
ORDER BY date;
-- Прогноз на 30 дней вперёд
SELECT *
FROM ML.FORECAST(MODEL `project.ml_models.sales_forecast`,
STRUCT(30 AS horizon, 0.9 AS confidence_level));
ARIMA_PLUS автоматически подбирает порядок и сезонность, учитывает праздники (параметр holiday_region='RU'). Идеально для прогноза продаж или нагрузки — точность на 10-15% выше ручного подбора.
Python в BigQuery через Colab Enterprise
# BigQuery DataFrame API (pandas-compatible)
import bigframes.pandas as bpd
from bigframes.ml.ensemble import RandomForestClassifier
from bigframes.ml.pipeline import Pipeline
from bigframes.ml.preprocessing import StandardScaler
bpd.options.bigquery.project = "your-project"
bpd.options.bigquery.location = "EU"
# Загрузка данных — работаем с BigQuery как с pandas
df = bpd.read_gbq("SELECT * FROM `project.features.training_data`")
# Train/test split
train_df, test_df = df.train_test_split(test_size=0.2, random_state=42)
X_train = train_df.drop(columns=["label"])
y_train = train_df["label"]
# BigFrames ML Pipeline
pipeline = Pipeline([
("scaler", StandardScaler()),
("model", RandomForestClassifier(n_estimators=100, random_state=42))
])
pipeline.fit(X_train, y_train)
# Оценка
from bigframes.ml.metrics import accuracy_score
predictions = pipeline.predict(test_df.drop(columns=["label"]))
accuracy = accuracy_score(test_df["label"], predictions)
print(f"Accuracy: {accuracy:.4f}")
# Сохранение в BigQuery ML Registry
pipeline.to_gbq("project.ml_models.rf_classifier")
BigFrames эмулирует pandas-синтаксис, но вычисления идут на стороне BigQuery. Не нужно тащить данные в Jupyter — всё остаётся в облаке.
Fine-tuning и кастомные модели
BigQuery ML поддерживает импорт моделей TensorFlow (SavedModel) для инференса через ML.PREDICT. Это позволяет использовать fine-tuning на данных внутри BQ без копирования. Для более сложных архитектур (трансформеры, LLM) лучше подходит Vertex AI с поддержкой LoRA и quantization.
Vertex AI Pipelines + BigQuery
from google.cloud import bigquery, aiplatform
from kfp import dsl
from kfp.v2.google.cloud import bigquery as kfp_bq
@dsl.pipeline(name="bq-ml-pipeline", pipeline_root="gs://ml-artifacts/pipelines")
def bq_ml_training_pipeline(
project: str,
dataset: str,
model_name: str
):
# Шаг 1: Подготовка данных
extract_op = kfp_bq.BigqueryQueryJobOp(
project=project,
location="EU",
query=f"""
CREATE OR REPLACE TABLE `{project}.{dataset}.training_features` AS
SELECT * FROM `{project}.features.user_features`
WHERE dt >= DATE_SUB(CURRENT_DATE(), INTERVAL 60 DAY)
"""
)
# Шаг 2: Обучение модели
train_op = kfp_bq.BigqueryCreateModelJobOp(
project=project,
location="EU",
query=f"""
CREATE OR REPLACE MODEL `{project}.{dataset}.{model_name}`
OPTIONS(model_type='BOOSTED_TREE_CLASSIFIER', input_label_cols=['label'])
AS SELECT * EXCEPT(user_id) FROM `{project}.{dataset}.training_features`
"""
).after(extract_op)
# Шаг 3: Оценка и регистрация
evaluate_op = kfp_bq.BigqueryEvaluateModelJobOp(
project=project,
location="EU",
model=train_op.outputs["model"]
).after(train_op)
# Запуск пайплайна
aiplatform.init(project="your-project", location="europe-west4")
job = aiplatform.PipelineJob(
display_name="bq-ml-pipeline",
template_path="pipeline.json",
parameter_values={"project": "your-project", "dataset": "ml", "model_name": "churn_v2"}
)
job.run()
Kubeflow Pipelines управляет оркестрацией: подготовка данных, обучение, оценка. Пайплайн запускается по расписанию или по триггеру. Мониторинг — встроенные метрики Vertex AI.
Стоимость vs производительность
| Сценарий | Объём данных | BigQuery ML | Vertex AI Custom |
|---|---|---|---|
| Logistic Regression | 10M строк | Низкая | Средняя |
| Gradient Boosting | 100M строк | Средняя | Средняя |
| Time Series | 1M точек | Низкая | Высокая |
| AutoML Tables | 10M строк | N/A | Высокая |
BigQuery ML оптимален для SQL-команд с данными уже в GCP. Порог переключения на Vertex AI Custom: необходимость в нестандартных архитектурах (трансформеры, кастомные loss функции) или требования latency < 10ms для онлайн-инференса.
Сравнение скорости разработки
| Этап | BigQuery ML | Vertex AI Custom |
|---|---|---|
| Прототип | 1-2 дня | 3-5 дней |
| Эксперименты | 2-4 дня | 1-2 недели |
| Деплой | 1 день | 2-3 дня |
| Окупаемость | 2-3 месяца | 6+ месяцев |
BigQuery ML ускоряет разработку моделей в 2-3 раза по сравнению с традиционным ML-пайплайном. Средняя экономия бюджета составляет до 70% за счёт отказа от отдельного кластера.
Типичные метрики производительности
- Latency запросов: p50 < 2 сек, p99 < 10 сек для 100M строк.
- Пропускная способность: до 2 млрд строк в час на одном слоте.
- Точность моделей: AUC >0.85 для churn, RMSE <0.1 для регрессии.
- Затраты: низкие — менее 1 USD за 1M строк обучения (в зависимости от типа модели).
Когда стоит выбрать BigQuery ML, а когда — Vertex AI?
Если модель укладывается в стандартные алгоритмы — BQ ML даёт выигрыш в скорости разработки в 2-3 раза и снижение затрат на 50%. Vertex AI Custom оправдан для кастомных архитектур (LLM, GAN) или low-latency онлайн-инференса. Мы часто комбинируем: BQ ML для быстрых baseline, затем мигрируем на Vertex AI для продакшена.
Как BigQuery ML решает проблему перемещения данных?
Данные остаются в BigQuery, модель обучается там же — CREATE MODEL работает как SELECT. Результаты предсказаний можно сразу записать в таблицу. Никаких копий, версионирование через Git-модель в BQ Model Registry. Это исключает дрейф данных, вызванный разными срезами, и сокращает pipeline latency на 30-40%.
Процесс работы
- Аналитика: аудит данных в BigQuery, выбор метрик, определение baseline. Типичный срок — 1-2 дня.
- Проектирование: подбор алгоритма, проектирование фичей, закладка A/B-экспериментов.
- Реализация: SQL-скрипты, Python-пайплайны, тесты на исторических данных.
- Тест: валидация на holdout срезе, stress-тестирование latency под нагрузкой.
- Деплой: регистрация модели, настройка мониторинга, автоматическое переобучение по расписанию.
Что входит в работу
- Прототип модели в BigQuery ML (SQL или bigframes).
- Паспорт модели: обучающие данные, метрики, границы инференса.
- Интеграция с Vertex AI Pipelines (Kubeflow).
- Документация по эксплуатации: дашборды, алерты.
- Обучение вашей команды работе с BigFrames и пайплайнами.
Наши инженеры имеют 7+ лет опыта в ML и реализовали 30+ проектов на стеке GCP (включая BigQuery ML для финтех и e-commerce). Гарантируем фиксированные сроки и прозрачный процесс — свяжитесь с нами, чтобы обсудить ваш кейс. Получите консультацию по интеграции BigQuery ML уже сегодня.







