1. Введение
В этом практическом занятии мы создадим модель прогнозирования оценок фильмов с помощью пользовательской модели BigQuery ML, используя только SQL, и развернем модель в VertexAI. Вы узнаете:
- Как создать набор данных BigQuery с помощью Cloud Shell и загрузить данные из файла.
- Как использовать BigQuery ML для обучения с учителем, чтобы создать модель многоклассовой регрессии для прогнозирования оценки фильма без большого количества кода, используя только SQL-запросы.
Что вы построите
Вы создадите
- Набор данных BigQuery, содержащий компоненты таблицы и модели.
- Модель машинного обучения BigQuery для прогнозирования рейтинга фильма с помощью SQL-запросов.
- Разверните модель в реестре моделей Vertex AI.
Требования
2. Создайте свой проект
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
- Для включения API перейдите в BigQuery . Вы также можете открыть веб-интерфейс BigQuery напрямую, введя в браузере следующий URL: https://console.cloud.google.com/bigquery
3. Активируйте Cloud Shell
- Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным bq : В консоли Cloud нажмите «Активировать Cloud Shell» в правом верхнем углу:

- После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и проект уже настроен на ваш идентификатор проекта. Для подтверждения аутентификации выполните следующую команду в Cloud Shell:
gcloud auth list
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
- Если ваш проект не задан, используйте следующую команду для его настройки:
gcloud config set project <PROJECT_ID>
Для получения информации о командах gcloud и их использовании обратитесь к документации .
4. Подготовка обучающих данных
Это важный этап во всех проектах, продуктах и приложениях, связанных с данными, который требует не только технических знаний, но и глубоких знаний в предметной области для подготовки оптимального набора данных и его использования в вашем проекте машинного обучения. Для целей этого практического занятия мы будем использовать уже подготовленный файл данных .
5. Создание и загрузка набора данных
Набор данных BigQuery представляет собой коллекцию таблиц. Все таблицы в наборе данных хранятся в одном и том же месте . Вы также можете добавить пользовательские элементы управления доступом, чтобы ограничить доступ к набору данных и его таблицам.
- В Cloud Shell используйте команду bq mk для создания набора данных с именем "movies".
bq mk --location=<<LOCATION>> movies
Укажите местоположение в регионе (asia-south1).
- Убедитесь, что у вас готов файл данных (.csv). Выполните следующие команды в Cloud Shell, чтобы клонировать репозиторий и перейти к проекту:
git clone <<repository link>>
cd movie-score
- Используйте команду `bq load` для загрузки CSV-файла в таблицу BigQuery (обратите внимание, что вы также можете загружать файлы непосредственно из пользовательского интерфейса BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
Описание параметров: –source_format=CSV - использует формат данных CSV при анализе файла данных. –skip_leading_rows=1 - пропускает первую строку в файле CSV, поскольку это строка заголовка. Movies.movies - первый позиционный аргумент - определяет, в какую таблицу следует загрузить данные. ./movies.csv - второй позиционный аргумент - определяет, какой файл следует загрузить. Помимо локальных файлов, команда bq load может загружать файлы из Cloud Storage с URI gs://my_bucket/path/to/file. Схема, которая может быть определена в файле JSON или в виде списка, разделенного запятыми (я использовал список, разделенный запятыми). Ура! Наши данные CSV теперь загружены в таблицу movies.movies.
- Выполните запрос одним из 3 способов:
Взаимодействовать с BigQuery можно тремя способами, мы попробуем два из них: а) через веб- интерфейс BigQuery; б) с помощью команды bq; в) через API.
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
Для выполнения запросов я использовал рабочую область BigQuery Web SQL. Рабочая область SQL выглядит следующим образом:

Использование команды bq:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. Прогнозирование рейтинга фильма по шкале от 1 до 10.
BigQuery ML поддерживает обучение с учителем с использованием модели логистической регрессии . Вы можете использовать модель бинарной логистической регрессии для прогнозирования того, попадает ли значение в одну из двух категорий; или вы можете использовать модель многоклассовой регрессии для прогнозирования того, попадает ли значение в одну из нескольких категорий. Эти задачи называются задачами классификации, поскольку они пытаются классифицировать данные на две или более категорий.
Несколько слов о выборе модели: это экспериментальный выбор модели, основанный на оценке результатов. Первоначально я столкнулся с несколькими моделями и в итоге остановился на логистической регрессии, чтобы упростить задачу и получить результаты, более близкие к реальным рейтингам фильмов из различных баз данных. Обратите внимание, что это следует рассматривать лишь как пример реализации модели, и это НЕ обязательно рекомендуемая модель для данного случая. Другой способ реализации — предсказать оценку фильма как «ХОРОШО» / «ПЛОХО», используя эту модель логистической регрессии вместо прогнозирования оценки.
Выберите обучающие данные
Мы уже разделили данные о фильмах (в формате CSV) на 3 категории в таблице, используя поле "data_cat", которое принимает одно из 3 значений - TRAIN, TEST и PREDICT. Разделение набора данных для целей тестирования и обучения является важным аспектом модели. Если вам нужна дополнительная информация о разделении набора данных, обратитесь к документации .
Создайте модель логистической регрессии.
Для создания и обучения модели логистической регрессии можно использовать оператор CREATE MODEL с опцией 'LOGISTIC_REG'.
Выполните следующий запрос в рабочей области SQL веб-интерфейса BigQuery:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Детали запроса:
- Оператор CREATE MODEL обучает модель, используя обучающие данные из оператора SELECT.
- В разделе OPTIONS указывается тип модели и параметры обучения. Здесь параметр LOGISTIC_REG указывает тип модели логистической регрессии. Нет необходимости указывать бинарную модель логистической регрессии или многоклассовую модель логистической регрессии: BigQuery ML может определить, какую из них обучать, на основе количества уникальных значений в столбце меток.
- Параметр data_split_method='NO_SPLIT' заставляет BQML обучать модель на данных в соответствии с условиями запроса (data_cat = 'TRAIN'). Также обратите внимание, что лучше использовать параметр 'AUTO_SPLIT', чтобы позволить фреймворку (или сервису в данном случае) рандомизировать разделение на обучающую и тестовую выборки.
- Параметр input_label_cols указывает, какой столбец в операторе SELECT использовать в качестве столбца меток. В данном случае столбцом меток является score, поэтому модель будет определять, какое из 10 значений score наиболее вероятно, исходя из других значений, присутствующих в каждой строке.
- Параметр 'auto_class_weights=TRUE' балансирует метки классов в обучающих данных. По умолчанию обучающие данные не взвешены. Если метки в обучающих данных несбалансированы, модель может научиться предсказывать наиболее популярный класс меток с большей вероятностью.
- Оператор SELECT запрашивает данные из CSV-файла в таблицу. Предложение WHERE фильтрует строки во входной таблице таким образом, чтобы на этом этапе был выбран только набор данных TRAIN.
После создания в разделе SCHEMA рабочей области BigQuery SQL отобразится следующее:
Метки

Функции

Оцените свою модель логистической регрессии.
После создания модели оцените её производительность с помощью функции ML.EVALUATE. Функция ML.EVALUATE сравнивает прогнозируемые значения с фактическими данными. Запрос для оценки модели выглядит следующим образом:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
Функция ML.EVALUATE принимает модель, обученную на предыдущем шаге, и данные для оценки, полученные с помощью подзапроса SELECT. Функция возвращает одну строку статистики по модели.

Поскольку вы выполнили логистическую регрессию, результаты включают метрики, которые вы видите на скриншоте выше: точность, полнота, правильность, F1-мера, логарифмическая функция потерь, ROC-кривая, которые действительно важны для оценки производительности модели. Вы также можете вызвать ML.EVALUATE без предоставления входных данных. ML.EVALUATE извлекает метрики оценки, полученные в процессе обучения, используя автоматически зарезервированный набор данных для оценки.
Ключевые показатели вкратце:
Точность — какая доля положительных идентификаций была действительно правильной? Точность = Истинно положительные / (Истинно положительные + Ложно положительные) Полнота — какая доля фактически положительных идентификаций была определена правильно? Полнота = Истинно положительные / (Истинно положительные + Ложно отрицательные) Уточненность — показатель для оценки моделей классификации, это доля предсказаний, которые наша модель действительно угадала правильно. Уточненность = Количество правильных предсказаний / Общее количество предсказаний
Спрогнозируйте рейтинг фильма с помощью ML.PREDICT.
Следующий запрос предсказывает оценку каждого фильма в части PREDICT набора данных.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
Ниже приведён фрагмент результатов:

Результат работы модели показывает прогнозируемый балл фильма по шкале от 1 до 10 (классификация). Вы, должно быть, задаетесь вопросом, почему для каждого фильма отображается несколько строк с прогнозами. Это потому, что модель вернула возможные прогнозируемые метки и вероятность появления каждой из них в порядке убывания.
Проанализируйте прогнозируемые результаты и модель.
Кроме того, в рамках анализа результатов прогнозирования можно выполнить два важных шага:
- Чтобы понять, почему ваша модель выдает такие результаты прогнозирования, вы можете использовать функцию ML.EXPLAIN_PREDICT.
- Чтобы узнать, какие характеристики наиболее важны для определения уровня дохода в целом, можно использовать функцию ML.GLOBAL_EXPLAIN.
Подробное описание этих шагов вы найдете в документации .
7. Прогнозирование рейтинга фильмов с помощью BigQuery AutoML.
AutoML отлично подходит, если вы хотите, чтобы сервис BigQuery создал модель за вас, а вы могли спокойно ждать генерации результатов модели. Возможность использования AutoML доступна непосредственно в BQML (model_type=AUTOML_CLASSIFIER или AUTOML_REGRESSOR) и её гораздо проще вызвать, если данные уже находятся в BigQuery.
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
После создания модели вы можете выполнить шаги EVALUATE, PREDICT и EXPLAIN_PREDICT так же, как мы обсуждали в случае с пользовательской моделью BQML. Подробнее о BigQuery AutoML можно прочитать в документации .
8. Развертывание моделей BQML в реестре моделей Vertex AI одним щелчком мыши.
Теперь вы можете просмотреть все свои модели машинного обучения в Vertex AI Model Registry, что упростит управление и развертывание моделей для вашей организации. Это включает модели, созданные с помощью BigQuery ML, AutoML, а также модели, обученные с помощью пользовательских технологий. Вот как это сделать:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Включите параметр `model_registry="vertex_ai"` в запрос `CREATE MODEL`, чтобы BigQuery ML мог выбирать, какие модели он хочет явно зарегистрировать в реестре моделей Vertex AI. Подробнее об этом можно прочитать в этом блоге .
9. Резюме
Менее чем за 30 минут мы получаем:
- Настроили BigQuery в качестве базы данных для аналитического проекта.
- Создана собственная модель прогнозирования, использующая только SQL-запросы из BigQuery и не содержащая другого кода.
- Создана модель BQ Auto ML с использованием только SQL-запросов.
- Модель BQML развернута в реестре моделей Vertex AI.
10. Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой статье, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить».
- В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить», чтобы удалить проект.
11. Поздравляем!
Поздравляем! Вы успешно создали модель прогнозирования оценок фильмов с использованием пользовательского BQML и AutoML, развернули модель в реестре моделей Vertex AI, и все это с помощью SQL.