データ分析
2023/06/23
SiNCE 編集部

[データ分析のためのBigQueryクエリ]SQLで年別優良顧客推移を算出

この記事では、BigQueryを使用してデータ分析を行う方法を紹介します。
別記事でご紹介した年別RFM分析を利用して、優良顧客数推移を算出します。時間経過ごとに顧客属性の変化を追うことで、顧客ニーズやターゲットを明確にできます。

概要

この記事では、BigQueryを使用してデータ分析を行う方法を紹介します。こちらの記事で算出した年別RFM分析を利用して、優良顧客数推移を算出します。これを用いて時間経過ごとに顧客属性の変化を追うことで、顧客ニーズやターゲットを明確にできます。

実装概要

RFM分析は前回の記事をご参照ください。

算出のためのステップは下記です。

01. 各年ごとにRFM分析を行い縦にユニオン

02. 各指標の人数分布で上位20%となる指標値を算出

03. 各年ごとに各指標が全て上位20%となる顧客を抽出

実装コード

01 各年ごとにRFM分析を行い縦にユニオン


SELECT 
 customer_No,
 count(customer_No) as Frequency,
 datetime_diff("2022-12-31",max(order_datetime),month) as Recency,
 max(order_datetime) as Recentry_buy #後に使うため購入した日付も残しておきます。
 sum(total_price) as Monetary
FROM `dataset.table`
WHERE order_datetime between "2022-01-01" AND "2022-12-31"
GROUP BY customer_No
UNION ALL
SELECT
 customer_No, count(customer_No) as Frequency,
 datetime_diff("2021-12-31",max(order_datetime),month) as Recency,
 max(order_datetime) as Recentry_buy #後に使うため購入した日付も残しておきます。
 sum(total_price) as Monetary
FROM `dataset.table`
WHERE order_datetime between "2021-01-01" AND "2021-12-31"
GROUP BY customer_No UNION ALL
#年ごとのRFM分析を必要な数だけUNIOで重ねる
#実行結果を保存

02 各指標の人数分布で上位20%となる指標値を算出

#このクエリはFrequencyの指標で上位20%を探していますが、
#他の指標も同様です。
with frequency_table as (
SELECT
frequency,
count(customer_code) as number_of_customer
FROM `dataset.table` #先ほど保存した各年RFMのUNIOしたテーブル
GROUP BY frequency
ORDER BY frequency ASC )
SELECT *,
#累積割合を算出
SUM(rate) OVER (ORDER BY frequency) AS cumulative_rate
FROM (
SELECT *, number_of_customer/[`UNION`したテーブルの総レコード数] as rate FROM frequency_table )
ORDER BY frequecy ASC

クリエ実行結果から、上位20%に最も近い購入頻度を見つけます。他の指標に対しても同様の操作を行い上位20%となる指標値を算出してください。

03 各年ごとに各指標が全て上位20%となる顧客数を年ごとに算出

SELECT 
 count(customer_no) as blue_tips_customer,
 #購入日から年を抽出
 datetime_trunc(Recentry_buy,year) as year
FROM `dataset.table` #先ほど保存した各年RFMのUNIOしたテーブル
WHERE
 frequency >=[先ほど求めた上位20%の指標値]
AND
 Monetary>=[先ほど求めた上位20%の指標値]
AND
 recency_<=[先ほど求めた上位20%の指標値]
GROUP BY year



まとめ

各コード自体は複雑ではありませんが、重要な部分にコメントアウトを行ったので、それを参照してください。3のコードで各年の優良顧客の数を算出しましたが、優良顧客の顧客Noにフラグをつけて顧客テーブルと結合することで、年齢や性別といった属性の分析も可能になります。

New call-to-action