SAS在金融中的应用七

第14-15周作业

1、当前市场的利率为:一年期平价债券的票面利率5%,二年期平价债券的票面利率6%,三年期平价债券的票面利率7%,假设所有的债券都是一年付息一次。给出如下计算 的sas程序。
a.试计算1、2、3年期即期收益率(假设面值为1)。

因为此三支债券都为平价债券,则这些债券现在的价格就等于面值,即为1,又易知一年期平价债券的票面利率就是1年即期利率,为5%

data a;
array b (3) b1-b3  (1 1 1);
array c (3) c1-c3 (0  0.06 0.07);
array r (3) r1-r3 (0.05  0  0);
do t=2 to 3;
	s=0;
	do n=1 to t-1;
		s=s+c(t)/((1+r(n))**n);
	end;
	r(t)=((1+c(t))/(b(t)-s))**(1/t)-1;
end;
proc print data=a;
var r1-r3;
run;

运行结果:image-20210604084726927

可知1、2、3年期即期收益率分别为0.05,0.060303,0.070969。

b. 假设现在有一个票面利率为5%面值为100的三年期债券,试根据即期收益率和内生收益率求出价格。

根据即期收益率求出价格为:94.6882。

data a1;
array jqr (3) jqr1-jqr3(0.05 0.060303 0.070969);
b=0;
do n=1 to 3;
	if n<3 then c=100*0.05;
	else c=100+100*0.05;
	b=b+c/(1+jqr(n))**n;
end;
proc print data=a1;
var b;
run;

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6PRqPsm-1630667730581)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210604085812141.png)]

根据内生收益率求出价格为:94.7514。

/*由题意可知该债券的内生收益率就是三年期平价债券的票面利率,即为7%*/
data a4;
b=0;
do n=1 to 3;
	if n<3 then c=100*0.05;
	else c=100+100*0.05;
	b=b+c/(1+0.07)**n;
end;
proc print data=a4;
var b;
run;

c.试计算一年后发行的一年期息票债券的远期利率和二年后发行的一年期息票债券的远期利率。

一年后发行的一年期息票债券的远期利率:为8.118%

data a2;
array r(3) r1-r3 (0.05  0.060303 0.070969);
b1=1/(1+r1)-1/(1+r3)**3;
b=0;
do n=2 to 3;
	b=b+1/(1+r(n))**n;
end;
yqr=b1/b;
proc print data=a2;
var yqr;
run;

运行结果:image-20210604091648981

二年后发行的一年期息票债券的远期利率:为9.2624%。

data a3;
array r(3) r1-r3 (0.05  0.060303 0.070969);
b1=1/(1+r2)**2-1/(1+r3)**3;
b=1/(1+r(3))**3;
yqr=b1/b;
proc print data=a3;
var yqr;
run;

运行结果:image-20210604095756414

  1. Excel数据集sjk6-3给出银行客户的财务指标数据x1-x12、以及客户是否违约的记录y,其中y=1表示客户违约、y=0表示客户不违约。试利用这个数据集构建信用风险度量模型,要求在模型构建时,预测变量的选择至少采用两种方法,模型构建要求采用判别分析、Logistic回归和朴素贝叶斯分类法三种方法,并比较所构建模型的预测准确率。给出所用到的SAS程序。
proc import out=cwzbsj
            Datafile='D:\mySASDATA\第14-15周\sjk6-3.xls'
			DbmS=xls replace;
			getnames=yes;
run;/*导入数据*/
/*预测变量的选取:t检验法*/
proc ttest cochran data=cwzbsj ;
	class y;
run;
/*根据程序运行结果,t检验出的在违约企业和非违约企业之间有良好区分度的变量有x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11*/
proc corr data=cwzbsj;
var x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11;
run;
/*通过相关系数矩阵的初步分析,这些变量之间的相关系数均较小,都不超过0.15,且基本小于0.1,
说明通过ttest过程对变量的筛选达到的效果还是比较好的*/
/*预测变量的选取:信号的噪音差方法*/
/*由上表易知x1为负指标,x2-x11为正指标*/
data a;
set cwzbsj;
do x0=-207.9 to 31.7 by 0.1;/*循环变量初值取x1的最小值,终值取x1的最大值,步长取0.1,因为数据量较大,阈值只保留一位小数*/
	output;
end;
data a1;
set a;
if x1>x0 and y=1 then xh=1;/*若对违约企业发出警报,记作一个信号*/
if x1>x0 and y=0 then zy=1;/*若对非违约企业发出警报,记作一个噪音*/
run;
data a2;
set a1;
if xh=1;
proc sort data=a2;
by x0;
proc freq data=a2;
table x0*xh/out=b1;
run;
data c1;
set b1;
xhb=count/228;/*计算指标的信号比*/
keep x0 xhb;
run;
data a3;
set a1;
if zy=1;
proc sort data=a3;
by x0;
proc freq data=a3;
tables x0*zy/out=b2;
data c2;
set b2;
zyb=count/6467;/*计算指标的信号噪音差*/
keep x0 zyb;
data a4;
merge c1 c2;
by x0;
xhzyc=xhb-zyb;/*计算指标的信号噪音差*/
proc sort data=a4;
by descending xhzyc;
data a5; 
set a4;
if _n_=1;/*只保留数据a4中信号噪音差最大的那个观测*/
proc print data=a5;
var x0 xhb zyb xhzyc;
run;
%macro xhzyf(sjj,zb,min,max,wyzs,fwyzs);
data a1&sjj.;
set cwzbsj;
do x0&zb.=&min.  to  &max. by 1;
	output;
end;
data a1&sjj.;
set a1&sjj.;
x00&zb.=x0&zb./10;
if x&zb.<=x00&zb. and y=1 then xh=1;/*若对违约企业发出警报,记作一个信号*/
if x&zb.<=x00&zb. and y=0 then zy=1;/*若对非违约企业发出警报,记作一个噪音*/
run;
data a2&sjj.;
set a1&sjj.;
if xh=1;
proc sort data=a2&sjj.;
by x00&zb.;
proc freq data=a2&sjj.;
table x00&zb.*xh/out=b1&sjj.;
run;
data c1&sjj.;
set b1&sjj.;
xhb=count/&wyzs.;/*计算指标的信号比*/
keep x00&zb. xhb;
run;
data a3&sjj.;
set a1&sjj.;
if zy=1;
proc sort data=a3&sjj.;
by x00&zb.;
proc freq data=a3&sjj.;
tables x00&zb.*zy/out=b2&sjj.;
data c2&sjj.;
set b2&sjj.;
zyb=count/&fwyzs.;/*计算指标的信号噪音差*/
keep x00&zb. zyb;
data a4&sjj.;
merge c1&sjj.  c2&sjj.;
by x00&zb.;
xhzyc=xhb-zyb;/*计算指标的信号噪音差*/
proc sort data=a4&sjj.;
by descending xhzyc;
data a5&sjj.; 
set a4&sjj.;
if _n_=1;/*只保留数据a4中信号噪音差最大的那个观测*/
proc print data=a5&sjj.;
var x00&zb. xhb zyb xhzyc;
run;
%mend xhzyf;
%xhzyf(2,2,-399,1106,228,6467);
%xhzyf(3,3,-335,2051,228,6467);
%xhzyf(4,4,-2656,1261,228,6467);
%xhzyf(5,5,-5512,337,226,6433);
%xhzyf(6,6,-437,1338,228,6467);
%xhzyf(7,7,-726,-18,228,6467);
%xhzyf(8,8,-3659,5240,228,6467);
%xhzyf(9,9,-1455	,712,228,6467);
%xhzyf(10,10,-136,2537,228,6467);
%xhzyf(11,11,-331,2165,228,6467);
run;

相关系数图:

image-20210604113406913

指标表格:

指标Y个数均值标准差标准误差最小值最大值指标属性
x106467-13.833377.69570.9662-207.931.717负指标
x1122835.8291.87976.0849-207.931.717负指标
x206467-8.534152.04770.6472-39.942110.6正指标
x21228-15.829545.67173.0247-39.942110.6正指标
x306467-7.132653.92330.6705-33.519205.1正指标
x31228-15.961241.73512.764-33.519205.1正指标
x40646716.129461.19580.761-265.6126.1正指标
x41228-0.854781.51555.3985-265.6126.1正指标
x506433-77.4337199.62.4887-551.233.721正指标
x51226-117.5229.415.2584-551.233.721正指标
x60646711.852664.41330.801-43.77133.8正指标
x612280.330858.23323.8566-43.77133.8正指标
x706467-16.736417.1110.2128-72.6267-1.7587正指标
x71228-22.048922.39031.4828-72.6267-1.7587正指标
x80646790.4248318.23.9567-365.9524正指标
x81228-51.8633302.420.0245-365.9524正指标
x90646739.949772.20660.8979-145.571.1395正指标
x91228-51.0004105.76.9999-145.571.1395正指标
x100646719.405384.15081.0464-13.6113253.7正指标
x101228-9.390427.31181.8088-13.6113253.7正指标
x110646725.150765.96620.8203-33.174216.5正指标
x11122811.783155.81993.6968-33.174216.5正指标

各指标的阈值和信号噪音差:

指标指标阈值信号比噪音比信号噪音差
x1-173.50.771930.84846-0.076532
x2-3.30.785090.730480.05461
x3-33.50.78070.707440.073264
x4-24.20.513160.452450.060707
x5-0.30.800880.715680.0852
x6-21.10.81140.734340.07706
x7-400.223680.120770.10292
x8-135.20.43860.237980.20062
x9-145.50.552630.128960.42367
x10-13.60.964910.842120.12279
x11-15.70.570180.443330.12685

根据此表发现x1-x11这些指标对区分企业是否违约时效果都不太好。

将数据集cwzbsj随机地分成训练样本组cwzbsjxl和检验样本组cwzbsjjy:

data m;
set cwzbsj;
k=uniform(131);
proc sort data=m;
	by y k;
data cwzbsjxl cwzbsjjy;
set m;
drop k;
if int(_n_/2)-_n_/2=0 then output cwzbsjxl;
else output cwzbsjjy;
run;

采用判别分析构建模型:

proc discrim data=cwzbsjxl testout=w testdata=cwzbsjjy;
class y;
var x1-x11;
run;
/*利用逐步判别分析法,选择建立判别分析模型的指标*/
proc stepdisc data=cwzbsjxl method=sw;
	class y;
run;
/*此方法发现x11作用不大*/

结果图:

image-20210605220035873

此模型对非违约企业进行判断出错的概率为18.41%,对违约企业判断出错的概率为31.86%。

Logistic回归构建模型:

/*Logistic回归*/
proc logistic descending data=cwzbsjxl;
model y=x1-x11;/* output out=u DFBETAS=ALL*/
run;

修正的朴素贝叶斯方法:

/*由之前的噪音差法,勉强选出x2,x3,x5,x9x10这几个指标*/
data bys;
set cwzbsjxl;
if x2<=-3.3 then x2p1=0.785;
else x2p1=0.215;
if x2<=-3.3 then x2p0=0.73;
else x2p0=0.27;
if x3<=-33.5 then x3p1=0.781;
else x3p1=0.219;
if x3<=-33.5 then x3p0=0.707;
else x3p0=0.293;
if x5<=-0.3 then x5p1=0.8;
else x5p1=0.2;
if x5<=-0.3 then x5p0=0.716;
else x5p0=0.284;
if x9<=-145.5 then x9p1=0.553;
else x9p1=0.447;
if x9<=-145.5 then x9p0=0.129;
else x9p0=0.871;
if x10<=-13.6 then x10p1=0.965;
else x10p1=0.034;
if x10<=-13.6 then x10p0=0.842;
else x10p0=0.158;
p1=228*x2p1*x3p1*x5p1*x9p1*x10p1/6755;
p0=6467*x2p0*x3p0*x5p0*x9p0*x10p0/6755;
chap=p0-p1;
run;
data byszy;
set  bys;
if y=0 and chap>0 then zyjg=1;
if y=0 and chap<=0 then zyjg=0;
if y=1 and chap>0 then zyjg=0;
if y=1 and chap<=0 then zyjg=1;
run;
proc print data=byszy;
var y chap zyjg;
run;
/*由结果可知其对一个企业是否违约判断的总正确率为93%左右*/

lse x10p0=0.158;
p1=228x2p1x3p1x5p1x9p1x10p1/6755;
p0=6467
x2p0x3p0x5p0x9p0x10p0/6755;
chap=p0-p1;
run;
data byszy;
set bys;
if y=0 and chap>0 then zyjg=1;
if y=0 and chap<=0 then zyjg=0;
if y=1 and chap>0 then zyjg=0;
if y=1 and chap<=0 then zyjg=1;
run;
proc print data=byszy;
var y chap zyjg;
run;
/由结果可知其对一个企业是否违约判断的总正确率为93%左右/


这三个模型中,总的来说,修正的朴素贝叶斯分类法效果较好。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值