我是靠谱客的博主 有魅力期待,最近开发中收集的这篇文章主要介绍Python小案例(六)通过熵权法计算指标权重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

共勉~

最后

以上就是有魅力期待为你收集整理的Python小案例(六)通过熵权法计算指标权重Python小案例(六)通过熵权法计算指标权重的全部内容,希望文章能够帮你解决Python小案例(六)通过熵权法计算指标权重Python小案例(六)通过熵权法计算指标权重所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部