关于此 Codelab
1. 概览
借助 BigQuery ML (BQML),用户可以使用 SQL 查询在 BigQuery 中创建和执行机器学习模型。其目标是让 SQL 专业人员能够利用现有的工具构建模型,并通过消除数据移动需求来提高开发速度,从而实现机器学习的普及。
构建内容
您将使用 Analytics 360 示例数据集创建一个模型,用于预测访问者是否会进行交易。
学习内容
如何在 BigQuery 中创建、评估和使用机器学习模型
所需条件
2. 设置和要求
自定进度的环境设置
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID
。
- 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。
运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分部分,其中会指导您如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 300 美元的免费试用计划的条件。
打开 BigQuery 控制台
在 Google Developer Console 中,点击屏幕左上角的菜单图标。
向下滚动菜单至底部,然后点击 BigQuery:
这将在新的浏览器标签页中打开 BigQuery 控制台,如下所示:
但是,这里什么都没有!幸运的是,BigQuery 中有大量公共数据集可供您探索。
4. 创建模型
适用于 Analytics 360 的逻辑回归
现在,我们来看看任务。下面介绍了如何创建模型来预测访问者是否会进行交易。
#standardSQL CREATE OR REPLACE MODEL `bqml_codelab.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170631' LIMIT 100000;
在这里,我们使用访问者设备的操作系统(无论所用设备是否为移动设备)、访问者所在的国家/地区以及网页浏览量作为判断是否进行交易的标准。
在本示例中,“Codelab”是数据集的名称,“sample_model”是模型的名称。指定的模型类型是二进制逻辑回归。在本例中,我们尝试调整的是 label
。请注意,如果您仅对 1 列感兴趣,这是设置 input_label_cols
的另一种方法。我们还将训练数据范围限制为 2016 年 8 月 1 日至 2017 年 6 月 31 日期间收集的数据。这样做是为了保存上个月的数据以用于“预测”。此外,为节省一些时间,我们最多只能包含 10 万个数据点。如果您不着急,可以随时删除最后一行。
运行 CREATE MODEL 命令会创建一个异步运行的查询作业,例如,您可以关闭或刷新 BigQuery 界面窗口。
[可选] 型号信息和训练统计信息
如果感兴趣,您可以点击界面中 bqml_codelab 数据集下的“sample_model”,获取模型的相关信息。在详细信息下,您应该可以找到用于生成模型的一些基本模型信息和训练选项。在训练统计信息下,您应该会看到类似如下所示的表:
5. 评估模型
评估模型
#standardSQL SELECT * FROM ml.EVALUATE(MODEL `bqml_codelab.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));
如果与线性回归模型结合使用,上述查询会返回以下列:mean_absolute_error
、mean_squared_error
、mean_squared_log_error
、median_absolute_error
、r2_score
、explained_variance
。如果与逻辑回归模型结合使用,上述查询会返回以下列:precision
、recall
、accuracy
、f1_score
、log_loss
、roc_auc
。请参阅机器学习术语表或执行 Google 搜索,了解上述各项指标的计算方式及其含义。
具体而言,您将发现查询的 SELECT
和 FROM
部分与训练期间使用的部分相同。WHERE
部分反映时间范围的变化,FROM
部分显示我们调用 ml.EVALUATE
。您应该会看到类似如下所示的表:
6. 使用模型
预测每个国家/地区的购买量
在这里,我们尝试预测每个国家/地区的访问者进行的交易数量,对结果进行排序,然后选择购买次数最多的前 10 个国家/地区。
#standardSQL SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10;
请注意,此查询与我们在上一部分中演示的评估查询非常相似。我们在这里使用 ml.PREDICT
而不是 ml.EVALUATE
,并使用标准 SQL 命令封装查询的 BQML 部分。具体而言,我们关注的是国家/地区以及各个国家/地区的购买总和,因此这就是我们 SELECT
、GROUP BY
和 ORDER BY
的结果。此处使用 LIMIT
确保只获取前 10 个结果。您应该会看到类似如下所示的表:
预测每位用户的购买量
再举一个例子。 这一次我们尝试预测每个访问者完成的交易数量,对结果进行排序,并按交易次数选择前 10 位访问者。
#standardSQL SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10;
您应该会看到类似如下所示的表: