京公网安备 11010802034615号
经营许可证编号:京B2-20210330
SAS—计算K-S值及画图
近来,时于夜半下雨,也常在梦里被雨扰醒。究其原因,也是因为近来工作无趣,本身也只喜欢写写SAS或Python代码,做模型,可近来却连数据权限都没有,万灰俱灭。雨声轻轻,却也容易愁闷得睡不着。想着要去外包,却因自己的犹豫不决也没有去成。
好了,不说废话了。昨天有人在微信上问KS的计算方式。今天介绍一下KS值吧。
先看一段程序:
data logistic;
input accident age vision drive;
datalines;
1 17 1 1
1 44 0 0
1 48 1 0
1 55 0 0
1 75 1 1
0 35 0 1
0 42 1 1
0 57 0 0
0 28 0 1
0 20 0 1
0 38 1 0
0 45 0 1
0 47 1 1
0 52 0 0
0 55 0 1
1 68 1 0
1 18 1 0
1 68 0 0
1 48 1 1
1 17 0 0
1 70 1 1
1 72 1 0
1 35 0 1
1 19 1 0
1 62 1 0
0 39 1 1
0 40 1 1
0 55 0 0
0 68 0 1
0 25 1 0
0 17 0 0
0 45 0 1
0 44 0 1
0 67 0 0
0 55 0 1
1 61 1 0
1 19 1 0
1 69 0 0
1 23 1 1
1 19 0 0
1 72 1 1
1 74 1 0
1 31 0 1
1 16 1 0
1 61 1 0
;
proc logistic data=logistic outest=model;
model accident(event='1')=age vision drive/selection=stepwise
sle=0.05 sls=0.05 outroc=roc;
output out= pred p=p1 ;
run;
proc npar1way data=pred noprint;
class accident;
var p1;
output out=ks;
run;
以上是一段常规的计算KS值。
首先要了解什么是KS值,K-S值(kolmogorov-smirnov curve)将总体进行n等分组并按照违约概率降序排列,计算每一等份中违约与正常百分比的累积分布,绘制出两者之间的差值就是K-S曲线。其中K-S曲线中的最大值即为K-S统计量,取值范围在0到1之间。
以下是计算K-S值及画图的宏程序:
/**data:逻辑回归后包含验证结果的数据集,var:违约概率变量,status:分类变量,data1:切分后的变量,Mks:最大ks值,M:分组组数**/
%macro KS(data, var, status, data1, Mks,M);
proc sort data=&data;
by &var;
run;
proc sql noprint;
select sum(&status) into:P from &data;
select count(*) into :Ntot from &data;
quit;
%let N=%eval(&Ntot-&P);
data &data1;
set &data nobs=NN;
by &var;
retain tile 1 totP 0 totN 0;
Tile_size=ceil(NN/&M);
if &status=1 then totP=totP+&status;
else totN=totN+1;
Pper=totP/&P;
Nper=totN/&N;
if _N_ = Tile*Tile_Size then
do;
output;
if Tile <&M then
do;
Tile=Tile+1;
SumResp=0;
end;
end;
keep Tile Pper Nper;
run;
data temp;
Tile=0;
Pper=0;
NPer=0;
run;
Data &data1;
set temp &data1;
run;
data &data1;
set &data1;
Tile=Tile/&M;
label Pper='Percent of Positives';
label NPer ='Percent of Negatives';
label Tile ='Percent of population';
KS=NPer-PPer;
run;
proc sql noprint;
select max(KS) into :&Mks from &data1;
run; quit;
proc datasets library=work nodetails nolist;
delete temp ;
run;
quit;
%mend;
%macro PlotKS(data1);
symbol1 value=dot color=red interpol=join height=1;
legend1 position=top;
symbol2 value=dot color=blue interpol=join height=1;
symbol3 value=dot color=green interpol=join height=1;
proc gplot data=&data1;
plot( NPer PPer KS)*Tile / overlay legend=legend1;
run;
quit;
goptions reset=all;
%mend;
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在机器学习建模与数据分析实战中,特征维度爆炸、冗余信息干扰、模型泛化能力差是高频痛点。面对用户画像、企业经营、医疗检测、 ...
2026-03-26在这个数据无处不在的时代,数据分析能力已不再是数据从业者的专属技能,而是成为了职场人、管理者、创业者乃至个人发展的核心竞 ...
2026-03-26在CDA(Certified Data Analyst)数据分析师的能力体系中,线性回归是连接描述性统计与预测性分析的关键桥梁,也是CDA二级认证的 ...
2026-03-26在数据分析、市场研究、用户画像构建、学术研究等场景中,我们常常会遇到多维度、多指标的数据难题:比如调研用户消费行为时,收 ...
2026-03-25在流量红利见顶、获客成本持续攀升的当下,营销正从“广撒网”的经验主义,转向“精耕细作”的数据驱动主义。数据不再是营销的辅 ...
2026-03-25在CDA(Certified Data Analyst)数据分析师的全流程工作中,无论是前期的数据探索、影响因素排查,还是中期的特征筛选、模型搭 ...
2026-03-25在当下数据驱动决策的职场环境中,A/B测试早已成为互联网产品、运营、营销乃至产品迭代优化的核心手段,小到一个按钮的颜色、文 ...
2026-03-24在统计学数据分析中,尤其是分类数据的分析场景里,卡方检验和显著性检验是两个高频出现的概念,很多初学者甚至有一定统计基础的 ...
2026-03-24在CDA(Certified Data Analyst)数据分析师的日常业务分析与统计建模工作中,多组数据差异对比是高频且核心的分析场景。比如验 ...
2026-03-24日常用Excel做数据管理、台账维护、报表整理时,添加备注列是高频操作——用来标注异常、说明业务背景、记录处理进度、补充关键 ...
2026-03-23作为业内主流的自助式数据可视化工具,Tableau凭借拖拽式操作、强大的数据联动能力、灵活的仪表板搭建,成为数据分析师、业务人 ...
2026-03-23在CDA(Certified Data Analyst)数据分析师的日常工作与认证考核中,分类变量的关联分析是高频核心场景。用户性别是否影响商品 ...
2026-03-23在数据工作的全流程中,数据清洗是最基础、最耗时,同时也是最关键的核心环节,无论后续是做常规数据分析、可视化报表,还是开展 ...
2026-03-20在大数据与数据驱动决策的当下,“数据分析”与“数据挖掘”是高频出现的两个核心概念,也是很多职场人、入门学习者容易混淆的术 ...
2026-03-20在CDA(Certified Data Analyst)数据分析师的全流程工作闭环中,统计制图是连接严谨统计分析与高效业务沟通的关键纽带,更是CDA ...
2026-03-20在MySQL数据库优化中,分区表是处理海量数据的核心手段——通过将大表按分区键(如时间、地域、ID范围)分割为多个独立的小分区 ...
2026-03-19在商业智能与数据可视化领域,同比、环比增长率是分析数据变化趋势的核心指标——同比(YoY)聚焦“长期趋势”,通过当前周期与 ...
2026-03-19在数据分析与建模领域,流传着一句行业共识:“数据决定上限,特征决定下限”。对CDA(Certified Data Analyst)数据分析师而言 ...
2026-03-19机器学习算法工程的核心价值,在于将理论算法转化为可落地、可复用、高可靠的工程化解决方案,解决实际业务中的痛点问题。不同于 ...
2026-03-18在动态系统状态估计与目标跟踪领域,高精度、高鲁棒性的状态感知是机器人导航、自动驾驶、工业控制、目标检测等场景的核心需求。 ...
2026-03-18