贡献度拆解
贡献度拆解,可以使用如下方式计算。
def cal_abs_contribute(df,base_col,cont_col,X,base_y,cont_y):
#df-数据集,只包含两期数据;period-日期字段;base_date-基期日期;cont_date-对照组日期;X-维度列;y-指标列
df=df.copy()
#构建基期与对照期数据集
df_base=base_col
df_cont=cont_col
#计算变化值
all_change=df_cont[cont_y].sum()-df_base[base_y].sum()
#计算所有组合的贡献度
df_contribute=pd.DataFrame(columns=['contribute','dim','dim_name','dim_value','all_base','base','all_change','change','var'])
for i in range(5): #2 表示循环2维,可最大维度数量,运行效率极慢
comb=itertools.combinations(X,i+1)
for j in comb:
#计算贡献值
dc=df_cont.groupby(list(j))[cont_y].sum()-df_base.groupby(list(j))[base_y].sum()
#计算贡献百分比
dr=dc/all_change
df_temp=pd.DataFrame(dr)
df_temp['dim']=i+1
df_temp['dim_name']=str(dr.index.names)
df_temp['dim_value']=dr.index
df_temp['all_base']=df_base[base_y].sum()
df_temp['base']=df_base.groupby(list(j))[base_y].sum().values
df_temp['all_change']=all_change
df_temp['change']=dc.values
df_temp['var']=df_temp['change']/df_temp['base']
df_temp.columns=['contribute','dim','dim_name','dim_value','all_base','base','all_change','change','var']
df_contribute=df_contribute.append(df_temp)
df_result=df_contribute[['dim','dim_name','dim_value','all_base','base','all_change','change','contribute','var']]
return df_result
关注公众号「水沐教育科技」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。
微信扫码关注公众号