在实际业务处理中为了降低逾期率,通常会使用外部数据,这就需要对外部数据进行评估,通过对某盾的数据结合实际业务分析,计算其IV值和WOE值。
一、离散化数据
1.数据离散化
等宽离散容易导致组别出现数据极多或数据极少的情况,等频离散容易导致同一数值被分到两个组别中,缺点明显,所以选用K聚类离散函数。离散结果图如下:
1.1风险系数分离散结果
1.2综合关联风险分(复杂网络)
#聚类离散函数
def k_means_1(df_value,k):
data = df_value
kmodel = KMeans(n_clusters = k)#确定族数
kmodel.fit(data.values.reshape(len(data),1))#训练数据集
c = pd.DataFrame(np.sort(kmodel.cluster_centers_))#确定中心并排序
w = c.rolling(2).mean().iloc[1:]#取移动平均值
w = [0]+list(w[0])+[data.max()]#加上最大最小值作为边界值
w =list(np.sort(w))#再次排序
data_name = pd.cut(data,w,labels =range(k))
print(w)
return data_name
二、评估结果
从评估的结果看,风险系数分 IV值为0.1039,预测能力一般。而关系网络IV值为0.054693,预测能力较低。不适用直接生成规则拒绝,但可用于后续的评分模型中。数据如下:
1.1风险系数分
woe:
iv: 0.1039
1.2综合关联风险分(复杂网络)
woe:
iv:0.054693
#WOE IV值计算函数
def calcWOE(dataset,col,targe):
subdata=df(dataset.groupby(col)[col].count())
suby=df(dataset.groupby(col)[targe].sum())
data=df(pd.merge(subdata,suby,how='left',left_index=True,right_index=True))
b_total=data[targe].sum()
total=data[col].sum()
g_total=total-b_total
data['bad']=data.apply(lambda x:round(x[targe]/b_total,3),axis=1)
data['good']=data.apply(lambda x:round((x[col]-x[targe])/g_total,3),axis=1)
data['WOE']=data.apply(lambda x:math.log(x.bad/x.good),axis=1)
return data.loc[:,['bad','good','WOE']]
def calcIV(dataset):
dataset['IV']=dataset.apply(lambda x:(x.bad-x.good)*x.WOE,axis=1)
IV=sum(dataset['IV'])
IV=str(IV)
return IV