您的位置:首页 > 其它

果蝇优化算法优化Z-SCORE模型参数

2017-03-31 15:14 344 查看

Z-SCORE模型 (企业风险预测)

定义

Z = 1.2* X1 + 1.4 X2 + 3.3 *X3 + 0.6 X4 + 1.0* X5

其中 Z 为 Z-SCORE,而 X1 至 X5 为

X1:营运资金除以总资产;

X2:保留盈余除以总资产;

X3:息前税前净利除以总资产;

X4:股东权益市值除以总负债的账面价值;

X5:销售金额除以总资产。

一般而言,一家财务健全的上市公司,其 Z 分数应该高于或等于 2.675;而财务状况不佳(财务危机)的公

司,其 Z 分数则低于或等于 2.675

示例

财务危机预警20家企业样本数据



x1-x5对应企业各项指标,Y为1代表正常公司,为0是代表危机公司。

将 20 家企业的样本数据代入如下 ZSCORE 模型中:

Z = 1.2* X1 + 1.4 X2 + 3.3 *X3 + 0.6 *X4 + 1.0 X5

结果如下,20家企业中有6家预测结果和实际不相符。



由此可知,Z-SCORE 模型侦测财务危机预警的能力尚有改善空间,可能是时空背景的不同,导致该模型的推广能力逐渐减弱,若能将 Z-SCORE 模型中各自变量前的系数加以优化(优化),应该能提升其预测能力。

果蝇优化算法



原理

首先初始5群果蝇群体, 分别指派给p1, p2, p3, p4和p5等参数。 每群有 10 只果蝇,随机初始化果蝇群体位置区间为[0,1],迭代的果蝇搜寻食物的随机飞行方向与距离区间为[-1,1]。 经由 100 次迭代搜寻最

佳的 p1, p2, p3, p4 和 p5 后, Z-SCORE 预测结果逐渐趋近于目标值 Y。

【注】

如何实现Z-SCORE 预测结果逐渐趋近于目标值 Y ?

答:均方根误差(RMSE,root-mean-square error),用来衡量观测值同真值之间的偏差。首先随机产生p1,p2..p5,代入Z-SCORE模型中得到观测值,从而求出RMSE,然后经n次迭代后,求出最小RMSE时p1,p2,..p5值,即为最佳模型参数。

代码(matlab) TXY.txt

clc
clear

%加载z-score训练数据
load G:\matlab-code\TXY.txt;
[row,col] = size(TXY);

set = row / 5;
row1 = row - set;
tr = TXY(1:row1,1:col-1);
t1 = TXY(1:row1,col);
%tr和t1来得到最优z-score系数

te = TXY(row1+1:row,1:col-1);
t2 = TXY(1:row1,col);
%te和t2来检查优化效果

%一行5列的随机数矩阵,表示5个果蝇群体的初始位置
x_axis = rands(1,5);
y_axis = rands(1,5);

size_pop = 20;
max_gen = 100; %迭代次数

for p = 1 : size_pop

% x[p,:],横坐标位置矩阵的第p行,
% 初始5个果蝇种群中个体飞行方向和距离
x(p,:) = x_axis + 2*rand() - 1;
y(p,:) = y_axis + 2*rand() - 1;

%在原始果蝇种群位置上,每5个果蝇飞行一次计算一次均方根误差
g = 0;

% 求出5个果蝇群体中第p个果蝇个体到原点的距离
d(p,1) = ( x(p,1)^2 + y(p,1)^2 )^0.5;
d(p,2) = ( x(p,2)^2 + y(p,2)^2 )^0.5;
d(p,3) = ( x(p,3)^2 + y(p,3)^2 )^0.5;
d(p,4) = ( x(p,4)^2 + y(p,4)^2 )^0.5;
d(p,5) = ( x(p,5)^2 + y(p,5)^2 )^0.5;

%味道浓度判定值
s(p,1) = 1/d(p,1);
s(p,2) = 1/d(p,2);
s(p,3) = 1/d(p,3);
s(p,4) = 1/d(p,4);
s(p,5) = 1/d(p,5);

%利用味道浓度判定函数求出味道浓度,这里判定函数直接相等了。
a1 = s(p,1);
a2 = s(p,2);
a3 = s(p,3);
a4 = s(p,4);
a5 = s(p,5);

%求RMSE
% 1.根据Z-SCORE模型和随机a1,a2..a5求出观测值。【注】a1,a2..a5是味道浓度,是一个数 tr(:,k)取tr矩阵第k列。  yc是一个row1行1列的矩阵
% 2.利用观测值和真值计算均方根误差
yc = a1 * tr(:,1) + a2 * tr(:,2) + a3 * tr(:,3) + a4 * tr(:,4) + ...
a5 * tr(:,5);
yy = yc - t1;               %z-score输出和目标值相减并计算RMSE,
for ii = 1 : row1
g = g + yy(ii)^2;
end
smell(p) = g^0.5/row1;      %味道浓度用于记录RMSE,之后果蝇群体便根据该浓度决定下一次飞行

%一次循环表示5个果蝇群体中5只果蝇的共同拟合效果
end

%5次果蝇飞行的拟合效果,选择其中拟合效果最好的一次,即最小均方根误差,表示观测值和实际值最接近
[bestSmell,bestIndex] = min(smell);

%群体移动到最佳味道浓度,x[],y[]一行分别表示5个种群的位置
x_axis = x(bestIndex,:);
y_axis = y(bestIndex,:);
smellBest = bestSmell;

%最佳系数a1,a2...a5其实就是s[bestIndex,:]

%果蝇迭代寻优
for gen = 1 : max_gen
for p = 1 : size_pop

x(p,:) = x_axis + 2*rand() - 1;
y(p,:) = y_axis + 2*rand() - 1;
g = 0;

d(p,1) = ( x(p,1)^2 + y(p,1)^2 )^0.5;
d(p,2) = ( x(p,2)^2 + y(p,2)^2 )^0.5;
d(p,3) = ( x(p,3)^2 + y(p,3)^2 )^0.5;
d(p,4) = ( x(p,4)^2 + y(p,4)^2 )^0.5;
d(p,5) = ( x(p,5)^2 + y(p,5)^2 )^0.5;

s(p,1) = 1/d(p,1);
s(p,2) = 1/d(p,2);
s(p,3) = 1/d(p,3);
s(p,4) = 1/d(p,4);
s(p,5) = 1/d(p,5);

a1 = s(p,1);
a2 = s(p,2);
a3 = s(p,3);
a4 = s(p,4);
a5 = s(p,5);

yc = a1 * tr(:,1) + a2 * tr(:,2) + a3 * tr(:,3) + a4 * tr(:,4) + ...
a5 * tr(:,5);
yy = yc - t1;
for ii = 1 : row1
g = g + yy(ii)^2;
end
smell(p) = g^0.5/row1;
end

[bestSmell,bestIndex] = min(smell);

if bestSmell < smellBest
x_axis = x(bestIndex,:);
y_axis = y(bestIndex,:);
bestS = s(bestIndex,:);     %bestS所记录的便是最佳Z-SCORE参数p1,p2,..p5
smellBest = bestSmell;
end

yy_(gen) = smellBest;
xBest(gen,:) = x_axis;
yBest(gen,:) = y_axis;
end

%均方根误差(RMSE)的收敛趋势,从理论上可推应趋向于0
figure(1);
plot(yy_);
title('Optimization process','fontsize',12);
xlabel('Iteration Number','fontsize',12);
ylabel('RMSE','fontsize',12);

%代表Z-SCORE模型参数的5个果蝇种群的飞行路径
figure(2);
plot(xBest,yBest,'b');
title('fruit fly flying route','fontsize',14);
xlabel('x-axis','fontsize',12);
ylabel('y-axis','fontsize',12);
smellBest;
bestS;


运行结果

smellBest =

0.1176


bestS =

0.2283    0.2584    0.3358    0.2900    0.2192






检查优化后的参数p1,p2..p5预测效果

可以看出,果蝇算法(FOA)优化后,整体正确率由Z-SCORE模型的65%(13/20)提高到了75%(15/20)。但在预测新个体(17-20)时,正确率并不能明显提高,猜测是需要达到一定的规模才可体现FOA优化效果。



附一点疑惑:为什么根据优化后p1,p2,..p5计算FOA-Z-SCORE时,若值小于0.5判定危机公司(0),大于0.5判定正常公司(1)?

参考文献:

[1] 果蝇优化算法.潘文超
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐