Ви помічали, що при спробі побудувати модель 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='UA',
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='UA'). Ідеально для прогнозу продажів або навантаження — точність на 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 для регресії.
- Витрати: розраховуються індивідуально.
Коли варто обрати 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 вже сьогодні.







