1. Обзор
BigQuery ML (BQML) позволяет пользователям создавать и выполнять модели машинного обучения в BigQuery с помощью запросов SQL. Цель состоит в том, чтобы демократизировать машинное обучение, предоставив специалистам по SQL возможность создавать модели, используя существующие инструменты, и повысить скорость разработки за счет устранения необходимости перемещения данных.
Что ты построишь
Вы будете использовать образец набора данных Analytics 360 , чтобы создать модель, которая прогнозирует, совершит ли посетитель транзакцию.
Что вы узнаете
Как создавать, оценивать и использовать модели машинного обучения в BigQuery
Что вам понадобится
- Браузер, например Chrome или Firefox.
- Базовые знания SQL или BigQuery.
- BQML- документация
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Открыть консоль BigQuery
В консоли разработчика Google щелкните значок меню в левом верхнем углу экрана.
Прокрутите меню вниз и нажмите BigQuery:
Консоль BigQuery откроется в новой вкладке браузера, которая выглядит следующим образом:
Но здесь ничего нет! К счастью, в BigQuery доступно множество общедоступных наборов данных, которые вы можете изучить.
3. Создайте набор данных
Чтобы создать набор данных, нажмите стрелку рядом с названием вашего проекта и выберите « Создать новый набор данных» .
Затем назовите свой набор данных bqml_codelab и нажмите «ОК».
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 в пользовательском интерфейсе. В разделе «Подробности» вы должны найти базовую информацию о модели и параметры обучения, использованные для создания модели. В разделе «Статистика тренировок» вы должны увидеть таблицу, подобную этой:
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 можно найти в документации .