顧客の注文データを使って、初回から2回目までの購買間隔の平均を求める方法を紹介しています。
売上や注文データを使った分析を行っている人やCRMのご担当者様にお役立ていただけます。
注文データから顧客ごとの購入間隔を計算したい場合、単純な集計だけでは計算することができません。
顧客ごとに注文日ごとの売上を集計し、表計算機能を使用して購入間隔と購入回数を計算することで、購入間隔の分析が可能になります。具体的には以下の手順で解決していきます。
今回は、1行が1つの注文明細を表し、列には顧客ID、注文日、売上などの情報がある注文データを使用していきます。
同じ顧客が同じ日に複数の商品を購入した場合、それぞれの商品が別々の行として記録されています。つまり、1人の顧客が同じ日に複数の商品を注文している場合、複数行にデータが分かれるわけです。そのため、まずは1行が1人のお客様の1回の注文になるようにデータを集計していく必要があります。
顧客IDの列ヘッダーメニューから「集計」を選択します。
グループに「顧客ID」が選択されていることを確認したら、「注文日」を追加し、日付の単位を「日」に変更します。
今回は「注文日」の列を使って購買間隔を計算したいだけなので、値に選択する列は何でもいいのですが、今回は値に「売上」を選択し、集計関数をSUM(合計値)に設定します。
続いてプレビューボタンをクリックして問題ないことが確認できたら、実行ボタンをクリックします。
1行が1人のお客様の1回の注文になるようにデータを集計できました。
続いて、お客様ごとの購入間隔を計算します。
「顧客ID」の列ヘッダーメニューから「表計算」を選択します。
グループに「顧客ID」を選択されていることを確認したら、値に「注文日」を選択します。
値を選択すると、表計算の設定のダイアログが表示されるので、計算タイプを「差」に設定し、「前の値」を選択し、期間の単位を「日」に設定します。
なお、今回は集計のステップを踏んでいるため、データは顧客ごとに日付順に並んでいますが、常にそのようなデータがあるとは限りません。
そのようなときには、前の購入からの日付の差を適切に計算できるように、「計算前にデータを並び替える」にチェックを入れ、「注文日」を選択し、昇順に設定します。
最後に列名を「購入間隔」に設定し、実行します。
これで「購入間隔」は計算できましたが、この段階では全ての購入回数における購買間隔になっています。
今回は、2回目までの購買間隔の平均を計算したいので、注文回数を計算するために、表計算の値に「注文日」を追加し、計算のタイプを「ランク」、ランクの種類に「Denseランク」に設定し、並び順を昇順にします。
列名を「購入回数」に設定し、実行します。
これで購入回数と購買間隔を計算できました。
このデータには全ての購入回数における購買間隔が含まれているので、1回目から2回目の購入間隔の抽出ます。
「購入回数」の列ヘッダーメニューから「フィルタ」を選択します。
フィルタのダイアログが表示された演算子に「等しい」を選択し、値として「2」を入力いし、実行ボタンをクリックします。
これでサマリビューで1回目から2回目までの購入間隔のデータを作ることができました。
今回の注文データを使って、カスタムRコマンドで「購買回数と購買間隔を求めたい」を計算して、初回から2回目までの購買間隔の平均を求めるための計算をしたい場合、
初回から2回目までの購買間隔の平均を求めたい場合、以下のRコードをご参考ください。
# 注文明細データから顧客ごとの購買回数と購買間隔を計算する
# 1. 顧客IDと注文日ごとにデータを集計(1行1注文明細になっていて、同日に複数商品の購買があったときに複数のデータが記録される場合、1行が1人の顧客の1日の注文に集計する必要があるため)
summarize_group(
group_cols = c(`顧客ID` = "顧客ID", `注文日` = "注文日"), # 顧客IDと注文日ごとにグループ化
group_funs = c("none", "none"), # 顧客IDと注文日はそのまま
`売上` = sum(売上, na.rm = TRUE) # 売上を合計(NAは無視)
) %>%
# 2. 購買間隔と購買回数を計算
mutate_group(
group_cols = c(`顧客ID` = "顧客ID"), # 顧客IDごとに処理を適用
group_funs = c("none"), # 顧客IDはそのまま
sort_cols = c("注文日"), # 注文日でソート
sort_funs = c("none"), # ソート方法は変更なし
`購買間隔` = days_between(dplyr::lag(注文日), 注文日), # 前回の注文日との差分を計算
`購買回数` = dplyr::dense_rank(注文日) # 注文日のランキング(= 購買回数)を計算
)