【BigQuery】組み合わせ数の算出方法

【BigQuery】組み合わせ数の算出方法

今回は、BigQueryで組み合わせ数の算出方法を紹介します。

例として下記のような購買データを使用します。ブランドの購入組み合わせ数(UU数)を算出してみましょう。

購入ID購入日
(sync_date)
ユーザーID
(user_id)
ブランド
(brand)
商品名
(item)
個数
(quantity)
値段
(price)
12024/1/1yamada_hanakobrand_Aカーディガン11980
22024/1/1yamada_hanakobrand_Bスカート12980
32024/1/2tanaka_tarobrand_AYシャツ11980
42024/1/2tanaka_tarobrand_Bスラックス12980
52024/1/2tanaka_tarobrand_C靴下1980
62024/1/3sato_jirobrand_Aネクタイ11980
72024/1/3sato_jirobrand_CTシャツ12980
82024/1/3sato_jirobrand_Dベルト11980
buy_data
-- まずは必要なデータだけ取得する
WITH brand_list AS (
  SELECT
    sync_date
    , user_id
    , brand
  FROM
    buy_data
)
-- 日付・ユーザーでグループ化し、ブランドを配列化
, brand_list_by_user AS (
  SELECT
    sync_date
    , user_id
    , ARRAY_AGG(brand) AS brand_arr
  FROM
    brand_list
  GROUP BY
    sync_date, user_id
)
-- 組み合わせを列挙(UU数の算出のためDISTINCTを入れている)
, brand_comb AS (
  SELECT DISTINCT
    user_id
    , brand
    , brand_together
  FROM
    brand_list_by_user
    , UNNEST(brand_arr) AS brand
    , UNNEST(brand_arr) AS brand_together
  WHERE
    brand < brand_together
  UNION ALL
  SELECT DISTINCT
    user_id
    , brand
    , brand_together
  FROM
    brand_list_by_user
    , UNNEST(brand_arr) AS brand
    , UNNEST(brand_arr) AS brand_together
  WHERE
    brand_together < brand
)
-- brandとbrand_togetherでグループ化し、UU数を算出
SELECT
  brand
  , brand_together
  , COUNT(*) AS uu
FROM
  brand_comb
GROUP BY
  brand, brand_together

このクエリを実行すると下記のようなデータを得ることができます。

ブランド
(brand)
一緒に購入されたブランド
(brand_together)
ユニークユーザー数
(uu)
brand_Abrand_B2
brand_Abrand_C2
brand_Abrand_D1
brand_Bbrand_A2
brand_Bbrand_C1
brand_Cbrand_A2
brand_Cbrand_B1
brand_Cbrand_D1
brand_Dbrand_A1
brand_Dbrand_C1

組み合わせを全パターン出すクエリになっています。

(brand_A, brand_B)があれば、(brand_B, brand_A)の組み合わせは必要ない場合は、brand_combの中に記述しているUNION ALL以下を消せばOKです。

この方法がわかっていれば、商品名の組み合わせ数を出すことも容易ですね。

どんどん使っていきましょう!

よかったらシェアしてね!
  • URLをコピーしました!
目次