Прогнозирование рейтинга фильма с помощью BQML с использованием SQL,Прогнозирование рейтинга фильма с помощью BQML с использованием SQL,Прогнозирование рейтинга фильма с помощью BQML с использованием SQL

1. Введение

В этом практическом занятии мы создадим модель прогнозирования оценок фильмов с помощью пользовательской модели BigQuery ML, используя только SQL, и развернем модель в VertexAI. Вы узнаете:

  1. Как создать набор данных BigQuery с помощью Cloud Shell и загрузить данные из файла.
  2. Как использовать BigQuery ML для обучения с учителем, чтобы создать модель многоклассовой регрессии для прогнозирования оценки фильма без большого количества кода, используя только SQL-запросы.

Что вы построите

Вы создадите

  • Набор данных BigQuery, содержащий компоненты таблицы и модели.
  • Модель машинного обучения BigQuery для прогнозирования рейтинга фильма с помощью SQL-запросов.
  • Разверните модель в реестре моделей Vertex AI.

Требования

  • Браузер, например Chrome или Firefox.
  • Проект Google Cloud с включенной функцией выставления счетов.

2. Создайте свой проект

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  3. Для включения API перейдите в BigQuery . Вы также можете открыть веб-интерфейс BigQuery напрямую, введя в браузере следующий URL: https://console.cloud.google.com/bigquery

3. Активируйте Cloud Shell

  1. Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным bq : В консоли Cloud нажмите «Активировать Cloud Shell» в правом верхнем углу: 6757b2fb50ddcc2d.png
  2. После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и проект уже настроен на ваш идентификатор проекта. Для подтверждения аутентификации выполните следующую команду в Cloud Shell:
gcloud auth list
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
  1. Если ваш проект не задан, используйте следующую команду для его настройки:
gcloud config set project <PROJECT_ID>

Для получения информации о командах gcloud и их использовании обратитесь к документации .

4. Подготовка обучающих данных

Это важный этап во всех проектах, продуктах и ​​приложениях, связанных с данными, который требует не только технических знаний, но и глубоких знаний в предметной области для подготовки оптимального набора данных и его использования в вашем проекте машинного обучения. Для целей этого практического занятия мы будем использовать уже подготовленный файл данных .

5. Создание и загрузка набора данных

Набор данных BigQuery представляет собой коллекцию таблиц. Все таблицы в наборе данных хранятся в одном и том же месте . Вы также можете добавить пользовательские элементы управления доступом, чтобы ограничить доступ к набору данных и его таблицам.

  1. В Cloud Shell используйте команду bq mk для создания набора данных с именем "movies".
bq mk --location=<<LOCATION>> movies

Укажите местоположение в регионе (asia-south1).

  1. Убедитесь, что у вас готов файл данных (.csv). Выполните следующие команды в Cloud Shell, чтобы клонировать репозиторий и перейти к проекту:
git clone <<repository link>>

cd movie-score
  1. Используйте команду `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.

  1. Выполните запрос одним из 3 способов:

Взаимодействовать с BigQuery можно тремя способами, мы попробуем два из них: а) через веб- интерфейс BigQuery; б) с помощью команды bq; в) через API.

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

Для выполнения запросов я использовал рабочую область BigQuery Web SQL. Рабочая область SQL выглядит следующим образом:

109a0b2c7155e9b3.png

Использование команды 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';

Детали запроса:

  1. Оператор CREATE MODEL обучает модель, используя обучающие данные из оператора SELECT.
  2. В разделе OPTIONS указывается тип модели и параметры обучения. Здесь параметр LOGISTIC_REG указывает тип модели логистической регрессии. Нет необходимости указывать бинарную модель логистической регрессии или многоклассовую модель логистической регрессии: BigQuery ML может определить, какую из них обучать, на основе количества уникальных значений в столбце меток.
  3. Параметр data_split_method='NO_SPLIT' заставляет BQML обучать модель на данных в соответствии с условиями запроса (data_cat = 'TRAIN'). Также обратите внимание, что лучше использовать параметр 'AUTO_SPLIT', чтобы позволить фреймворку (или сервису в данном случае) рандомизировать разделение на обучающую и тестовую выборки.
  4. Параметр input_label_cols указывает, какой столбец в операторе SELECT использовать в качестве столбца меток. В данном случае столбцом меток является score, поэтому модель будет определять, какое из 10 значений score наиболее вероятно, исходя из других значений, присутствующих в каждой строке.
  5. Параметр 'auto_class_weights=TRUE' балансирует метки классов в обучающих данных. По умолчанию обучающие данные не взвешены. Если метки в обучающих данных несбалансированы, модель может научиться предсказывать наиболее популярный класс меток с большей вероятностью.
  6. Оператор SELECT запрашивает данные из CSV-файла в таблицу. Предложение WHERE фильтрует строки во входной таблице таким образом, чтобы на этом этапе был выбран только набор данных TRAIN.

После создания в разделе SCHEMA рабочей области BigQuery SQL отобразится следующее:

Метки

93efd0c1a7883690.png

Функции

8c539338df1a9652.png

Оцените свою модель логистической регрессии.

После создания модели оцените её производительность с помощью функции 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. Функция возвращает одну строку статистики по модели.

b54b0ebd6514a498.png

Поскольку вы выполнили логистическую регрессию, результаты включают метрики, которые вы видите на скриншоте выше: точность, полнота, правильность, 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'
     )
  )

Ниже приведён фрагмент результатов:

1efb91967acc1f0c.png

Результат работы модели показывает прогнозируемый балл фильма по шкале от 1 до 10 (классификация). Вы, должно быть, задаетесь вопросом, почему для каждого фильма отображается несколько строк с прогнозами. Это потому, что модель вернула возможные прогнозируемые метки и вероятность появления каждой из них в порядке убывания.

Проанализируйте прогнозируемые результаты и модель.

Кроме того, в рамках анализа результатов прогнозирования можно выполнить два важных шага:

  1. Чтобы понять, почему ваша модель выдает такие результаты прогнозирования, вы можете использовать функцию ML.EXPLAIN_PREDICT.
  2. Чтобы узнать, какие характеристики наиболее важны для определения уровня дохода в целом, можно использовать функцию 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 минут мы получаем:

  1. Настроили BigQuery в качестве базы данных для аналитического проекта.
  2. Создана собственная модель прогнозирования, использующая только SQL-запросы из BigQuery и не содержащая другого кода.
  3. Создана модель BQ Auto ML с использованием только SQL-запросов.
  4. Модель BQML развернута в реестре моделей Vertex AI.

10. Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой статье, выполните следующие действия:

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
  2. В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить».
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить», чтобы удалить проект.

11. Поздравляем!

Поздравляем! Вы успешно создали модель прогнозирования оценок фильмов с использованием пользовательского BQML и AutoML, развернули модель в реестре моделей Vertex AI, и все это с помощью SQL.