BigQuery ML 使用入门

1. 概览

借助 BigQuery ML (BQML),用户可以使用 SQL 查询在 BigQuery 中创建和执行机器学习模型。其目标是让 SQL 专业人员能够利用现有的工具构建模型,并通过消除数据移动需求来提高开发速度,从而实现机器学习的普及。

构建内容

您将使用 Analytics 360 示例数据集创建一个模型,用于预测访问者是否会进行交易。

学习内容

如何在 BigQuery 中创建、评估和使用机器学习模型

所需条件

  • 一个浏览器,例如 ChromeFirefox
  • 具备 SQL 或 BigQuery 方面的基础知识
  • BQML 文档

2. 设置和要求

自定进度的环境设置

  1. 登录 Cloud 控制台,然后创建一个新项目或重复使用现有项目。 如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

96a9c957bc475304

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID

  1. 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。

运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分部分,其中会指导您如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 300 美元的免费试用计划的条件。

打开 BigQuery 控制台

在 Google Developer Console 中,点击屏幕左上角的菜单图标。

select-bq_0.png

向下滚动菜单至底部,然后点击 BigQuery

select-bq.png

这将在新的浏览器标签页中打开 BigQuery 控制台,如下所示:

8b0218390329e8cf.png

但是,这里什么都没有!幸运的是,BigQuery 中有大量公共数据集可供您探索。

3. 创建数据集

如需创建数据集,请点击项目名称旁边的箭头,然后选择创建新数据集

4f51bf57291a59db

接下来,将您的数据集命名为 bqml_codelab,然后点击“确定”。

63e32478a5652fbc.png

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”,获取模型的相关信息。在详细信息下,您应该可以找到用于生成模型的一些基本模型信息和训练选项。在训练统计信息下,您应该会看到类似如下所示的表:

b8bd9548a0d89165.png

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_errormean_squared_errormean_squared_log_errormedian_absolute_errorr2_scoreexplained_variance。如果与逻辑回归模型结合使用,上述查询会返回以下列:precisionrecallaccuracyf1_scorelog_lossroc_auc。请参阅机器学习术语表或执行 Google 搜索,了解上述各项指标的计算方式及其含义。

具体而言,您将发现查询的 SELECTFROM 部分与训练期间使用的部分相同。WHERE 部分反映时间范围的变化,FROM 部分显示我们调用 ml.EVALUATE。您应该会看到类似如下所示的表:

1c7779f6028730cc

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 部分。具体而言,我们关注的是国家/地区以及各个国家/地区的购买总和,因此这就是我们 SELECTGROUP BYORDER BY 的结果。此处使用 LIMIT 确保只获取前 10 个结果。您应该会看到类似如下所示的表:

e639f7a409741dcb.png

预测每位用户的购买量

再举一个例子。 这一次我们尝试预测每个访问者完成的交易数量,对结果进行排序,并按交易次数选择前 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;

您应该会看到类似如下所示的表:

2be1d8fa96e10178

7. 恭喜!

您已完成此 Codelab。想要参加挑战吗?尝试使用 BQML 创建线性回归模型。

所学内容

  • 创建二元逻辑回归模型
  • 评估模型
  • 使用模型进行预测

后续步骤

  • 如需详细了解 BQML,请参阅相关文档