馮 栩 喻文健 李 凌
金融分析中,風(fēng)險(xiǎn)管理對(duì)于合理地保護(hù)資產(chǎn)十分重要.通常,資產(chǎn)價(jià)值的波動(dòng)性被定義為風(fēng)險(xiǎn),而風(fēng)險(xiǎn)管理的目的則是合理的評(píng)估資產(chǎn)的波動(dòng)性[1?7].風(fēng)險(xiǎn)模型(Risk model)是風(fēng)險(xiǎn)管理的重要方法,而多因子模型(Multiple-factor model)是一種能夠有效分析資產(chǎn)風(fēng)險(xiǎn)的風(fēng)險(xiǎn)模型[3,8].多因子模型假設(shè)資產(chǎn)的回報(bào)被若干因子影響,例如國(guó)家經(jīng)濟(jì)水平、工業(yè)領(lǐng)域周期以及公司財(cái)務(wù)指標(biāo)等等具有經(jīng)濟(jì)學(xué)含義的基本面因子,或者通過(guò)統(tǒng)計(jì)學(xué)方法計(jì)算出的統(tǒng)計(jì)學(xué)因子,其一般形式為
其中,yi是第i個(gè)資產(chǎn)的回報(bào)(i=1,···,m);xj表示第j個(gè)因子的數(shù)值(j=1,···,k);cij表示第j個(gè)因子對(duì)于第i個(gè)資產(chǎn)影響程度,被稱為第i個(gè)資產(chǎn)在第j個(gè)因子上的暴露;而ri表示第i個(gè)資產(chǎn)的非因子回報(bào),通常被看做擬合殘差.式(1)顯示所有資產(chǎn)回報(bào)都被k個(gè)相同因子驅(qū)動(dòng),并且這些因子反映資產(chǎn)間的相關(guān)性以及內(nèi)在的波動(dòng)性.每個(gè)因子xj和殘差ri是不相關(guān)的,且每個(gè)殘差ri之間也不相關(guān).通過(guò)式(1),可以推導(dǎo)出風(fēng)險(xiǎn)的表達(dá)式[3]:
其中,var(y) 代表m個(gè)資產(chǎn)回報(bào)y=[y1,···,ym]T的協(xié)方差,C ∈Rm×k是m個(gè)資產(chǎn)對(duì)k個(gè)因子x=[x1,···,xk]T的暴露矩陣,X ∈Rk×k是因子x的協(xié)方差矩陣,而對(duì)角陣R∈Rm×m是殘差矩陣.風(fēng)險(xiǎn)模型的生成則是通過(guò)實(shí)際觀測(cè)到的回報(bào)和一些分布假設(shè)在限制因子數(shù)目的情況下計(jì)算出式(2)中的C、X和R得到風(fēng)險(xiǎn)矩陣,再通過(guò)風(fēng)險(xiǎn)矩陣來(lái)進(jìn)行資產(chǎn)的選擇和配置來(lái)規(guī)避風(fēng)險(xiǎn)從而最大化回報(bào).通常情況下,風(fēng)險(xiǎn)模型需要每隔一天或者更短的時(shí)間生成一次,用于下一時(shí)段的資產(chǎn)選擇和配置.
基本面因子模型(Fundamental factor model)和統(tǒng)計(jì)學(xué)因子模型(Statistical factor model)是兩類經(jīng)典的多因子模型[1?3,8],目前仍被廣泛應(yīng)用于金融分析領(lǐng)域.基本面因子模型使用觀測(cè)到的領(lǐng)域知識(shí)在資產(chǎn)上的暴露,例如股息率、市盈率、市銷率等等,求出這些領(lǐng)域知識(shí)因子(基本面因子)的數(shù)值和殘差來(lái)生成風(fēng)險(xiǎn)模型[2?3,8?10].這些已知的基本面因子通常含有確切的經(jīng)濟(jì)學(xué)含義,因此得到的模型具有很強(qiáng)的可解釋性,而模型的可解釋性是對(duì)模型性能的重要保證[11?12].文獻(xiàn)[2,9]使用最小二乘法生成基本面因子模型進(jìn)行風(fēng)險(xiǎn)資產(chǎn)評(píng)估,并針對(duì)不同的真實(shí)數(shù)據(jù)進(jìn)行了實(shí)驗(yàn),顯示出基本面因子模型的優(yōu)良性能.然而由于能觀測(cè)到的基本面因子數(shù)量有限,且不是都對(duì)生成風(fēng)險(xiǎn)模型有價(jià)值,因此文獻(xiàn)[2,9]中方法需要手動(dòng)挑選合適的基本面因子來(lái)生成更好的風(fēng)險(xiǎn)模型.統(tǒng)計(jì)學(xué)因子模型則使用因子分析(Factor analysis)生成模型[3],其通常采用期望最大化過(guò)程(Expectation-maximization process)來(lái)計(jì)算統(tǒng)計(jì)學(xué)因子及其暴露[13?18].盡管統(tǒng)計(jì)學(xué)因子模型生成的因子沒(méi)有確切的經(jīng)濟(jì)學(xué)含義,容易在數(shù)據(jù)噪音較大時(shí)過(guò)擬合,卻能夠捕捉到基本面因子模型中缺失的因子及其暴露.由于基本面因子模型具有很強(qiáng)的可解釋性,而統(tǒng)計(jì)學(xué)因子模型可以捕捉到隱藏在回報(bào)中的因子,因此需要構(gòu)造一個(gè)結(jié)合領(lǐng)域知識(shí)且包含統(tǒng)計(jì)學(xué)因子的混合因子分析算法用來(lái)生成更準(zhǔn)確的風(fēng)險(xiǎn)模型.
本文針對(duì)中國(guó)股市風(fēng)險(xiǎn)評(píng)估問(wèn)題,將基本面因子暴露整合到統(tǒng)計(jì)學(xué)因子分析中提出一種新的混合因子分析方法生成中國(guó)股票的風(fēng)險(xiǎn)模型.首先,本文提出一種快速因子分析算法.其次,修改因子分析的期望最大化過(guò)程使其包含基本面因子暴露及一個(gè)用來(lái)調(diào)整基本面因子的大小和相關(guān)性的方陣,從而推導(dǎo)出新的混合因子分析算法.最后,基于混合因子分析算法提出了近似最優(yōu)的基本面因子挑選算法,并將其與混合因子分析算法結(jié)合得到挑選基本面因子的混合因子分析算法.我們使用三個(gè)人造數(shù)據(jù)集和一個(gè)真實(shí)數(shù)據(jù)集來(lái)測(cè)試本文所提出算法的性能,實(shí)驗(yàn)結(jié)果表明快速因子分析算法在第一個(gè)人造數(shù)據(jù)集上能夠帶來(lái)31 倍以上的加速比,并且本文提出的挑選基本面因子的混合因子分析算法能夠有效地構(gòu)建準(zhǔn)確且穩(wěn)定的風(fēng)險(xiǎn)模型.在所有的人造數(shù)據(jù)集上,使用我們的挑選基本面因子的混合因子分析算法得到的風(fēng)險(xiǎn)模型的對(duì)數(shù)似然估計(jì)值(Loglikelihood)的均值都要大于統(tǒng)計(jì)學(xué)因子分析生成的模型,并且標(biāo)準(zhǔn)差基本相同甚至更小;在真實(shí)數(shù)據(jù)集上,該方法得到平均對(duì)數(shù)似然估計(jì)值為12.00,比因子分析構(gòu)建模型的7.56 大4.44,同時(shí)前者的平均對(duì)數(shù)似然估計(jì)值的標(biāo)準(zhǔn)差為8.25,小于因子分析的9.06.
本文的剩余部分按照如下組織:第1 節(jié)為基于期望最大化過(guò)程的統(tǒng)計(jì)學(xué)因子分析的介紹;第2 節(jié)介紹我們的混合因子分析算法;第3 節(jié)為實(shí)驗(yàn)結(jié)果;最后一節(jié)為全文的總結(jié).
期望最大化過(guò)程是機(jī)器學(xué)習(xí)中一個(gè)重要的學(xué)習(xí)方法,通過(guò)近似后驗(yàn)推斷的過(guò)程學(xué)習(xí)包含隱藏變量的概率模型[13?16,19?24].以式(1)代表的多因子模型為例,其中y是已知的觀測(cè)變量,而x是隱藏變量,在x屬于特定分布的假設(shè)下,目標(biāo)是計(jì)算出式(2)中的C、X和R使其能夠最優(yōu)擬合x(chóng)和y的聯(lián)合分布.文獻(xiàn)[14]中首先提出了求解此類線性模型的期望最大化過(guò)程,它通過(guò)計(jì)算x在y下分布的期望并最大化x和y的聯(lián)合分布的似然估計(jì)值均值,迭代計(jì)算C、X和R直到收斂.
對(duì)含有隱藏變量模型的隨機(jī)梯度下降法可以看做是一種特殊的期望最大化過(guò)程,其最大化步驟由單獨(dú)的梯度下降步驟組成;而其他一些期望最大化過(guò)程的變種還會(huì)包含更多額外的步驟[15].期望最大化過(guò)程有兩個(gè)重要的特點(diǎn):1)整個(gè)迭代過(guò)程是由對(duì)于變量分布的假設(shè)推導(dǎo)得到的,因此對(duì)一個(gè)完整的數(shù)據(jù)集,所有未知變量都可以通過(guò)期望最大化過(guò)程得到,但這個(gè)特點(diǎn)并不是期望最大化過(guò)程獨(dú)有的;2)當(dāng)期望最大化過(guò)程得到中間結(jié)果時(shí),數(shù)據(jù)的分布假設(shè)可以被更改,從而繼續(xù)新的期望最大化過(guò)程,而這個(gè)特點(diǎn)是其他機(jī)器學(xué)習(xí)算法中很罕見(jiàn)的[14].近年來(lái),期望最大化過(guò)程被應(yīng)用在各種不同的場(chǎng)景當(dāng)中:例如使用期望最大化過(guò)程推測(cè)回聲位置[19],使用期望最大化過(guò)程將自回歸和非自回歸模型進(jìn)行結(jié)合,從而在保證精度的情況下降低模型延遲[20],使用變種的期望最大化過(guò)程對(duì)噪音程度未知的圖像進(jìn)行去模糊化處理[21],使用變種期望最大化過(guò)程進(jìn)行徑向基核函數(shù)網(wǎng)絡(luò)自回歸模型的參數(shù)估計(jì)[22],使用期望最大化過(guò)程進(jìn)行非剛性點(diǎn)集配準(zhǔn)研究[23]以及使用期望最大化過(guò)程與神經(jīng)網(wǎng)絡(luò)結(jié)合進(jìn)行全重疊的手寫(xiě)數(shù)字識(shí)別與分離[24]等,這些應(yīng)用都顯示出期望最大化過(guò)程在當(dāng)下仍舊是實(shí)用的算法.
因子分析是經(jīng)典的統(tǒng)計(jì)學(xué)方法,被廣泛應(yīng)用于機(jī)器學(xué)習(xí)和金融等領(lǐng)域[15?18,25?29],例如利用因子分析方法處理語(yǔ)音系統(tǒng)中的說(shuō)話人識(shí)別問(wèn)題[26]和語(yǔ)音重建問(wèn)題[27],將因子分析方法運(yùn)用于場(chǎng)景圖像識(shí)別的神經(jīng)網(wǎng)絡(luò)中[28],以及將變種的因子分析應(yīng)用到腦神經(jīng)數(shù)據(jù)的分析當(dāng)中[29].而在金融領(lǐng)域中,因子分析通常被用于生成風(fēng)險(xiǎn)模型來(lái)評(píng)估資產(chǎn)風(fēng)險(xiǎn)[3].
金融領(lǐng)域所需的因子分析需要優(yōu)化的問(wèn)題,是通過(guò)對(duì)式(1)所示的多因子模型引入連續(xù)時(shí)間序列并對(duì)因子加上特定分布建立的模型.首先,在公式(1)的基礎(chǔ)上假設(shè)所有因子均為隱藏變量并引入時(shí)間變量t(t=1,···,n):記yt ∈Rm為m個(gè)資產(chǎn)的價(jià)值在t時(shí)刻的一條觀測(cè)數(shù)據(jù),xt ∈Rs為t時(shí)刻不能被觀測(cè)到的s個(gè)服從N(0,I) 分布的隱藏因子,其中,I表示單位矩陣,代表s個(gè)因子服從均值為0 方差為1 的正態(tài)分布,同時(shí)rt ∈Rm表示m個(gè)服從均值為0 方差為R正態(tài)分布的殘差.根據(jù)上述的假設(shè),因子分析的基本模型為[15?16]:
其中,C ∈Rm×s是因子的暴露系數(shù)矩陣且R∈Rm×m是殘差對(duì)角陣,同時(shí)可知隱藏因子的協(xié)方差矩陣X ∈Rs×s為單位陣.基于式(3),可得[15?16]:
式(4)代表在式(3)的假設(shè)條件下,{yt}服從均值為0,方差為CCT+R的正態(tài)分布,因此評(píng)估相應(yīng)資產(chǎn)的風(fēng)險(xiǎn)可通過(guò)因子分析方法計(jì)算出C和R并最終計(jì)算出風(fēng)險(xiǎn)矩陣(2)獲得.
為了求解C和R使其擬合式(3)、(4)所代表的因子分析模型,一個(gè)思路是求解C和R使其最優(yōu)擬合{xt}及{yt}的聯(lián)合分布.文獻(xiàn)[15?16]提出使用期望最大化過(guò)程求解C和R使其最優(yōu)擬合{xt}及{yt}的聯(lián)合分布,即最大化{xt}及{yt}聯(lián)合分布的對(duì)數(shù)似然估計(jì)值均值[13?16].首先,根據(jù)期望最大化過(guò)程在期望計(jì)算步驟需要計(jì)算有關(guān)xt在yt下分布的期望及均值,可通過(guò)式(3)推導(dǎo)出:
借由式(5),可推導(dǎo)出xt在yt下的均值以及方差:
同時(shí),xt在yt下協(xié)方差矩陣均值為:
由于因子分析需要最大化{xt}以及{yt}聯(lián)合分布的似然估計(jì)值均值,因此首先引入最大化對(duì)數(shù)似然估計(jì)值表達(dá)式(9)[15?16],同時(shí)最大化式(9)等價(jià)于最大化其均值,因此推導(dǎo)出均值表達(dá)形式的式(10)[15?16],其中|R|表示R的行列式而 trace(·) 代表矩陣的跡,此時(shí)式(10)即為所求問(wèn)題的表達(dá)式.由于需要最大化(10),因此通過(guò)對(duì)式(10)求偏導(dǎo)可以得到C以及R的迭代式(11)和(12),從而進(jìn)行迭代求解以達(dá)到收斂要求,其中 diag{·}表示抽取矩陣的對(duì)角元形成對(duì)角陣而c表示常量.
基于上述的所有推導(dǎo),因子分析的期望最大化過(guò)程為:1) 根據(jù)已有的C和R計(jì)算期望(6)~ (8);2) 通過(guò)已計(jì)算好的期望根據(jù)式(11)和(12)依次更新C和R;3)當(dāng)?shù)Y(jié)果未收斂時(shí)重復(fù)前兩步.由于因子分析的分布假設(shè)下{yt}數(shù)據(jù)服從式(4)的分布,因此可由式(4)推導(dǎo)出迭代過(guò)程的判定收斂的對(duì)數(shù)似然估計(jì)值均值式(13),其中Y=[y1,···,yn]∈Rm×n為m個(gè)資產(chǎn)在n個(gè)時(shí)刻上的回報(bào)矩陣,而收斂條件可寫(xiě)為兩次迭代步之間(13)的變化小于預(yù)設(shè)的迭代收斂閾值?.算法1 中整理了基于期望最大化過(guò)程的因子分析算法:
算法1.基于期望最大化過(guò)程的因子分析(FA)
記算法1 的總迭代步數(shù)為iter,由于每次迭代中時(shí)間復(fù)雜度最大的步驟為計(jì)算Y YT,因此每次迭代的時(shí)間復(fù)雜度是 O(m2n),故算法1 的時(shí)間復(fù)雜度為 O(iter·m2n) .
本節(jié)首先介紹利用采樣協(xié)方差矩陣加速因子分析的快速因子分析,并在快速因子分析的基礎(chǔ)上推導(dǎo)引入基本面因子的混合因子分析,最后介紹近似最優(yōu)選擇基本面因子的混合因子分析.本文遵循Matlab 語(yǔ)言的習(xí)慣來(lái)表示矩陣中的部分元素,以及對(duì)矩陣的一些操作.
實(shí)際情況中通常時(shí)刻數(shù)目n遠(yuǎn)大于統(tǒng)計(jì)學(xué)因子數(shù)目s,因此希望替換算法1中Y YT的計(jì)算來(lái)減少算法運(yùn)行時(shí)間.記采樣協(xié)方差矩陣S=Y YT/n,使用S代替Y進(jìn)行迭代,則可以推導(dǎo)出:D=nSBT,G=n(I?BC)+nBSBT=n(I+B(D ?C)),R=diag{S?CDT/n},并且式(13)中的trace(YT(CCT+R)?1Y)=trace (Y YT(CCT+R)?1)=trace(nS(CCT+R)?1).根據(jù)上述推導(dǎo),借助采樣協(xié)方差矩陣的快速因子分析整理于算法2 中:
算法2.快速因子分析(FFA)
由于算法2 中單個(gè)迭代步的時(shí)間復(fù)雜度為O(m2s),而算法2 只在第2 步計(jì)算了一次Y YT,因此算法2 總體時(shí)間復(fù)雜度為 O(iter·m2s+m2n),小于算法1 的O(iter·m2n).
基本面因子模型使用資產(chǎn)的歷史回報(bào)以及已有的基本面因子暴露,例如市值、市盈率、市銷率和流動(dòng)比率等,生成風(fēng)險(xiǎn)模型用以評(píng)估風(fēng)險(xiǎn)[2?3,9].基本面因子暴露在不同層面表征資產(chǎn)的金融特征,例如:市值表征一個(gè)公司的整體價(jià)值,而流動(dòng)比率代表公司償還短期債務(wù)的能力,因此基本面因子模型在金融風(fēng)險(xiǎn)管理中表現(xiàn)出很強(qiáng)的可解釋性.算法3 是使用普通最小二乘法構(gòu)建基本面因子模型的經(jīng)典算法[2,9]:
算法3.普通最小二乘法(OLS)
由于基本面因子暴露C1∈Rm×f已知,借由式(1) 可以推出Y=C1F1+R1,其中F1∈Rf×n為基本面因子矩陣而R1∈Rm×n為殘差陣,因此問(wèn)題變?yōu)閿M合Y=C1F1,之后計(jì)算殘差R1,最后計(jì)算構(gòu)造風(fēng)險(xiǎn)矩陣(2)的矩陣X和R.算法3 中的第1 步可由Y=C1F1等式兩側(cè)同乘得到構(gòu)造;第2步表示根據(jù)計(jì)算殘差矩陣R1;第3步表示求解殘差矩陣R1的協(xié)方差以構(gòu)造殘差對(duì)角陣R;第4 步為計(jì)算基本面因子協(xié)方差矩陣X1∈Rf×f;最后返回X1和R.在算法3 執(zhí)行完成后,使用即可得到式(2)中的風(fēng)險(xiǎn)矩陣.
為了將金融的領(lǐng)域知識(shí)集成到統(tǒng)計(jì)學(xué)因子分析中,需要推導(dǎo)新的期望最大化過(guò)程,而首先則需要將已知的基本面因子暴露固定到第1.2 節(jié)的原始模型中.由于基本面因子的值在假設(shè)中是不可及的,因此新優(yōu)化問(wèn)題的模型可修改為:
其中,A也需要在期望最大化過(guò)程中被迭代更新,并且可由式(15)推導(dǎo)出(2)中的全因子的暴露矩陣C=[C1A,C2] 用來(lái)進(jìn)行期望最大化過(guò)程的迭代.因此新的混合因子分析需要求解的問(wèn)題變?yōu)橛?jì)算A、C2和R使其最大化{xt}及{yt}聯(lián)合分布.
根據(jù)式(15)以及第1節(jié)中推導(dǎo)的期望最大化過(guò)程,首先推導(dǎo)xt,1和xt,2在yt下的期望:
根據(jù)上述的推導(dǎo),新的期望最大化過(guò)程可表述為:第1 步,根據(jù)已有的A、C2以及R計(jì)算期望(8)(16)(17);第2 步,通過(guò)已計(jì)算好的期望以及式(22)、(23)、(12)依次更新A、C2及R;第3 步,當(dāng)?shù)Y(jié)果未收斂時(shí)重復(fù)前兩步.根據(jù)新的期望最大化過(guò)程和修改后的快速因子分析算法可整理出結(jié)合基本面因子的混合因子分析算法4:
算法4.結(jié)合基本面因子的混合因子分析(HFA)
當(dāng)因子總數(shù)目相同時(shí)(設(shè)總因子數(shù)目為k),盡管算法4 和算法2 的時(shí)間復(fù)雜度相同,但算法4 的實(shí)際運(yùn)行時(shí)間更短:由于算法4 中最大的矩陣求逆操作是對(duì)于(k?f)×(k?f) 的矩陣進(jìn)行求逆,小于算法2 中k×k的矩陣求逆操作;同時(shí)算法4 中需要迭代更新的矩陣A和C2大小為k×k以及m×(k?f),比算法2 中的C的m×k小.因此在總因子數(shù)目相同時(shí),算法4在f>0 時(shí)的運(yùn)行時(shí)間要小于算法2.
在實(shí)際情況中,被觀測(cè)到的基本面因子數(shù)量眾多,但只有部分對(duì)于生成風(fēng)險(xiǎn)模型更有價(jià)值,因此本節(jié)著眼于通過(guò)歷史數(shù)據(jù)找到合適的基本面因子,并使用挑選出的因子聯(lián)合算法4 生成更準(zhǔn)確的風(fēng)險(xiǎn)模型.盡管第1 節(jié)、第2.1 節(jié)、第2.2 節(jié)均旨在最大化該時(shí)刻的對(duì)數(shù)似然估計(jì)來(lái)推導(dǎo)期望最大化過(guò)程,本節(jié)提出的基本面因子選擇算法卻旨在通過(guò)對(duì)未來(lái)時(shí)刻預(yù)測(cè)的對(duì)數(shù)似然估計(jì)值來(lái)選擇最優(yōu)的基本面因子組合.
記所有觀測(cè)到的基本面因子總數(shù)目為F而風(fēng)險(xiǎn)模型的總因子數(shù)目為k,若需要得到t時(shí)刻最優(yōu)的基本面因子組合,則要綜合考察之前時(shí)刻所有基本面因子組合生成風(fēng)險(xiǎn)模型的預(yù)測(cè)結(jié)果.以t ?1 時(shí)刻為例,當(dāng)需要得到基本面因子的所有組合在時(shí)刻t?1生成的風(fēng)險(xiǎn)模型對(duì)于時(shí)刻t回報(bào)預(yù)測(cè)的對(duì)數(shù)似然估計(jì)值結(jié)果時(shí),需要執(zhí)行次算法4以得到完整的結(jié)果,代表從F個(gè)元素中選擇i個(gè)元素的組合數(shù),這意味著當(dāng)F與k數(shù)量級(jí)相同時(shí)需要執(zhí)行 O(2F) 次算法4.當(dāng)t時(shí)刻之前的所有預(yù)測(cè)的對(duì)數(shù)似然估計(jì)值被累積好后,便選擇使對(duì)數(shù)似然估計(jì)值最大的基本面因子組合來(lái)生成t時(shí)刻的風(fēng)險(xiǎn)模型.然而 O(2F) 次算法4 的執(zhí)行需要花費(fèi)大量時(shí)間,因此需要尋找一個(gè)近似最優(yōu)的算法,能在更快的運(yùn)行時(shí)間下得到合適的基本面因子組合.
為了快速找到合適的基本面因子組合,需要一個(gè)貪婪算法來(lái)搜索可能的解空間.首先,通過(guò)將每一個(gè)的基本面因子暴露在t?1 時(shí)刻的采樣協(xié)方差矩陣上的擬合結(jié)果對(duì)基本面因子排序:記為所有基本面因子暴露矩陣,即將的每一列、t?1時(shí)刻的采樣協(xié)方差矩陣和統(tǒng)計(jì)學(xué)因子數(shù)目k?1作為輸入傳入算法4,按照程序結(jié)束時(shí)風(fēng)險(xiǎn)矩陣對(duì)于輸入回報(bào)矩陣的在式(13)上計(jì)算出的對(duì)數(shù)似然估計(jì)值對(duì)所有基本面因子進(jìn)行降序排序,并記排序后的索引向量為d.之后使用t?1 時(shí)刻的采樣協(xié)方差矩陣、統(tǒng)計(jì)學(xué)因子數(shù)目k?i以及基本面因子暴露矩陣,(i=1,···,min(F,k)) 通過(guò)算法4 計(jì)算風(fēng)險(xiǎn)矩陣,并使用風(fēng)險(xiǎn)矩陣計(jì)算對(duì)于t時(shí)刻的回報(bào)yt預(yù)測(cè)對(duì)數(shù)似然估計(jì)值(該預(yù)測(cè)的對(duì)數(shù)似然估計(jì)值在實(shí)驗(yàn)部分進(jìn)行介紹),并將對(duì)數(shù)似然估計(jì)值累積到向量v∈Rmin(F,k) 中,而算法5 中的衰減率r被用來(lái)以一定的衰減率累積對(duì)數(shù)似然估計(jì)值.最后,通過(guò)找到v中最大值的下標(biāo)d來(lái)確定t時(shí)刻風(fēng)險(xiǎn)模型所需的基本面因子組合d[1:d] 和基本面因子暴露矩陣算法5 描述了基本面因子挑選流程 (zeros(F) 為生成長(zhǎng)度為F的零向量操作):
算法5.部分基本面因子挑選算法(FS)
算法5 在每個(gè)時(shí)刻使用了 O(F) 次算法4 來(lái)得到近似最優(yōu)的因子組合,遠(yuǎn)小于搜索整個(gè)空間的O(2F).
先使用算法5 找到合適的基本面因子,再通過(guò)算法4 計(jì)算風(fēng)險(xiǎn)矩陣,即可得到實(shí)際應(yīng)用中用以計(jì)算風(fēng)險(xiǎn)的算法6:
算法6.挑選基本面因子的混合因子分析(HFA +)
算法6 首先使用算法5 挑選出合適的基本面因子并更新回報(bào)矩陣到下一時(shí)刻,隨后使用挑選出的基本面因子通過(guò)算法4 生成風(fēng)險(xiǎn)矩陣.算法6 中保持累積向量v的更新,使得算法6 能即時(shí)通過(guò)v挑選合適的基本面因子來(lái)生成更準(zhǔn)確的風(fēng)險(xiǎn)模型,也因此算法6 中每一時(shí)刻選擇的基本面因子組合及數(shù)目均有可能不同.
我們?cè)谀M實(shí)際情況的三個(gè)人造數(shù)據(jù)集和一個(gè)真實(shí)數(shù)據(jù)集上對(duì)本文算法進(jìn)行了對(duì)比實(shí)驗(yàn).實(shí)驗(yàn)平臺(tái)為擁有Intel Xeon E5-2 680 CPU (2.50 GHz)的Cent OS 服務(wù)器.我們使用Python 3.6 實(shí)現(xiàn)了本文算法并記錄它們運(yùn)行所需的CPU 時(shí)間,單位為秒.實(shí)驗(yàn)中所有算法的迭代收斂閾值?為 10?8.
記Y=[y1,···,yn]∈Rm×n為m個(gè)資產(chǎn)在n個(gè)時(shí)刻的回報(bào)數(shù)據(jù),F是基本面因子的數(shù)目而S是統(tǒng)計(jì)學(xué)因子的數(shù)目,通過(guò)以下4 個(gè)步驟可生成人造數(shù)據(jù)集(所有的隨機(jī)陣均為標(biāo)準(zhǔn)高斯分布隨機(jī)陣):
生成F×n的基本面因子隨機(jī)陣以及m×F的基本面因子暴露隨機(jī)陣
生成S×n的統(tǒng)計(jì)學(xué)因子隨機(jī)陣以及m×S的統(tǒng)計(jì)學(xué)因子暴露隨機(jī)陣
生成m×n的隨機(jī)噪音陣E
使用滑動(dòng)窗口來(lái)生成風(fēng)險(xiǎn)模型并評(píng)估風(fēng)險(xiǎn),這樣使得每次都使用最新的一部分?jǐn)?shù)據(jù)來(lái)計(jì)算采樣協(xié)方差矩陣,需要對(duì)回報(bào)矩陣做如下的操作以不同重要程度保留退出滑動(dòng)窗口數(shù)據(jù)的歷史信息:
真實(shí)數(shù)據(jù)來(lái)源于中國(guó)的股票市場(chǎng).記pt為m支股票在第t天的價(jià)格數(shù)據(jù),可以使用對(duì)數(shù)回報(bào)率來(lái)作為回報(bào)向量使用,即:
通常對(duì)數(shù)回報(bào)率被看做服從高斯獨(dú)立分布.對(duì)數(shù)回報(bào)率矩陣同樣進(jìn)行了式(25)的操作.所有基本面因子暴露來(lái)自Tushare 金融大數(shù)據(jù)社區(qū)(https://tushare.pro/),同時(shí)按列進(jìn)行了標(biāo)準(zhǔn)化處理.所有的人造數(shù)據(jù)矩陣、真實(shí)數(shù)據(jù)的信息和可運(yùn)行的示例代碼都被整理在 https://github.com/Exp-DataForRiskModel/ExpData 中.
實(shí)驗(yàn)結(jié)果的評(píng)價(jià)也很重要.記?t=CCT+R為算法1、2、4、6 在時(shí)刻t生成的風(fēng)險(xiǎn)矩陣,而為算法3 在時(shí)刻t生成的風(fēng)險(xiǎn)矩陣,且yt+1為t+1 時(shí)刻的回報(bào)數(shù)據(jù),則t時(shí)刻的風(fēng)險(xiǎn)模型對(duì)于t+1 時(shí)刻回報(bào)預(yù)測(cè)的對(duì)數(shù)似然估計(jì)值為:
式中,因?yàn)閙ln(2π) 是正常數(shù),預(yù)測(cè)的對(duì)數(shù)似然估計(jì)值只與?t相關(guān).而?t是借助算法以及St計(jì)算得到,代表?t與St非常接近,當(dāng)St的行列式小于1 時(shí),ln|?t|會(huì)變得非常小而此時(shí)式(26)可能產(chǎn)出正數(shù).由于對(duì)不同數(shù)據(jù)集式(26)計(jì)算的值的絕對(duì)大小會(huì)有所不同,因此單個(gè)實(shí)驗(yàn)內(nèi)的相對(duì)大小的比較是關(guān)注的重點(diǎn).在實(shí)驗(yàn)過(guò)程中統(tǒng)計(jì)單個(gè)算法在實(shí)驗(yàn)時(shí)間段內(nèi)的平均對(duì)數(shù)似然估計(jì)值 (E(LL)) 以及平均對(duì)數(shù)似然估計(jì)的標(biāo)準(zhǔn)差σ(E),其中前者代表了所生成風(fēng)險(xiǎn)模型的準(zhǔn)確程度而后者代表了生成風(fēng)險(xiǎn)模型的穩(wěn)定性.同時(shí)標(biāo)準(zhǔn)差也是評(píng)價(jià)新算法是否顯著的好于其他算法的重要指標(biāo).
由于實(shí)際情況下會(huì)以一天、半天甚至一個(gè)小時(shí)計(jì)算風(fēng)險(xiǎn)模型用以評(píng)估下一時(shí)段的風(fēng)險(xiǎn),同時(shí)股票的實(shí)際數(shù)目有數(shù)千只,因此本文人造數(shù)據(jù)的實(shí)驗(yàn)著眼于m較大的情況來(lái)對(duì)比不同算法的運(yùn)行時(shí)間.
本節(jié)在3 個(gè)人造數(shù)據(jù)集上進(jìn)行了不同算法的對(duì)比實(shí)驗(yàn):第一個(gè)人造數(shù)據(jù)集上的實(shí)驗(yàn)首先測(cè)試在相同的數(shù)據(jù)集下算法2 是否相對(duì)于算法1 在保持結(jié)果基本不變的同時(shí)獲得了較高的加速;第二個(gè)人造數(shù)據(jù)集上的實(shí)驗(yàn)測(cè)試當(dāng)基本面因子重要性更高時(shí),算法4 的結(jié)果是否要優(yōu)于算法1、2、3;第三個(gè)人造數(shù)據(jù)集上的實(shí)驗(yàn)則是測(cè)試提出的算法6 是否能在模擬真實(shí)情況的基本面因子中挑選出合適的基本面因子組合來(lái)生成比算法1、2、3、4 更好的風(fēng)險(xiǎn)模型.
第一個(gè)人造數(shù)據(jù)集的設(shè)置為:m=500,n=50 100,F=10,S=10,Σ1=5I,Σ2=3I,δ=5,10,h=60.Σ1=5I和Σ2=3I表示基本面因子的重要性高于統(tǒng)計(jì)學(xué)因子,而δ=5,10 表示不同程度的噪音.我們分別測(cè)試算法1 和算法2 在總因子數(shù)目為10 和13 時(shí),從時(shí)刻50 000 到時(shí)刻50 100的預(yù)測(cè)結(jié)果,實(shí)驗(yàn)結(jié)果列于表1 中.除了對(duì)數(shù)似然估計(jì)值均值、標(biāo)準(zhǔn)差和時(shí)間外還統(tǒng)計(jì)了算法的平均迭代步數(shù) (E(iter)) 和算法2 對(duì)算法1 的加速比.
由于噪音程度δ不同,對(duì)于回報(bào)矩陣的元素大小有影響,同時(shí)也會(huì)影響到最終求出的對(duì)數(shù)似然估計(jì)值的均值,而更大的δ會(huì)導(dǎo)致更大的回報(bào)矩陣數(shù)值,因此通過(guò)式(26)所求得的對(duì)數(shù)似然估計(jì)值就會(huì)更小.表1的數(shù)據(jù)表現(xiàn)出算法1 和算法2 在總因子數(shù)目相同時(shí)對(duì)數(shù)似然估計(jì)值均值和其標(biāo)準(zhǔn)差基本相同,同時(shí)迭代步數(shù)也基本相同(結(jié)果的波動(dòng)則是由于數(shù)值精度誤差所導(dǎo)致的),但由于時(shí)刻數(shù)n遠(yuǎn)大于總因子數(shù)目,因此算法2 在所有條件下都要比算法1 快31 倍以上,顯示出算法2 良好的運(yùn)行效率.
表1 算法1 和算法2 在第一個(gè)人造數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果Table 1 Results on first synthetic dataset of Alg.1 and Alg.2
第二個(gè)人造數(shù)據(jù)集數(shù)據(jù)集設(shè)置m=1 000,n=4 200,δ=3,5,10,其余設(shè)置與第一個(gè)數(shù)據(jù)集相同.δ=3,5,10用于分別模擬由低到高不同噪音程度的人造數(shù)據(jù),而m=1 000,n=4 200 用于模擬更加真實(shí)的數(shù)據(jù)集的情況.第二個(gè)人造數(shù)據(jù)集用于測(cè)試在更重要的基本面因子被挑選出后算法3 和算法4 的性能.時(shí)刻4 000 到時(shí)刻4 100 被設(shè)置為實(shí)驗(yàn)區(qū)間來(lái)統(tǒng)計(jì)預(yù)測(cè)結(jié)果.由于基本面因子數(shù)量為10,首先分別測(cè)試了算法1 和算法2 有10 個(gè)統(tǒng)計(jì)學(xué)因子和算法3 有10 個(gè)基本面因子的結(jié)果,再測(cè)試了算法1、算法2 與算法4 在總因子數(shù)目為13 的實(shí)驗(yàn)結(jié)果,其中算法1 和算法2 使用13 個(gè)統(tǒng)計(jì)學(xué)因子而算法4 使用10 個(gè)基本面因子和3 個(gè)統(tǒng)計(jì)學(xué)因子.算法3 和算法4 都使用整個(gè)基本面因子暴露矩陣作為輸入.
表2 中的結(jié)果表現(xiàn)出當(dāng)總因子數(shù)目為10 時(shí)算法3 在所有噪音程度下都比算法1 擁有更大的似然估計(jì)值均值和更小的標(biāo)準(zhǔn)差,并且算法3 的運(yùn)行時(shí)間最少,表現(xiàn)出基本面模型的優(yōu)良性能;但算法3的結(jié)果卻比算法2 在總因子數(shù)目為13 的結(jié)果差,表現(xiàn)出統(tǒng)計(jì)學(xué)因子分析良好的擴(kuò)展性.由于時(shí)刻n與總因子數(shù)目比例變小,算法2 相對(duì)算法1的加速比只有2 倍以上,符合第2.1 節(jié)中的推導(dǎo).表2 中算法4 的結(jié)果表現(xiàn)出當(dāng)總因子數(shù)目為13 時(shí),算法4的運(yùn)行結(jié)果優(yōu)于算法2,因?yàn)樗惴? 相對(duì)于算法1、2擁有更大的對(duì)數(shù)似然估計(jì)的均值以及更小的標(biāo)準(zhǔn)差,同時(shí)算法4 的運(yùn)行時(shí)間更短;算法4 與算法3相比,算法4 擁有更大的對(duì)數(shù)似然估計(jì)值,表現(xiàn)出混合因子分析算法優(yōu)良的性能.當(dāng)δ=3 且總因子數(shù)目為13 時(shí),算法4的對(duì)數(shù)似然估計(jì)值為?3564.72,大于算法1 的?3 617.34 且擁有表中最大的差值52.62;此外,算法4 的標(biāo)準(zhǔn)差為25.94 小于算法1 的33.82,此時(shí)算法4 相對(duì)于算法1 擁有超過(guò)6.3 倍的最大加速比.所有的結(jié)果都顯示出算法4 在合適的基本面因子已知時(shí)能夠比算法1、2 和算法3 生成更準(zhǔn)確的風(fēng)險(xiǎn)模型.
表2 算法1、算法2、算法3 和算法4 在第二個(gè)人造數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果Table 2 Results on second synthetic dataset of Alg.1,Alg.2,Alg.3 and Alg.4
第三個(gè)人造數(shù)據(jù)集的m、n、F、S、h和Σ2都和第二個(gè)人造數(shù)據(jù)集相同,Σ1的對(duì)角元被設(shè)置為[5,5,5,3,3,3,3,1,1,1],被用來(lái)模擬真實(shí)數(shù)據(jù)中基本面因子重要性高低不同的情況,代表部分基本面因子的重要性高于統(tǒng)計(jì)學(xué)因子,而另一部分的重要性則弱于統(tǒng)計(jì)學(xué)因子.第三個(gè)人造數(shù)據(jù)集用于測(cè)試算法6 能否挑選出重要性更高的基本面因子來(lái)生成更準(zhǔn)確的風(fēng)險(xiǎn)模型矩陣.算法6 設(shè)置衰減率r=0.7,從時(shí)刻4 000 到時(shí)刻4 100 累積對(duì)數(shù)似然估計(jì)向量v,并記錄從時(shí)刻4 100 到時(shí)刻4 200 的預(yù)測(cè)結(jié)果.其余算法設(shè)置時(shí)刻4 100 到時(shí)刻4 200 為測(cè)試時(shí)段.算法1、算法2、算法3 和算法6 在總因子數(shù)目為10的結(jié)果以及算法1、算法2、算法4 和算法6 在總因子數(shù)目為13 的結(jié)果都被記錄在表3 中,其中算法3、算法4 和算法6 都使用整個(gè)基本面因子暴露矩陣作為輸入.
表3 中因子數(shù)s+f=10,13 表示限定算法6 的總因子數(shù)目為10 和13,但具體選擇基本面因子與統(tǒng)計(jì)學(xué)因子數(shù)目在每個(gè)時(shí)刻是不固定的,以δ=10為例,算法6 在總因子數(shù)為10 時(shí)平均使用約5.39 個(gè)基本面因子和4.61 個(gè)統(tǒng)計(jì)學(xué)因子,而當(dāng)總因子數(shù)目為13 時(shí)平均使用約5.79 個(gè)基本面因子和7.21 個(gè)統(tǒng)計(jì)學(xué)因子.表3 的結(jié)果表現(xiàn)出無(wú)論在總因子數(shù)目為10 還是13 的情況下,算法6 對(duì)數(shù)似然估計(jì)值均值都大于其他算法,同時(shí)由于n與總因子數(shù)目的比值與第二個(gè)人造數(shù)據(jù)集接近,算法2 相對(duì)算法1 的加速比與第二個(gè)人造數(shù)據(jù)集實(shí)驗(yàn)結(jié)果相似.從表3中可以看出,當(dāng)基本面因子未經(jīng)過(guò)挑選時(shí),即直接使用算法3 和算法4 生成風(fēng)險(xiǎn)模型進(jìn)行預(yù)測(cè),其表現(xiàn)在相同總因子數(shù)目的算法中最差,甚至不如算法1、2 代表的統(tǒng)計(jì)學(xué)因子分析,這意味著基本面因子需要經(jīng)過(guò)適當(dāng)?shù)奶暨x才能生成更好的風(fēng)險(xiǎn)模型.當(dāng)總因子數(shù)目為10 時(shí),算法6 的表現(xiàn)在δ=3 上最好,其對(duì)數(shù)自然估計(jì)均值達(dá)到?3 561.04,比算法1 的?3 594.51 大33.47,同時(shí)算法6 與算法1 的標(biāo)準(zhǔn)差基本相同;當(dāng)總因子數(shù)目為13 時(shí),算法6 在δ=5時(shí)表現(xiàn)最好,其對(duì)數(shù)自然估計(jì)值達(dá)到?3 522.23,比算法1 的?3 550.65 大28.42,同時(shí)算法6 與算法1的標(biāo)準(zhǔn)差基本相同.這些結(jié)果都顯示出算法6 要顯著地比算法1 表現(xiàn)好.盡管算法6 的運(yùn)行時(shí)間比算法1 略長(zhǎng),增長(zhǎng)的運(yùn)行時(shí)間仍舊在可接受的范圍之內(nèi),表示算法6 能夠和算法1 在相同的時(shí)間間隔上生成更優(yōu)的風(fēng)險(xiǎn)模型.
表3 算法1、算法2、算法3、算法4 及算法6 在第三個(gè)人造數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果Table 3 Results on third synthetic dataset of Alg.1,Alg.2,Alg.3,Alg.4 and Alg.6
真實(shí)數(shù)據(jù)集挑選了中國(guó)股票作為資產(chǎn).由于股市的歷史數(shù)據(jù)影響深遠(yuǎn),因此設(shè)置半衰期h=200 .在實(shí)驗(yàn)中挑選了22 個(gè)包含了市值、市盈率、流動(dòng)比率等的基本面因子,設(shè)置2010 年1 月3日為第一天,且隨機(jī)挑選了194 支股票價(jià)格信息及基本面信息相對(duì)完整的股票.算法6 從第900 天到第1 300天累積對(duì)數(shù)似然估計(jì)向量v,同時(shí)算法1、算法2 和算法6 第1 300 天到1 500 天總因子數(shù)目為15 的風(fēng)險(xiǎn)模型預(yù)測(cè)結(jié)果被記錄在表4 中,同時(shí)加入了使用全部22 個(gè)基本面因子的算法3 作為基本面模型預(yù)測(cè)結(jié)果對(duì)比,此時(shí)算法3 和算法6 都使用所有22個(gè)基本面因子的暴露矩陣作為輸入.同時(shí)表4 中記錄了算法6 在不同衰減系數(shù)r下的實(shí)驗(yàn)結(jié)果.圖1為算法1、算法3與算法6 在r=0.9 時(shí)前30 天的對(duì)數(shù)似然估計(jì)值.
表4 算法1、算法2、算法3 和算法6 在真實(shí)數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果比較Table 4 Results on real-world dataset of Alg.1,Alg.2,Alg.3 and Alg.6
圖1 算法1、算法3 和算法6 (r=0.9) 前30 天風(fēng)險(xiǎn)模型在真實(shí)數(shù)據(jù)集上預(yù)測(cè)的對(duì)數(shù)似然估計(jì)值的結(jié)果Fig.1 The predicted log-likelihood of the risk models estimated by Alg.1,Alg.3 and Alg.6 (r=0.9)on first 30 days
算法6 在r=0.6,0.7,0.8,0.9 時(shí)分別平均使用了約7.54、7.45、7.47、7.40 個(gè)基本面因子,剩余的為統(tǒng)計(jì)學(xué)因子.圖1中表現(xiàn)出算法6 在大部分時(shí)間的預(yù)測(cè)值是要好于算法1 的,并且在表現(xiàn)如不算法1的時(shí)間點(diǎn)相差也不大;同時(shí)圖1中算法3 的效果說(shuō)明使用所有的基本面因子盡管在少數(shù)時(shí)間的效果要好于算法1 和算法6,但由于基本面因子沒(méi)有經(jīng)過(guò)挑選,因此會(huì)出現(xiàn)波動(dòng)巨大的情況.表4 中的結(jié)果顯示出盡管算法3 總因子數(shù)目最多,但其對(duì)數(shù)似然估計(jì)值均值卻遠(yuǎn)小于其他算法,并且均值標(biāo)準(zhǔn)差大于其他算法,顯示出算法3 生成了更壞而且更不穩(wěn)定的風(fēng)險(xiǎn)模型;同時(shí)算法2 仍舊能比算法1 有將近三倍的加速比,且對(duì)數(shù)似然估計(jì)值均值和標(biāo)準(zhǔn)差相同.表4 中 E(LLAlg.6?LLAlg.2) 表示算法6 與算法2 對(duì)數(shù)似然估計(jì)值差的均值,值越大代表算法6 的性能越比算法1 好,而σ(E(LLAlg.6?LLAlg.2)) 表示該均值的標(biāo)準(zhǔn)差,用來(lái)顯示算法6 優(yōu)于算法2 的顯著程度.由于真實(shí)數(shù)據(jù)的對(duì)數(shù)回報(bào)數(shù)值較小,因此最后計(jì)算出的對(duì)數(shù)似然估計(jì)值較大.表4 中的結(jié)果顯示出在不同r的取值下算法6 的結(jié)果都要優(yōu)于算法1.不同r取值的結(jié)果表現(xiàn)出算法6 可通過(guò)調(diào)節(jié)r來(lái)改善預(yù)測(cè)結(jié)果.當(dāng)r=0.9 時(shí),算法6 擁有最大的 E(LLAlg.6?LLAlg.2)=4.44 且σ(E(LLAlg.6?LLAlg.2)=1.58,并且算法6 的σ(E) 為8.25 小于算法2 的9.06,顯示出算法6 顯著好于算法1 并且更穩(wěn)定.盡管算法6 運(yùn)行時(shí)間更長(zhǎng),增長(zhǎng)的時(shí)間仍在可接受范圍內(nèi).
針對(duì)金融數(shù)據(jù)中的風(fēng)險(xiǎn)模型生成問(wèn)題,本文提出了快速因子分析算法,同時(shí)提出了結(jié)合領(lǐng)域知識(shí)的混合因子分析算法以及在實(shí)際應(yīng)用中使用的挑選基本面因子的混合因子分析算法.實(shí)驗(yàn)結(jié)果顯示快速因子分析算法在人造數(shù)據(jù)集上能夠達(dá)到最多31倍的加速比,同時(shí)挑選基本面因子的混合因子分析算法在人造數(shù)據(jù)集和真實(shí)數(shù)據(jù)集上均有更好的表現(xiàn),并且運(yùn)行時(shí)間的增長(zhǎng)也在可接受范圍內(nèi).