使用可求和比率指标从贡献分析模型中获取数据洞见

在本教程中,您将使用贡献分析模型来分析爱荷华州酒类销售数据集中销售成本比的贡献。本教程将指导您完成以下任务:

  • 根据公开提供的爱荷华州酒类数据创建输入表。
  • 创建使用可求和比率指标贡献分析模型。此类模型会汇总两个数值列的值,并确定控制数据集和测试数据集在每个数据段中的比率差异。
  • 使用 ML.GET_INSIGHTS 函数从模型中获取指标数据洞见。

在开始本教程之前,您应该熟悉贡献分析应用场景。

所需权限

  • 如需创建数据集,您需要拥有 bigquery.datasets.create Identity and Access Management (IAM) 权限。

  • 如需创建模型,您需要以下权限:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 如需运行推理,您需要以下权限:

    • bigquery.models.getData
    • bigquery.jobs.create

费用

在本文档中,您将使用 Google Cloud的以下收费组件:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.

您可使用价格计算器,根据您的预计使用情况生成费用估算。

新 Google Cloud 用户可能有资格申请免费试用

如需详细了解 BigQuery 价格,请参阅 BigQuery 文档中的 BigQuery 价格

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the API

创建数据集

创建 BigQuery 数据集以存储机器学习模型。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery 页面

  2. 探索器窗格中,点击您的项目名称。

  3. 点击 查看操作 > 创建数据集

  4. 创建数据集 页面上,执行以下操作:

    • 数据集 ID 部分,输入 bqml_tutorial

    • 位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。

    • 保持其余默认设置不变,然后点击创建数据集

bq

如需创建新数据集,请使用带有 --location 标志的 bq mk 命令。 如需查看完整的潜在参数列表,请参阅 bq mk --dataset 命令参考文档。

  1. 创建一个名为 bqml_tutorial 的数据集,并将数据位置设置为 US,说明为 BigQuery ML tutorial dataset

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    该命令使用的不是 --dataset 标志,而是 -d 快捷方式。如果省略 -d--dataset,该命令会默认创建一个数据集。

  2. 确认已创建数据集:

    bq ls

API

使用已定义的数据集资源调用 datasets.insert 方法。

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrame

在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置 ADC

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

创建输入数据表

创建一个包含要分析的测试数据和控制数据的表。以下查询会创建两个中间表:一个包含 2021 年酒类数据的测试表,以及一个包含 2020 年酒类数据的控制表,然后对这两个中间表执行并集运算,以创建一个同时包含测试行和控制行且具有相同列集的表。

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,运行以下语句:

    CREATE OR REPLACE TABLE bqml_tutorial.iowa_liquor_sales_data AS
    (SELECT
      store_name,
      city,
      vendor_name,
      category_name,
      item_description,
      SUM(sale_dollars) AS total_sales,
      SUM(state_bottle_cost) AS total_bottle_cost,
      FALSE AS is_test
    FROM `bigquery-public-data.iowa_liquor_sales.sales`
    WHERE EXTRACT(YEAR FROM date) = 2020
    GROUP BY store_name, city, vendor_name, category_name, item_description, is_test)
    UNION ALL
    (SELECT
      store_name,
      city,
      vendor_name,
      category_name,
      item_description,
      SUM(sale_dollars) AS total_sales,
      SUM(state_bottle_cost) AS total_bottle_cost,
      TRUE AS is_test
    FROM `bigquery-public-data.iowa_liquor_sales.sales`
    WHERE EXTRACT(YEAR FROM date) = 2021
    GROUP BY store_name, city, vendor_name, category_name, item_description, is_test);

创建模型

创建贡献分析模型:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,运行以下语句:

    CREATE OR REPLACE MODEL bqml_tutorial.liquor_sales_model
    OPTIONS(
      model_type = 'CONTRIBUTION_ANALYSIS',
      contribution_metric = 'sum(total_bottle_cost)/sum(total_sales)',
      dimension_id_cols = ['store_name', 'city', 'vendor_name', 'category_name', 'item_description'],
      is_test_col = 'is_test',
      min_apriori_support = 0.05
    ) AS
    SELECT * FROM bqml_tutorial.iowa_liquor_sales_data;

查询需要大约 35 秒钟才能完成,之后 liquor_sales_model 模型会显示在探索器窗格的 bqml_tutorial 数据集中。由于查询使用 CREATE MODEL 语句来创建模型,因此没有查询结果。

从模型中获取数据洞见

使用 ML.GET_INSIGHTS 函数获取贡献分析模型生成的数据洞见。

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,运行以下语句,从可求和比率指标贡献分析模型的输出中选择列:

    SELECT
    contributors,
    metric_test,
    metric_control,
    metric_test_over_metric_control,
    metric_test_over_complement,
    metric_control_over_complement,
    aumann_shapley_attribution,
    apriori_support
    contribution
    FROM
      ML.GET_INSIGHTS(
        MODEL `bqml_tutorial.liquor_sales_model`)
    ORDER BY aumann_shapley_attribution DESC;

输出结果的前几行应类似于以下内容。 为了提高可读性,系统会截断值。

贡献者 metric_test metric_control metric_test_over_metric_control metric_test_over_complement metric_control_over_complement aumann_shapley_attribution 先验支持度 贡献
全部 0.069 0.071 0.969 null null -0.00219 1.0 0.00219
city=DES MOINES 0.048 0.054 0.88 0.67 0.747 -0.00108 0.08 0.00108
vendor_name=DIAGEO AMERICAS 0.064 0.068 0.937 0.917 0.956 -0.0009 0.184 0.0009
vendor_name=BACARDI USA INC 0.071 0.082 0.857 1.025 1.167 -0.00054 0.057 0.00054
vendor_name=PERNOD RICARD USA 0.068 0.077 0.89 0.988 1.082 -0.0005 0.061 0.0005

在输出中,您可以看到数据细分受众群 city=DES MOINES 对销售比率变化的贡献最大。您还可以从 metric_testmetric_control 列中看出这一差异,这两列显示了测试数据中的比率与对照数据相比有所下降。其他指标(例如 metric_test_over_metric_controlmetric_test_over_complementmetric_control_over_complement)会计算额外的统计信息,用于描述控制组比率与测试组比率之间的关系,以及它们与总体之间的关系。如需了解详情,请参阅可求和的比率指标贡献分析模型的输出

清理

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.