智能风控体系之层次分析法专家评分卡

层次分析法 (Analytic Hierarchy Process,简称 AHP) 由美国运筹学家托马斯 · 塞蒂 (T. L. Saaty) 于上世纪70年代中期提出,是通过定量与定性分析相结合的方法来进行多方案或多目标决策分析的一种方法。该方法的主要思想是通过将一个复杂的问题分解为若干层并考虑不同因素,对两两指标进行成对比较判断其重要程度,并建立判断矩阵进行重要性程度的权重确定,最终找到最佳方案来辅助决策。

专家经验评分卡多用于新产品无数据积累的冷启动阶段,对申请人进行信用评分,本文基于自己工作中实操经验与理解以及一些公开资料,详细的介绍了整个流程。专家经验评分卡适用于业务开展初期和数据量少,主要基于过往业务经验、同业历史经验进行评分卡设计,直观、业务解释性强,主要通过多轮专家调查问卷并结合AHP层次分析法得到入模指标与权重,最终得到得分,进一步确定得分等级映射、综合信用评分的决策矩阵和定额定价策略。

层次分析法开发专家评分卡是利用定量与定性分析相结合,以得到借款人信用评分为目标,构成一个多层次的分析结构模型,以评分为总目标(最高层)、评价标准为准则层(中间层)、评价指标为方案层(最底层),通过专家在各个因素之间进行比较、打分和计算,最终确定最底层相对于最高层的相对权重,得到最底层每个指标的最终得分。

层次分析法就是将一个决策事件分解为目标层(例如借款人资质如何),准则层(影响决策的因素,例如信用、资产、经营情况等)以及方案层(是方案,例如张三、李四、王五等各个借款人资质)

基于层次分析法的专家评分卡开发理论

步骤一:围绕信用评分问题,建立具有层次结构的指标体系

步骤二:将同一层次指标取出,构造两两比较矩阵(判断矩阵)

准则层中的各个准则在进行目标衡量过程中所占的重要性权重不同,根据Saaty的建议使用数字1-9及其倒数(如果元素 i 和元素 j 的重要性之比为  ,那么元素 j 与元素 i 的重要性之比为  ,例如:   ,则  )作为标度来定义判断矩阵  ,  ,详见表1:

图片

步骤三:层次单排序及一致性检验

步骤四:层次总排序及一致性检验

1.建立具有层次结构的指标体系

根据问题的性质和总目标,将问题分解为不同的组成因素。同一层次的元素作为准则对下一层次的某些元素起支配作用,同时它又受上一层次元素的支配。这些层次大体上可以分为3类。

图片

2.构造两两比较矩阵

目标:准确测量出信用评分指标间的相对重要程度,得到权重。

方法:为了比较下层对上层的相对重要性,构造两两比较矩阵。通常会邀请10-20个经验专家对同一层次内两两因素的相对重要性进行打分。专家们要分别对指标层中的各评分标准内部每个因素以及评分标准层中的每个指标进行重要性比较,构造判断矩阵。得出:谁更重要,重要多少,并按重要性程度进行赋值,在赋值时采用1-9标度法。

图片

图片

3.层次单排序的一致性检验

两两比较矩阵的元素是通过两个因素比较得到的,而在很多这样的比较中,可能得到一些不一致性的结论。例如当因素A、B、C的重要性很接近的时候,在两两比较时,可能得出A比B重要,B比C重要,而C又比A重要等矛盾的结论,这在因素的数目多的时候更容易发生。

原理:判断矩阵A对应于最大特征值λ_max得到特征向量W,经归一化即为同一层次相应元素对于上一层次元素相对重要性的排序权值。

(1)第一步计算一致性指标CI

图片

(2)查找平均随机一致性指标RI

图片

(3)计算一性比例CR

图片

如果CR<0.1,判断矩阵的一致性可以接受,否则需要对判断矩阵进行修正。

4.层次总排序的一致性检验

定义:计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。这一过程是从最高层次到最低层次依次进行的。

图片

(1)B层的层次总排序:

图片

(2)层次总排序的一致性比率:

图片

当CR<0.1 时,认为层次总排序通过一致性检验。

基于专家评分卡多轮问卷实战建设

建立风控策略及模型的目标是筛选出好客户进件放款。为达到这一目标,从客户的还款能力和还款意愿两个方面来考虑。还款能力主要看客户的基本信息、工作信息以及行内信息;还款意愿主要看客户的信用信息和三方信息。

1.评分卡指标体系层次结构建立

图片

2.两两比较矩阵构造

图片

图片

同理,根据因子层D各因素相对重要性对其进行打分,确定因子层D各因素对领域层C的相对重要性的权重,如下表:

图片

最终得到各个指标权重比例(总权重是每层因子比重的乘积,如:学历的总权重3.2%=0.5*0.11*0.59):

图片

3.一致性检验

以信用信息下层的三个因素(征信查询次数、本息逾期次数、信用卡使用情况)为例:

Step1由被检验的两两比较矩阵乘以其特征向量,所得的向量称之为赋权和向量

图片

Step2:每个赋权和向量的分量分别除以对应的特征向量的分量

1.81/0.59=3.05

0.76/0.25=3.05

0.48/0.16=3.05

Step3:计算出Step2结果中的平均值,记为λavg

λavg= (3.05+3.05+3.05)/3=3.05

Step4计算一致性指标CI

CI = (λavg– n ) / (n - 1)

CI = (3.05 – 3 ) / (3 – 1 ) = 0.03

Step5:计算一致性率CR

CR = CI / RI=0.03/0.58=0.05<0.1

即通过一致性检验。

基于AHP法挑选高跟鞋python实现

首先我们来设定目标,也就是我们需要解决的问题,如何选购一双最合适的高跟鞋;其次,为了实现这一目标,我们需要考虑的因素包括:款式,颜色,材质,价格和舒适度;最后,可供我们选择的高跟鞋备选方案包括:Jimmy Choo、Christian Louboutin,以及Roger Vivier。做好以上准备,我们建立如下层次结构模型:

Python代码:

import numpy as np
import pandas as pd
import warningsclass AHP:def __init__(self, criteria, b):self.RI = (0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49)self.criteria = criteriaself.b = bself.num_criteria = criteria.shape[0]self.num_project = b[0].shape[0]def cal_weights(self, input_matrix):input_matrix = np.array(input_matrix)n, n1 = input_matrix.shapeassert n == n1, '不是一个方阵'for i in range(n):for j in range(n):if np.abs(input_matrix[i, j] * input_matrix[j, i] - 1) > 1e-7:raise ValueError('不是反互对称矩阵')eigenvalues, eigenvectors = np.linalg.eig(input_matrix)max_idx = np.argmax(eigenvalues)max_eigen = eigenvalues[max_idx].realeigen = eigenvectors[:, max_idx].realeigen = eigen / eigen.sum()if n > 9:CR = Nonewarnings.warn('无法判断一致性')else:CI = (max_eigen - n) / (n - 1)CR = CI / self.RI[n]return max_eigen, CR, eigendef run(self):max_eigen, CR, criteria_eigen = self.cal_weights(self.criteria)print('准则层:最大特征值{:<5f},CR={:<5f},检验{}通过'.format(max_eigen, CR, '' if CR < 0.1 else '不'))print('准则层权重={}\n'.format(criteria_eigen))max_eigen_list, CR_list, eigen_list = [], [], []for i in self.b:max_eigen, CR, eigen = self.cal_weights(i)max_eigen_list.append(max_eigen)CR_list.append(CR)eigen_list.append(eigen)pd_print = pd.DataFrame(eigen_list,index=['准则' + str(i) for i in range(self.num_criteria)],columns=['方案' + str(i) for i in range(self.num_project)],)pd_print.loc[:, '最大特征值'] = max_eigen_listpd_print.loc[:, 'CR'] = CR_listpd_print.loc[:, '一致性检验'] = pd_print.loc[:, 'CR'] < 0.1print('方案层')print(pd_print)# 目标层obj = np.dot(criteria_eigen.reshape(1, -1), np.array(eigen_list))print('\n目标层', obj)print('最优选择是方案{}'.format(np.argmax(obj)))return objif __name__ == '__main__':# 准则重要性矩阵criteria = np.array([[1, 2, 1 / 4, 1 / 3, 1 / 3],[1 / 2, 1, 1 / 7, 1 / 5, 1 / 5],[4, 7, 1, 2, 3],[3, 5, 1 / 2, 1, 1],[3, 5, 1 / 3, 1, 1]])# 对每个准则,方案优劣排序b1 = np.array([[1, 1 / 2, 1 / 5], [2, 1, 1 / 2], [5, 2, 1]])b2 = np.array([[1, 3, 8], [1 / 3, 1, 3], [1 / 8, 1 / 3, 1]])b3 = np.array([[1, 1, 1 / 3], [1, 1, 1 / 3], [3, 3, 1]])b4 = np.array([[1, 1 / 3, 1 / 4], [3, 1, 1], [4, 1, 1]])b5 = np.array([[1, 1, 4], [1, 1, 4], [1 / 4, 1 / 4, 1]])b = [b1, b2, b3, b4, b5]a = AHP(criteria, b).run()

结果:

准则层:最大特征值5.072084,CR=0.014533,检验通过
准则层权重=[0.08530829 0.04704119 0.43099972 0.22540664 0.21124416]
方案层方案0       方案1       方案2     最大特征值 CR 一致性检验
准则0  0.128271  0.276350  0.595379  3.005535  3.075062e-03   True
准则1  0.681725  0.236341  0.081935  3.001542  8.564584e-04   True
准则2  0.200000  0.200000  0.600000  3.000000  1.233581e-15   True
准则3  0.126005  0.416061  0.457934  3.009203  5.112618e-03   True
准则4  0.444444  0.444444  0.111111  3.000000 -4.934325e-16   True
目标层 [[0.25150036 0.3085618  0.43993784]]
最优选择是方案2

参考文献

[1] DR. Richard Hodgett. Decision-Making 2: Pairwise Comparison Methods. Business Analystic and Decisison Science (LUBS5308M). University of Leeds.

[2] 郭金玉,张忠彬,孙庆云. 层次分析法的研究与应用. 中国安全科学学报,2008,18(5):148-153.

[3] 邓雪,李家铭,曾浩健,陈俊羊,赵俊峰. 层次分析法权重计算方法分析及其应用研究[J]. 数学的实践与认识,2012,24(7):93-100.

[4] 常建娥,蒋太立. 层次分析法确定权重的研究[J]. 武汉理工大学学报:信息与管理工程版,2007,29(1):153-156.

[5] CSDN博主「卖山楂啦prss」的原创文章,

原文链接:https://blog.csdn.net/qq_42374697/article/details/105883584.

[6] CSDN博主「guofei9987」的原创文章,

原文链接:https://blog.csdn.net/guofei9987/article/details/103878993

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jackson序列化Bean额外属性附加--@JsonAnyGetter、@JsonUnwrapped用户

1. 场景 有一项工作&#xff0c;需要将数据从一个服务S中读取出来&#xff08;得到的是一个JSON&#xff09;&#xff0c;将数据解析转换以后构造成一个数组的类型A的对象&#xff0c;写入到一个服务T中。 A.class Data public class A {String f0 ;String f1 ; }在发现需要…

【数据库学习】pg安装与运维

1&#xff0c;安装与配置 #安装 yum install https:....rpm1&#xff09;安装目录 bin目录&#xff1a;二进制可执行文件目录&#xff0c;此目录下有postgres、psql等可执行程序&#xff1b;pg_ctl工具在此目录&#xff0c;可以通过pg_ctl --help查看具体使用。 conf目录&…

LeetCode-题目整理【7】

加油站和分发糖果都使用到贪心算法 加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱…

pyspark学习_RDD转为DataFrame

#方法1&#xff1a;反射机制推断RDD模式 people.txt Tom 12 Jack 13 Janny 14 from pyspark.sql import SparkSession,Row spark SparkSession.builder.getOrCreate() lines spark.sparkContext.textFile("people.txt") people lines.map(lambda x:x.split("…

Nginx日志检测分析工具 - WGCLOUD

WGCLOUD可以对Nginx的日志文件进行全面分析&#xff0c;包括IP、sql注入攻击、搜索引擎蜘蛛爬取记录、HTTP响应状态码、访问量最高的IP统计、扫描攻击统计等 效果如下图

C#winform上位机开发学习笔记13-串口助手显示系统时间功能添加

1.功能描述 在上位机中显示系统的实时时间 2.代码部分 步骤1&#xff1a;添加文本框控件并设置参数 #此处注意将BackColor颜色修改为非Control&#xff0c;即可正常显示ForeColor颜色&#xff0c;否则该颜色不变&#xff0c;原因暂且不明。 步骤2&#xff1a;添加timer控件…

Linux/Doctor

Enumeration nmap 已知目标开放了22,80,8089端口&#xff0c;扫描详细情况如下 可以看到对外开放了22,80,8089三个端口 TCP/80 SSTI 访问80端口&#xff0c;有一个infodoctors.htb的电子邮件&#xff0c;点击其他的也没有什么反应&#xff0c;猜测有可能需要域名访问 在/et…

[每日一题] 01.25 - 子数整数

子数整数 k int(input()) flag False for i in range(10000,30001):a,b,c [int(str(i)[j:j 3]) for j in range(3)]if a % k 0 and b % k 0 and c % k 0:print(i)flag Trueif not flag:print(No)

美易平台:美股盘前动态:半导体股领涨,中概股表现各异

随着全球经济的波动和科技行业的快速发展&#xff0c;投资者对于股市的关注日益增加。近期&#xff0c;美国股市在盘前交易中呈现出了半导体股的普遍上涨态势。其中&#xff0c;英特尔&#xff08;Intel&#xff09;的股价上涨了1.6%&#xff0c;英伟达&#xff08;NVIDIA&…

Python批量采集亚马逊商品数据

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 知识点: 爬虫基本流程 非结构化数据解析 开发环境&#xff1a; python 3.8 解释器, 运行代码 pycharm 随便 配置 python解释器 DrissionPage >>> p…

前出深入-机器学习

文章目录 一、K近邻算法1.1 先画一个散列图1.2 使用K最近算法建模拟合数据1.3 进行预测1.4 K最近邻算法处理多元分类问题1.5 K最近邻算法用于回归分析1.6 K最近邻算法项目实战-酒的分类1.6.1 对数据进行分析1.6.2 生成训练数据集和测试数据集1.6.3 使用K最近邻算法对数据进行建…

阿里云服务器部署幻兽帕鲁联机服务器详细教程

幻兽帕鲁是一款备受欢迎的多人在线游戏&#xff0c;其联机服务器对于游戏的稳定运行至关重要。本文将详细介绍如何在阿里云服务器上部署幻兽帕鲁联机服务器&#xff0c;新手小白也能轻松搭建并管理自己的游戏环境。 还未购买阿里云服务器可以参照下面的步骤部署&#xff0c;已经…

Vue+OpenLayers7入门到实战:在地图上添加缩放控件、比例尺控件和鼠标经纬度位置显示控件

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章主要介绍如何使用OpenLayers7在地图上添加地图缩放控件,比例尺显示控件和鼠标经纬度位置展示控件这三个Control控件。 二、依赖和使用 "ol": "7.5.2"使用npm安装依赖npm install ol@7.5.…

Sql server强制走索引

遇到一个奇怪的问题&#xff0c;同样的SQL&#xff0c;只是一个where条件不一样&#xff0c;一个是column1 AAA&#xff0c;一个是column1 BBB&#xff0c;他们的查询效率却差距甚大&#xff0c;一个要60秒&#xff0c;一个1秒以下。查看查询计划&#xff0c;一个使用了索引&…

【SpringBoot】mybatis基础操作

mybatis入门 1.mybatis准备操作 创建数据库&#xff1a; CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4; -- 使⽤数据数据 USE mybatis_test; -- 创建表[用户表] DROP TABLE IF EXISTS userinfo; CREATE TABLE userinfo ( id INT ( 11 ) NOT NULL AUTO_INCRE…

LeetCode刷题---分隔链表

解题思路: 根据题意对链表进行分割 创建链表l用来表示小于给定值x的链表,创建辅助链表left指向l的初始节点 创建链表r用来表示大于等于给定值x的链表&#xff0c;创建辅助链表right指向r的初始节点 创建辅助链表cur&#xff0c;指向head节点 对原链表进行遍历 如果当前节点的va…

电商数据:新时代的商业智慧与决策之源

随着科技的飞速发展&#xff0c;电子商务已经深入到我们生活的方方面面。人们越来越依赖网络购物平台来满足生活中的需求&#xff0c;而这种转变不仅改变了消费者的购物习惯&#xff0c;更对整个商业环境产生了深远的影响。在这其中&#xff0c;电商数据作为这一变革的核心要素…

Flink多流转换(2)—— 双流连结

双流连结&#xff08;Join&#xff09;&#xff1a;根据某个字段的值将数据联结起来&#xff0c;“配对”去做处理 窗口联结&#xff08;Window Join&#xff09; 可以定义时间窗口&#xff0c;并将两条流中共享一个公共键&#xff08;key&#xff09;的数据放在窗口中进行配…

五、垃圾回收

1. 垃圾回收基础 1.1 什么是垃圾 简单说就是&#xff1a;内存中已经不再被使用到的内存空间就是垃圾。 1.2 如何判定是垃圾 1.2.1 引用计数法 引用计数法&#xff1a;给对象添加一个引用计数器&#xff0c;有访问就 1&#xff0c;引用失效就 -1 引用计数法的优缺点&#…

使用lora接收多个传感器数据方案设计

每个传感器的数据使用空格进行拼接&#xff0c;类似于"11 22 33 44 55"的字符串&#xff0c;Lora接收到字符串数据后&#xff0c;在循环中遍历接收到的数据字符串&#xff0c;使用一个二维数组存储数据&#xff0c;二维数组中的每一个一维数组为一个传感器的数据。当…