1. Обзор
BigQuery ML (BQML) позволяет пользователям создавать и выполнять модели машинного обучения в BigQuery с помощью SQL-запросов. Цель состоит в демократизации машинного обучения, предоставляя специалистам по SQL возможность создавать модели, используя существующие инструменты, и повышая скорость разработки за счет устранения необходимости перемещения данных.
Что вы построите
Вы будете использовать пример набора данных Analytics 360 для создания модели, которая предсказывает, совершит ли посетитель транзакцию.
Что вы узнаете
Как создавать, оценивать и использовать модели машинного обучения в BigQuery
Что вам понадобится
- Браузер, например Chrome или Firefox.
- Базовые знания SQL или BigQuery.
- Документация BQML
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в Cloud Console и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .
- Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.
Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Откройте консоль BigQuery
В консоли разработчика Google нажмите на значок меню в левом верхнем углу экрана.

Прокрутите меню вниз и нажмите BigQuery:

Это откроет консоль BigQuery в новой вкладке браузера, которая будет выглядеть следующим образом:

Но здесь ничего нет! К счастью, в BigQuery доступно множество общедоступных наборов данных, которые вы можете изучить.
3. Создайте набор данных.
Чтобы создать набор данных, щелкните стрелку рядом с названием вашего проекта и выберите «Создать новый набор данных» .

Далее, назовите свой набор данных bqml_codelab и нажмите OK.

4. Создайте модель
Логистическая регрессия для Analytics 360
Теперь перейдём к нашей задаче. Вот как можно создать модель для прогнозирования того, совершит ли посетитель транзакцию.
#standardSQL CREATE OR REPLACE MODEL `bqml_codelab.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170631' LIMIT 100000;
В данном случае в качестве критериев для определения факта совершения транзакции мы используем операционную систему устройства посетителя, мобильное устройство, страну посетителя и количество просмотров страниц.
В данном случае "codelab" — это название набора данных, а "sample_model" — название нашей модели. Указанный тип модели — бинарная логистическая регрессия. В данном случае label — это то, к чему мы пытаемся подогнать модель. Обратите внимание, что если вас интересует только один столбец, это альтернативный способ установки input_label_cols . Мы также ограничиваем наши обучающие данные данными, собранными с 1 августа 2016 года по 31 июня 2017 года. Мы делаем это, чтобы сохранить данные за последний месяц для "прогнозирования". Кроме того, мы ограничиваем количество точек данных 100 000, чтобы сэкономить время. Вы можете удалить последнюю строку, если не спешите.
Выполнение команды CREATE MODEL создает задание запроса, которое будет выполняться асинхронно, что позволит вам, например, закрыть или обновить окно пользовательского интерфейса BigQuery.
[Необязательно] Информация о модели и статистика обучения
Если вас это интересует, вы можете получить информацию о модели, щелкнув по sample_model в разделе bqml_codelab dataset в пользовательском интерфейсе. В разделе Details вы найдете основную информацию о модели и параметрах обучения, использованных для ее создания. В разделе Training Stats вы увидите таблицу, похожую на эту:

5. Оцените модель.
Оцените нашу модель
#standardSQL SELECT * FROM ml.EVALUATE(MODEL `bqml_codelab.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));
При использовании с моделью линейной регрессии приведенный выше запрос возвращает следующие столбцы: mean_absolute_error , mean_squared_error , mean_squared_log_error , median_absolute_error , r2_score , explained_variance . При использовании с моделью логистической регрессии приведенный выше запрос возвращает следующие столбцы: precision , recall , accuracy , f1_score , log_loss , roc_auc . Для понимания того, как рассчитывается каждая из этих метрик и что они означают, обратитесь к глоссарию машинного обучения или выполните поиск в Google.
Конкретно, вы заметите, что части запроса SELECT и FROM идентичны тем, что использовались во время обучения. Часть WHERE отражает изменение временного интервала, а часть FROM показывает, что мы вызываем ml.EVALUATE . Вы должны увидеть таблицу, похожую на эту:

6. Используйте модель
Прогнозирование покупок по странам
Здесь мы пытаемся спрогнозировать количество транзакций, совершенных посетителями из каждой страны, отсортировать результаты и выбрать 10 стран с наибольшим количеством покупок.
#standardSQL SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10;
Обратите внимание, что этот запрос очень похож на запрос оценки, который мы демонстрировали в предыдущем разделе. Вместо ml.EVALUATE мы используем ml.PREDICT , а часть запроса в формате BQML оборачиваем стандартными командами SQL. В частности, нас интересует страна и сумма покупок для каждой страны, поэтому мы используем SELECT , GROUP BY и ORDER BY . Здесь используется LIMIT , чтобы гарантировать получение только 10 лучших результатов. Вы должны увидеть таблицу, похожую на эту:

Прогнозирование покупок на одного пользователя
Вот ещё один пример. На этот раз мы пытаемся предсказать количество транзакций, совершаемых каждым посетителем, отсортируем результаты и выберем 10 посетителей с наибольшим количеством транзакций.
#standardSQL SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10;
Вы должны увидеть таблицу, похожую на эту:

7. Поздравляем!
Вы завершили этот практический урок. Ищете более сложную задачу? Попробуйте построить модель линейной регрессии с помощью BQML.
Что мы рассмотрели
- Создайте модель бинарной логистической регрессии.
- Оцените модель
- Используйте модель для прогнозирования.
Следующие шаги
- Для получения более подробной информации о BQML, пожалуйста, обратитесь к документации .