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