基于BP_Adaboost的強(qiáng)分類器設(shè)計(jì)——公司財(cái)務(wù)預(yù)警建模

背景

1甘畅、BP_Adaboost模型

Adaboost算法的思想是合并多個(gè)“弱”分類器的輸出以產(chǎn)生有效分類渠驼。其主要步驟為:首先給出弱學(xué)習(xí)算法和樣本空間(x,y)再榄,從樣本空間中找出m組訓(xùn)練數(shù)據(jù)疾瓮,每組訓(xùn)練數(shù)據(jù)的權(quán)重都是1/m撮弧;然后用弱學(xué)習(xí)算法迭代運(yùn)算T次淀歇,每次運(yùn)算后都按照分類結(jié)果更新訓(xùn)練數(shù)據(jù)權(quán)重分布(對(duì)于分類失敗的訓(xùn)練個(gè)體賦予較大權(quán)重易核,下一次迭代運(yùn)算時(shí)更加關(guān)注這些訓(xùn)練個(gè)體);弱分類器通過(guò)反復(fù)迭代得到一個(gè)分類函數(shù)序列f1,f2,...,fT浪默,每個(gè)分類器函數(shù)賦予一個(gè)權(quán)重牡直,分類結(jié)果越好的函數(shù)缀匕,其對(duì)應(yīng)權(quán)重越大。T次迭代后碰逸,最終強(qiáng)分類函數(shù)F由弱分類函數(shù)加權(quán)得到乡小。BP_Adaboost模型即把BP神經(jīng)網(wǎng)絡(luò)作為弱分類器。反復(fù)訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)樣本輸出饵史,通過(guò)Adaboost算法得到多個(gè)BP神經(jīng)網(wǎng)絡(luò)弱分類器組成的強(qiáng)分類器满钟。

2、公司財(cái)務(wù)預(yù)警系統(tǒng)介紹

公司財(cái)務(wù)預(yù)警系統(tǒng)是為了防止公司財(cái)務(wù)系統(tǒng)運(yùn)行偏離預(yù)期目標(biāo)而建立的報(bào)警系統(tǒng)胳喷,具有針對(duì)性和預(yù)測(cè)性等特點(diǎn)湃番。它通過(guò)公司的各項(xiàng)指標(biāo)綜合評(píng)價(jià)并預(yù)測(cè)公司財(cái)務(wù)狀況、發(fā)展趨勢(shì)和變化厌蔽,為決策者科學(xué)決策提供支持牵辣。
財(cái)務(wù)危機(jī)預(yù)警指標(biāo)體系中的指標(biāo)可分為表內(nèi)信息指標(biāo)、盈利能力指標(biāo)奴饮、償還能力指標(biāo)、成長(zhǎng)能力指標(biāo)择浊、線性流量指標(biāo)和表外信息指標(biāo)六大指標(biāo)戴卜,每項(xiàng)大指標(biāo)又分為若干小指標(biāo),如盈利 能力指標(biāo)又分為凈資產(chǎn)收益率琢岩、總資產(chǎn)報(bào)酬率投剥、每股收益、主營(yíng)業(yè)務(wù)利潤(rùn)率和成本費(fèi)用利潤(rùn)率等担孔。在用于公司財(cái)務(wù)預(yù)警預(yù)測(cè)時(shí)江锨,如果對(duì)所有指標(biāo)都進(jìn)行評(píng)價(jià)后綜合,模型過(guò)于復(fù)雜糕篇,并且各指標(biāo)間關(guān)聯(lián)性較強(qiáng)啄育,因此在模型建立前需要篩選指標(biāo)。
指標(biāo)篩選分為顯著性分析和因子分析兩步拌消。顯著性分析通過(guò)T檢驗(yàn)方法分析ST公司和非ST公司挑豌,在財(cái)務(wù)指標(biāo)中找出差別較大、能夠明顯區(qū)分兩類公司的財(cái)務(wù)指標(biāo)墩崩。因子分析在顯著性分析基礎(chǔ)上對(duì)篩選出來(lái)的指標(biāo)計(jì)算主成分特征值氓英,從中找出特征值大的指標(biāo)作為公司危機(jī)預(yù)警方法的最終評(píng)價(jià)指標(biāo)。最終找出成分費(fèi)用利潤(rùn)率鹦筹、資產(chǎn)營(yíng)運(yùn)能力铝阐、公司總資產(chǎn)、總資產(chǎn)增長(zhǎng)率铐拐、流動(dòng)比率徘键、營(yíng)業(yè)現(xiàn)金流量练对、審計(jì)意見(jiàn)類型、每股收益啊鸭、存貨周轉(zhuǎn)率和資產(chǎn)負(fù)債率十項(xiàng)指標(biāo)作為評(píng)價(jià)指標(biāo)锹淌,該十項(xiàng)指標(biāo)能夠比較全面地反映出公司的財(cái)務(wù)狀況。

模型建立

基于BP_Adaboost模型的公司財(cái)務(wù)預(yù)警算法流程圖如下圖1所示赠制。


圖1 算法流程圖

算法步驟如下:
步驟1:數(shù)據(jù)選擇和網(wǎng)絡(luò)初始化
步驟2:弱分類器預(yù)測(cè)
步驟3:計(jì)算預(yù)測(cè)序列權(quán)重
步驟4:測(cè)試數(shù)據(jù)權(quán)重調(diào)整
步驟5:強(qiáng)分類函數(shù)

本文中共有1 350組公司財(cái)務(wù)狀況數(shù)據(jù)赂摆,每組數(shù)據(jù)的輸入為10維,代表上述的10個(gè)指標(biāo)钟些,輸出為1維烟号,代表公司財(cái)務(wù)狀況,為1時(shí)表示財(cái)務(wù)狀況良好政恍,為-1時(shí)表示財(cái)務(wù)狀況出現(xiàn)問(wèn)題汪拥。從中隨機(jī)選取1 000組數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),350組數(shù)據(jù)作為測(cè)試數(shù)據(jù)篙耗。根據(jù)數(shù)據(jù)維數(shù)迫筑,采用的BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)為10-6-1,共訓(xùn)練生成10個(gè)BP神經(jīng)網(wǎng)絡(luò)弱分類器宗弯,最后用10個(gè)弱分類器組成強(qiáng)分類器對(duì)公司財(cái)務(wù)狀況進(jìn)行分類脯燃。

MATLAB實(shí)現(xiàn)

根據(jù)Adaboost和BP神經(jīng)網(wǎng)絡(luò)原理,編程實(shí)現(xiàn)基于BP_Adaboost算法的公司財(cái)務(wù)預(yù)警建模蒙保。

1辕棚、數(shù)據(jù)集選擇

從樣本空間中選擇訓(xùn)練樣本、測(cè)試樣本邓厕,并對(duì)測(cè)試樣本分配權(quán)重逝嚎,其中訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)存儲(chǔ)在data.mat文件中,input_train详恼、output_train為訓(xùn)練輸入輸出數(shù)據(jù)补君,input_test、output_test為預(yù)測(cè)輸入輸出數(shù)據(jù)单雾。

%% 清空環(huán)境變量
clc
clear

%% 下載數(shù)據(jù)
load data input_train output_train input_test output_test

%% 權(quán)重初始化
[mm,nn]=size(input_train);
D(1,:)=ones(1,nn)/nn;

2赚哗、弱分類器學(xué)習(xí)分類

把BP神經(jīng)網(wǎng)絡(luò)看做弱分類器,經(jīng)過(guò)訓(xùn)練后分類訓(xùn)練樣本硅堆,并且根據(jù)訓(xùn)練樣本分類結(jié)構(gòu)調(diào)整訓(xùn)練樣本權(quán)重值屿储,最終得出一系列弱分類器及其權(quán)重,為了體現(xiàn)出強(qiáng)分類器的分類效果渐逃,本文降低了BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練次數(shù)以降低弱分類器分類能力够掠。

%% 弱分類器分類
K=10;
for i=1:K
    
    %訓(xùn)練樣本歸一化
    [inputn,inputps]=mapminmax(input_train);
    [outputn,outputps]=mapminmax(output_train);
    error(i)=0;
    
    %BP神經(jīng)網(wǎng)絡(luò)構(gòu)建
    net=newff(inputn,outputn,6);
    net.trainParam.epochs=5;
    net.trainParam.lr=0.1;
    net.trainParam.goal=0.00004;
    
    %BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練
    net=train(net,inputn,outputn);
    
    %訓(xùn)練數(shù)據(jù)預(yù)測(cè)
    an1=sim(net,inputn);
    test_simu1(i,:)=mapminmax('reverse',an1,outputps);
    
    %測(cè)試數(shù)據(jù)預(yù)測(cè)
    inputn_test =mapminmax('apply',input_test,inputps);
    an=sim(net,inputn_test);
    test_simu(i,:)=mapminmax('reverse',an,outputps);
    
    %統(tǒng)計(jì)輸出效果
    kk1=find(test_simu1(i,:)>0);
    kk2=find(test_simu1(i,:)<0);
    
    aa(kk1)=1;
    aa(kk2)=-1;
    
    %統(tǒng)計(jì)錯(cuò)誤樣本數(shù)
    for j=1:nn
        if aa(j)~=output_train(j);
            error(i)=error(i)+D(i,j);
        end
    end
    
    %弱分類器i權(quán)重
    at(i)=0.5*log((1-error(i))/error(i));
    
    %更新D值
    for j=1:nn
        D(i+1,j)=D(i,j)*exp(-at(i)*aa(j)*test_simu1(i,j));
    end
    
    %D值歸一化
    Dsum=sum(D(i+1,:));
    D(i+1,:)=D(i+1,:)/Dsum;
    
end

3、強(qiáng)分類器分類和結(jié)果統(tǒng)計(jì)

由10組弱分類器BP網(wǎng)絡(luò)組成強(qiáng)分類器對(duì)分析樣本進(jìn)行分類茄菊,并統(tǒng)計(jì)分類誤差疯潭。

%% 強(qiáng)分類器分類結(jié)果
output=sign(at*test_simu);

%% 分類結(jié)果統(tǒng)計(jì)
%統(tǒng)計(jì)強(qiáng)分類器每類分類錯(cuò)誤個(gè)數(shù)
kkk1=0;
kkk2=0;
for j=1:350
    if output(j)==1
        if output(j)~=output_test(j)
            kkk1=kkk1+1;
        end
    end
    if output(j)==-1
        if output(j)~=output_test(j)
            kkk2=kkk2+1;
        end
    end
end

kkk1
kkk2
disp('第一類分類錯(cuò)誤  第二類分類錯(cuò)誤  總錯(cuò)誤');
% 窗口顯示
disp([kkk1 kkk2 kkk1+kkk2]);

plot(output)
hold on
plot(output_test,'g')

%統(tǒng)計(jì)弱分離器效果
for i=1:K
    error1(i)=0;
    kk1=find(test_simu(i,:)>0);
    kk2=find(test_simu(i,:)<0);
    
    aa(kk1)=1;
    aa(kk2)=-1;
    
    for j=1:350
        if aa(j)~=output_test(j);
            error1(i)=error1(i)+1;
        end
    end
end
disp('統(tǒng)計(jì)弱分類器分類效果');
error1

disp('強(qiáng)分類器分類誤差率')
(kkk1+kkk2)/350

disp('弱分類器分類誤差率')
(sum(error1)/(K*350))

4赊堪、結(jié)果分析

分析樣本共有350組數(shù)據(jù),采用10個(gè)BP弱分類器組成的強(qiáng)分類器分類公司財(cái)務(wù)運(yùn)行狀況竖哩,分類誤差統(tǒng)計(jì)如下表1 所列哭廉。

表1 分類誤差統(tǒng)計(jì)
強(qiáng)分類器分類誤差率 弱分類器分類平均誤差率
0.0400 0.0846

從上表可以看出,強(qiáng)分類器分類誤差低于弱分類器分類誤差率相叁,表明BP_Adaboost分類算法取得了良好的效果遵绰。

擴(kuò)展

Adaboost方法不僅可以用于設(shè)計(jì)強(qiáng)分類器,還可以用于設(shè)計(jì)強(qiáng)預(yù)測(cè)器增淹。強(qiáng)預(yù)測(cè)期設(shè)計(jì)思路與強(qiáng)分類器設(shè)計(jì)類似椿访,都是先賦予測(cè)試樣本權(quán)重,然后根據(jù)弱預(yù)測(cè)器預(yù)測(cè)結(jié)果調(diào)整測(cè)試樣本權(quán)重并確定弱預(yù)測(cè)器權(quán)重虑润,最后把弱預(yù)測(cè)器序列作為強(qiáng)預(yù)測(cè)器成玫。不同的是在強(qiáng)分類器中增加預(yù)測(cè)錯(cuò)類別樣本的權(quán)重,在強(qiáng)預(yù)測(cè)器中增加預(yù)測(cè)誤差超過(guò)閾值的樣本權(quán)重拳喻。采用BP_Adaboost強(qiáng)預(yù)測(cè)器預(yù)測(cè)上一篇(http://www.reibang.com/p/c9c437391a7d)文章中非線性函數(shù)的輸出哭当,函數(shù)形式為


具體MATLAB實(shí)現(xiàn)如下。

1冗澈、數(shù)據(jù)集選擇

從樣本空間中選擇訓(xùn)練樣本荣病、測(cè)試樣本,并對(duì)測(cè)試樣本分配權(quán)重渗柿。非線性函數(shù)的輸出數(shù)據(jù)存儲(chǔ)在data1.mat文件中,其中input為函數(shù)輸入數(shù)據(jù)脖岛,output為函數(shù)輸出數(shù)據(jù)朵栖,從中隨機(jī)選擇1 900組數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),100組數(shù)據(jù)作為測(cè)試數(shù)據(jù)柴梆。

%% 清空環(huán)境變量
clc
clear

%% 下載數(shù)據(jù)
load data1 input output

%% 權(quán)重初始化
k=rand(1,2000);
[m,n]=sort(k);

%訓(xùn)練樣本
input_train=input(n(1:1900),:)';
output_train=output(n(1:1900),:)';

%測(cè)試樣本
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000),:)';

%樣本權(quán)重
[mm,nn]=size(input_train);
D(1,:)=ones(1,nn)/nn;

%訓(xùn)練樣本歸一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);

2陨溅、弱預(yù)測(cè)器學(xué)習(xí)預(yù)測(cè)

把BP神經(jīng)網(wǎng)絡(luò)看做弱預(yù)測(cè)器,經(jīng)過(guò)訓(xùn)練后預(yù)測(cè)測(cè)試樣本輸出绍在,并且根據(jù)預(yù)測(cè)結(jié)果調(diào)整測(cè)試樣本權(quán)重门扇,最終得出一系列弱預(yù)測(cè)器及其權(quán)重。這里把預(yù)測(cè)誤差超過(guò)0.1的測(cè)試樣本作為應(yīng)該加強(qiáng)學(xué)習(xí)的樣本偿渡。

K=10;
for i=1:K
    
    %弱預(yù)測(cè)器訓(xùn)練
    net=newff(inputn,outputn,5);
    net.trainParam.epochs=20;
    net.trainParam.lr=0.1;
    net=train(net,inputn,outputn);
    
    %弱預(yù)測(cè)器預(yù)測(cè)
    an1=sim(net,inputn);
    BPoutput=mapminmax('reverse',an1,outputps);
    
    %預(yù)測(cè)誤差
    erroryc(i,:)=output_train-BPoutput;
    
    %測(cè)試數(shù)據(jù)預(yù)測(cè)
    inputn1=mapminmax('apply',input_test,inputps);
    an2=sim(net,inputn1);
    test_simu(i,:)=mapminmax('reverse',an2,outputps);
    
    %調(diào)整D值
    Error(i)=0;
    for j=1:nn
        if abs(erroryc(i,j))>0.2  %較大誤差
            Error(i)=Error(i)+D(i,j);
            D(i+1,j)=D(i,j)*1.1;
        else
            D(i+1,j)=D(i,j);
        end
    end
    
    %計(jì)算弱預(yù)測(cè)器權(quán)重
    at(i)=0.5/exp(abs(Error(i)));
    
    %D值歸一化
    D(i+1,:)=D(i+1,:)/sum(D(i+1,:));
    
end

3臼寄、強(qiáng)預(yù)測(cè)器預(yù)測(cè)

把10組弱預(yù)測(cè)器函數(shù)組成強(qiáng)預(yù)測(cè)器預(yù)測(cè)輸出,并比較強(qiáng)預(yù)測(cè)器預(yù)測(cè)誤差和弱預(yù)測(cè)器預(yù)測(cè)誤差溜宽。

%% 強(qiáng)預(yù)測(cè)器預(yù)測(cè)
at=at/sum(at);

%% 結(jié)果統(tǒng)計(jì)
%強(qiáng)分離器效果
output=at*test_simu;
error=output_test-output;
plot(abs(error),'-*')
hold on
for i=1:8
    error1(i,:)=test_simu(i,:)-output;
end
plot(mean(abs(error1)),'-or')

title('強(qiáng)吉拳、弱預(yù)測(cè)器預(yù)測(cè)誤差絕對(duì)值','fontsize',12)
xlabel('預(yù)測(cè)樣本','fontsize',12)
ylabel('誤差絕對(duì)值','fontsize',12)
legend('強(qiáng)預(yù)測(cè)器預(yù)測(cè)','弱預(yù)測(cè)器預(yù)測(cè)')

4、結(jié)果分析

預(yù)測(cè)樣本共有350組适揉,10個(gè)BP神經(jīng)網(wǎng)絡(luò)構(gòu)成弱預(yù)測(cè)器序列留攒,強(qiáng)預(yù)測(cè)器分類誤差絕對(duì)值和弱預(yù)測(cè)器預(yù)測(cè)平均誤差絕對(duì)值如下圖2所示煤惩。


圖2 預(yù)測(cè)誤差絕對(duì)值

從圖2可以看出,強(qiáng)預(yù)測(cè)器預(yù)測(cè)誤差低于弱預(yù)測(cè)器預(yù)測(cè)誤差炼邀,BP_Adaboost強(qiáng)預(yù)測(cè)器預(yù)測(cè)算法取得了良好的效果魄揉。

更多干貨文章,請(qǐng)關(guān)注微信公眾號(hào)【科學(xué)計(jì)算與編程】獲仁媚洛退!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市红淡,隨后出現(xiàn)的幾起案子不狮,更是在濱河造成了極大的恐慌,老刑警劉巖在旱,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摇零,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡桶蝎,警方通過(guò)查閱死者的電腦和手機(jī)驻仅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)登渣,“玉大人噪服,你說(shuō)我怎么就攤上這事∈ぜ耄” “怎么了粘优?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)呻顽。 經(jīng)常有香客問(wèn)我雹顺,道長(zhǎng),這世上最難降的妖魔是什么廊遍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任嬉愧,我火速辦了婚禮,結(jié)果婚禮上喉前,老公的妹妹穿的比我還像新娘没酣。我一直安慰自己,他們只是感情好卵迂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布裕便。 她就那樣靜靜地躺著,像睡著了一般狭握。 火紅的嫁衣襯著肌膚如雪闪金。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音哎垦,去河邊找鬼囱嫩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛漏设,可吹牛的內(nèi)容都是我干的墨闲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼郑口,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸳碧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起犬性,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瞻离,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后乒裆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體套利,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年鹤耍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肉迫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稿黄,死狀恐怖喊衫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杆怕,我是刑警寧澤族购,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站陵珍,受9級(jí)特大地震影響联四,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撑教,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望醉拓。 院中可真熱鬧伟姐,春花似錦、人聲如沸亿卤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)排吴。三九已至秆乳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屹堰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工肛冶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扯键。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓睦袖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親荣刑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子馅笙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容