За допомогою функції BigQuery ML (машинного навчання BigQuery) аналітики даних можуть створювати, навчати й оцінювати моделі машинного навчання, а також використовувати їх для прогнозування з мінімальним кодуванням.
У BigQuery завантажено тестовий набір даних про електронну комерцію Google Analytics із мільйонами записів для магазину Google Merchandise Store. Під час цієї практичної роботи ви будете використовувати ці дані, щоб опрацьовувати найпоширеніші запити компаній щодо купівельних звичок клієнтів.
Цілі
У цій практичній роботі ви навчитеся виконувати наведені нижче дії.
Використовувати BigQuery для пошуку загальнодоступних наборів даних.
Виконувати запити наборів даних про електронну комерцію й аналізувати отриману інформацію.
Створювати набір даних для навчання й оцінки моделі, щоб отримувати групові прогнози.
Створювати модель класифікації (за методом логістичної регресії) у BigQuery ML.
Оцінювати ефективність моделі машинного навчання.
Прогнозувати й визначати ймовірність здійснення покупки відвідувачем.
Налаштування середовищ
Налаштування практичної роботи
Для кожної практичної роботи ви безкоштовно отримуєте новий проект Google Cloud і набір інструментів на визначений період часу.
Увійдіть у Qwiklabs у вікні в режимі анонімного перегляду.
Слідкуйте за тим, скільки часу залишилося для виконання практичної роботи (наприклад: 1:15:00). Постарайтеся завершити її вчасно.
Завдання не можна призупинити, а лише почати спочатку.
Коли будете готові, натисніть Start Lab (Почати практичну роботу).
Занотуйте облікові дані для практичної роботи (ім’я користувача й пароль). Вони знадобляться для входу в Google Cloud Console.
Натисніть Open Google Console (Відкрити Google Console).
Виберіть Use another account (Увійти в інший обліковий запис), потім скопіюйте та вставте облікові дані для доступу до цієї практичної роботи у відповідні поля.
Якщо ви ввійдете з іншими обліковими даними, станеться помилка або з вас може почати стягуватися плата.
Прийміть умови й пропустіть сторінку відновлення ресурсу.
Відкрийте BigQuery в Console
У Google Cloud Console виберіть Navigation menu (Меню навігації) > BigQuery.
Відкриється повідомлення Welcome to BigQuery in the Cloud Console (Вітаємо в BigQuery в Cloud Console). Це повідомлення містить посилання на короткий посібник і перелік оновлень інтерфейсу.
Визначення полів для набору даних про електронну комерцію data-to-insights (дані для статистики) наведено насторінці "[UA] Схема BigQuery Export". Залиште це посилання відкритим у новій вкладці для довідки.
Завдання 1. Проаналізуйте дані про електронну комерцію
Сценарій: команда аналітиків даних експортувала записи журналів Google Analytics щодо веб-сайту електронної комерції в BigQuery, а також створила нову таблицю з усіма необробленими даними про сеанси відвідувачів цього веб-сайту. Проаналізуйте ці дані й дайте відповіді на кілька запитань.
Запитання. Скільки відвідувачів вебсайту (у відсотках) здійснили покупку?
Натисніть Editor (Редактор).
Додайте наведений нижче фрагмент коду в поле New Query (Новий запит).
#standardSQL
WITH visitors AS(
SELECT
COUNT(DISTINCT fullVisitorId) AS total_visitors
FROM `data-to-insights.ecommerce.web_analytics`
),
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
Натисніть Run (Виконати).
Результат: 2,69%.
Запитання. Які 5 товарів продаються найкраще?
Додайте наведений нижче запит в EDITOR (РЕДАКТОР), а потім натисніть Run (Виконати).
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 5;
Результат:
Row
v2ProductName
v2ProductCategory
units_sold
revenue
1
Термостат 3-го покоління з іржостійкої сталі Nest® Learning Thermostat (США)
Nest-USA
17651
870976.95
2
Камера відеоспостереження для вулиці Nest® Cam (США)
Nest-USA
16930
684034.55
3
Камера відеоспостереження для приміщень Nest® Cam (США)
Nest-USA
14155
548104.47
4
Датчик диму та чадного газу з дротовим живленням (білого кольору) Nest® Protect (США)
Nest-USA
6394
178937.6
5
Датчик диму та чадного газу на акумуляторах (білого кольору) Nest® Protect (США)
Nest-USA
6340
178572.4
Запитання. Скільки користувачів здійснили покупки на веб-сайті під час наступних відвідувань?
Щоб отримати відповідь, виконайте наведений нижче запит.
# 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
Результат:
Row
total_visitors
will_buy_on_return_visit
1
729848
0
2
11873
1
Отже, під час наступних відвідувань покупку здійснить такий відсоток користувачів веб-сайту: (11873 / 729848) = 1,6%. Ці дані охоплюють відвідувачів, які здійснили покупку під час першого сеансу, а потім іще раз відвідали веб-сайт і знову щось купили.
Так часто роблять покупці предметів розкоші: наприклад, перш ніж придбати автомобіль, покупець ретельно вивчає та порівнює пропозиції на ринку. Меншою мірою це стосується й асортименту цього сайту (футболок, аксесуарів тощо).
Спеціалісти з інтернет-маркетингу використовують дані про перше відвідування, щоб визначати потенційних покупців і націлювати на них відповідну рекламу. Це дає змогу підвищити коефіцієнт конверсії та запобігти відтоку клієнтів на сайти конкурентів.
Завдання 2. Виберіть ознаки та створіть навчальний набір даних
Вам потрібно створити модель машинного навчання в BigQuery, щоб спрогнозувати, чи здійснить новий користувач покупку в майбутньому. Команда з маркетингу зможе націлювати на таких цінних користувачів спеціальні пропозиції і рекламні кампанії.
Google Analytics збирає різні показники щодо відвідування цього веб-сайту. Ознайомтеся з повним переліком полів у посібнику "[UA] Схема BigQuery Export", а потім перегляньте демонстраційний набір даних: ви дізнаєтеся про корисні функції, за допомогою яких модель машинного навчання зрозуміє зв’язок між інформацією про перше відвідування користувачем веб-сайту та ймовірністю того, що він повернеться й здійснить покупку.
Вашій команді потрібно визначити, чи варто використовувати ці два поля в моделі класифікації:
totals.bounces (показує, чи відвідувач залишив веб-сайт відразу);
totals.timeOnSite (показує, скільки часу відвідувач перебував на веб-сайті).
Ефективність машинного навчання залежить від якості завантажених тренувальних даних. Якщо модель отримає недостатньо інформації, щоб визначити та вивчити зв’язок між вхідними даними та вашою міткою (у нашому прикладі – чи здійснить відвідувач покупку в майбутньому), прогнозування буде неточним. Почніть навчання на основі цих двох полів, щоб зрозуміти, чи достатньо даних для отримання точної моделі.
Додайте наведений нижче код в EDITOR (РЕДАКТОР) і натисніть Run (Виконати).
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;
Результати:
Row
bounces
time_on_site
will_buy_on_return_visit
1
0
15047
0
2
0
12136
0
3
0
11201
0
4
0
10046
0
5
0
9974
0
6
0
9564
0
7
0
9520
0
8
0
9275
1
9
0
9138
0
10
0
8872
0
Обговорення. Після першого відвідування значення will_buy_on_return_visit невідоме. За умовами завдання ви створюєте прогноз щодо користувачів, які повернулися на веб-сайт і здійснили покупку. Ви не можете зазирнути в майбутнє й дізнатися напевно, чи повернеться новий відвідувач, щоб щось придбати. Мета створення моделі машинного навчання полягає в тому, щоб визначити ймовірність покупки на основі даних про перший сеанс відвідування.
Запитання. Чи достатньо значень time_on_site і bounces, щоб визначити, чи повернеться користувач для здійснення покупки?
Відповідь. На це запитання краще відповідати після завершення навчання й оцінки моделі. Проте на перший погляд результат не дуже обнадійливий, оскільки з 10 покупців із найвищим показником time_on_site лише 1 повернувся та здійснив покупку. Перевірмо, як працюватиме модель.
Завдання 3. Створіть набір даних BigQuery для зберігання моделей
Тепер створіть новий набір даних BigQuery, у якому зберігатимуться ваші моделі машинного навчання.
На панелі ліворуч натисніть назву проекту, а потім – значок із трьома крапками View action (Переглянути дію). Виберіть Create Dataset (Створити набір даних).
У вікні Create Dataset (Створити набір даних) виконайте наведені нижче дії.
Введіть ecommerce (електронна комерція) у полі Dataset ID (Ідентифікатор набору даних).
Залиште інші значення за умовчанням.
Натисніть Create dataset (Створити набір даних).
Завдання 4. Виберіть тип моделі BigQuery ML і налаштуйте параметри
Ви вже вибрали початкові параметри, тож час перейти до створення першої моделі машинного навчання в BigQuery.
Є моделі таких двох типів:
Модель
Тип моделі
Тип даних мітки
Приклад
Прогнозування
linear_reg
Числове значення (ціле число або число з рухомою комою)
Прогноз продажів на наступний рік на основі історичних даних
Класифікація
logistic_reg
0 або 1 для двійкової класифікації
Класифікація електронних листів на спам і не спам на основі контексту
Примітка. Існує багато інших типів моделей машинного навчання (наприклад, нейронні мережі й дерева рішень), а також доступних для використання бібліотек, як-от TensorFlow. На момент написання статті в BigQuery ML підтримувалися дві описані вище моделі.
Введіть наведений нижче запит, щоб створити модель і налаштувати її параметри.
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)
;
Потім натисніть Run (Запустити), щоб почати навчання моделі.
Навчання триватиме від 5 до 10 хвилин.
Примітка. Не завантажуйте всі дані під час навчання моделі – потрібно залишити кілька невідомих точок даних, щоб згодом оцінити й протестувати модель. Щоб завершити налаштування, додайте умову WHERE для фільтрування, за якою з вашого набору даних про сеанси за 12 місяців для навчання використовуватимуться лише дані за перші 9 місяців.
Щойно модель завершить навчання, з’явиться таке повідомлення: "This statement created a new model named qwiklabs-gcp-xxxxxxxxx:ecommerce.classification_model" ("За цією інструкцією створено нову модель під назвою qwiklabs-gcp-xxxxxxxxx:ecommerce.classification_model").
Натисніть Go to model (Перейти до моделі).
Відкрийте набір даних про електронну комерцію та переконайтеся, що модель classification_model створено.
Тепер можна оцінити ефективність моделі за допомогою нових невідомих даних.
Завдання 5. Оцініть ефективність моделі класифікації
Виберіть критерії оцінки ефективності
Щоб класифікувати дані за допомогою машинного навчання, потрібно зменшити кількість помилково позитивних результатів (коли прогноз щодо повернення користувача та здійснення покупки не справджується) і збільшити кількість істинно позитивних (коли прогноз справджується).
Нижче наведено приклад кривої ROC (робочої характеристики приймача), яка відображає це співвідношення. Потрібно максимально збільшити показник AUC – площу під кривою ROC.
У BigQuery ML можна виконати запит поля roc_auc для оцінки навченої моделі машинного навчання.
Навчання завершено. Тепер можна оцінити ефективність моделі прогнозування, виконавши наведений нижче запит за допомогою 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)
));
Ви маєте отримати такий результат:
Row
roc_auc
model_quality
1
0.724588
not great
Отже, показник roc_auc вашої моделі дорівнює 0,72, тобто точність прогнозування недостатня. Оскільки цей показник потрібно максимально наблизити до 1,0, модель потребує оптимізації.
Завдання 6. Підвищити ефективність моделі за допомогою конструювання ознак
Як говорилося раніше, набір даних має багато ознак, за якими модель може краще зрозуміти зв’язок між першим відвідуванням сайту й імовірністю того, що покупець здійснить покупку під час наступних відвідувань.
Додайте кілька нових ознак і створіть другу модель машинного навчання під назвою classification_model_2.
До якого етапу оформлення замовлення відвідувач дійшов під час першого сеансу.
Як відвідувач потрапив на сайт (джерело трафіку: звичайний пошук, з іншого сайту тощо).
Інформація про географічне місцеположення (країна).
Створіть другу модель, виконавши наведений нижче запит.
CREATE OR REPLACE MODEL `ecommerce.classification_model_2`
OPTIONS
(model_type='logistic_reg', labels = ['will_buy_on_return_visit']) AS
WITH all_visitor_stats AS (
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
)
# add in new features
SELECT * EXCEPT(unique_session_id) FROM (
SELECT
CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id,
# labels
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# behavior on the site
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# where the visitor came from
trafficSource.source,
trafficSource.medium,
channelGrouping,
# mobile or desktop
device.deviceCategory,
# geographic
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE 1=1
# only predict for new visits
AND totals.newVisits = 1
AND date BETWEEN '20160801' AND '20170430' # train 9 months
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
);
Примітка. Цю модель потрібно навчати за допомогою тих самих даних за перші 9 місяців – так ви зможете переконатися, що ефективність моделі підвищилася завдяки правильно підібраним вихідним ознакам, а не через новий набір даних для навчання.
У запит навчального набору даних було додано нову ключову ознаку – етап оформлення замовлення, до якого дійшов відвідувач під час сеансу. Ці дані вказуються в полі hits.eCommerceAction.action_type. На сторінці з визначеннями полів наведено різні значення цього поля, де 6 = здійснення покупки.
Крім того, набір даних веб-аналітики включає вкладені поля та поля для повторного введення даних, як-от ARRAYS (МАСИВИ). Їх потрібно розбити на окремі рядки в наборі даних. Для цього можна використати функцію UNNEST(), як у наведеному вище запиті.
Навчання триватиме від 5 до 10 хвилин.
Оцініть точність прогнозування нової моделі за допомогою наведеного нижче запиту.
#standardSQL
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_2, (
WITH all_visitor_stats AS (
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
)
# add in new features
SELECT * EXCEPT(unique_session_id) FROM (
SELECT
CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id,
# labels
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# behavior on the site
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# where the visitor came from
trafficSource.source,
trafficSource.medium,
channelGrouping,
# mobile or desktop
device.deviceCategory,
# geographic
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE 1=1
# only predict for new visits
AND totals.newVisits = 1
AND date BETWEEN '20170501' AND '20170630' # eval 2 months
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
)
));
Вивід:
Row
roc_auc
model_quality
1
0.910382
good
Показник roc_auc нової моделі дорівнює 0,91, тобто результат набагато кращий порівняно з першою моделлю.
Навчання моделі завершено, можна почати прогнозування.
Завдання 7. Спрогнозуйте, хто з нових відвідувачів повернеться, щоб здійснити покупку
Вам потрібно створити запит, щоб спрогнозувати, хто з нових відвідувачів повернеться та купить товар.
Виконайте наведений нижче запит: він використовує покращену модель класифікації, щоб спрогнозувати ймовірність того, що новий відвідувач Google Merchandise Store повернеться та здійснить покупку.
SELECT
*
FROM
ml.PREDICT(MODEL `ecommerce.classification_model_2`,
(
WITH all_visitor_stats AS (
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
)
SELECT
CONCAT(fullvisitorid, '-',CAST(visitId AS STRING)) AS unique_session_id,
# labels
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# behavior on the site
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# where the visitor came from
trafficSource.source,
trafficSource.medium,
channelGrouping,
# mobile or desktop
device.deviceCategory,
# geographic
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE
# only predict for new visits
totals.newVisits = 1
AND date BETWEEN '20170701' AND '20170801' # test 1 month
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
)
)
ORDER BY
predicted_will_buy_on_return_visit DESC;
Прогноз будується на основі даних із набору за останній із 12 місяців.
Модель згенерує прогнози для сеансів електронної комерції за липень 2017 року. Ви побачите три нових поля:
predicted_will_buy_on_return_visit: чи здійснить відвідувач покупку пізніше згідно з прогнозом моделі (1 = так);
predicted_will_buy_on_return_visit_probs.label: двійковий класифікатор для значень yes / no (так / ні);
predicted_will_buy_on_return_visit_probs.prob: упевненість моделі в прогнозі (1 = 100%).
Результати
Відвідувачів відсортовано за ймовірністю здійснення покупки в порядку спадання. Із 6% нових користувачів із верхньої частини списку понад 6% здійснюють покупку під час наступного відвідування.
Це майже 50% від загальної кількості нових відвідувачів, які роблять покупку під час наступного візиту.
Загалом таких нових відвідувачів лише 0,7%.
Націлювання на 6% нових відвідувачів у верхній частині списку збільшує рентабельність інвестицій у рекламу в 9 разів порівняно з націлюванням на всіх нових користувачів.
Додаткова iнформацiя
roc_auc – лише один із показників для оцінки ефективності моделі. Також можна використовувати показники точності, влучності й повноти. Вибір показника залежить від загальної мети.
Вітаємо!
Ви створили модель машинного навчання лише за допомогою SQL.
Завдання підвищеної складності
Підсумок
Під час двох попередніх завдань ви побачили, як можна підвищити ефективність моделі за допомогою конструювання ознак. Крім того, можна використовувати інші типи моделей. У BigQuery ML підтримуються наведені нижче типи моделей для класифікації даних.
Завдяки конструюванню ознак модель на основі лінійної класифікації (логістичної регресії) працює ефективніше, проте вона може бути занадто простою, щоб повністю проаналізувати зв’язок між ознаками й міткою. Тепер потрібно створити класифікатор XGBoost, використовуючи мітки та набір даних із завдання 6 (створення моделі ecommerce.classification_model_2).
Примітка. Підказка. Скористайтеся наведеними нижче параметрами для класифікатора Boosted_Tree_Classifier.
1. L2_reg = 0,1.
2. num_parallel_tree = 8.
3. max_tree_depth = 10.
Точний синтаксис можна переглянути в документації за посиланнями вище. Навчання моделі триватиме близько 7 хвилин. Якщо виникнуть проблеми, перегляньте відповідь нижче.
Відповідь
Нижче наведено запит для створення класифікатора XGBoost.
CREATE OR REPLACE MODEL `ecommerce.classification_model_3`
OPTIONS
(model_type='BOOSTED_TREE_CLASSIFIER' , l2_reg = 0.1, num_parallel_tree = 8, max_tree_depth = 10,
labels = ['will_buy_on_return_visit']) AS
WITH all_visitor_stats AS (
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
)
# add in new features
SELECT * EXCEPT(unique_session_id) FROM (
SELECT
CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id,
# labels
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# behavior on the site
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# where the visitor came from
trafficSource.source,
trafficSource.medium,
channelGrouping,
# mobile or desktop
device.deviceCategory,
# geographic
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE 1=1
# only predict for new visits
AND totals.newVisits = 1
AND date BETWEEN '20160801' AND '20170430' # train 9 months
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
);
Перевірмо ефективність моделі.
#standardSQL
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_3, (
WITH all_visitor_stats AS (
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
)
# add in new features
SELECT * EXCEPT(unique_session_id) FROM (
SELECT
CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id,
# labels
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# behavior on the site
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# where the visitor came from
trafficSource.source,
trafficSource.medium,
channelGrouping,
# mobile or desktop
device.deviceCategory,
# geographic
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE 1=1
# only predict for new visits
AND totals.newVisits = 1
AND date BETWEEN '20170501' AND '20170630' # eval 2 months
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
)
));
Показник roc_auc виріс майже на 0,02 і сягнув 0,94!
Примітка. Через випадковий характер навчання ви можете отримати інші значення.
Показник roc_auc змінився несуттєво, проте що ближче до максимального значення (1), то важче його покращувати.
Це чудовий приклад того, що в BigQuery ML можна легко перевірити ефективність різних типів моделей із різноманітними параметрами. Ми зробили модель значно складнішою, просто змінивши один рядок у коді SQL.
Щоб підібрати правильні параметри, потрібно експериментувати. Спочатку випробуйте різні моделі, щоб підібрати оптимальну, а потім поекспериментуйте з різними наборами параметрів (цей процес називається налаштуванням гіперпараметрів).
Тепер згенеруймо прогноз за допомогою покращеної моделі, щоб порівняти його з попередніми показниками. За допомогою моделі типу покращене дерево рішень можна підвищити показник ROC AUC на 0,2. Нижче наведено запит, за яким можна спрогнозувати, хто з нових відвідувачів повернеться, щоб здійснити покупку.
SELECT
*
FROM
ml.PREDICT(MODEL `ecommerce.classification_model_3`,
(
WITH all_visitor_stats AS (
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
)
SELECT
CONCAT(fullvisitorid, '-',CAST(visitId AS STRING)) AS unique_session_id,
# labels
will_buy_on_return_visit,
MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress,
# behavior on the site
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site,
totals.pageviews,
# where the visitor came from
trafficSource.source,
trafficSource.medium,
channelGrouping,
# mobile or desktop
device.deviceCategory,
# geographic
IFNULL(geoNetwork.country, "") AS country
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h
JOIN all_visitor_stats USING(fullvisitorid)
WHERE
# only predict for new visits
totals.newVisits = 1
AND date BETWEEN '20170701' AND '20170801' # test 1 month
GROUP BY
unique_session_id,
will_buy_on_return_visit,
bounces,
time_on_site,
totals.pageviews,
trafficSource.source,
trafficSource.medium,
channelGrouping,
device.deviceCategory,
country
)
)
ORDER BY
predicted_will_buy_on_return_visit DESC;
Результат свідчить, що наявна модель класифікації точніше прогнозує ймовірність того, чи повернеться новий відвідувач Google Merchandise Store, щоб здійснити покупку.
Порівнявши отримані показники з моделлю із завдання 7, можна зробити висновок, що поточна модель здійснює точніше прогнозування, ніж модель типу logistic_regression.
Завершіть завдання
Закінчивши виконувати завдання, натисніть кнопку End Lab (Завершити завдання). Google Cloud Skills Boost вилучить використані ресурси й очистить обліковий запис.
Ви зможете оцінити, наскільки вам сподобалося виконувати завдання на платформі. Виберіть потрібну кількість зірочок, введіть коментар і натисніть Submit (Надіслати).
Кількість зірочок відповідає певній оцінці:
1 зірочка = зовсім не сподобалося
2 зірочки = не сподобалося
3 зірочки = не можу сказати напевно
4 зірочки = сподобалося
5 зірочок = дуже сподобалося
Якщо ви не хочете надсилати відгук, просто закрийте діалогове вікно.
Залишайте свої відгуки, пропозиції або коментарі на вкладці Support (Підтримка).
Labs create a Google Cloud project and resources for a fixed time
Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
On the top left of your screen, click Start lab to begin
Use private browsing
Copy the provided Username and Password for the lab
Click Open console in private mode
Sign in to the Console
Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
Accept the terms, and skip the recovery resource page
Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project
This content is not currently available
We will notify you via email when it becomes available
Great!
We will contact you via email if it becomes available
One lab at a time
Confirm to end all existing labs and start this one
Use private browsing to run the lab
Use an Incognito or private browser window to run this lab. This
prevents any conflicts between your personal account and the Student
account, which may cause extra charges incurred to your personal account.
Хочете створювати моделі машинного навчання за допомогою лише SQL? Дізнайтесь, як це зробити, використовуючи BigQuery ML і набір даних про електронну комерцію Google Analytics.
Тривалість:
Час налаштування: 0 хв
·
Доступ протягом 80 хв
·
Час виконання: 70 хв