BigQuery ML 使用入门

1. 概览

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

构建内容

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

学习内容

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

所需条件

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

2. 设置和要求

自定进度的环境设置

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

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

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

打开 BigQuery 控制台

在 Google 开发者控制台中,点击屏幕左上角的菜单图标。

select-bq_0.png

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

select-bq.png

系统随即会在新的浏览器标签页中打开 BigQuery 控制台,如下所示:

8b0218390329e8cf.png

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

3. 创建数据集

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

4f51bf57291a59db.png

接下来,将数据集命名为 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 月 30 日收集的数据。我们这样做是为了保留最后一个月的数据用于“预测”。此外,为了节省时间,我们将数据点数量限制为 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.png

6. 使用模型

预测每个国家/地区的购买量

在此示例中,我们尝试预测每个国家/地区的访问者的交易量,对结果排序,并选出购买量最高的十个国家/地区。

#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

预测每位用户的购买量

再举一个例子。现在,我们尝试预测每个访问者的交易量,对结果排序,并选出交易量最高的前十个访问者。

#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.png

7. 恭喜!

您已完成此 Codelab。想挑战一下自己?尝试使用 BQML 创建线性回归模型。

所学内容

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

后续步骤

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