Урок и практика машинного обучения в Google Cloud Labs

Привет, это моя первая работа с моделью машинного обучения для прогнозирования вещей. Я мало знаком с термином ML, за исключением (Logistic Reg, Classification). Итак, это будет одним из моих вызовов и хорошей управляемой практикой, поскольку мне нужно исследовать управляемый проект.

Однако я надеюсь, что это упражнение даст мне общее представление о том, как используется машинное обучение.

Итак, поехали ( Т_Т )

Введение

BigQuery ML (машинное обучение BigQuery) — это функция BigQuery, с помощью которой мы можем создавать, обучать, оценивать и прогнозировать модели машинного обучения с минимальным кодированием. Это подойдет для тех, кто знаком с SQL и имеет данные в Bigquery.

Цели

В этой лабораторной работе вы научитесь выполнять следующие задачи:

  • Используйте BigQuery для поиска общедоступных наборов данных
  • Запрашивайте и изучайте набор данных электронной торговли
  • Создайте набор данных для обучения и оценки, который будет использоваться для пакетного прогнозирования.
  • Создание модели классификации (логистической регрессии) в BigQuery ML
  • Оцените производительность вашей модели машинного обучения
  • Прогнозировать и ранжировать вероятность того, что посетитель совершит покупку

Набор данных:

Образец Google Analytics Набор данных электронной торговли, содержащий миллионы записей Google Analytics для Google Merchandise Store.

Запрашивающая фраза

Используйте эти данные для выполнения некоторых типичных запросов, которые компании хотели бы знать о покупательских привычках своих клиентов.

  • Общее количество посещений веб-сайта?
  • Процент покупки (коэффициент конверсии) ?
  • Сколько посетителей лайкают в течение определенного периода
  • Демографический обзор
  • Доход и 10 лучших продуктов

Настраивать

  • Перейдите в Bigquery, а затем откройте проект data-to-insights (+Добавить данные и пометить проект по имени).

Теперь мы готовы изучить данные с помощью SQL в панели редактора, чтобы увидеть и проверить, выполнить некоторые из описательных анализов.

  • Всего посещений на сайте
  • Процент покупки (коэффициент конверсии)
  • Сколько посетителей лайкают в течение определенного периода
  • Демографический обзор

1. Изучите данные электронной торговли

-- standard SQL

-- Create CTE stored visitors number
WITH visitors AS (
  SELECT COUNT(DISTINCT fullVisitorId) AS total_visitors
  FROM `data-to-insights.ecommerce.web_analytics`
),

-- Create CTE stored purchasers number
purchasers AS (
  SELECT 
  COUNT(DISTINCT fullVisitorId) AS total_purchasers
  FROM `data-to-insights.ecommerce.web_analytics`
  WHERE totals.transactions IS NOT NULL
)

SELECT total_visitors,
total_purchasers,
total_purchasers / total_visitors AS conversion_rate
FROM visitors,purchasers

Покупка продуктов Topten

SELECT
  p.v2ProductName,
  p.v2ProductCategory,
  SUM(p.productQuantity) AS units_sold,
  ROUND(SUM(p.localProductRevenue/1000000),2) AS revenue
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h,
UNNEST(h.product) AS p
GROUP BY 1, 2
ORDER BY revenue DESC
LIMIT 10
;

Сколько посетителей купили при последующих посещениях веб-сайта?

# visitors who bought on a return visit (could have bought on first as well
WITH all_visitor_stats AS (
SELECT
  fullvisitorid, # 741,721 unique visitors
  IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
  FROM `data-to-insights.ecommerce.web_analytics`
  GROUP BY fullvisitorid
)
SELECT
  COUNT(DISTINCT fullvisitorid) AS total_visitors,
  will_buy_on_return_visit
FROM all_visitor_stats
GROUP BY will_buy_on_return_visit

Выберите функции и создайте набор данных для обучения

Машинное обучение настолько хорошо, насколько хороши обучающие данные, которые в него вводятся. Если модели недостаточно информации, чтобы определить и изучить взаимосвязь между вашими входными функциями и вашим ярлыком (в данном случае, купил ли посетитель в будущем), то у вас не будет точной модели. Хотя обучение модели только по этим двум полям — это начало, вы увидите, достаточно ли они хороши для создания точной модели.

-- features
SELECT
  * EXCEPT(fullVisitorId)
FROM
  # features
  (SELECT
    fullVisitorId,
    IFNULL(totals.bounces, 0) AS bounces,
    IFNULL(totals.timeOnSite, 0) AS time_on_site
  FROM
    `data-to-insights.ecommerce.web_analytics`
  WHERE
    totals.newVisits = 1)
  JOIN
  (SELECT
    fullvisitorid,
    IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
  FROM
      `data-to-insights.ecommerce.web_analytics`
  GROUP BY fullvisitorid)
  USING (fullVisitorId)
ORDER BY time_on_site DESC
LIMIT 10;

Функции, которые будут использоваться: отказы и время_на_сайте.
Ярлык: will_buy_on_return_visit

Создайте набор данных BigQuery для хранения моделей

Мы создадим набор данных BigQuery для хранения моделей

  1. На левой панели нажмите на название своего проекта, затем нажмите на значок View action (три точки) и выберите Создать набор данных.
  2. Идентификатор набора данных: электронная торговля
  3. Нажмите Создать набор данных.

Выберите тип модели BigQuery ML и укажите параметры.

На выбор предлагается два типа моделей:

Модель:прогнозирование
Тип модели:
linear_reg
Метка Тип данных:
Числовое значение (обычно целое число или число с плавающей запятой)
Пример. Прогноз объемов продаж на следующий год с учетом исторических данных о продажах.

Модель:Классификация
Тип модели:
logistic_reg
Метка Тип данных:
0 или 1 для бинарной классификации
Пример. Классифицировать электронное письмо как спам или не спам в зависимости от контекста.

В этом случае нам нужно предсказать, вернется ли клиент и купит или нет, модель, которая будет соответствовать этому вопросу, должна быть Модель классификации (Да, Нет)

  1. Давайте создадим модель и сохраним модель с помощью SQL.
-- classification model
CREATE OR REPLACE MODEL `ecommerce.classification_model`
OPTIONS
(
model_type='logistic_reg',
labels = ['will_buy_on_return_visit']
)
AS
-- standardSQL
SELECT
  * EXCEPT(fullVisitorId)
FROM
  -- features
  (SELECT
    fullVisitorId,
    IFNULL(totals.bounces, 0) AS bounces,
    IFNULL(totals.timeOnSite, 0) AS time_on_site
  FROM
    `data-to-insights.ecommerce.web_analytics`
  WHERE
    totals.newVisits = 1
    AND date BETWEEN '20160801' AND '20170430') # train on first 9 months
  JOIN
  (SELECT
    fullvisitorid,
    IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
  FROM
      `data-to-insights.ecommerce.web_analytics`
  GROUP BY fullvisitorid)
  USING (fullVisitorId)
;

2. Пробег для тренировки модели (5–10 мин)

  • После обучения модели появится всплывающее сообщение
  • Нажмите Перейти к модели.

И мы оценим модель, чтобы увидеть ее производительность

Оцените производительность модели классификации

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

Эта взаимосвязь визуализируется с помощью кривой ROC (рабочей характеристики приемника), подобной показанной здесь, где вы пытаетесь максимизировать площадь под кривой или AUC:

В BigQuery ML roc_auc — это просто запрашиваемое поле при оценке обученной модели ML.

  • Теперь, когда обучение завершено, вы можете оценить, насколько хорошо работает модель, выполнив этот запрос с использованием ML.EVALUATE:
SELECT
  roc_auc,
  CASE
    WHEN roc_auc > .9 THEN 'good'
    WHEN roc_auc > .8 THEN 'fair'
    WHEN roc_auc > .7 THEN 'not great'
  ELSE 'poor' END AS model_quality
FROM
  ML.EVALUATE(MODEL ecommerce.classification_model,  (
SELECT
  * EXCEPT(fullVisitorId)
FROM
  # features
  (SELECT
    fullVisitorId,
    IFNULL(totals.bounces, 0) AS bounces,
    IFNULL(totals.timeOnSite, 0) AS time_on_site
  FROM
    `data-to-insights.ecommerce.web_analytics`
  WHERE
    totals.newVisits = 1
    AND date BETWEEN '20170501' AND '20170630') # eval on 2 months
  JOIN
  (SELECT
    fullvisitorid,
    IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit
  FROM
      `data-to-insights.ecommerce.web_analytics`
  GROUP BY fullvisitorid)
  USING (fullVisitorId)
));

После оценки вашей модели вы получаете roc_auc 0,72, что показывает, что модель не обладает большой прогностической силой. Поскольку цель состоит в том, чтобы максимально приблизить площадь под кривой к 1,0, есть возможности для улучшения.

Увидев это, следующая задача заключается в поиске функций для улучшения модели, которые я (пытаюсь) найти другие эффективные функции, чтобы попробовать.

Таким образом, в этом разделе мы использовали Bigquery ML, написав SQL для хранения модели и ее обучения. Biqquery ML — действительно отличный инструмент для использования в машинном обучении. Тем не менее, это лучше всего подходит для людей, знакомых с кодированием, если вы знакомы с SQL, то это выбор.

Vertex AI также имеет функцию Auto ML для всех, кто не знаком с кодированием, простой шаг к обучению, оценке, развертыванию и прогнозированию модели. В следующей статье я буду использовать Auto ML для Vertex AI (Простая практика 1).

Благодарим вас за посещение. Если у кого-то из вас есть отличный источник знаний об ML, поделитесь им.

Ваше здоровье! :)