当前位置: 首页 > news >正文

外部数据评价函数

评价函数

此函数用于评价外部数据:主要指标有:相关系数、互信息指标、KS、GINI、IV、AUC、f1_score,此外还有其他描述性指标。

def socre_test(test,label):
    '''
    单项数据的验证
    col:待检测数据 -- pd.Series
    label:Y值 -- pd.Series
    return : 各项描述指标和评价指标 -- dict
    '''
    # 计算查得率
    rate_response = (test.notna().sum()/len(test))*100  
    # 剔除未查到样本 
    test = test[test.notna()]
    label = label[test.index]
    # 描述性指标计算
    range_,min_,max_,mean_,std_,cov = test.max() -test.min(),test.min(),test.max(),test.mean(),test.std(),test.std()/test.mean()  # 描述统计指标
    # 相关系数指标 
    corr = test.corr(label)  # 
    # 互信息指标 
    mic_value= mic(test.values.reshape(-1,1),label.values.reshape(-1,1))
    mic_value = mic_value[0]
    # 按分位数进行分箱
    distribute_table = label.groupby(pd.qcut(test,10,duplicates='drop')).agg(['count','mean'])  
    # IV 计算 
    distribute_table.rename(columns={'count':'all_num','mean':'bad_rate'},inplace=True)
    distribute_table['good_rate'] = 1 - distribute_table['bad_rate']
    woe = np.log(distribute_table['bad_rate']/distribute_table['good_rate'])
    iv = (distribute_table['bad_rate'] - distribute_table['good_rate'])*woe
    iv.sum()
    iv_value = iv.sum()

    # KS计算 
    ks_bad_rate = distribute_table['all_num']*distribute_table['bad_rate']/label.sum()
    ks_good_rate = (distribute_table['all_num']*distribute_table['good_rate'])/(len(label) - label.sum())
    ks_value = abs(ks_bad_rate.cumsum() - ks_good_rate.cumsum()).max()

    # Gini 系数 
    distribute_table['gini'] = 1 - ((distribute_table['bad_rate']*distribute_table['bad_rate']) + (distribute_table['good_rate']*distribute_table['good_rate']))
    gini_value = sum(distribute_table['gini']*distribute_table['all_num']/len(label))

    # AUC计算
    score = test.apply(lambda x:( x- min_)/(max_ - min_))
    if corr < 0:
        score = 1- score 
    
    auc_score = roc_auc_score(label[score.sort_values().index],score.sort_values())

    # f1 socre 
    if corr > 0:
        point = test.quantile(0.9)
        y_pred = test.apply(lambda x: 1 if x >= point else 0)
    else:
        point = test.quantile(0.1)
        y_pred = test.apply(lambda x: 1 if x <= point else 0)  
    f1score = f1_score(label,y_pred)
    return {'查得率':rate_response,'Corr':corr,'MIc':mic_value,'Ks':ks_value,"IV":iv_value,"Gini":gini_value,"AUC":auc_score,'f1_socre':f1score,'极差':range_,'最大值':max_,"最小值":min_,"均值":mean_,"变异系数":cov 

}

相关文章:

  • js---深拷贝函数
  • ElasticSearch linux上重启
  • elasticsearch object、nested类型对比
  • 词法、语法、语义分析编译原理设计
  • mybatis的小于号<的转义
  • IC Compiler指南——布图规划(一)
  • 债券行情查询接口
  • Flask 学习-28.flask_jwt_extended插件 JWT 中存储额外数据(additional_claims)
  • Unity 场景光照出现问题
  • SpringCloud Feign报错Method has too many Body parameters
  • 如何让GPU加速20倍?AI数据平台是关键!
  • 通达OA系统,MYOA中OfficeRedis启动不了
  • ‘scp‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  • Kubernetes中gRPC的服务发现
  • 基于后退走廊的轨迹优化方法(Bubble Planner)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 「译」Node.js Streams 基础
  • 【译】理解JavaScript:new 关键字
  • 2017-09-12 前端日报
  • 2019年如何成为全栈工程师?
  • crontab执行失败的多种原因
  • Django 博客开发教程 8 - 博客文章详情页
  • github从入门到放弃(1)
  • golang中接口赋值与方法集
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • mysql_config not found
  • MySQL数据库运维之数据恢复
  • Odoo domain写法及运用
  • python docx文档转html页面
  • VUE es6技巧写法(持续更新中~~~)
  • 订阅Forge Viewer所有的事件
  • 回顾2016
  • 基于HAProxy的高性能缓存服务器nuster
  • 解析带emoji和链接的聊天系统消息
  • 京东美团研发面经
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 入口文件开始,分析Vue源码实现
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (02)vite环境变量配置
  • (WSI分类)WSI分类文献小综述 2024
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (八)Spring源码解析:Spring MVC
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)linux下的时间函数使用
  • (转)Sql Server 保留几位小数的两种做法
  • ..回顾17,展望18
  • .bat批处理(三):变量声明、设置、拼接、截取