デシル分析は、施策の範囲や打ち分けを決める際にシンプルにできる手法です。
現状では、デジタルでは、施策を全体にうってもコストが変わらなかったり、 初めからidと紐づいたデータが取れることも増えたので、あまり使うことはなかもしれませんが、 それでも覚えておくと便利です。
デシル分析のイメージ
ユーザー単体の行動数や、売り上げなどをもとに、ユーザーを10個のグループに分けます。 このグループは、ユーザー数が同数になっていますが、行動数や売上の値がグループごとに異なっています。
そのため、ユーザーあたりの施策コストが同じ場合、コストはユーザーあたりコスト✖️グループあたりユーザー✖️対象グループ数
で計算でき、
取り扱いが非常に楽になります。
似たような分析で行動数や売上を等分する方法もありますが、こちらは、グループ数あたりのユーザー数にばらつきが生まれるため、 コスト計算や、施策あたりのターゲットユーザー数の計算が別途必要になります。
デシル分析の進め方(売上の場合)
- ユーザーごとに売上を持ったデータを用意
- 売上をもとにユーザー数が等分となるようなグループを作成
- グループで集計し、そのグループの特徴や、総売上に占める割合を出す
Pandasには2を簡単にできるqcut
が存在します。
実際のコード
1. ユーザーごとに売上を持ったデータを用意
import numpy as np import pandas as pd import random # 平均売上3000円のデータを作成 dat = pd.Series([round(random.gauss(3000,800)) for i in range(1000)]) # 分布をみておく dat.hist()
2. 売上をもとにユーザー数が等分となるようなグループを作成
dec_label = ['d' + str(i + 1) for i in range(10)] dec = pd.qcut(dat,10,dec_label) df = pd.DataFrame({'sales':dat,'dec':dec})
3. グループで集計し、そのグループの特徴や、総売上に占める割合を出す
# 集計 # 個数、グループ内合計売上、グループ内平均 df_agg = df.groupby(dec).agg([len,sum,np.mean]) df_agg.columns = ['count','total_of_sales','mean_of_sales'] # 表計算 # 全体売上に対するグループ売上の割合、割合の累計、割合が何番目か df_agg['rate_of_total_sales'] = df_agg.total_of_sales/df_agg.total_of_sales.sum() df_agg['cumrate_of_total_sales'] = df_agg.total_of_sales.cumsum()/df_agg.total_of_sales.sum() df_agg['rank_of_rate'] = df_agg.rate_of_total_sales.rank(ascending=False) df_agg
ここから
ここから、コストが許す範囲で施策効果検証をし、そこから施策のROIを算出することで、どのグループにどこまでコストをかけられるかが計算できます。