BigQuery ML と AI Platform を使用して顧客の購入傾向を予測する

BigQuery ML と AI Platform を使用して、顧客の購入傾向を予測するシステムを構築する方法について説明します。

購入傾向システムを使用して、購入する可能性の高い顧客を予測し、顧客とのコミュニケーションをパーソナライズできます。オンライン予測を使用して、ウェブサイトでのユーザーの行動に基づいてリアルタイムにアクションを実施できます。また、メールなどの緊急性の低いコミュニケーションにはバッチ予測を使用します。

このチュートリアルでは、顧客が購入を決定するかどうかを判断するロジスティック回帰モデルの作成方法を説明します。このタイプのモデルは、結果の確率を評価するのに適しています。このモデルは、ウェブサイトでのユーザー行動を反映した指標を評価し、このデータに基づいて 0 から 1 までの範囲で購入確率値を顧客に割り当てます。さらに、購入の可能性が 0.5 を超える顧客に「購入の可能性が高い」ことを示すラベルを設定します。

このチュートリアルでは、Google アナリティクスのサンプルと e コマース データセットを使用してモデルをトレーニングします。これらのデータセットは BigQuery 上で一般公開されています。このデータセットは、Google ブランドの商品を販売する実在の e コマースストア、Google Merchandise Store の 12 か月間(2016 年 8 月から 2017 年 8 月)の難読化されたアナリティクス 360 データを提供します。

このチュートリアルから得た教訓を本番環境のユースケースに適用するには、独自のアナリティクス 360 データを使用します。また、ウェブサイトでの顧客の行動に関する指標にアクセスできる同様のシステムからのデータを使用することもできます。

目標

このソリューションは、以下のステップから構成されています。

  • サンプルデータをモデルのトレーニングに適した形式に変換する。
  • BigQuery でモデルの作成、トレーニング、デプロイを行う。
  • モデルを評価して、パフォーマンスを理解する。
  • BigQuery にデプロイされたトレーニング済みモデルを使用して、バッチ予測を取得する。
  • トレーニング済みモデルを AI Platform にデプロイする。
  • AI Platform にデプロイされたトレーニング済みモデルを使用して、オンライン予測を取得する。

費用

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

  • AI Platform
  • BigQuery
  • BigQuery ML
  • Cloud Storage

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。新しい Google Cloud ユーザーは無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    [プロジェクトの選択] ページに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. AI Platform Training and Prediction API を有効にします。

    API を有効にする

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。

サンプルデータを準備する

モデルをトレーニングするには、次の列があるテーブルが必要です。

  • fullVisitorId - 顧客 ID が含まれます。
  • bounces - ユーザーが検索やソーシャル広告をクリックしてウェブサイト内でセッションを開始した後、別のページで操作を行わなかった回数を表します。これらの列は、モデルの特徴の 1 つとして使用されます。
  • time_on_site - ウェブサイトでの顧客のセッションの合計時間(秒数)を示します。この列はモデルの特徴として使用されます。
  • will_buy_on_return_visit - 顧客の購入傾向を示すラベル1 は、顧客が購入する可能性が高いことを示し、0 は、顧客が購入する可能性が低いことを示します。

Google アナリティクスのサンプル データセットのデータを使用して、このテーブルを作成するには、次の操作を行います。

  1. Google Cloud Marketplace で Google アナリティクスのサンプル データセットを開き、[データセットを表示] をクリックします。BigQuery コンソールが開き、Google アナリティクスのサンプル データセットが選択された状態になります。
  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`;

トレーニングには数分かかることがあります。トレーニングが完了すると、トレーニング済みのモデルが bqml.rpm_bqml_model として BigQuery にデプロイされます。

モデルを評価する

ROC 曲線の下の面積(AUC)のパフォーマンス指標を確認して、モデルのパフォーマンスの状況を把握します。モデルの AUC 値は 0 から 1 の範囲で表され、0 は正しい予測が皆無であること、1 はすべての予測が正しかったことを意味します。

このチュートリアルのように最適化されていないモデルを使用する場合は、モデルから良好な結果が得られるものの、最高とは言えません。本番環境でのユースケースでは、ハイパーパラメータ調整特徴量エンジニアリング、その他の手法を使用してモデルを最適化し、スコア .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 レベル .5 を使用します。threshold 値は 2 つの可能なラベルのカットオフを決定します。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 アナリティクス 360 を Salesforce Marketing Cloud と統合して、Salesforce のメールや SMS ダイレクト マーケティング キャンペーンでアナリティクス 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」と入力して [確認] をクリックします。

次のステップ