Python小案例(六)通过熵权法计算指标权重

Python小案例(六)通过熵权法计算指标权重

在日常业务中,产品运营需要综合多个指标进行判断,如果没有目标变量进行监督训练的话,很难人为地判断哪个指标更好,综合起来哪个类别更优秀。

这里介绍一种基于熵权法的指标权重计算,熵权法是一种依据各指标值所包含的信息量的多少确定指标权重的客观赋权法,某个指标的熵越小,说明该指标值的变异程度越大,提供的信息量也就越多,在综合评价中起的作用越大,则该指标的权重也应越大。本文参考自熵值法原理及应用

案例背景:通过几个业务指标评价小初高的表现

import numpy as np
import pandas as pd
# 构造数据
cars={
    '小学':[3000,2.8,68,0.02,25],
    '初中':[1000,1.2,45,0.08,5],
    '高中':[2500,1.6,70,0.1,70],
}
df=pd.DataFrame(cars).T
df.columns=['活跃用户数','人均练习数','老师数','搜索无结果率','投诉用户数']
df
活跃用户数人均练习数老师数搜索无结果率投诉用户数
小学3000.02.868.00.0225.0
初中1000.01.245.00.085.0
高中2500.01.670.00.1070.0
# 数据标准化 避免存在log0,增加0.01
def std_df(df, neg_cols):
    '''
    df:数据框
    neg_cols:负面指标
    
    return:标准化后的数据框
    '''
    
    df=df.copy()
    for x in df.columns:
        if x not in neg_cols: # 非负面指标
            df[x]=df[[x]].apply(lambda x:(x-np.min(x))/(np.max(x)-np.min(x)))+0.01
        else : # 负面指标
            df[x]=df[[x]].apply(lambda x:(np.max(x)-x)/(np.max(x)-np.min(x)))+0.01
    return df


# 指标权重计算
def solve_weight(df):
    '''
    df:数据框
    
    return:指标权重
    '''
    
    df=df.copy()
    # 计算p
    for x in df.columns:
        df[x]=df[[x]].apply(lambda x:x/np.sum(x))
    # 计算lnp
    df_lp=df.applymap(lambda x: np.log(x))
    # 计算p*lnp
    df_plnp=df.mul(df_lp)
    # 计算e
    e=-1/np.log(df.shape[0])*df_plnp.sum()
    # 计算g
    g=1-e
    # 计算w
    w=g/sum(g)
    
    return w

# 计算加权得分
def solve_score(df, w):
    '''
    df:数据框
    w:指标权重
    
    return:带有分数值的df
    '''
    
    df=df.copy()
    df['score']=df_std.dot(w)
    
    return df
# 数据标准化
cols=df.columns
neg_cols=['搜索无结果率','投诉用户数'] # 负向指标
df_std=std_df(df, neg_cols)

# 计算权重
w = solve_weight(df_std)

# 输出指标权重
print('{:*^60}'.format('指标权重'))
print(w)

# 输出分值
solve_score(df_std, w).sort_values(by='score', ascending=False)
****************************指标权重****************************
活跃用户数     0.170761
人均练习数     0.244200
老师数       0.167703
搜索无结果率    0.244200
投诉用户数     0.173135
dtype: float64
活跃用户数人均练习数老师数搜索无结果率投诉用户数score
小学1.011.010.931.010.7023080.943311
高中0.760.261.010.010.0100000.366824
初中0.010.010.010.261.0100000.244185

共勉~

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值