贡献度拆解

贡献度拆解,可以使用如下方式计算。

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
 

关注公众号「水沐教育科技」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。

公众号二维码
微信扫码关注公众号

微信交流群 关注微信公众号,加入官方交流群。内含一款搜索神器,免费下载全网书籍和视频。