クラスターごとに特徴量を集計。
BigQuery MLと総合ECサイトの会員の購買履歴データを用いた会員のクラスタリングを試みていますが、前回「BigQuery ML 試し打ち #03」でモデルの作成まで完了したので、今回はモデルの可視化と予測結果の出力を行います。
可視化するには、クラスターと特徴量のクロス集計表にする必要があります。BigQueryのクエリエディタに以下のSQL文を入力し、青い[実行]ボタンをクリックしてみましょう。このクエリ結果をデータセット「DE」に「sum_clusters_bqml」という名前で保存します。
モデルを可視化する。
「sum_clusters_bqml」テーブルをTableauで可視化します。クラスターIDを[行]、各説明変数を[列]シェルフにそれぞれ設定すると、以下のようなビューが表示されます。
クラスターごとの特徴を見ると、クラスターID:6は女性のみ、平均年齢は30歳程度、主に「エレクトロニクス・コンピューター」を購入しているセグメント、クラスターID:9は男性80%、平均年齢は40歳程度、主に「本・聞く本」「映画・音楽・ゲーム」「エレクトロニクス・コンピューター」を購入しているセグメント、などがわかります。また、年齢についてもクラスターごとにばらつきがあり、クラスターID:2は年齢層がやや高め、クラスターID:10は年齢層がやや低めなどの特徴があります。これらは「クラスター分析入門」で見られた特徴とは異なることがわかります。
どのクラスターかを予測する。
続いて、作成したモデルを使って、特定の特徴をもつ会員がどのクラスターに分類されるかの予測を行い、結果を出力します。それにはBigQuery MLで用意されているML.PREDICTという関数を使用し、以下の構文で記述します。
SELECT 出力したい変数 FROM ML.PREDICT( MODEL モデル名 , ( SELECT * FROM 機械学習用データテーブル WHERE 予測対象の会員の条件 ) )
ではまず、男性で「本・聞く本」「映画・音楽・ゲーム」「エレクトロニクス・コンピューター」の購買経験がある会員がどのクラスターに分類されるかを予測します。BigQueryのクエリエディタに以下のSQL文を入力し、青い[実行]ボタンをクリックしてみましょう。
この結果から、すべての会員がクラスターID:9として予測されることがわかります。これはさきほど可視化したモデルと完全に一致します。
続けて、女性で「エレクトロニクス・コンピューター」の購買経験がある会員がどのクラスターに分類されるかを予測します。BigQueryのクエリエディタに以下のSQL文を入力し、青い[実行]ボタンをクリックしてみましょう。
この結果から、約90%の会員がクラスターID:6として予測されることがわかります。これはさきほど可視化したモデルとほぼ一致しますが、残りの約10%の会員がクラスターID:2として予測されています。それらの会員の特徴を見ると、比較的年齢の高い会員が多いように見受けられます。これはモデルの可視化結果で見た、クラスターID:2の年齢層がやや高めという評価と一致します。
そこで、年齢を20代から40代に限定した場合に、会員がどのクラスターに分類されるかを予測します。BigQueryのクエリエディタに以下のSQL文を入力し、青い[実行]ボタンをクリックしてみましょう。
この結果から、すべての会員がクラスターID:6として予測されることがわかります。これはさきほど可視化したモデルと完全に一致します。
BigQuery MLと総合ECサイトの会員の購買履歴データを用いた会員のクラスタリングを試みをしましたが、BigQuery上で完結して簡単に実現できることがわかりました。現時点で扱えるモデルは線形回帰・ロジスティック回帰・k 平均法クラスタリングのみですが、今後は協調フィルタリングやTensorFlowを用いたディープニューラルネットワークなど扱えるモデルも増えていくことが予定されているので、期待して待ちたいと思います。
関連する記事
須川 敦史
UX&データスペシャリスト
クロスハック 代表 / uxmeetsdata.com 編集長