BigQueryMLでkmeansモデルを使って予測をする
kmeansによるクラスタリングのエントリーでBigQueryMLを使って、サイト訪問者のクラスタリングを行いました。クエリ自体は凝ったものではなく、サイトに訪問するユーザーのデバイス・ブラウザ・アクセス場所等の情報でクラスタリングしていますので、実務ではサイト特性に合わせて取得する値を工夫する必要があると思います。
こちらはそのエントリーでモデル構築したクエリです。
create model
`{bigqueryプロジェクトID}.{データセット}.{書き出す先}`
options(model_type='kmeans',num_clusters = 5) as
select
fullvisitortid,
visitnumber,
device.devicecategory,
device.browser,
device.operatingsystem,
geoNetwork.city,
from `{bigqueryプロジェクトID}.{データセット}.ga_sessions_*`
where _table_suffix between '20200101' and '20200131'
;
これでモデルが指定したデータセット内に書き出されました。今度はそのモデルを使って各ユーザーがどのクラスタに分類されるのかをML.PREDICT関数を使って予測したいと思います。
select * from
ml.predict(model `{bigqueryプロジェクトID}.{データセット}.{書き出されたモデル}`,
(select
fullvisitorid,
visitnumber,
device.devicecategory,
device.browser,
device.operatingsystem,
geoNetwork.city,
from `{bigqueryプロジェクトID}.{データセット}.ga_sessions_日付`))
;
2番目のselect以下のサブクエリはモデルに対する入力テーブルです。入力テーブルにはモデル構築で利用したカラムと同じものを含める必要があります。
このクエリを実行すると、
CENTROID_ID、
NEAREST_CENTROIDS_DISTANCE.CENTROID_ID、
NEAREST_CENTROIDS_DISTANCE.DISTANCE
がfullvisitorid毎に出力されます。CENTROID_IDは予測されたクラスタになり、NEAREST_CENTROIDS_DISTANCE.DISTANCEはクラスタまでの距離を示しています。その距離の近い順番にNEAREST_CENTROIDS_DISTANCE.CENTROID_IDが配列で出力されます。
実務で活用するなら、商品の購入者を考えられる特徴量でクラスタリングし、購入してないユーザーがどのクラスタに属するか予測してサイト上でコミュニケーションしたり、マーケ施策への活用が考えられそうです。