概览
BigQuery ML(BigQuery 机器学习)是 BigQuery 中的一项功能,数据分析师可利用它以极少的编码来创建、训练、评估机器学习模型,并用这些模型进行预测。
Google Analytics(分析)示例电子商务数据集将有关 Google Merchandise Store 的数百万条 Google Analytics(分析)记录导入到了 BigQuery 中。在本实验中,您将使用此数据运行一些典型的查询,企业希望通过这些查询了解其客户的购物习惯。
目标
在本实验中,您将学习执行以下任务:
- 使用 BigQuery 查找公开数据集
- 查询和探索此电子商务数据集
- 创建用于批量预测的训练和评估数据集
- 在 BigQuery ML 中创建分类(逻辑回归)模型
- 评估您的机器学习模型的性能
- 预测访问者购物的可能性并对其进行排序
设置您的环境
实验设置
对于每个实验,您都会免费获得一个新的 Google Cloud 项目及一组资源,它们都有固定的使用时限。
-
请使用无痕式窗口登录 Qwiklabs。
-
留意实验的访问时限(例如 1:15:00)并确保能在相应时间段内完成实验。
系统不提供暂停功能。如有需要,您可以重新开始实验,不过必须从头开始。
-
准备就绪时,点击开始实验。
-
请记好您的实验凭据(用户名和密码)。您需要使用这组凭据来登录 Google Cloud 控制台。
-
点击打开 Google 控制台。
-
点击使用其他帐号,然后将此实验的凭据复制并粘贴到相应提示框中。
如果您使用其他凭据,将会收到错误消息或产生费用。
-
接受条款并跳过恢复资源页面。
打开 BigQuery 控制台
- 在 Google Cloud 控制台中,选择导航菜单 > BigQuery。
您会看到欢迎在 Cloud 控制台中使用 BigQuery 消息框,其中会显示快速入门指南的链接以及界面更新。
- 点击完成。
访问课程数据集
打开 BigQuery 后,在新的浏览器标签页中打开 data-to-insights 项目,将此项目显示在 BigQuery 项目面板中。
data-to-insights 电子商务数据集的字段定义显示在 [UA] BigQuery Export 架构页上。在新标签页中打开该链接并且不要关闭,以供参考。
任务 1. 探索电子商务数据
场景:您的数据分析团队已将某个电子商务网站的 Google Analytics(分析)日志导出到 BigQuery,并新建了包含所有电子商务访问者会话原始数据的表供您探索。使用此数据,您将尝试回答几个问题。
问题:在访问我们网站的所有访问者中,有百分之多少购买了商品?
- 点击查询编辑器。
- 将以下内容添加到“新建查询”字段:
#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
- 点击运行。
结果:2.69%
问题:哪 5 种商品最畅销?
- 在查询编辑器中添加以下查询,然后点击运行:
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 |
Nest® Learning Thermostat 3rd Gen-USA - Stainless Steel |
Nest-USA |
17651 |
870976.95 |
| 2 |
Nest® Cam Outdoor Security Camera - USA |
Nest-USA |
16930 |
684034.55 |
| 3 |
Nest® Cam Indoor Security Camera - USA |
Nest-USA |
14155 |
548104.47 |
| 4 |
Nest® Protect Smoke + CO White Wired Alarm-USA |
Nest-USA |
6394 |
178937.6 |
| 5 |
Nest® Protect Smoke + CO White Battery Alarm-USA |
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% 的访问者将返回网站并购物。这包括在首次访问期间购物并返回网站再次购物的那部分访问者。
此行为对于奢侈品非常常见,客户需要进行大量的前期调查和对比才能作出决定(考虑买车的情形),但此网站上的商品(T 恤、配饰等)也符合这一规律,只是程度较低。
在线上营销领域,根据首次访问的特征识别潜在客户并针对其进行营销,可以提升转化率并减少流失到竞争网站的情况。
任务 2. 选择特征并创建您的训练数据集
现在,您将在 BigQuery 中创建机器学习模型,来预测某位新用户将来是否可能购物。识别这些高价值用户可以帮助您的营销团队向其定向投放特殊促销和广告系列。
Google Analytics(分析)会捕获有关用户访问此电子商务网站的众多维度和测量指标。请在 [UA] BigQuery Export 架构指南中浏览字段的完整列表,然后预览演示数据集以找到有用的特征,这些特征将帮助机器学习模型了解有关访问者首次访问网站的数据与该访问者是否会返回并购物之间的关系。
您的团队决定测试这两个字段是不是分类模型的良好输入:
-
totals.bounces(访问者是否立即离开网站)
-
totals.timeOnSite(访问者浏览我们网站的时间)
机器学习的准确性最高与为其馈送的训练数据相当。如果没有足够的信息让模型确定并学习您的输入特征和标签(在本例中,即访问者将来是否购物)之间的关系,您就不会得到准确的模型。虽然仅针对这两个字段训练模型只是一个开始,但您将看到它们是否足以产生准确的模型。
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 能否成为判定用户是否返回并购物的良好指标?
答案:在训练和评估模型之前下结论通常过早,但粗略一看,time_on_site 前 10 的访问者中,只有 1 名客户返回并购买,前景并不好。让我们来看看模型的效果吧。
任务 3. 创建 BigQuery 数据集来存储模型
接下来,创建新的 BigQuery 数据集,它也将存储您的机器学习模型。
- 在左侧面板中,点击项目名称,然后点击
查看操作图标(三点)并选择创建数据集。

- 在创建数据集对话框中执行以下操作:
- 对于数据集 ID,请输入 ecommerce。
- 将其他值保留为默认值。
- 点击创建数据集。
任务 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)
;
- 接下来,点击运行以训练模型。
等待模型完成训练(5 - 10 分钟)。
注意:不能在训练期间将您的所有可用数据都馈送给模型,因为需要保留一些模型未见过的数据点来对其进行评估和测试。要完成此操作,请通过添加 WHERE 子句条件来筛选您 12 个月的数据集中前 9 个月的访问数据,并仅利用这部分数据进行训练。
模型训练完成后,您将看到消息“This statement created a new model named qwiklabs-gcp-xxxxxxxxx:ecommerce.classification_model”(本语句创建了名为 qwiklabs-gcp-xxxxxxxxx:ecommerce.classification_model 的新模型)。
- 点击转到模型。
查看此电子商务数据集内部,并确认现在显示了 classification_model。
接下来,您将评估模型针对未曾见过的评估数据的性能。
任务 5. 评估分类模型性能
选择您的性能标准
对于机器学习中的分类问题,您需要尽量减小假正例率(预测用户将返回并购买,而该用户实际并未返回并购买),并尽量增大真正例率(预测用户将返回并购买,且该用户确实返回并购买)。
我们通过如下所示的 ROC(接收者工作特征)曲线可视化了这种关系,您要尽量增大曲线下方区域面积 (AUC):

在 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 = Completed Purchase(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 |
通过这一新模型,您现在获得了 0.91 的 roc_auc,较第一个模型有大幅改善。
现在,您拥有经训练的模型,可以进行预测了。
任务 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 年 7 月电子商务访问者的预测。您可以看到三个新添加的字段:
- predicted_will_buy_on_return_visit:模型认为访问者稍后是否会购物(1 = 是)
- predicted_will_buy_on_return_visit_probs.label:是/否的二元分类器
- predicted_will_buy_on_return_visit_probs.prob:模型对其预测的置信度 (1 = 100%)
结果
- 排名前 6% 的初访者(按预测可能性降序排列)中,超过 6% 在后续访问中购物。
- 这些用户占在后续访问中进行购买的所有初访者的将近 50%。
- 总体上,只有 0.7% 的初访者在后续访问中进行购买。
- 与针对所有初访者进行营销相比,针对前 6% 的初访者进行营销可使营销 ROI 提升 9 倍!
更多信息
roc_auc 只是模型评估期间可用的性能指标之一,还可使用准确率、精确率和召回率。了解应依赖哪个性能指标,高度取决于您具体的总体目标。
恭喜!
您仅仅使用 SQL 便创建了一个机器学习模型。
挑战
摘要
在前两个任务中,您看到了工作中的特征工程在改进模型性能方面的作用。但是,我们仍然可能通过探索其他模型类型来改进性能。对于分类问题,BigQuery ML 还支持以下模型类型:
任务
虽然我们的线性分类(逻辑回归)模型在进行特征工程之后性能良好,但该模型可能过于简单,无法完全捕获特征与标签之间的关系。您的挑战是使用在任务 6 中创建 ecommerce.classification_model_2 模型时所用的数据集和标签,创建 XGBoost 分类器。
注意:
提示:将以下选项用于 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 是完美的 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 模型类型相比更为准确了。
结束实验
完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。
系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交。
星级数的含义如下:
- 1 颗星 = 非常不满意
- 2 颗星 = 不满意
- 3 颗星 = 一般
- 4 颗星 = 满意
- 5 颗星 = 非常满意
如果您不想提供反馈,可以关闭该对话框。
如果要留言反馈、提出建议或做出更正,请使用支持标签页。
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。