python用逻辑回归制作评分卡_逻辑回归的评分卡的SAS实现

更新时间:2023-08-02 18:44:41 阅读: 评论:0

python⽤逻辑回归制作评分卡_逻辑回归的评分卡的SAS实现在信贷业务的不同阶段有不同的评分卡模型。分别是:贷前A卡-申请评分卡、贷中B卡-⾏为评分卡、贷后C卡-催收评分卡。三种评分卡起到的作⽤也是不⼀样的。本⽂是基于kaggle的信⽤卡数据做的信贷申请评分卡。运⽤的算法是:逻辑回归。⼯具:SAS EG、EXCEL。⽬标:利⽤数据对SeriousDlqin2yrs(是否不良)做逻辑回归建模并制作成评分卡形式,因为SeriousDlqin2yrs取值0和1
数据源:kaggle的give_me_some_cridits信⽤卡数据
本⽂分为四个部分
⼀、数据预处理
⼆、分箱操作
三、WOE合并与变量筛选
北京市财政局地址
四、逻辑回归建模
五、分数的转化
⼀、数据预处理
1.导⼊数据
因为之前导⼊过并存储在逻辑库中,所以直接代码连接逻辑库即可。
SAS代码:
libname a'D:e逻辑库202003';
/*数据处理:转换数据类型,将字符都转化成数值。因为数据导⼊问题导致数值型变为字符型,现在需要弄回来*/
data cs;
t a.cs_training;
MonthlyIncome1=input(MonthlyIncome,8.);
NumberOfDependents1=input(NumberOfDependents,8.);
/*⼀,数据探索*/
对数据进⾏探索性分析。
SAS代码:
proc means data=cs1 N NMISS MEAN MEDIAN MAX STD ;
所见古诗的意思VAR _NUMERIC_;
RUN;
结果:
1.查看统计量,可看到MonthlyIncome(⽉收⼊)和NumberOfDependents(不包括本⼈在内的家属数量)存在 缺失值,可考虑在下⾯进⾏操作,对于异常值,由于数据源来⾃⽹络,并不知道异常值出现的原因,所以直接剔除
异常值:年龄:剔除60岁以上的和18岁以下的
异常值:负债⽐率:剔除超过80%
缺失值:⽉收⼊:中位数进⾏填充
缺失值:家属数量:中位数填充
数据处理SAS代码:
/*填充缺失值*/
data cs2;
t cs1;
if missing(MonthlyIncome1)=1 then MonthlyIncome1=5400;
if missing(NumberOfDependents1)=1 then NumberOfDependents1=0;
run;
/*剔除负债⽐率⼤于80%且年龄⼤于60岁且⼩于18岁的数据量,随便将变量名过长的变量进⾏改名操作,并查看结果*/
data cs3;
t cs2;
where DebtRatio<=0.8;
run;
data cs3;
t cs3(rename=(RevolvingUtilizationOfUncuredL=RUOL NumberOfOpenCreditLinesAndLoans=NOCLA
'NumberOfTime30-59DaysPastDueNotW'N=NO3_5DPD 'NumberOfTime60-89DaysPastDueNotW'N=NO6_8DPNW)); where 18<age<60;
因为没有具体的业务场景,所以⽆法做⼀下特征⼯程的操作,类似变量的衍⽣等。
⼆、变量分箱操作
变量的分箱操作,因为原数据变量都是连续变量和名义变量,没有涉及到离散变量。所以使⽤等频分
箱。
⼤概流程为:
1.先对数据源排序,
2.然后对单个变量分为X组,每组中数据量⼀样。
适合朗诵的古诗词3.计算每组的WOE和IV,导出到EXCEL进⾏分箱合并操作
SAS代码:
%MACRO woe_1(x);
/*⼀、排序*/
proc sort data=cs3 ;
by &x;
比尔沙曼
run;
/
*⼆、先分为10组,然后在导出⾄EXCEL根据IV值分组合并*/
proc rank data=cs3 out=cs4_0 groups=10;
var &x;
RANKS group ;
run;
data cs4_00(rename=(group_1=group));
t cs4_0;
length group_1 $2;
group_1=group+1;
drop group n;
run;
data work.cs4_1;
t cs4_00;
cnt=1;
keep group &x SeriousDlqin2yrs cnt;
run;
/*计算组的上下限,和每组中的好样本与坏样本数*/
proc sql;
create table cs4_2 as
lect group
,MIN(&x) AS MIN
,MAX(&x) as max
,
sum(ca when SeriousDlqin2yrs^=1 then cnt el 0 end) as good_i
,sum(ca when SeriousDlqin2yrs =1 then cnt el 0 end) as bad_i文房四宝指什么
,sum(cnt) as cnt
from cs4_1
group by 1;
run;
/*计算总体的好样本数和坏样本数*/
proc sql;
create table cs4_3 as
lect group,sum(good_i) as good_all,sum(bad_i) as bad_all,sum(cnt) as cnt from cs4_2;
run;
/
高州小吃*合并上述两个数据*/
data cs5;
merge cs4_2 (in=a) cs4_3(in=b);
by group;
if a and b;
run;
/*woe,iv计算*/
data cs5_1;
t cs5;
糖炒板栗家庭做法woe=Log((bad_i/bad_all)/(good_i/good_all));
iv=((bad_i/bad_all)-(good_i/good_all))*woe;
无什么无
run;
三、IV值变量筛选与WOE分组合并
WOE合并的依据:尽可能让变量分组的违约率率呈现单调性。⽐如资产负债率越⾼,违约率越⾼。IV值选择的依据:IV值越⼤,代表变量的预测能⼒越强。所以原则上要求选择IV⾼的变量。
WOE编码:将变量以WOE的形式进⾏替换。
结果:
WOE编码:
SAS代码:⽤SAS的IF THEN 语句即可
data cs3_1;
t cs3;
if RUOL=<0.0739 then WOE_RUOL=-3.94046;
el if 0.0739<RUOL=<0.3805 then WOE_RUOL=-2.67515;
el if 0.3805 <RUOL=<0.8086 then WOE_RUOL=0.29827;
el WOE_RUOL=2.276224;
if 21<age=<34 then WOE_AGE=0.651008;
el if 34<age=<44 then WOE_AGE=0.22388;
el if 44<age=<53 then WOE_AGE=-0.25853;
el WOE_AGE=-0.85461;
if NO3_5DPD=0 then WOE_NO3_5DPD=-0.51196;
el WOE_NO3_5DPD=28.340616;
if DebtRatio=<0.1767 then WOE_DebtRatio=0.246865;
ELSE IF 0.1767<DebtRatio<=0.3386 then WOE_DebtRatio=-0.6778;
ELSE IF 0.3386<DebtRatio<=0.4715 then WOE_DebtRatio=-0.21373;
el WOE_DebtRatio=0.486945;
if NOCLA=0 then WOE_NOCLA=0.344025;
ELSE IF 0<NOCLA<=9 THEN WOE_NOCLA=2.168287;
ELSE WOE_NOCLA=7.221068;
if NumberOfTimes90DaysLate=0 then WOE_NT90L=-0.40158;
ELSE WOE_NT90L=44.363756;
IF NumberRealEstateLoansOrLines=0 THEN WOE_NRELO=0.344025;
el if 0<NumberRealEstateLoansOrLines<=9 then WOE_NRELO=2.168287;
el WOE_NRELO=7.221068;
if NO6_8DPNW=0 then WOE_NO6_8DPNW=-0.28016;
ELSE IF NO6_8DPNW=1 THEN WOE_NO6_8DPNW=9.645938;
ELSE WOE_NO6_8DPNW=13.139103;
IF 3333<=MonthlyIncome1 THEN WOE_MonthlyIncome=0.845316;
el if 3333<MonthlyIncome1<=5690 then WOE_MonthlyIncome=0.442376;
el if 5690<MonthlyIncome1<=9300 then WOE_MonthlyIncome=-0.79535;
el WOE_MonthlyIncome=-0.96902;
if NumberOfDependents1=0 then WOE_NumberOfDependents=-0.07692;
el if NumberOfDependents1=1 then WOE_NumberOfDependents=0.416705;
ELSE WOE_NumberOfDependents=1.784448;
run;
/*2.删除原先变量,减⼩计算量*/
data cs3_2;
t cs3_1;
drop NumberOfDependents1 MonthlyIncome1 NO6_8DPNW NumberRealEstateLoansOrLines NumberOfTimes90DaysLate NOCLA DebtRatio NO3_5DPD age RUOL;
run;
四、逻辑回归建模
1. 共线性检验:共线性检验,VIF⼤于10直接剔除或者使⽤主成分分析降维消除共线性,运⾏程序后,并⽆共线性。

本文发布于:2023-08-02 18:44:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1105749.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变量   评分   操作   逻辑   数据   剔除
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图