使用 BigQuery ML 和 AI Platform 预测客户的购买意愿

了解如何通过使用 BigQuery ML 和 AI Platform 构建一个系统,以预测客户的购买意愿。

您可以使用购买意愿系统来预测最有可能进行购买的客户,以便能够与其建立个性化通信。利用在线预测功能根据您网站上的用户行为进行实时操作,或者进行批量预测以便为时间不太敏感的通信(例如电子邮件)提供依据。

本教程介绍如何创建逻辑回归模型,以确定客户是否有购买意愿。使用这种类型的模型是因为它适合用于评估结果的概率。该模型会评估用于反映网站上的客户行为的指标,且会根据此数据为客户分配一个购买值介于 0 到 1 之间的概率。然后,该模型会为概率大于 0.5 的任何客户设置一个“可能购买”的标签。

本教程使用 Google Analytics(分析)示例和电子商务数据集来训练模型。这些数据集公开托管在 BigQuery 上。这些数据集提供来自 Google Merchandise Store(销售 Google 品牌商品的真实电子商务商店)的 12 个月(2016 年 8 月至 2017 年 8 月)经过模糊处理的 Analytics 360 数据。

要将本教程中的课程应用于生产使用场景,您可以使用自己的 Analytics 360 数据,或使用类似系统中的数据,在您的网站上访问有关客户行为的指标。

目标

此解决方案涉及以下步骤:

  • 将示例数据处理为适合训练模型的格式。
  • 在 BigQuery 中创建、训练和部署模型。
  • 评估模型以了解其性能。
  • 使用部署在 BigQuery 中且经过训练的模型进行批量预测。
  • 将经过训练的模型部署到 AI Platform。
  • 使用部署在 AI Platform 中且经过训练的模型进行在线预测。

费用

本教程使用 Google Cloud 的以下收费组件:

  • AI Platform
  • BigQuery
  • BigQuery ML
  • Cloud Storage

您可使用价格计算器根据您的预计使用量来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 AI Platform Training and Prediction API。

    启用 API

完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理

准备示例数据

如需训练模型,您需要一个表,其中包含以下各列:

  • fullVisitorId - 包含客户 ID。
  • bounces - 标识访问者点击搜索广告或社交广告并在网站上发起会话,但没有与任何其他网页互动就离开了的次数。这些列用作某种模型的特征
  • time_on_site - 标识客户在网站上进行的会话的总时间(以秒为单位)。此列用作模型的特征
  • will_buy_on_return_visit - 表示客户购买意愿的标签。值 1 表示客户有可能购买,而 0 值表示客户不太可能购买。

请按照以下步骤操作,以使用 Google Analytics(分析)示例数据集中的数据创建此表格:

  1. 在 Google Cloud Marketplace 中打开 Google Analytics(分析)示例数据集,然后点击查看数据集。这将打开已选择 Google Analytics(分析)示例数据集的 BigQuery 控制台。
  2. 资源部分,选择要在其中完成本教程的项目。
  3. 点击创建数据集

    显示“创建数据集”按钮的位置。

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

    1. 对于数据集 ID,请输入 bqml
    2. 数据位置部分,选择离您最近的任意位置。
    3. 点击创建数据集
  5. 查询编辑器中,运行以下 SQL 语句以创建包含训练数据的表。

    # select initial features and label to feed into your model
    CREATE OR REPLACE TABLE bqml.propensity_data AS
      SELECT
        fullVisitorId,
        bounces,
        time_on_site,
        will_buy_on_return_visit
      FROM (
            # select 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' # train on first 9 months of data
            AND '20170430'
           )
      JOIN (
            SELECT
              fullvisitorid,
              IF (
                  COUNTIF (
                           totals.transactions > 0
                           AND totals.newVisits IS NULL
                          ) > 0,
                  1,
                  0
                 ) AS will_buy_on_return_visit
            FROM
              `bigquery-public-data.google_analytics_sample.*`
            GROUP BY
              fullvisitorid
           )
      USING (fullVisitorId)
      ORDER BY time_on_site DESC;
    
  6. 运行以下 SQL 语句以在生成的 bqml.propensity_data 表中查看日期示例:

    SELECT
     *
    FROM
      bqml.propensity_data
    LIMIT
      10;
    

    您应该会看到如下所示的结果:

    已处理的训练数据的前 10 行。

创建和训练模型

创建一个模型,以根据 bouncestime_on_site 数据标识的客户在线行为预测客户购买意愿。

运行 CREATE MODEL SQL 语句以创建、训练和部署逻辑回归模型:

CREATE OR REPLACE MODEL `bqml.rpm_bqml_model`
OPTIONS(MODEL_TYPE = 'logistic_reg',
        labels = [ 'will_buy_on_return_visit' ]
        )
AS
SELECT * EXCEPT (fullVisitorId)
FROM `bqml.propensity_data`;

训练可能需要几分钟。训练完成后,经过训练的模型会在 BigQuery 中部署为 bqml.rpm_bqml_model

评估模型

通过查看模型的 AUC:ROC 曲线下面积性能指标来了解模型的性能。模型的 AUC 值介于 0 与 1 之间,0 表示没有正确的预测,1 表示所有预测都正确。

本教程采用未优化的模型,您可能会从模型中获得良好的结果,但无法获得最佳结果。对于生产使用场景,您需要使用超参数调节特征工程和其他技术来优化模型,从而实现 0.9 或更高的分数。

运行 ML.EVALUATE SQL 语句以评估模型:

SELECT
  roc_auc,
  # evaluating the auc value based on the scale at http://gim.unmc.edu/dxtests/roc3.htm
  CASE WHEN roc_auc >.9 THEN 'excellent' WHEN roc_auc >.8 THEN 'good'
  WHEN roc_auc >.7 THEN 'fair' WHEN roc_auc >.6 THEN 'poor' ELSE 'fail' END
  AS modelquality
FROM ML.EVALUATE(MODEL `bqml.rpm_bqml_model`);

您应该会看到如下所示的结果:

已处理的训练数据的前 10 行。

使用经过训练的模型进行批量预测

使用批量预测可以获取电子邮件广告系列或其他非实时场景的数据。

运行 ML.PREDICT SQL 语句以对 bqml.propensity_data 表中的示例数据进行批量预测:

# predict the inputs (rows) from the input table
SELECT
  fullVisitorId,
  predicted_will_buy_on_return_visit
FROM ML.PREDICT(MODEL bqml.rpm_bqml_model,
(
   SELECT
   fullVisitorId,
   bounces,
   time_on_site
   from bqml.propensity_data
))

您应该会看到如下所示的结果:

已处理的训练数据的前 10 行。

上面的 ML.PREDICT 语句使用默认 threshold 级别 0.5。threshold 值确定两个可能的标签值之间的临界值,预测值高于 threshold 值被标记为正数。对于生产模型,您需要考虑调整 threshold 值并结合其他技术(如超参数调节)来优化模型。

使用经过训练的模型进行在线预测

利用在线预测功能,根据您网站上的用户行为进行实时操作。如需进行在线预测,您必须将模型从 BigQuery 导出到 Cloud Storage,然后将其部署到 AI Platform。然后,您可以将预测请求发送到已部署的模型。

请按照以下步骤导出和部署模型:

  1. 激活 Cloud Shell
  2. 在 Cloud Shell 中,运行以下命令创建 Cloud Storage 存储分区来存储导出的模型。将 myProject 替换为您用于完成本教程的项目的 ID。

    gsutil mb 'gs://myProject-bucket'
    
  3. 将模型导出到 Cloud Storage 存储分区,并将 myBucket 替换为您在第 2 步中创建的存储分区的名称:

     bq extract -m bqml.rpm_bqml_model gs://myBucket/V_1
    
  4. 在 AI Platform 中创建模型:

    gcloud ai-platform models create rpm_bqml_model
    
  5. 将导出的模型部署到 AI Platform,并将 myBucket 替换为您在第 2 步中创建的存储分区的名称:

    gcloud ai-platform versions create --model=rpm_bqml_model V_1 --framework=tensorflow --python-version=3.7 --runtime-version=1.15 --origin=gs://myBucket/V_1/ --staging-bucket=gs://myBucket
    
  6. 创建一个包含示例客户数据的 input.json 文件:

    echo "{\"bounces\": 0, \"time_on_site\": 7363}" > input.json
    
  7. 请求预测:

    gcloud ai-platform predict --model rpm_bqml_model --version V_1 --json-instances input.json
    

    此命令会生成类似于以下内容的输出:

    PREDICTED_WILL_BUY_ON_RETURN_VISIT  WILL_BUY_ON_RETURN_VISIT_PROBS            WILL_BUY_ON_RETURN_VISIT_VALUES
    ['1']                               [0.661069205638202, 0.33893079436179796]  ['1', '0']
    

    模型针对 PREDICTED_WILL_BUY_ON_RETURN_VISIT 返回 1,预测此示例客户可能购买的概率为 66%。

    您可以根据客户的正向预测概率值来决定是否提供优惠券或其他激励。例如,您可以假设客户无需激励也可能进行购买的概率超过 80%,因此您不妨将重点放在购买概率介于 50% 与 80% 之间的客户。

后续步骤(可选)

将解决方案与 CRM 系统集成

您可以选择性在此解决方案上进行扩展,方法是将购买意愿预测结果与电子邮件地址等客户关系管理 (CRM) 系统数据集成,从而简化客户推广工作。如需查看此类型的集成的示例,请参阅 Salesforce Marketing Cloud 受众群体集成。本文介绍如何将 Google Analytics(分析)360 与 Salesforce Marketing Cloud 集成,以便在 Salesforce 电子邮件和短信直销活动中使用 Analytics 360 受众群体。

使用流水线自动执行工作流

通过创建 AI Platform 流水线,您可以选择自动执行本教程所示的数据准备 -> 模型创建和训练 -> 请求预测工作流。使用 bqml_kfp_retail_propensity_to_purchase 笔记本,获取自动执行购买意愿机器学习工作流的分步说明。

清理

为避免系统因本教程中使用的资源而向您的 Google Cloud 帐号收取费用,请删除包含资源的项目,或者保留项目但仅删除这些资源。

无论采用哪种方式,您都应移除这些资源,以免日后再为这些资源付费。以下部分介绍如何删除这些资源。

删除项目

为避免支付费用,最简单的方法是删除您为本教程创建的项目。

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除组件

如果您不想删除项目,请使用以下几个部分删除本教程的可计费组件。

删除 BigQuery 数据集

  1. 打开 BigQuery 控制台
  2. 资源部分中,展开要在其中完成本教程的项目,然后选择 bqml 数据集。
  3. 点击数据集窗格标题中的删除数据集
  4. 在出现的叠加窗口中,输入 bqml,然后点击删除

删除 AI Platform 模型

  1. 打开 AI Platform 模型页面
  2. 在模型列表中,点击 rpm_bqml_model
  3. 模型详情页面上,选中 v_1(默认)版本对应的复选框。
  4. 点击更多 ,然后点击删除
  5. 版本删除完成后,点击返回 返回到模型列表。
  6. 选中 rpm_bqml_model 模型对应的复选框。
  7. 点击更多 ,然后点击删除

删除 Cloud Storage 存储分区

  1. 打开 Cloud Storage 浏览器
  2. 选中 <myProject>-bucket 存储分区对应的复选框。
  3. 点击删除
  4. 在出现的叠加窗口中,输入 DELETE,然后点击确认

后续步骤