BigQuery ML の貢献度分析が一般提供に - 指標の変化要因を把握
Katelin Amann
Software Engineer, BigQuery ML
Jenny Ortiz
Software Engineer, BigQuery ML
※この投稿は米国時間 2025 年 5 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。
データドリブンな意思決定を効果的に行うには、大量のデータを迅速に処理し、分析情報を抽出することが重要となります。しかし、そのような処理を効率的かつ大規模に行うことは容易ではありません。
たとえば、小売業者が販売データを分析する場合を考えてみましょう。商品、店舗、地域や、大規模な顧客ベースのデータをマーケティング イベントや割引販売と組み合わせて分析し、効果の高いプロモーションを特定したいとします。効果的なプロモーションを特定することは、的確な意思決定を行い、より高い成果を上げるために不可欠です。しかし、現在のツールで有益な分析情報を得るためには、手動でデータを調べて、試行錯誤しながらデータの可視化やクエリを行う必要があります。このような作業は、データの量や次元数によっては探索する組み合わせが膨大になり、困難を極めます。
このたび一般提供が開始された BigQuery ML の貢献度分析を使えば、多次元データの分析を大量に実行して自動的に分析情報を生成し、主な変化要因を出力できます。これにより、対応が必要な箇所をすばやく特定することが可能となります。
2024 年 9 月に発表された貢献度分析のプレビュー版では、テスト データセットとコントロール データセットを使って、指標の主な変化要因を生成できました。今回の一般提供では、いくつかの新機能が追加され、最も重要な分析情報をより迅速に特定できるようになっています。
1. 「apriori サポートによる Top-K 分析情報」を使用した自動サポート チューニング
貢献度分析のプレビュー版には、apriori サポートによるプルーニングのオプションがあり、このオプションを指定すると、小さなデータ セグメントが取り除かれるため、クエリの実行時間を短縮できました。一般提供版では、apriori サポートのプルーニングしきい値を独自に指定せずに、設定をモデルに委ねることもできます。この場合、返される分析情報の数を指定すれば、データ セグメント サイズ(apriori サポート)に基づき、上位の分析情報が出力されます。min_apriori_support
オプションと top_k_insights_by_apriori_support
オプションはいずれも、(数百万行に及ぶ可能性のある)分析情報をすべて返す場合に比べ、クエリのレイテンシを短縮する効果があります。
2. 冗長な分析情報のプルーニングによる、分析情報の読みやすさの向上
複数の関連する分析情報で同じ指標が出力され、分析情報が冗長になることがあります。これは、相関のあるデータでよく起こる現象です。例として、都市名(city)と店舗名(store name)というディメンションがある販売データの表を以下に示します。General Store という店舗の販売データはすべてアイオワ市のものであり、これらの 2 行の元データは同じであるため、指標値も同じになっています。
新しい pruning_method
オプションを使用すると、冗長な分析情報が除外され、より詳細な情報を含むセグメントの一意の分析情報のみが出力されるようになります。上記の例では、同じ指標を含む 2 つの行ではなく、都市名と店舗名の両方を含む最初の行のみが出力されることになります。
3. カテゴリ別に合計可能な指標が使用可能に
プレビュー版では、合計可能な指標(summable metric)と合計可能な比率指標(summable ratio metric)という 2 種類の貢献度指標を使用できました。合計可能な指標では、関心のある 1 つの指標を集計できます。合計可能な比率指標では、2 つの指標の比率を集計できます。
一般提供版では、summable
指標と summable ratio
指標に加えて、summable by category
指標を使用して、カテゴリ変数の一意の値で正規化した指標の合計値を分析できるようになりました。これにより、顧客あたりの売上や、1 日あたりのサイト訪問回数などの指標を分析することが可能となります。
カテゴリ別に合計可能な指標を使用すると、外れ値を考慮に入れてデータを調整できます。下の表の例では、テストセット内の 1 行目にウェブサイト(Website)プロダクトのアクティブ時間が長い外れ値があります。アクティブ時間に summable
指標を使用した場合、テストセットにおけるウェブサイトのアクティブ時間はアプリ(App)のアクティブ時間の 2.5 倍になります。一方、summable by category
指標を使って、各プロダクトのユーザー数に基づき調整を行うと、テストセットにおけるユーザー 1 人あたりのウェブサイトのアクティブ時間は、アプリに比べ 1.6 倍にとどまります。
summable by category
指標は、テストセットとコントロール セットの行数が異なる場合にも有効です。たとえば、2024 年と 2025 年の収益データを比較しようとしていて、2024 年のデータが 12 か月分あるのに対し、2025 年のデータは 5 か月分しかないとします。このような場合に summable by category
指標を使用すると、1 か月あたりの収益の差を分析して、2 つのグループをより直接的に比較することが可能となります。
貢献度分析の実践
それでは、小売業者の販売データで、新しいモデル オプションを使用する例を見てみましょう。ここでは、Google Merchandise Store の e コマースの一般公開データセットを使って、2020 年から 2021 年にかけてアパレル商品の売り上げが減少した主な要因を探ります。
まず、集計対象の販売指標、正規化に使用するカテゴリ列(user_id)、スライス用のディメンション列、そしてデータ行がテストセットかコントロール セットかを示すブール値 is_test を含む入力用データテーブルを作成します。
CREATE OR REPLACE TABLE bqml_tutorial.ecommerce_data AS
(SELECT
event_value_in_usd AS sales,
user_pseudo_id AS user_id,
device.category AS device_category,
geo.country AS country,
traffic_source.medium as site_traffic_source,
FALSE AS is_test
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE event_name IN ('in_app_purchase', 'purchase') and
traffic_source.medium IN ('referral', 'organic', 'cpc', '<Other>')
AND _TABLE_SUFFIX BETWEEN '20200101' AND '20201231')
UNION ALL
(SELECT
event_value_in_usd AS sales,
user_pseudo_id AS user_id,
device.category AS device_category,
geo.country AS country,
traffic_source.medium as site_traffic_source,
TRUE AS is_test
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE event_name IN ('in_app_purchase', 'purchase') AND
traffic_source.medium IN ('referral', 'organic', 'cpc', '<Other>')
AND _TABLE_SUFFIX BETWEEN '20210101' AND '20211231');
次に、カテゴリ別に合計可能な指標を使って、貢献度分析モデルを作成しましょう。top_k_insights_by_apriori_support
オプションを指定し、apriori サポートが大きい上位 15 個の分析情報を取得します。また、プルーニング用の prune_redundant_insights
オプションを指定し、一意の分析情報が返されるようにします。
CREATE OR REPLACE MODEL bqml_tutorial.ecommerce_summable_category_model
OPTIONS(
MODEL_TYPE='CONTRIBUTION_ANALYSIS',
DIMENSION_ID_COLS=['device_category', 'country', 'site_traffic_source'],
IS_TEST_COL='is_test',
CONTRIBUTION_METRIC='SUM(sales)/COUNT(DISTINCT user_id)',
TOP_K_INSIGHTS_BY_APRIORI_SUPPORT = 15,
PRUNING_METHOD='PRUNE_REDUNDANT_INSIGHTS'
) AS SELECT * FROM bqml_tutorial.ecommerce_data;
最後に、このモデルから分析情報を取得します。
SELECT
contributors,
metric_test,
metric_control,
difference,
relative_difference,
apriori_support,
contribution
FROM ML.GET_INSIGHTS(MODEL
bqml_tutorial.ecommerce_summable_category_model);


出力は、自動的に contribution
列(difference
の絶対値)の降順で並べ替えられます。では、個々の結果について詳しく見てみましょう。1 行目は、米国で別のウェブサイトから移動してきたユーザー 1 人あたりの売上を示しており、2020 年の 101.65 ドルから 2021 年には 58.37 ドルに減少していることがわかります。これは、difference
指標にあるように 43.27 ドルの減少で、relative_difference
指標で見ると 42.5% の減少に相当します。また、3 行目を見ると、米国のユーザーあたりの売り上げが 34.6% 減少したことがわかります。apriori_support
指標によると、このセグメントは全データの 47.3% を占めています。こうした情報は、ビジネス戦略を練るうえで非常に有益です。
使ってみる
独自のデータで貢献度分析を試すには、チュートリアルとドキュメントをご覧ください。
-BigQuery ML ソフトウェア エンジニア Katelin Amann
-BigQuery ML ソフトウェア エンジニア Jenny Ortiz