果蝇优化算法优化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] 果蝇优化算法.潘文超
相关文章推荐
- lecture16-联合模型、分层坐标系、超参数优化及本课未来的探讨
- 果蝇优化算法
- 数学模型--现代优化算法(启发式算法)
- 【Scikit-Learn 中文文档】优化估计器的超参数 - 模型选择和评估 - 用户指南 | ApacheCN
- 第2次课改善深层神经网络:超参数优化、正则化以及优化 - week2 优化算法
- 用SMO算法优化垃圾标签检测模型
- 【Scikit-Learn 中文文档】优化估计器的超参数 - 模型选择和评估 - 用户指南 | ApacheCN
- 激光笔交互之坐标映射算法:匹配点提取和参数模型
- 算法移植优化(六)tensorflow模型移植推理优化
- 【Scikit-Learn 中文文档】优化估计器的超参数 - 模型选择和评估 - 用户指南 | ApacheCN
- 势力图技术:模型表现、算法和参数(The Mechanics of Influence Mapping: Representation, Algorithm & Parameters)
- 果蝇优化算法-matlab实现、过程剖析
- CS231n 卷积神经网络与计算机视觉 7 神经网络训练技巧汇总 梯度检验 参数更新 超参数优化 模型融合 等
- 【量化投资】基金择时策略浅析(4) ——参数优化和模型稳定性
- 常见优化算法 (caffe和tensorflow对应参数)
- lecture16-联合模型、分层坐标系、超参数优化及本课未来的探讨
- 利用RANSAC算法稳健估计平面模型参数和圆柱模型参数
- 七月算法机器学习笔记6 -- 工作流程与模型优化
- 深度模型中的优化算法
- 【Scikit-Learn 中文文档】优化估计器的超参数 - 模型选择和评估 - 用户指南 | ApacheCN