2.845

2023影响因子

(CJCR)

  • 中文核心
  • EI
  • 中国科技核心
  • Scopus
  • CSCD
  • 英国科学文摘

留言板

尊敬的读者、作者、审稿人, 关于本刊的投稿、审稿、编辑和出版的任何问题, 您可以本页添加留言。我们将尽快给您答复。谢谢您的支持!

姓名
邮箱
手机号码
标题
留言内容
验证码

结合领域知识的因子分析: 在金融风险模型上的应用

冯栩 喻文健 李凌

富月, 李宝. 电熔镁砂熔炼过程电极电流饱和约束一步最优控制. 自动化学报, 2022, 48(1): 239−248 doi: 10.16383/j.aas.c200896
引用本文: 冯栩, 喻文健, 李凌. 结合领域知识的因子分析: 在金融风险模型上的应用. 自动化学报, 2022, 48(1): 121−132 doi: 10.16383/j.aas.c200342
Fu Yue, Li Bao. Saturation constraint one-step optimal control of electrode current for the fused magnesia smelting process. Acta Automatica Sinica, 2022, 48(1): 239−248 doi: 10.16383/j.aas.c200896
Citation: Feng Xu, Yu Wen-Jian, Li Ling. Combining domain knowledge with statistical factor analysis: An application to financial risk modeling. Acta Automatica Sinica, 2022, 48(1): 121−132 doi: 10.16383/j.aas.c200342

结合领域知识的因子分析: 在金融风险模型上的应用

doi: 10.16383/j.aas.c200342
基金项目: 国家自然科学基金(61872206)资助
详细信息
    作者简介:

    冯栩:清华大学计算机科学与技术系博士研究生. 2017年获得清华大学计算机科学与技术系学士学位. 主要研究方向为数值线性代数算法, 机器学习, 大数据分析. E-mail: fx17@mails.tsinghua.edu.cn

    喻文健:清华大学计算机科学与技术系长聘教授. 2003年获得清华大学计算机科学与技术系博士学位, 随后留校任教. 主要研究方向为集成电路计算机辅助设计算法, 机器学习, 大数据分析算法、数值计算及其应用. 本文通信作者. E-mail: yu-wj@tsinghua.edu.cn

    李凌:加州理工学院计算机科学博士(辅修电子工程). 主要研究方向为机器学习, 量化投资, 自动化交易. E-mail: liling@flowam.com

Combining Domain Knowledge with Statistical Factor Analysis: An Application to Financial Risk Modeling

Funds: Supported by National Natural Science Foundation of China (61872206)
More Information
    Author Bio:

    FENG Xu Ph. D. candidate in the Department of Computer Science and Technology, Tsinghua University. He received his bachelor degree from Tsinghua University in 2017. His research interest covers numerical linear algebra algorithms, machine learning, and big-data analytics

    YU Wen-Jian Professor in the Department of Computer Science and Technology, Tsinghua University. He received his Ph. D. degree in Computer Science from Tsinghua University in 2003. His research interest covers EDA algorithm and software, machine learning, big-data analytics, and numerical algorithms and applications. Corresponding author of this paper

    LI Ling Ph. D. in computer science (minor in electrical engineering) from California Institute of Technology. His research interest covers machine learning, quantitative investing, and automated trading

  • 摘要: 因子分析是一种在工业领域广泛使用的统计学方法. 在金融资产管理中, 因子分析通过对历史价格波动的极大似然估计推导自适应的统计学因子来生成风险模型. 与通过使用预先设定具有经济学含义的因子来生成风险模型的基本面因子模型相比, 通过因子分析生成的模型不仅更灵活, 还能发现在基本面模型中缺失的因子. 然而, 由于因子分析所生成模型中的统计学因子缺少可解释性, 因此当金融数据中存在显著噪音时容易过拟合. 针对中国股市数据的风险模型生成问题, 本文提出快速因子分析算法以及将基本面因子结合到因子分析中的挑选基本面因子的混合因子分析方法, 使风险模型同时在因子探索及模型可解释性上达到最优. 实验结果显示快速因子分析方法能够达到31倍以上的加速比, 且新混合因子分析方法能够增大人造数据集以及真实数据集上预测的对数似然估计值. 在真实数据集上, 新方法能最好够达到平均对数似然估计值12.00, 比因子分析构建模型的7.56大4.44, 并且两个算法均值差值的标准差为1.58, 表现出新方法能构建更准确的风险模型.
  • 金融分析中, 风险管理对于合理地保护资产十分重要. 通常, 资产价值的波动性被定义为风险, 而风险管理的目的则是合理的评估资产的波动性[1-7]. 风险模型(Risk model)是风险管理的重要方法, 而多因子模型(Multiple-factor model)是一种能够有效分析资产风险的风险模型[3, 8]. 多因子模型假设资产的回报被若干因子影响, 例如国家经济水平、工业领域周期以及公司财务指标等等具有经济学含义的基本面因子, 或者通过统计学方法计算出的统计学因子, 其一般形式为

    $$ y_i = \sum\limits_{j = 1}^{k} c_{ij}x_j + r_i\; $$ (1)

    其中,$ y_i $是第$ i $个资产的回报($ i = 1,\cdots,m $); $ x_j $表示第$ j $个因子的数值($ j = 1,\cdots,k $); $ c_{ij} $ 表示第$ j $个因子对于第$ i $个资产影响程度, 被称为第$ i $个资产在第$ j $个因子上的暴露; 而$ r_i $ 表示第$ i $个资产的非因子回报, 通常被看做拟合残差. 式(1)显示所有资产回报都被$ k $个相同因子驱动, 并且这些因子反映资产间的相关性以及内在的波动性. 每个因子$ x_j $ 和残差$ r_i $是不相关的, 且每个残差$ r_i $之间也不相关. 通过式(1), 可以推导出风险的表达式[3]:

    $$ \begin{split} Risk =\;&{\rm var}({\boldsymbol{y}})=\\ & {\rm var}({\boldsymbol{Cx}} +{\boldsymbol{r}})=\\ & {\rm var}({\boldsymbol{Cx}}) + {\rm var}({\boldsymbol{r}})=\\ & {\boldsymbol{CXC}}^{\rm{T}} + {\boldsymbol{R}}\; \end{split} $$ (2)

    其中, $ {\rm var}({\boldsymbol{y}}) $代表$ m $个资产回报$ {\boldsymbol{y}} = [y_1,\cdots,y_m]^{{\rm{T}}} $的协方差, ${\boldsymbol{C}}\in {\bf R}^{m\times k}$$ m $个资产对$ k $个因子${\boldsymbol{x}} = $$ [x_1,\cdots,x_k]^{{\rm{T}}}$的暴露矩阵, ${\boldsymbol{X}}\in{\bf R}^{k\times k}$是因子$ {\boldsymbol{x}} $的协方差矩阵, 而对角阵${\boldsymbol{R}}\in{\bf R}^{m\times m}$是残差矩阵. 风险模型的生成则是通过实际观测到的回报和一些分布假设在限制因子数目的情况下计算出式(2)中的$ {\boldsymbol{C}} $$ {\boldsymbol{X}} $$ {\boldsymbol{R}} $得到风险矩阵, 再通过风险矩阵来进行资产的选择和配置来规避风险从而最大化回报. 通常情况下, 风险模型需要每隔一天或者更短的时间生成一次, 用于下一时段的资产选择和配置.

    基本面因子模型(Fundamental factor model)和统计学因子模型(Statistical factor model)是两类经典的多因子模型[1-3, 8], 目前仍被广泛应用于金融分析领域. 基本面因子模型使用观测到的领域知识在资产上的暴露, 例如股息率、市盈率、市销率等等, 求出这些领域知识因子(基本面因子)的数值和残差来生成风险模型[2-3, 8-10]. 这些已知的基本面因子通常含有确切的经济学含义, 因此得到的模型具有很强的可解释性, 而模型的可解释性是对模型性能的重要保证[11-12]. 文献[2, 9]使用最小二乘法生成基本面因子模型进行风险资产评估, 并针对不同的真实数据进行了实验, 显示出基本面因子模型的优良性能. 然而由于能观测到的基本面因子数量有限, 且不是都对生成风险模型有价值, 因此文献[2, 9]中方法需要手动挑选合适的基本面因子来生成更好的风险模型. 统计学因子模型则使用因子分析(Factor analysis)生成模型[3], 其通常采用期望最大化过程(Expectation-maximization process)来计算统计学因子及其暴露[13-18]. 尽管统计学因子模型生成的因子没有确切的经济学含义, 容易在数据噪音较大时过拟合, 却能够捕捉到基本面因子模型中缺失的因子及其暴露. 由于基本面因子模型具有很强的可解释性, 而统计学因子模型可以捕捉到隐藏在回报中的因子, 因此需要构造一个结合领域知识且包含统计学因子的混合因子分析算法用来生成更准确的风险模型.

    本文针对中国股市风险评估问题, 将基本面因子暴露整合到统计学因子分析中提出一种新的混合因子分析方法生成中国股票的风险模型. 首先, 本文提出一种快速因子分析算法. 其次, 修改因子分析的期望最大化过程使其包含基本面因子暴露及一个用来调整基本面因子的大小和相关性的方阵, 从而推导出新的混合因子分析算法. 最后, 基于混合因子分析算法提出了近似最优的基本面因子挑选算法, 并将其与混合因子分析算法结合得到挑选基本面因子的混合因子分析算法. 我们使用三个人造数据集和一个真实数据集来测试本文所提出算法的性能, 实验结果表明快速因子分析算法在第一个人造数据集上能够带来31倍以上的加速比, 并且本文提出的挑选基本面因子的混合因子分析算法能够有效地构建准确且稳定的风险模型. 在所有的人造数据集上, 使用我们的挑选基本面因子的混合因子分析算法得到的风险模型的对数似然估计值(Log-likelihood)的均值都要大于统计学因子分析生成的模型, 并且标准差基本相同甚至更小; 在真实数据集上, 该方法得到平均对数似然估计值为12.00, 比因子分析构建模型的7.56大4.44, 同时前者的平均对数似然估计值的标准差为8.25, 小于因子分析的9.06.

    本文的剩余部分按照如下组织: 第1节为基于期望最大化过程的统计学因子分析的介绍; 第2节介绍我们的混合因子分析算法; 第3节为实验结果; 最后一节为全文的总结.

    期望最大化过程是机器学习中一个重要的学习方法, 通过近似后验推断的过程学习包含隐藏变量的概率模型[13-16, 19-24]. 以式(1)代表的多因子模型为例, 其中$ {\boldsymbol{y}} $是已知的观测变量, 而$ {\boldsymbol{x}} $是隐藏变量, 在$ {\boldsymbol{x}} $属于特定分布的假设下, 目标是计算出式(2)中的$ {\boldsymbol{C}} $$ {\boldsymbol{X}} $$ {\boldsymbol{R}} $使其能够最优拟合$ {\boldsymbol{x}} $$ {\boldsymbol{y}} $的联合分布. 文献[14]中首先提出了求解此类线性模型的期望最大化过程, 它通过计算$ {\boldsymbol{x}} $$ {\boldsymbol{y}} $下分布的期望并最大化$ {\boldsymbol{x}} $$ {\boldsymbol{y}} $的联合分布的似然估计值均值, 迭代计算$ {\boldsymbol{C}} $$ {\boldsymbol{X}} $$ {\boldsymbol{R}} $直到收敛.

    对含有隐藏变量模型的随机梯度下降法可以看做是一种特殊的期望最大化过程, 其最大化步骤由单独的梯度下降步骤组成; 而其他一些期望最大化过程的变种还会包含更多额外的步骤[15]. 期望最大化过程有两个重要的特点: 1)整个迭代过程是由对于变量分布的假设推导得到的, 因此对一个完整的数据集, 所有未知变量都可以通过期望最大化过程得到, 但这个特点并不是期望最大化过程独有的; 2)当期望最大化过程得到中间结果时, 数据的分布假设可以被更改, 从而继续新的期望最大化过程, 而这个特点是其他机器学习算法中很罕见的[14]. 近年来, 期望最大化过程被应用在各种不同的场景当中: 例如使用期望最大化过程推测回声位置[19], 使用期望最大化过程将自回归和非自回归模型进行结合, 从而在保证精度的情况下降低模型延迟[20], 使用变种的期望最大化过程对噪音程度未知的图像进行去模糊化处理[21], 使用变种期望最大化过程进行径向基核函数网络自回归模型的参数估计[22], 使用期望最大化过程进行非刚性点集配准研究[23]以及使用期望最大化过程与神经网络结合进行全重叠的手写数字识别与分离[24]等, 这些应用都显示出期望最大化过程在当下仍旧是实用的算法.

    因子分析是经典的统计学方法, 被广泛应用于机器学习和金融等领域[15-18, 25-29], 例如利用因子分析方法处理语音系统中的说话人识别问题[26]和语音重建问题[27], 将因子分析方法运用于场景图像识别的神经网络中[28], 以及将变种的因子分析应用到脑神经数据的分析当中[29]. 而在金融领域中, 因子分析通常被用于生成风险模型来评估资产风险[3].

    金融领域所需的因子分析需要优化的问题, 是通过对式(1)所示的多因子模型引入连续时间序列并对因子加上特定分布建立的模型. 首先, 在公式(1)的基础上假设所有因子均为隐藏变量并引入时间变量$ t $ ($ t = 1,\cdots,n $): 记${\boldsymbol{y}}_t\in {\bf R}^{m}$$ m $个资产的价值在$ t $时刻的一条观测数据, ${\boldsymbol{x}}_t\in {\bf R}^{s}$$ t $时刻不能被观测到的$ s $个服从$ {\cal{N}}({\bf{0}}, {\boldsymbol{I}}) $分布的隐藏因子, 其中,$ {\boldsymbol{I}} $表示单位矩阵, 代表$ s $个因子服从均值为0方差为1的正态分布, 同时${\boldsymbol{r}}_t\in {\bf R}^m$表示$ m $个服从均值为0方差为$ {\boldsymbol{R}} $正态分布的残差. 根据上述的假设, 因子分析的基本模型为[15-16]:

    $$ \left\{ \begin{array}{l} {\boldsymbol{x}}_t \sim{\cal{N}}({\bf{0}}, {\boldsymbol{I}})\;\\ {\boldsymbol{y}}_t = {\boldsymbol{Cx}}_t + {\boldsymbol{r}}_t,\;{\boldsymbol{r}}_t\sim{\cal{N}}({\bf{0}}, {\boldsymbol{R}})\; \end{array} \right. $$ (3)

    其中,${\boldsymbol{C}}\in {\bf R}^{m\times s}$是因子的暴露系数矩阵且${\boldsymbol{R}}\in{\bf R}^{m\times m}$是残差对角阵, 同时可知隐藏因子的协方差矩阵${\boldsymbol{X}}\in {\bf R}^{s\times s}$为单位阵. 基于式(3), 可得[15-16]:

    $$ {\boldsymbol{y}}_t \sim {\cal{N}}({\bf{0}}, {\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}}) \; $$ (4)

    式(4)代表在式(3)的假设条件下, $ \{{\boldsymbol{y}}_t\} $服从均值为0, 方差为$ {\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}} $的正态分布, 因此评估相应资产的风险可通过因子分析方法计算出$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $并最终计算出风险矩阵(2)获得.

    为了求解$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $使其拟合式(3)、(4)所代表的因子分析模型, 一个思路是求解$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $使其最优拟合$ \{{\boldsymbol{x}}_t\} $$ \{{\boldsymbol{y}}_t\} $的联合分布. 文献[15-16]提出使用期望最大化过程求解$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $使其最优拟合$ \{{\boldsymbol{x}}_t\} $$ \{{\boldsymbol{y}}_t\} $的联合分布, 即最大化$ \{{\boldsymbol{x}}_t\} $$ \{{\boldsymbol{y}}_t\} $联合分布的对数似然估计值均值[13-16]. 首先, 根据期望最大化过程在期望计算步骤需要计算有关$ {\boldsymbol{x}}_t $$ {\boldsymbol{y}}_t $下分布的期望及均值, 可通过式(3)推导出:

    $$ \left[ {\begin{array}{*{20}{c}} {{{\boldsymbol{y}}_{{t}}}}\\ {{{\boldsymbol{x}}_{{t}}}} \end{array}} \right] \sim {\cal{N}}\left( {\left[ {\begin{array}{*{20}{c}} {\bf{0}}\\ {\bf{0}} \end{array}} \right],\left[ {\begin{array}{*{20}{c}} {{\boldsymbol{C}}{{\boldsymbol{C}}^{\rm{T}}} + {\boldsymbol{R}}}&{\boldsymbol{C}}\\ {{{\boldsymbol{C}}^{\rm{T}}}}&{\boldsymbol{I}} \end{array}} \right]} \right)\;$$ (5)

    借由式(5), 可推导出$ {\boldsymbol{x}}_t $$ {\boldsymbol{y}}_t $下的均值以及方差:

    $$ {\rm E}[{\boldsymbol{x}}_t| {\boldsymbol{y}}_t] = {\boldsymbol{C}}^{{\rm{T}}}({\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}})^{-1}{\boldsymbol{y}}_t\; $$ (6)
    $$ {\rm var}[{\boldsymbol{x}}_t| {\boldsymbol{y}}_t] = {\boldsymbol{I}} - {\boldsymbol{C}}^{{\rm{T}}}({\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}})^{-1}{\boldsymbol{C}}\; $$ (7)

    同时, $ {\boldsymbol{x}}_t $$ {\boldsymbol{y}}_t $下协方差矩阵均值为:

    $$ {\rm E}[{\boldsymbol{x}}_t{\boldsymbol{x}}_t^{{\rm{T}}}|{\boldsymbol{y}}_t] = {\rm var}[{\boldsymbol{x}}_t| {\boldsymbol{y}}_t] + {\rm E}[{\boldsymbol{x}}_t| {\boldsymbol{y}}_t]{\rm E}[{\boldsymbol{x}}_t| {\boldsymbol{y}}_t]^{{\rm{T}}}\; $$ (8)
    $$ \begin{split} &\max\limits_{{\boldsymbol{C}},{\boldsymbol{R}}}\; LL(\{{\boldsymbol{y}}_t\}, \{{\boldsymbol{x}}_t\}) = \ln (L(\{{\boldsymbol{y}}_t\}, \{{\boldsymbol{x}}_t)\})= \\ &\ln\Bigg\{\prod\limits_{t = 1}^n\left[(2\pi)^{-\tfrac{k}{2}}\exp{\left(-\frac{{\boldsymbol{x}}_t^{{\rm{T}}}{\boldsymbol{x}}_t}{2}\right)}\right]\prod\limits_{t = 1}^{n}\bigg[{(2\pi)}^{-\tfrac{m}{2}}{|{\boldsymbol{R}}|}^{-\tfrac{1}{2}}\\ &\exp{\left(-\frac{({\boldsymbol{y}}_t-{\boldsymbol{Cx}}_t)^{{\rm{T}}}{\boldsymbol{R}}^{-1}({\boldsymbol{y}}_t-{\boldsymbol{Cx}}_t)}{2}\right)}\bigg]\Bigg\}=\\ & -\frac{1}{2}\Bigg\{\sum\limits_{t = 1}^{n}[(({\boldsymbol{y}}_t-{\boldsymbol{Cx}}_t)^{{\rm{T}}}{\boldsymbol{R}}^{-1}({\boldsymbol{y}}_t-{\boldsymbol{Cx}}_t))+{\boldsymbol{x}}_t^{{\rm{T}}}{\boldsymbol{x}}_t]+ \\ & n\ln|{\boldsymbol{R}}|+(m+k)n\ln (2\pi)\Bigg\} \\[-15pt] \end{split} $$ (9)
    $$ \begin{split} &\max\limits_{{\boldsymbol{C}},{\boldsymbol{R}}}\; {\cal{Q}} = {\rm E}[LL(\{{\boldsymbol{y}}_t\}, \{{\boldsymbol{x}}_t)\}] =- \\ & \quad \sum\limits_{t = 1}^n\Big(\frac{1}{2}{\boldsymbol{y}}_t^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{y}}_t -{\boldsymbol{y}}_t^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}{\rm E}[{\boldsymbol{x}}_t|{\boldsymbol{y}}_t]+\\ &\quad\frac{1}{2}{\rm trace}[{\boldsymbol{C}}^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}{\rm E}[{\boldsymbol{x}}_t{\boldsymbol{x}}_t^{{\rm{T}}}|{\boldsymbol{y}}_t]] \Big)- \frac{n}{2}\ln |{\boldsymbol{R}}| + c \end{split} $$ (10)

    由于因子分析需要最大化$ \{{\boldsymbol{x}}_t\} $以及$ \{{\boldsymbol{y}}_t\} $联合分布的似然估计值均值, 因此首先引入最大化对数似然估计值表达式(9)[15-16], 同时最大化式(9)等价于最大化其均值, 因此推导出均值表达形式的式(10)[15-16], 其中$ |{\boldsymbol{R}}| $表示$ {\boldsymbol{R}} $的行列式而${\rm trace}(\cdot)$代表矩阵的迹, 此时式(10)即为所求问题的表达式. 由于需要最大化(10), 因此通过对式(10)求偏导可以得到$ {\boldsymbol{C}} $以及$ {\boldsymbol{R}} $的迭代式(11)和(12), 从而进行迭代求解以达到收敛要求, 其中${\rm diag}\{\cdot\}$表示抽取矩阵的对角元形成对角阵而$ c $表示常量.

    $$ \begin{split} \frac{\partial{{\cal{Q}}}}{\partial{{\boldsymbol{C}}}} =\;& 0 \Rightarrow \sum\limits_{t = 1}^n{\boldsymbol{R}}^{-1}{\boldsymbol{y}}_t {\rm E}[{\boldsymbol{x}}_t|{\boldsymbol{y}}_t]^{{\rm{T}}}-\\ &\sum\limits_{t = 1}^n{\boldsymbol{R}}^{-1}{\boldsymbol{C}}{\rm E}[{\boldsymbol{x}}_t{\boldsymbol{x}}_t^{{\rm{T}}}|{\boldsymbol{y}}_t] = 0\\ &\Rightarrow {\boldsymbol{C}} = \left(\sum\limits_{t = 1}^n{\boldsymbol{y}}_t {\rm E}[{\boldsymbol{x}}_t|{\boldsymbol{y}}_t]^{{\rm{T}}}\right)\left(\sum\limits_{t = 1}^n {\rm E}[{\boldsymbol{x}}_t{\boldsymbol{x}}_t^{{\rm{T}}}|{\boldsymbol{y}}_t]\right)^{-1} \end{split} $$ (11)
    $$ \begin{split} \frac{\partial{{\cal{Q}}}}{\partial{{\boldsymbol{R}}^{-1}}} =\;& 0\Rightarrow \frac{n}{2}{\boldsymbol{R}} - \sum\limits_{t = 1}^n\bigg(\frac{1}{2}{\boldsymbol{y}}_t{\boldsymbol{y}}_t^{{\rm{T}}} - {\boldsymbol{C}} {\rm E}[{\boldsymbol{x}}_t|{\boldsymbol{y}}_t]{\boldsymbol{y}}_t^{{\rm{T}}} +\\ &\frac{1}{2}{\boldsymbol{C}} {\rm E}[{\boldsymbol{x}}_t{\boldsymbol{x}}_t^{{\rm{T}}}|{\boldsymbol{y}}_t]{\boldsymbol{C}}^{{\rm{T}}}\bigg) = 0\\ &\Rightarrow {\boldsymbol{R}} = \frac{1}{n}{\rm diag}\left\{\sum\limits_{t = 1}^n\left({\boldsymbol{y}}_t{\boldsymbol{y}}_t^{{\rm{T}}}-{\boldsymbol{C}} {\rm E}[{\boldsymbol{x}}_t|{\boldsymbol{y}}_t]{\boldsymbol{y}}_t^{{\rm{T}}}\right)\right\} \end{split} $$ (12)
    $$ \begin{split} & LL({\boldsymbol{Y}}\sim{\cal{N}}({\bf{0}}, {\boldsymbol{CC}}^{\rm{T}}+{\boldsymbol{R}})) = \\ &-\frac{1}{2}[mn\ln(2\pi) + n \ln (|{\boldsymbol{CC}}^{\rm{T}}+{\boldsymbol{R}}|) +\\ &{\rm trace}({\boldsymbol{Y}}^{{\rm{T}}}({\boldsymbol{CC}}^{\rm{T}}+{\boldsymbol{R}})^{-1}{\boldsymbol{Y}})] \end{split} $$ (13)

    基于上述的所有推导, 因子分析的期望最大化过程为: 1) 根据已有的$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $计算期望(6) ~ (8); 2) 通过已计算好的期望根据式(11)和(12)依次更新$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $; 3)当迭代结果未收敛时重复前两步. 由于因子分析的分布假设下$ \{{\boldsymbol{y}}_t\} $数据服从式(4)的分布, 因此可由式(4)推导出迭代过程的判定收敛的对数似然估计值均值式(13), 其中${\boldsymbol{Y}} = [{\boldsymbol{y}}_1,\cdots, $$ {\boldsymbol{y}}_n]\in {\bf R}^{m\times n}$$ m $个资产在$ n $个时刻上的回报矩阵, 而收敛条件可写为两次迭代步之间(13)的变化小于预设的迭代收敛阈值$ \epsilon $. 算法1中整理了基于期望最大化过程的因子分析算法:

    算法1. 基于期望最大化过程的因子分析(FA)

    输入. 回报矩阵${\boldsymbol{Y}}\in {\bf R}^{m\times n}$, 统计学因子数$ s $, 迭代收敛阈值$ \epsilon $

    输出. ${\boldsymbol{C}}\in {\bf R}^{m\times s}$, $ {\boldsymbol{R}}\in {\bf R}^{m\times m} $

    1.  初始化$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $

    2.  WHILE (式(13)计算值变化大于$\epsilon $) DO

    3.   $ {\boldsymbol{B}} = {\boldsymbol{C}}^{{\rm{T}}}({\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}})^{-1} $

    4.   根据式(6)计算 ${\boldsymbol{D}} = \sum_{t = 1}^n{\boldsymbol{y}}_t {\rm E}[{\boldsymbol{x}}_t|{\boldsymbol{y}}_t]^{{\rm{T}}} =$$ {\boldsymbol{YY}}^{{\rm{T}}}{\boldsymbol{B}}^{{\rm{T}}} $

    5.   根据式(6) ~ (8)计算${\boldsymbol{G}} = \sum_{t = 1}^n {\rm E}[{\boldsymbol{x}}_t{\boldsymbol{x}}_t^{{\rm{T}}}|{\boldsymbol{y}}_t] =$$n({\boldsymbol{I}} -$${\boldsymbol{BC}}) $+$ {\boldsymbol{BYY}}^{{\rm{T}}}{\boldsymbol{B}}^{{\rm{T}}} $

    6.   根据式(11)计算$ {\boldsymbol{C}} = {\boldsymbol{D}}{\boldsymbol{G}}^{-1} $

    7.   根据式(12)计算${\boldsymbol{R}} = {\rm diag}\{{\boldsymbol{YY}}^{{\rm{T}}}-{\boldsymbol{C}}{\boldsymbol{D}}^{{\rm{T}}}\}/n$

    8.  END WHILE

    9.  返回矩阵$ {\boldsymbol{C}} $以及$ {\boldsymbol{R}} $

    记算法1的总迭代步数为$ iter $, 由于每次迭代中时间复杂度最大的步骤为计算$ {\boldsymbol{YY}}^{{\rm{T}}} $, 因此每次迭代的时间复杂度是${\rm O}(m^2n)$, 故算法1的时间复杂度为${\rm O}(iter\cdot m^2n)$.

    本节首先介绍利用采样协方差矩阵加速因子分析的快速因子分析, 并在快速因子分析的基础上推导引入基本面因子的混合因子分析, 最后介绍近似最优选择基本面因子的混合因子分析. 本文遵循Matlab语言的习惯来表示矩阵中的部分元素, 以及对矩阵的一些操作.

    实际情况中通常时刻数目$ n $远大于统计学因子数目$ s $, 因此希望替换算法1中$ {\boldsymbol{YY}}^{\rm{T}} $的计算来减少算法运行时间. 记采样协方差矩阵$ {\boldsymbol{S}} = {\boldsymbol{YY}}^{{\rm{T}}}/n $, 使用$ {\boldsymbol{S}} $代替$ {\boldsymbol{Y}} $进行迭代, 则可以推导出: $ {\boldsymbol{D}} = n{\boldsymbol{SB}}^{{\rm{T}}} $, ${\boldsymbol{G}} = n({\boldsymbol{I}} - {\boldsymbol{BC}}) + n{\boldsymbol{BS}}{\boldsymbol{B}}^{{\rm{T}}} = n({\boldsymbol{I}} + {\boldsymbol{B}}({\boldsymbol{D}}-{\boldsymbol{C}}))$, ${\boldsymbol{R}} = $$ {\rm diag}\{{\boldsymbol{S}}-{\boldsymbol{CD}}^{\rm{T}}/n\}$, 并且式(13)中的${\rm trace}({\boldsymbol{Y}}^{{\rm{T}}}({\boldsymbol{CC}}^{{\bf{T}}}+ $$ {\boldsymbol{R}})^{-1}{\boldsymbol{Y}}) = {\rm trace}$$({\boldsymbol{YY}}^{{\rm{T}}}({{\boldsymbol{CC}}^{{\bf{T}}}+{\boldsymbol{R}}})^{-1}) = {\rm trace}(n{\boldsymbol{S}}({\boldsymbol{CC}}^{{\bf{T}}}+ $$ {\boldsymbol{R}})^{-1})$. 根据上述推导, 借助采样协方差矩阵的快速因子分析整理于算法2中:

    算法2. 快速因子分析(FFA)

    输入. 回报矩阵${\boldsymbol{Y}}\in {\bf R}^{m\times n}$, 统计学因子数$ s $, 迭代收敛阈值$ \epsilon $

    输出. $ {\boldsymbol{C}}\in {\bf R}^{m\times s} $, $ {\boldsymbol{R}}\in {\bf R}^{m\times m} $

    1.  初始化$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $

    2.  $ {\boldsymbol{S}} = {\boldsymbol{YY}}^{{\rm{T}}}/n $

    3.  WHILE (式(13)计算值变化大于$ \epsilon $) DO

    4.  $ {\boldsymbol{B}} = {\boldsymbol{C}}^{{\rm{T}}}({\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}})^{-1} $

    5.   $ {\boldsymbol{D}} = n{\boldsymbol{SB}}^{{\rm{T}}} $

    6.   $ {\boldsymbol{G}} = n({\boldsymbol{I}} + {\boldsymbol{B}}({\boldsymbol{D}}-{\boldsymbol{C}})) $

    7.   $ {\boldsymbol{C}} = {\boldsymbol{D}}{\boldsymbol{G}}^{-1} $

    8.   ${\boldsymbol{R}} = {\rm diag}\{{\boldsymbol{S}}-{\boldsymbol{C}}{\boldsymbol{D}}^{{\rm{T}}}/n\}$

    9.  END WHILE

    10. 返回矩阵$ {\boldsymbol{C}} $以及$ {\boldsymbol{R}} $

    由于算法2中单个迭代步的时间复杂度为${\rm O}(m^2s),$ 而算法2只在第2步计算了一次${\boldsymbol{YY}}^{{\rm{T}}},$ 因此算法2总体时间复杂度为${\rm O}(iter\cdot m^2s + m^2n),$ 小于算法1的${\rm O}(iter\cdot m^2n).$

    基本面因子模型使用资产的历史回报以及已有的基本面因子暴露, 例如市值、市盈率、市销率和流动比率等, 生成风险模型用以评估风险[2-3, 9]. 基本面因子暴露在不同层面表征资产的金融特征, 例如: 市值表征一个公司的整体价值, 而流动比率代表公司偿还短期债务的能力, 因此基本面因子模型在金融风险管理中表现出很强的可解释性. 算法3是使用普通最小二乘法构建基本面因子模型的经典算法[2, 9]:

    算法3. 普通最小二乘法(OLS)

    输入. 回报矩阵${\boldsymbol{Y}}\in {\bf R}^{m\times n}$, 基本面因子暴露矩阵${\boldsymbol{C}}_1\in$${\bf R}^{m\times f}$

    输出. 基本面因子协方差矩阵${\boldsymbol{X}}_1\in {\bf R}^{f\times f}$, ${\boldsymbol{R}}\in {\bf R}^{m\times m}$

    1.  计算基本面因子$ {\boldsymbol{F}}_1 = ({\boldsymbol{C}}_1^{{\rm{T}}}{\boldsymbol{C}}_1)^{-1}{\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{Y}} $

    2.  计算残差矩阵$ {\boldsymbol{R}}_1 = {\boldsymbol{Y}}-{\boldsymbol{C}}_1{\boldsymbol{F}}_1 $

    3.  计算残差协方差对角阵${\boldsymbol{R}} = {\rm diag}\{{\boldsymbol{R}}_1{\boldsymbol{R}}_1^{\rm{T}}\}/n$

    4.  计算基本面因子协方差$ {\boldsymbol{X}}_1 = {\boldsymbol{F}}_1{\boldsymbol{F}}_1^{\rm{T}}/n $

    5.  返回$ {\boldsymbol{X}}_1 $, $ {\boldsymbol{R}} $

    由于基本面因子暴露${\boldsymbol{C}}_1\in {\bf R}^{m\times f}$已知, 借由式(1)可以推出$ {\boldsymbol{Y}} = {\boldsymbol{C}}_1{\boldsymbol{F}}_1+{\boldsymbol{R}}_1 $, 其中${\boldsymbol{F}}_1\in {\bf R}^{f\times n}$为基本面因子矩阵而${\boldsymbol{R}}_1\in {\bf R}^{m\times n}$为残差阵, 因此问题变为拟合$ {\boldsymbol{Y}} = {\boldsymbol{C}}_1{\boldsymbol{F}}_1 $, 之后计算残差$ {\boldsymbol{R}}_1 $, 最后计算构造风险矩阵(2)的矩阵$ {\boldsymbol{X}} $$ {\boldsymbol{R}} $. 算法3中的第1步可由$ {\boldsymbol{Y}} = {\boldsymbol{C}}_1{\boldsymbol{F}}_1 $等式两侧同乘$ {\boldsymbol{C}}_1^{\rm{T}} $得到$ {\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{Y}} = {\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{C}}_1{\boldsymbol{F}}_1 $构造; 第2步表示根据$ {\boldsymbol{Y}}-{\boldsymbol{C}}_1{\boldsymbol{F}}_1^{{\rm{T}}} $计算残差矩阵$ {\boldsymbol{R}}_1 $; 第3步表示求解残差矩阵$ {\boldsymbol{R}}_1 $的协方差以构造残差对角阵$ {\boldsymbol{R}} $; 第4步为计算基本面因子协方差矩阵${\boldsymbol{X}}_1\in {\bf R}^{f\times f}$; 最后返回$ {\boldsymbol{X}}_1 $$ {\boldsymbol{R}} $. 在算法3执行完成后, 使用$ {\boldsymbol{C}}_1{\boldsymbol{X}}_1{\boldsymbol{C}}_1^{\rm{T}}+{\boldsymbol{R}} $即可得到式(2)中的风险矩阵.

    为了将金融的领域知识集成到统计学因子分析中, 需要推导新的期望最大化过程, 而首先则需要将已知的基本面因子暴露固定到第1.2节的原始模型中. 由于基本面因子的值在假设中是不可及的, 因此新优化问题的模型可修改为:

    $$ \left\{ \begin{aligned} & [ {\boldsymbol{x}}_{t,1}; {\boldsymbol{x}}_{t,2} ] = {\boldsymbol{x}}_t \sim{\cal{N}}({\bf{0}}, {\boldsymbol{I}})\;\\ & {\boldsymbol{y}}_t = {\boldsymbol{C}}_1{\boldsymbol{x}}_{t,1} + {\boldsymbol{C}}_2{\boldsymbol{x}}_{t,2}+ {\boldsymbol{r}}_t,\;{\boldsymbol{r}}_t\sim{\cal{N}}({\bf{0}}, {\boldsymbol{R}})\; \end{aligned} \right. $$ (14)

    其中,$ {\boldsymbol{C}}_1\in{\bf R}^{m\times f} $是观测到的基本面因子暴露矩阵而${\boldsymbol{x}}_{t,1}\in {\bf R}^{f}$是基本面因子, $ {\boldsymbol{C}}_2\in{\bf R}^{m\times s} $为统计学因子暴露矩阵而$ {\boldsymbol{x}}_{t,2}\in{\bf R}^s $为统计学因子, $ [{\boldsymbol{x}}_{t,1};{\boldsymbol{x}}_{t,2}] $表示将两个列向量拼接为一个列向量. 然而, 实际的基本面因子往往不是相互独立的, 所以式(14)的假设会导致不准确的结果. 因此, 我们引入方阵${\boldsymbol{A}}\in $$ {\bf R}^{f\times f}$来调整基本面因子之间的数值关系和相关性:

    $$ \left\{ \begin{aligned} & [ {\boldsymbol{x}}_{t,1}; {\boldsymbol{x}}_{t,2} ] = {\boldsymbol{x}}_t \sim{\cal{N}}({\bf{0}}, {\boldsymbol{I}})\;\\ & {\boldsymbol{y}}_t = {\boldsymbol{C}}_1{\boldsymbol{A}}{\boldsymbol{x}}_{t,1} + {\boldsymbol{C}}_2{\boldsymbol{x}}_{t,2}+ {\boldsymbol{r}}_t,\;{\boldsymbol{r}}_t\sim{\cal{N}}({\bf{0}}, {\boldsymbol{R}})\; \end{aligned} \right. $$ (15)

    其中,$ {\boldsymbol{A}} $也需要在期望最大化过程中被迭代更新, 并且可由式(15)推导出(2)中的全因子的暴露矩阵$ {\boldsymbol{C}} = [{\boldsymbol{C}}_1{\boldsymbol{A}}, {\boldsymbol{C}}_2] $用来进行期望最大化过程的迭代. 因此新的混合因子分析需要求解的问题变为计算$ {\boldsymbol{A}} $$ {\boldsymbol{C}}_2 $$ {\boldsymbol{R}} $使其最大化$ \{{\boldsymbol{x}}_t\} $$ \{{\boldsymbol{y}}_t\} $联合分布.

    根据式(15)以及第1节中推导的期望最大化过程, 首先推导$ {\boldsymbol{x}}_{t,1} $$ {\boldsymbol{x}}_{t,2} $$ {\boldsymbol{y}}_t $下的期望:

    $$ {\rm E}[{\boldsymbol{x}}_{t,1}|{\boldsymbol{y}}_t] = ({\boldsymbol{C}}_1{\boldsymbol{A}})^{\rm{T}}({\boldsymbol{CC}}^{\rm{T}} + {\boldsymbol{R}})^{-1}{{\boldsymbol{y}}_{\boldsymbol{t}}}\; $$ (16)
    $$ {\rm E}[{\boldsymbol{x}}_{t,2}|{\boldsymbol{y}}_t] = {\boldsymbol{C}}_2^{\rm{T}}({\boldsymbol{CC}}^{\rm{T}} + {\boldsymbol{R}})^{-1}{{\boldsymbol{y}}_{\boldsymbol{t}}}\; $$ (17)

    而根据式(8)及式(15)可以推导出:

    $$ {\rm E}[{\boldsymbol{x}}_{t,1}{\boldsymbol{x}}_{t,1}^{{\rm{T}}}|{\boldsymbol{y}}_t] = {\rm E}[{\boldsymbol{x}}_{t}{\boldsymbol{x}}_{t}^{{\rm{T}}}|{\boldsymbol{y}}_t] (1: f, 1: f)\; $$ (18)
    $$ {\rm E}[{\boldsymbol{x}}_{t,1}{\boldsymbol{x}}_{t,2}^{{\rm{T}}}|{\boldsymbol{y}}_t] = {\rm E}[{\boldsymbol{x}}_{t}{\boldsymbol{x}}_{t}^{{\rm{T}}}|{\boldsymbol{y}}_t] (1: f, f+1: f+s)\; $$ (19)
    $$ {\rm E}[{\boldsymbol{x}}_{t,2}{\boldsymbol{x}}_{t,2}^{{\rm{T}}}|{\boldsymbol{y}}_t] = {\rm E}[{\boldsymbol{x}}_{t}{\boldsymbol{x}}_{t}^{{\rm{T}}}|{\boldsymbol{y}}_t] (f+1: f+s, f+1: f+s)\; $$ (20)

    其中,${\rm E}[{\boldsymbol{x}}_{t}{\boldsymbol{x}}_{t}^{{\rm{T}}}|{\boldsymbol{y}}_t] (1: f, f+1: f+s)$代表对矩阵${\rm E}[{\boldsymbol{x}}_{t}{\boldsymbol{x}}_{t}^{{\rm{T}}}|{\boldsymbol{y}}_t]$$ 1 $$ f $行与$ f+1 $$ f+s $列形成的新矩阵. 根据期望最大化过程中最大化步骤的需求, 需要最大化新的对数自然估计值的期望. 首先得到新的需要最大化的期望表达式(21), 而通过对式(21)进行求偏导可以得到迭代计算$ {\boldsymbol{A}} $以及$ {\boldsymbol{C}}_2 $的式(22)和(23), 再将式(12)中对应的统计学因子暴露阵替换为本节中的全因子暴露矩阵后即可得到$ {\boldsymbol{R}} $的迭代公式.

    $$ \begin{split} \max\limits_{{\boldsymbol{A}},{\boldsymbol{C}}_2,{\boldsymbol{R}}}\; {\hat{\cal{Q}}} \;& = {\rm E}[LL(\{{\boldsymbol{y}}_t\}, \{[{\boldsymbol{x}}_{t,1}; {\boldsymbol{x}}_{t,2}]\})]=-\\ &\sum\limits_{t = 1}^n\left(\frac{1}{2}{\boldsymbol{y}}_t^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{y}}_t - {\boldsymbol{y}}_t^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_1{\boldsymbol{A}} {\rm E}[{\boldsymbol{x}}_{t,1}|{\boldsymbol{y}}_t] -\right.\\ &{\boldsymbol{y}}_t^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_2 {\rm E}[{\boldsymbol{x}}_{t,2}|{\boldsymbol{y}}_t] +\\ &\frac{1}{2} {\rm trace}[{\boldsymbol{A}}^{\rm{T}}{\boldsymbol{C}}_1^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_1{\boldsymbol{A}} {\rm E}[{\boldsymbol{x}}_{t,1}{\boldsymbol{x}}_{t,1}^{{\rm{T}}} |{\boldsymbol{y}}_t]] +\\ & {\rm trace}[{\boldsymbol{A}}^{\rm{T}}{\boldsymbol{C}}_1^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_2 {\rm E}[{\boldsymbol{x}}_{t,2}{\boldsymbol{x}}_{t,1}^{{\rm{T}}} |{\boldsymbol{y}}_t]]+ \\ &\left. \frac{1}{2} {\rm trace}[{\boldsymbol{C}}_2^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_2 {\rm E}[{\boldsymbol{x}}_{t,2}{\boldsymbol{x}}_{t,2}^{{\rm{T}}} |{\boldsymbol{y}}_t]]\right) - \\ &\frac{n}{2}\ln |{\boldsymbol{R}}| +c \\[-10pt] \end{split} $$ (21)
    $$ \begin{split} \frac{\partial{{\hat{\cal{Q}}}}}{\partial{{\boldsymbol{A}}}} =\;& 0 \Rightarrow\sum\limits_{t = 1}^n\Big(-{\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{R}}^{-1}{\boldsymbol{y}}_t {\rm E}[{\boldsymbol{x}}_{t,1}|{\boldsymbol{y}}_t]^{\rm{T}} +\\ &{\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_1{\boldsymbol{A}} {\rm E}[{\boldsymbol{x}}_{t,1}{\boldsymbol{x}}_{t,1}^{{\rm{T}}}|{\boldsymbol{y}}_t] +\\ &{\boldsymbol{C}}_1^{{\rm{T}}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_2 {\rm E}[{\boldsymbol{x}}_{t,2}{\boldsymbol{x}}_{t,1}^{{\rm{T}}} |{\boldsymbol{y}}_t]\Big) = 0 \\ &\Rightarrow {\boldsymbol{A}} = ({\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_1)^{-1}{\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{R}}^{-1}\times \end{split} $$
    $$ \begin{split} &\left(\sum\limits_{t = 1}^n{\boldsymbol{y}}_t {\rm E}[{\boldsymbol{x}}_{t,1}|{\boldsymbol{y}}_t]^{\rm{T}} - \sum\limits_{t = 1}^n{\boldsymbol{C}}_2 {\rm E}[{\boldsymbol{x}}_{t,2}{\boldsymbol{x}}_{t,1}^{{\rm{T}}} |{\boldsymbol{y}}_t]\right)\times\\ &\left(\sum\limits_{t = 1}^n {\rm E}[{\boldsymbol{x}}_{t,1}{\boldsymbol{x}}_{t,1}^{{\rm{T}}}|{\boldsymbol{y}}_t]\right)^{-1} \\[-15pt] \end{split} $$ (22)
    $$ \begin{split} \frac{\partial{{\hat{\cal{Q}}}}}{\partial{{\boldsymbol{C}}_2}} =\;& 0 \Rightarrow\sum\limits_{t = 1}^n\Big(-{\boldsymbol{R}}^{-1}{\boldsymbol{y}}_t {\rm E}[{\boldsymbol{x}}_{t,2}|{\boldsymbol{y}}_t]^{{\rm{T}}} +\\ &{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_1{\boldsymbol{A}} {\rm E}[{\boldsymbol{x}}_{t,1}{\boldsymbol{x}}_{t,2}^{{\rm{T}}}|{\boldsymbol{y}}_t] +\\ &{\boldsymbol{R}}^{-1}{\boldsymbol{C}}_2 {\rm E}[{\boldsymbol{x}}_{t,2}{\boldsymbol{x}}_{t,2}^{{\rm{T}}}|{\boldsymbol{y}}_t]\Big) = 0\\ \Rightarrow\;&{\boldsymbol{C}}_2 =\left(\sum\limits_{t = 1}^n{\boldsymbol{y}}_t {\rm E}[{\boldsymbol{x}}_{t,2}|{\boldsymbol{y}}_t]^{{\rm{T}}} - \sum\limits_{t = 1}^n{\boldsymbol{C}}_1{\boldsymbol{A}} {\rm E}[{\boldsymbol{x}}_{t,1}{\boldsymbol{x}}_{t,2}^{{\rm{T}}}|{\boldsymbol{y}}_t]\right)\\ &\left(\sum\limits_{t = 1}^n {\rm E}[{\boldsymbol{x}}_{t,2}{\boldsymbol{x}}_{t,2}^{{\rm{T}}}|{\boldsymbol{y}}_t]\right)^{-1} \\[-15pt] \end{split} $$ (23)

    根据上述的推导, 新的期望最大化过程可表述为: 第1步, 根据已有的$ {\boldsymbol{A}} $$ {\boldsymbol{C}}_2 $以及$ {\boldsymbol{R}} $计算期望(8)(16)(17); 第2步, 通过已计算好的期望以及式(22)、(23)、(12)依次更新$ {\boldsymbol{A}} $$ {\boldsymbol{C}}_2 $$ {\boldsymbol{R}} $; 第3步, 当迭代结果未收敛时重复前两步. 根据新的期望最大化过程和修改后的快速因子分析算法可整理出结合基本面因子的混合因子分析算法4:

    算法4. 结合基本面因子的混合因子分析(HFA)

    输入. 回报矩阵${\boldsymbol{Y}}\in {\bf R}^{m\times n}$, 基本面暴露阵${\boldsymbol{C}}_1\in {\bf R}^{m\times f}$, 统计学因子数$ s $, 迭代收敛阈值$\epsilon.$

    输出. ${\boldsymbol{C}}\in {\bf R}^{m\times (f+s)}$, $ {\boldsymbol{R}}\in {\bf R}^{m\times m} $

    1.  初始化$ {\boldsymbol{A}} $$ {\boldsymbol{C}}_2 $$ {\boldsymbol{R}} $

    2.  $ {\boldsymbol{C}} = [{\boldsymbol{C}}_1{\boldsymbol{A}},{\boldsymbol{C}}_2] $, $ {\boldsymbol{S}} = {\boldsymbol{YY}}^{{\rm{T}}}/n $, $ k = f+s $

    3.  WHILE (对数似然估计值变化大于$ \epsilon $) DO

    4.   $ {\boldsymbol{B}} = {\boldsymbol{C}}^{{\rm{T}}}({\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}})^{-1} $, $ {\boldsymbol{T}} = {\boldsymbol{C}}_1^{\rm{T}}{\boldsymbol{R}}^{-1} $

    5.   $ {\boldsymbol{D}} = n{\boldsymbol{SB}}^{{\rm{T}}} $

    6.   $ {\boldsymbol{G}} = n({\boldsymbol{I}} + {\boldsymbol{B}}({\boldsymbol{D}}-{\boldsymbol{C}})) $

    7.   根据式(22)计算$ {\boldsymbol{A}} = ({\boldsymbol{T}}{\boldsymbol{C}}_1)^{-1}{\boldsymbol{T}}\{{\boldsymbol{D}}(1:m, 1:f) $$-{\boldsymbol{C}}_2{\boldsymbol{G}}$$(f+1:k, 1:f)\}{\boldsymbol{G}}(1:f, 1:f) $−1

    8.   根据式(23)计算$ {\boldsymbol{C}}_2 = \{{\boldsymbol{D}}(1:m, f+1:k)- $${\boldsymbol{C}}_1{\boldsymbol{A}}{\boldsymbol{G}}(1: $$f, f+1:k)\}{\boldsymbol{G}}(f+1:k, f+1:k) $−1

    9.   计算完整暴露矩阵$ {\boldsymbol{C}} = [{\boldsymbol{C}}_1{\boldsymbol{A}}, {\boldsymbol{C}}_2] $

    10.   ${\boldsymbol{R}} = {\rm diag}\{{\boldsymbol{S}}^{{\rm{T}}}-{\boldsymbol{C}}{\boldsymbol{D}}^{{\rm{T}}}/n\}$

    11. END WHILE

    12. 返回矩阵$ {\boldsymbol{C}} $以及$ {\boldsymbol{R}} $

    当因子总数目相同时(设总因子数目为$ k), $ 尽管算法4和算法2的时间复杂度相同, 但算法4的实际运行时间更短: 由于算法4中最大的矩阵求逆操作是对于$ (k-f)\times (k-f) $的矩阵进行求逆, 小于算法2中$ k\times k $的矩阵求逆操作; 同时算法4中需要迭代更新的矩阵$ {\boldsymbol{A}} $$ {\boldsymbol{C}}_2 $大小为$ k\times k $以及$ m\times(k-f) $, 比算法2中的$ {\boldsymbol{C}} $$ m\times k $小. 因此在总因子数目相同时, 算法4在$ f>0 $时的运行时间要小于算法2.

    在实际情况中, 被观测到的基本面因子数量众多, 但只有部分对于生成风险模型更有价值, 因此本节着眼于通过历史数据找到合适的基本面因子, 并使用挑选出的因子联合算法4生成更准确的风险模型. 尽管第1节、第2.1节、第2.2节均旨在最大化该时刻的对数似然估计来推导期望最大化过程, 本节提出的基本面因子选择算法却旨在通过对未来时刻预测的对数似然估计值来选择最优的基本面因子组合.

    记所有观测到的基本面因子总数目为$ F $而风险模型的总因子数目为$ k $, 若需要得到$ t $时刻最优的基本面因子组合, 则要综合考察之前时刻所有基本面因子组合生成风险模型的预测结果. 以$ t-1 $时刻为例, 当需要得到基本面因子的所有组合在时刻$ t-1 $生成的风险模型对于时刻$ t $回报预测的对数似然估计值结果时, 需要执行$ \sum_{i = 1}^{\min{(F,k)}}\binom{F}{i} $次算法4以得到完整的结果, $ \binom{F}{i} $代表从$ F $个元素中选择$ i $个元素的组合数, 这意味着当$ F $$ k $数量级相同时需要执行${\rm O}(2^{F})$次算法4. 当$ t $时刻之前的所有预测的对数似然估计值被累积好后, 便选择使对数似然估计值最大的基本面因子组合来生成$ t $时刻的风险模型. 然而${\rm O}(2^{F})$次算法4的执行需要花费大量时间, 因此需要寻找一个近似最优的算法, 能在更快的运行时间下得到合适的基本面因子组合.

    为了快速找到合适的基本面因子组合, 需要一个贪婪算法来搜索可能的解空间. 首先, 通过将每一个的基本面因子暴露在$ t-1 $时刻的采样协方差矩阵上的拟合结果对基本面因子排序: 记${\hat{\boldsymbol{C}}}_{1}\in {\bf R}^{m\times F}$为所有基本面因子暴露矩阵, 即将$ {\hat{\boldsymbol{C}}}_{1} $的每一列、$ t-1 $时刻的采样协方差矩阵和统计学因子数目$ k-1 $作为输入传入算法4, 按照程序结束时风险矩阵对于输入回报矩阵的在式(13)上计算出的对数似然估计值对所有基本面因子进行降序排序, 并记排序后的索引向量为$ {\boldsymbol{d}} $. 之后使用$ t-1 $时刻的采样协方差矩阵、统计学因子数目$ k-i $以及基本面因子暴露矩阵$ {\hat{\boldsymbol{C}}}_{1}[1:m, 1:{\boldsymbol{d}}[1:i]],(i = 1,\cdots,\min(F,k)) $通过算法4计算风险矩阵, 并使用风险矩阵计算对于$ t $时刻的回报$ {\boldsymbol{y}}_{t} $预测对数似然估计值(该预测的对数似然估计值在实验部分进行介绍), 并将对数似然估计值累积到向量${\boldsymbol{v}}\in {\bf R}^{\min(F,k)}$中, 而算法5中的衰减率$ r $被用来以一定的衰减率累积对数似然估计值. 最后, 通过找到$ {\boldsymbol{v}} $中最大值的下标$ d $来确定$ t $时刻风险模型所需的基本面因子组合$ {\boldsymbol{d}}[1:d] $和基本面因子暴露矩阵$ {\hat{\boldsymbol{C}}}_{1}[1:m,{\boldsymbol{d}}[1:d]] $. 算法5描述了基本面因子挑选流程$({\rm{zeros}}(F)$为生成长度为$ F $的零向量操作):

    算法5. 部分基本面因子挑选算法(FS)

    输入. $ t-1 $时刻回报矩阵${\boldsymbol{Y}}\in {\bf R}^{m\times (t-1)}$, $ t $时刻回报${\boldsymbol{y}}_t\in {\bf R}^{m}$, 基本面因子暴露阵${\hat{\boldsymbol{C}}}_{1}\in {\bf R}^{m\times F}$, 似然估计累积向量$ {\boldsymbol{v}} $, 总因子数$ k $, 衰减率$ r $, 迭代收敛阈值$ \epsilon $

    输出. 选择后的基本面暴露矩阵$ {\boldsymbol{C}}_{1} $, $ {\boldsymbol{v}} $

    1.  $ {\boldsymbol{p}} = {\rm{zeros}}(F) $, $ {\hat{\boldsymbol{v}}} = {\rm{zeros}}(\min(F, k)) $

    2.  FOR $ i = 1,2,\cdots,F $ DO

    3.   $ [{\boldsymbol{C}},{\boldsymbol{R}}] = {\rm{HFA}}({\boldsymbol{Y}}, {\hat{\boldsymbol{C}}}_1[1:m, i],k-1,\epsilon) $

    4.   记$ {\boldsymbol{p}}[i] $为风险矩阵$ {\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}} $$ {\boldsymbol{Y}} $根据(13)计算的对数似然估计值

    5.  END FOR

    6.  对$ {\boldsymbol{p}} $按照降序排序得到索引$ {\boldsymbol{d}} $

    7.  FOR $ i = 1,2,\cdots,\min(F, k) $ DO

    8.   $ [{\boldsymbol{C}},{\boldsymbol{R}}] = {\rm{HFA}}({\boldsymbol{Y}}, {\hat{\boldsymbol{C}}}_1[1:m, {\boldsymbol{d}}[1:i]],k-i,\epsilon) $

    9.   记$ {\hat{\boldsymbol{v}}}[i] $为风险矩阵$ {\boldsymbol{CC}}^{{\rm{T}}}+{\boldsymbol{R}} $对于$ {\boldsymbol{y}}_t $预测的对数似然估计结果

    10. END FOR

    11. $ {\boldsymbol{v}} = r{\boldsymbol{v}}+{\hat{\boldsymbol{v}}} $

    12. 记$ d $$ {\boldsymbol{v}} $中最大值的索引

    13. 返回$ {\boldsymbol{C}}_{1} = {\hat{\boldsymbol{C}}}_1[1:m,{\boldsymbol{d}}[1:d]] $, $ {\boldsymbol{v}} $

    算法5在每个时刻使用了${\rm O}(F)$次算法4来得到近似最优的因子组合, 远小于搜索整个空间的$ {\rm O}(2^{F}) $.

    先使用算法5找到合适的基本面因子, 再通过算法4计算风险矩阵, 即可得到实际应用中用以计算风险的算法6:

    算法6. 挑选基本面因子的混合因子分析(HFA$ ^+ $)

    输入. $ t-1 $时刻回报矩阵${\boldsymbol{Y}}\in {\bf R}^{m\times (t-1)}$, $ t $时刻回报${\boldsymbol{y}}_t\in {\bf R}^{m}$, 基本面因子暴露阵${\hat{\boldsymbol{C}}}_1\in {\bf R}^{m\times F}$, 似然估计累积向量$ {\boldsymbol{v}} $, 总因子数$ k $, 衰减率$ r $, 迭代收敛阈值$ \epsilon $

    输出. ${\boldsymbol{C}}\in {\bf R}^{m\times k}$, ${\boldsymbol{R}}\in {\bf R}^{m\times m}$, $ {\boldsymbol{v}} $

    1.  $ [{\boldsymbol{C}}_1, {\boldsymbol{v}}] = {\rm{FS}}({\boldsymbol{Y}},{\boldsymbol{y}}_t,{\hat{\boldsymbol{C}}}_1, {\boldsymbol{v}}, k, r, \epsilon) $

    2.  使用$ t $时刻的回报$ {\boldsymbol{y}}_t $更新$ {\boldsymbol{Y}} $, 记$ {\boldsymbol{C}}_1 $列数为$ f $

    3.  $ [{\boldsymbol{C}},{\boldsymbol{R}}] = {\rm{HFA}}({\boldsymbol{Y}},{\boldsymbol{C}}_1, k-f,\epsilon) $

    4.  返回$ {\boldsymbol{C}} $$ {\boldsymbol{R}} $以及$ {\boldsymbol{v}} $

    算法6首先使用算法5挑选出合适的基本面因子并更新回报矩阵到下一时刻, 随后使用挑选出的基本面因子通过算法4生成风险矩阵. 算法6中保持累积向量$ {\boldsymbol{v}} $的更新, 使得算法6能即时通过$ {\boldsymbol{v}} $挑选合适的基本面因子来生成更准确的风险模型, 也因此算法6中每一时刻选择的基本面因子组合及数目均有可能不同.

    我们在模拟实际情况的三个人造数据集和一个真实数据集上对本文算法进行了对比实验. 实验平台为拥有Intel Xeon E5-2680 CPU (2.50 GHz)的Cent OS服务器. 我们使用Python 3.6实现了本文算法并记录它们运行所需的CPU时间, 单位为秒. 实验中所有算法的迭代收敛阈值$ \epsilon $$ 10^{-8} $.

    ${\boldsymbol{Y}} = [{\boldsymbol{y}}_1,\cdots,{\boldsymbol{y}}_n]\in {\bf R}^{m\times n}$$ m $个资产在$ n $个时刻的回报数据, $ F $是基本面因子的数目而$ S $是统计学因子的数目, 通过以下4个步骤可生成人造数据集(所有的随机阵均为标准高斯分布随机阵):

    生成$ F\times n $的基本面因子随机阵$ {\hat{\boldsymbol{F}}}_1 $以及$ m\times F $的基本面因子暴露随机阵$ {\hat{\boldsymbol{C}}}_1 $

    生成$ S\times n $的统计学因子随机阵$ {\hat{\boldsymbol{F}}}_2 $以及$ m\times S $的统计学因子暴露随机阵$ {\hat{\boldsymbol{C}}}_2 $

    生成$ m\times n $的随机噪音阵$ {\boldsymbol{E}} $

    计算回报矩阵$ {\boldsymbol{Y}} = {\hat{\boldsymbol{C}}}_1{\boldsymbol{\varSigma}}_1{\hat{\boldsymbol{F}}}_1+{\hat{\boldsymbol{C}}}_2{\boldsymbol{\varSigma}}_2{\hat{\boldsymbol{F}}}_2+\delta{\boldsymbol{E}} $, 其中$ {\boldsymbol{\varSigma}}_1 $以及$ {\boldsymbol{\varSigma}}_2 $为对角阵, 且$ {\boldsymbol{\varSigma}}_1 $$ {\boldsymbol{\varSigma}}_2 $$ \delta $分别代表不同部分的权重

    使用滑动窗口来生成风险模型并评估风险, 这样使得每次都使用最新的一部分数据来计算采样协方差矩阵, 需要对回报矩阵做如下的操作以不同重要程度保留退出滑动窗口数据的历史信息:

    $$ \tilde{{\boldsymbol{Y}}}_t = [\lambda^{t-1}{\boldsymbol{y}}_1, \cdots, \lambda{\boldsymbol{y}}_{t-1}, {\boldsymbol{y}}_t]\; $$ (24)

    其中,$\lambda = 0.5^{\tfrac{1}{h}}$$ h $是表示半衰期的常量, 代表经过$ h $个时刻数据的重要性变为原来的一半. 通过式(24), 所有数据的信息都被保留, 并且越新的数据重要性越高. 记$ n_t = \sum_{i = 0}^{t-1} \lambda^{2i} $, 采样协方差矩阵表达式被修正为$ {\boldsymbol{S}}_t = \tilde{{\boldsymbol{Y}}}_t\tilde{{\boldsymbol{Y}}}_t^{{\rm{T}}}/n_t $, 同时所有算法步骤中的$ n $也需要相应的修改为$ n_t $.

    真实数据来源于中国的股票市场. 记$ {\boldsymbol{p}}_t $$ m $支股票在第$ t $天的价格数据, 可以使用对数回报率来作为回报向量使用, 即:

    $$ {\boldsymbol{y}}_t = \ln\left(\frac{{\boldsymbol{p}}_{t+1}}{{\boldsymbol{p}}_{t}}\right) = \ln{{\boldsymbol{p}}_{t+1}} - \ln{\boldsymbol{p}}_{t}\; $$ (25)

    通常对数回报率被看做服从高斯独立分布. 对数回报率矩阵同样进行了式(25)的操作. 所有基本面因子暴露$ {\hat{\boldsymbol{C}}}_f $来自Tushare金融大数据社区(https://tushare.pro/), 同时按列进行了标准化处理. 所有的人造数据矩阵、真实数据的信息和可运行的示例代码都被整理在 https://github.com/ExpDataForRiskModel/ExpData中.

    实验结果的评价也很重要. 记$ {\boldsymbol{\varOmega}}_t = {\boldsymbol{CC}}^{\rm{T}}+{\boldsymbol{R}} $为算法1、2、4、6在时刻$ t $生成的风险矩阵, 而$ {\boldsymbol{\varOmega}}_t = {\boldsymbol{C}}_1{\boldsymbol{X}}_1{\boldsymbol{C}}_1^{\rm{T}}+{\boldsymbol{R}} $为算法3在时刻$ t $生成的风险矩阵, 且$ {\boldsymbol{y}}_{t+1} $$ t+1 $时刻的回报数据, 则$ t $时刻的风险模型对于$ t+1 $时刻回报预测的对数似然估计值为:

    $$ \begin{split} LL&({\boldsymbol{y}}_{t+1}\sim{\cal{N}}({\bf{0}}, {\boldsymbol{\varOmega}}_t))=\\ &-\frac{1}{2}[m\ln(2\pi) + \ln (|{\boldsymbol{\varOmega}}_t|) + {\boldsymbol{y}}_{t+1}^{{\rm{T}}}{\boldsymbol{\varOmega}}_t^{-1}{\boldsymbol{y}}_{t+1}]\; \end{split} $$ (26)

    式中, 因为$ m\ln (2\pi) $是正常数, 预测的对数似然估计值只与$ {\boldsymbol{\varOmega}}_t $相关. 而$ {\boldsymbol{\varOmega}}_t $是借助算法以及$ {\boldsymbol{S}}_t $计算得到, 代表$ {\boldsymbol{\varOmega}}_t $$ {\boldsymbol{S}}_t $非常接近, 当$ {\boldsymbol{S}}_t $的行列式小于1时, $ \ln |{\boldsymbol{\varOmega}}_t| $会变得非常小而此时式(26)可能产出正数. 由于对不同数据集式(26)计算的值的绝对大小会有所不同, 因此单个实验内的相对大小的比较是关注的重点. 在实验过程中统计单个算法在实验时间段内的平均对数似然估计值$({\rm E}(LL))$以及平均对数似然估计的标准差$\sigma({\rm E}),$ 其中前者代表了所生成风险模型的准确程度而后者代表了生成风险模型的稳定性. 同时标准差也是评价新算法是否显著的好于其他算法的重要指标.

    由于实际情况下会以一天、半天甚至一个小时计算风险模型用以评估下一时段的风险, 同时股票的实际数目有数千只, 因此本文人造数据的实验着眼于$ m $较大的情况来对比不同算法的运行时间.

    本节在3个人造数据集上进行了不同算法的对比实验: 第一个人造数据集上的实验首先测试在相同的数据集下算法2是否相对于算法1在保持结果基本不变的同时获得了较高的加速; 第二个人造数据集上的实验测试当基本面因子重要性更高时, 算法4的结果是否要优于算法1、2、3; 第三个人造数据集上的实验则是测试提出的算法6是否能在模拟真实情况的基本面因子中挑选出合适的基本面因子组合来生成比算法1、2、3、4更好的风险模型.

    第一个人造数据集的设置为: $ m = 500 $, $n = $$ 50\,100$, $ F = 10 $, $ S = 10 $, $ {\boldsymbol{\varSigma}}_1 = 5{\boldsymbol{I}} $, $ {\boldsymbol{\varSigma}}_2 = 3{\boldsymbol{I}} $, $ \delta = $$ 5,10 $, $ h = 60 $. $ {\boldsymbol{\varSigma}}_1 = 5{\boldsymbol{I}} $$ {\boldsymbol{\varSigma}}_2 = 3{\boldsymbol{I}} $表示基本面因子的重要性高于统计学因子, 而$ \delta = 5,10 $表示不同程度的噪音. 我们分别测试算法1和算法2在总因子数目为10和13时, 从时刻50000到时刻50100的预测结果, 实验结果列于表1中. 除了对数似然估计值均值、标准差和时间外还统计了算法的平均迭代步数$({\rm E}(iter))$和算法2对算法1的加速比.

    表 1  算法1和算法2在第一个人造数据集上的实验结果
    Table 1  Results on first synthetic dataset of Alg.1 and Alg.2
    因子数算法$\delta=5$$\delta=10$
    时间 (s)${\rm E}\,(LL)$$\sigma\,({\rm E})$${\rm E}\,(iter)$加速比时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$$ {\rm E}\,(iter)$加速比
    $s=10$算法1 (FA)444.21−1927.6310.01709.02252.07−2059.106.30405.51
    $s=10$算法2 (FFA)14.05−1927.6310.01709.0131.67.80−2059.106.30405.5532.3
    $s=13$算法1 (FA)653.60−1861.0211.481019.66313.86−2027.426.29492.91
    $s=13$算法2 (FFA)20.38−1863.7311.391020.7732.19.58−2027.086.24492.7932.8
    下载: 导出CSV 
    | 显示表格

    由于噪音程度$ \delta $不同, 对于回报矩阵的元素大小有影响, 同时也会影响到最终求出的对数似然估计值的均值, 而更大的$ \delta $会导致更大的回报矩阵数值, 因此通过式(26)所求得的对数似然估计值就会更小. 表1的数据表现出算法1和算法2在总因子数目相同时对数似然估计值均值和其标准差基本相同, 同时迭代步数也基本相同(结果的波动则是由于数值精度误差所导致的), 但由于时刻数$ n $远大于总因子数目, 因此算法2在所有条件下都要比算法1快31倍以上, 显示出算法2良好的运行效率.

    第二个人造数据集数据集设置$m = 1\,000$, $n = $$ 4\,200$, $ \delta = 3,5,10 $, 其余设置与第一个数据集相同. $ \delta = 3,5,10 $用于分别模拟由低到高不同噪音程度的人造数据, 而$m = 1\,000$, $n = 4\,200$用于模拟更加真实的数据集的情况. 第二个人造数据集用于测试在更重要的基本面因子被挑选出后算法3和算法4的性能. 时刻4000到时刻4100被设置为实验区间来统计预测结果. 由于基本面因子数量为10, 首先分别测试了算法1和算法2有10个统计学因子和算法3有10个基本面因子的结果, 再测试了算法1、算法2与算法4在总因子数目为13的实验结果, 其中算法1和算法2使用13个统计学因子而算法4使用10个基本面因子和3个统计学因子. 算法3和算法4都使用整个基本面因子暴露矩阵作为输入.

    表2中的结果表现出当总因子数目为10时算法3在所有噪音程度下都比算法1拥有更大的似然估计值均值和更小的标准差, 并且算法3的运行时间最少, 表现出基本面模型的优良性能; 但算法3的结果却比算法2在总因子数目为13的结果差, 表现出统计学因子分析良好的扩展性. 由于时刻$ n $与总因子数目比例变小, 算法2相对算法1的加速比只有2倍以上, 符合第2.1节中的推导. 表2中算法4的结果表现出当总因子数目为13时, 算法4的运行结果优于算法2, 因为算法4相对于算法1、2拥有更大的对数似然估计的均值以及更小的标准差, 同时算法4的运行时间更短; 算法4与算法3相比, 算法4拥有更大的对数似然估计值, 表现出混合因子分析算法优良的性能. 当$ \delta = 3 $且总因子数目为13时, 算法4的对数似然估计值为−3564.72, 大于算法1的−3617.34且拥有表中最大的差值52.62; 此外, 算法4的标准差为25.94小于算法1的33.82, 此时算法4相对于算法1拥有超过6.3倍的最大加速比. 所有的结果都显示出算法4在合适的基本面因子已知时能够比算法1、2和算法3生成更准确的风险模型.

    表 2  算法1、算法2、算法3和算法4在第二个人造数据集上的实验结果
    Table 2  Results on second synthetic dataset of Alg.1, Alg.2, Alg.3 and Alg.4
    因子数算法$\delta=3$$\delta=5$$\delta=10$
    时间 (s)${\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$
    $s=10,f=0$算法1 (FA)484.94−3789.0328.85389.27−3866.5924.26227.39−4116.6814.46
    $s=10,f=0$算法2 (FFA)207.17−3789.0228.85171.58−3866.6024.6599.19−4116.6814.46
    $s=0,f=10$算法3 (OLS)0.23−3734.4122.600.23−3815.2319.050.23−4072.6011.39
    $s=13,f=0$算法1 (FA)779.07−3617.3433.82562.08−3732.6125.96279.78−4046.2513.46
    $s=13,f=0$算法2 (FFA)331.09−3616.6433.72247.17−3731.4926.16121.48−4045.9213.46
    $s=3,f=10$算法4 (HFA)123.49−3564.7225.9492.44−3678.2720.2348.63−4002.8110.52
    下载: 导出CSV 
    | 显示表格

    第三个人造数据集的$ m $$ n $$ F $$ S $$ h $$ {\boldsymbol{\varSigma}}_2 $都和第二个人造数据集相同, $ {\boldsymbol{\varSigma}}_1 $的对角元被设置为$ [5,5,5,3,3,3,3,1,1,1] $, 被用来模拟真实数据中基本面因子重要性高低不同的情况, 代表部分基本面因子的重要性高于统计学因子, 而另一部分的重要性则弱于统计学因子. 第三个人造数据集用于测试算法6能否挑选出重要性更高的基本面因子来生成更准确的风险模型矩阵. 算法6设置衰减率$ r = 0.7 $, 从时刻4000到时刻4100累积对数似然估计向量$ {\boldsymbol{v}} $, 并记录从时刻4100到时刻4200的预测结果. 其余算法设置时刻4100到时刻4200为测试时段. 算法1、算法2、算法3和算法6在总因子数目为10的结果以及算法1、算法2、算法4和算法6在总因子数目为13的结果都被记录在表3中, 其中算法3、算法4和算法6都使用整个基本面因子暴露矩阵作为输入.

    表 3  算法1、算法2、算法3、算法4及算法6在第三个人造数据集上的实验结果
    Table 3  Results on third synthetic dataset of Alg.1, Alg.2, Alg.3, Alg.4 and Alg.6
    因子数算法$\delta=3$$\delta=5$$\delta=10$
    时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$
    $s=10,f=0$算法1 (FA)693.57−3594.5126.64507.47−3709.9420.81263.41−4019.6710.86
    $s=10,f=0$算法2 (FFA)290.06−3593.8426.97215.58−3703.3921.36105.50−4019.9310.88
    $s=0,f= 10$算法3 (OLS)0.24−3712.7522.240.25−3796.1918.780.24−4059.7111.19
    $s+f=10$算法6 (HFA+)1726.79−3561.0425.261307.14−3683.0020.75596.52−4005.3411.34
    $s=13,f=0$算法1 (FA)845.15−3389.0030.54721.67−3550.6521.55312.41−3955.4710.07
    $s=13,f=0$算法2 (FFA)351.61−3389.8230.89304.29−3549.5321.45123.93−3955.4710.07
    $s=3,f=10$算法4 (HFA)111.30−3536.5228.3981.30−3661.6322.1148.15−3993.7011.43
    $s+f=13$算法6 (HFA+)2314.11−3378.8632.361826.26−3522.2321.72796.98−3933.0810.42
    下载: 导出CSV 
    | 显示表格

    表3中因子数$ s+f = 10,13 $表示限定算法6的总因子数目为10和13, 但具体选择基本面因子与统计学因子数目在每个时刻是不固定的, 以$ \delta = 10 $为例, 算法6在总因子数为10时平均使用约5.39个基本面因子和4.61个统计学因子, 而当总因子数目为13时平均使用约5.79个基本面因子和7.21个统计学因子. 表3的结果表现出无论在总因子数目为10还是13的情况下, 算法6对数似然估计值均值都大于其他算法, 同时由于$ n $与总因子数目的比值与第二个人造数据集接近, 算法2相对算法1的加速比与第二个人造数据集实验结果相似. 从表3中可以看出, 当基本面因子未经过挑选时, 即直接使用算法3和算法4生成风险模型进行预测, 其表现在相同总因子数目的算法中最差, 甚至不如算法1、2代表的统计学因子分析, 这意味着基本面因子需要经过适当的挑选才能生成更好的风险模型. 当总因子数目为10时, 算法6的表现在$ \delta = 3 $上最好, 其对数自然估计均值达到−3561.04, 比算法1的−3594.51大33.47, 同时算法6与算法1的标准差基本相同; 当总因子数目为13时, 算法6在$ \delta = 5 $时表现最好, 其对数自然估计值达到−3522.23, 比算法1的−3550.65大28.42, 同时算法6与算法1的标准差基本相同. 这些结果都显示出算法6要显著地比算法1表现好. 尽管算法6的运行时间比算法1略长, 增长的运行时间仍旧在可接受的范围之内, 表示算法6能够和算法1在相同的时间间隔上生成更优的风险模型.

    真实数据集挑选了中国股票作为资产. 由于股市的历史数据影响深远, 因此设置半衰期$ h = 200 $. 在实验中挑选了22个包含了市值、市盈率、流动比率等的基本面因子, 设置2010年1月3日为第一天, 且随机挑选了194支股票价格信息及基本面信息相对完整的股票. 算法6从第900天到第1300天累积对数似然估计向量$ {\boldsymbol{v}} $, 同时算法1、算法2和算法6第1300天到1500天总因子数目为15的风险模型预测结果被记录在表4中, 同时加入了使用全部22个基本面因子的算法3作为基本面模型预测结果对比, 此时算法3和算法6都使用所有22个基本面因子的暴露矩阵作为输入. 同时表4中记录了算法6在不同衰减系数$ r $下的实验结果. 图1为算法1、算法3与算法6在$ r = 0.9 $时前30天的对数似然估计值.

    表 4  算法1、算法2、算法3和算法6在真实数据集上的实验结果比较
    Table 4  Results on real-world dataset of Alg.1, Alg.2, Alg.3 and Alg.6
    因子数算法$r$时间 (s)$ {\rm E}\,({LL})$$\sigma\,( {\rm E})$$ {\rm E}\,(LL_{Alg.6} - LL_{Alg.2})$$\sigma( {\rm E}\,(LL_{Alg.6} - LL_{Alg.2}))$
    $s=15, f=0$算法1 (FA)1.617.569.06
    $s=15, f=0$算法2 (FFA)0.557.549.06
    $s=0, f=22$算法3 (OLS)0.01−108.015.50
    $s+f=15$算法6 (HFA+)$0.6$10.8211.968.184.401.64
    $0.7$10.9011.868.204.291.61
    $0.8$10.4011.778.244.211.58
    $0.9$10.5112.008.254.441.58
    下载: 导出CSV 
    | 显示表格
    图 1  算法1、算法3和算法6 $(r = 0.9)$前30天风险模型在真实数据集上预测的对数似然估计值的结果
    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个基本面因子, 剩余的为统计学因子. 图1中表现出算法6在大部分时间的预测值是要好于算法1的, 并且在表现如不算法1的时间点相差也不大; 同时图1中算法3的效果说明使用所有的基本面因子尽管在少数时间的效果要好于算法1和算法6, 但由于基本面因子没有经过挑选, 因此会出现波动巨大的情况. 表4中的结果显示出尽管算法3总因子数目最多, 但其对数似然估计值均值却远小于其他算法, 并且均值标准差大于其他算法, 显示出算法3生成了更坏而且更不稳定的风险模型; 同时算法2仍旧能比算法1有将近三倍的加速比, 且对数似然估计值均值和标准差相同. 表4$ {\rm E}(LL_{Alg.6} - LL_{Alg.2}) $表示算法6与算法2对数似然估计值差的均值, 值越大代表算法6的性能越比算法1好, 而$ \sigma( {\rm E}(LL_{Alg.6} - LL_{Alg.2})) $表示该均值的标准差, 用来显示算法6优于算法2的显著程度. 由于真实数据的对数回报数值较小, 因此最后计算出的对数似然估计值较大. 表4中的结果显示出在不同$ r $的取值下算法6的结果都要优于算法1. 不同$ r $取值的结果表现出算法6可通过调节$ r $来改善预测结果. 当$ r = 0.9 $时, 算法6拥有最大的$ {\rm E}(LL_{Alg.6} - LL_{Alg.2}) = 4.44 $$\sigma( {\rm E}(LL_{Alg.6} - $$ LL_{Alg.2}) = 1.58$, 并且算法6的$ \sigma( {\rm E}) $为8.25小于算法2的9.06, 显示出算法6显著好于算法1并且更稳定. 尽管算法6运行时间更长, 增长的时间仍在可接受范围内.

    针对金融数据中的风险模型生成问题, 本文提出了快速因子分析算法, 同时提出了结合领域知识的混合因子分析算法以及在实际应用中使用的挑选基本面因子的混合因子分析算法. 实验结果显示快速因子分析算法在人造数据集上能够达到最多31倍的加速比, 同时挑选基本面因子的混合因子分析算法在人造数据集和真实数据集上均有更好的表现, 并且运行时间的增长也在可接受范围内.

  • 图  1  算法1、算法3和算法6 $(r = 0.9)$前30天风险模型在真实数据集上预测的对数似然估计值的结果

    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

    表  1  算法1和算法2在第一个人造数据集上的实验结果

    Table  1  Results on first synthetic dataset of Alg.1 and Alg.2

    因子数算法$\delta=5$$\delta=10$
    时间 (s)${\rm E}\,(LL)$$\sigma\,({\rm E})$${\rm E}\,(iter)$加速比时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$$ {\rm E}\,(iter)$加速比
    $s=10$算法1 (FA)444.21−1927.6310.01709.02252.07−2059.106.30405.51
    $s=10$算法2 (FFA)14.05−1927.6310.01709.0131.67.80−2059.106.30405.5532.3
    $s=13$算法1 (FA)653.60−1861.0211.481019.66313.86−2027.426.29492.91
    $s=13$算法2 (FFA)20.38−1863.7311.391020.7732.19.58−2027.086.24492.7932.8
    下载: 导出CSV

    表  2  算法1、算法2、算法3和算法4在第二个人造数据集上的实验结果

    Table  2  Results on second synthetic dataset of Alg.1, Alg.2, Alg.3 and Alg.4

    因子数算法$\delta=3$$\delta=5$$\delta=10$
    时间 (s)${\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$
    $s=10,f=0$算法1 (FA)484.94−3789.0328.85389.27−3866.5924.26227.39−4116.6814.46
    $s=10,f=0$算法2 (FFA)207.17−3789.0228.85171.58−3866.6024.6599.19−4116.6814.46
    $s=0,f=10$算法3 (OLS)0.23−3734.4122.600.23−3815.2319.050.23−4072.6011.39
    $s=13,f=0$算法1 (FA)779.07−3617.3433.82562.08−3732.6125.96279.78−4046.2513.46
    $s=13,f=0$算法2 (FFA)331.09−3616.6433.72247.17−3731.4926.16121.48−4045.9213.46
    $s=3,f=10$算法4 (HFA)123.49−3564.7225.9492.44−3678.2720.2348.63−4002.8110.52
    下载: 导出CSV

    表  3  算法1、算法2、算法3、算法4及算法6在第三个人造数据集上的实验结果

    Table  3  Results on third synthetic dataset of Alg.1, Alg.2, Alg.3, Alg.4 and Alg.6

    因子数算法$\delta=3$$\delta=5$$\delta=10$
    时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$时间 (s)$ {\rm E}\,(LL)$$\sigma\,( {\rm E})$
    $s=10,f=0$算法1 (FA)693.57−3594.5126.64507.47−3709.9420.81263.41−4019.6710.86
    $s=10,f=0$算法2 (FFA)290.06−3593.8426.97215.58−3703.3921.36105.50−4019.9310.88
    $s=0,f= 10$算法3 (OLS)0.24−3712.7522.240.25−3796.1918.780.24−4059.7111.19
    $s+f=10$算法6 (HFA+)1726.79−3561.0425.261307.14−3683.0020.75596.52−4005.3411.34
    $s=13,f=0$算法1 (FA)845.15−3389.0030.54721.67−3550.6521.55312.41−3955.4710.07
    $s=13,f=0$算法2 (FFA)351.61−3389.8230.89304.29−3549.5321.45123.93−3955.4710.07
    $s=3,f=10$算法4 (HFA)111.30−3536.5228.3981.30−3661.6322.1148.15−3993.7011.43
    $s+f=13$算法6 (HFA+)2314.11−3378.8632.361826.26−3522.2321.72796.98−3933.0810.42
    下载: 导出CSV

    表  4  算法1、算法2、算法3和算法6在真实数据集上的实验结果比较

    Table  4  Results on real-world dataset of Alg.1, Alg.2, Alg.3 and Alg.6

    因子数算法$r$时间 (s)$ {\rm E}\,({LL})$$\sigma\,( {\rm E})$$ {\rm E}\,(LL_{Alg.6} - LL_{Alg.2})$$\sigma( {\rm E}\,(LL_{Alg.6} - LL_{Alg.2}))$
    $s=15, f=0$算法1 (FA)1.617.569.06
    $s=15, f=0$算法2 (FFA)0.557.549.06
    $s=0, f=22$算法3 (OLS)0.01−108.015.50
    $s+f=15$算法6 (HFA+)$0.6$10.8211.968.184.401.64
    $0.7$10.9011.868.204.291.61
    $0.8$10.4011.778.244.211.58
    $0.9$10.5112.008.254.441.58
    下载: 导出CSV
  • [1] Alexander C. Market Models: A guide to financial data analysis. John Wiley & Sons, 2001
    [2] Alexander C. Market Risk Analysis, Practical Financial Econometrics. John Wiley & Sons, 2008
    [3] MSCI Barra. Barra Risk Model Handbook. MSCI Barra Applied Research, 2007, 43
    [4] Christoffersen P, Goncalves S. Estimation Risk in Financial Risk Management. CIRANO, 2004.
    [5] Christoffersen P, Diebold F. How relevant is volatility forecasting for financial risk management? Review of Economic and Statistics, 2000, 82(1): 12-22 doi: 10.1162/003465300558597
    [6] Higgins R C, Reimers M. Analysis for Financial Management. Number 53. Irwin Chicago, 1995
    [7] Smith C W, Smithson C W, Wilford D S. Managing Financial Risk. Irein Burr Ridge, 1995
    [8] Connor G. The three types of factor models: A comparison of their explanatory power. Finanacial Analysis Journal, 1995, 51(3): 42-46 doi: 10.2469/faj.v51.n3.1904
    [9] Boyer M M, Filion D. Common and fundamental factors in stock returns of Canadian oil and gas companies. Energy Economics, 2007, 29(3): 428-453 doi: 10.1016/j.eneco.2005.12.003
    [10] Dechow P M, Hutton A P, Meubroek L, Sloan R G. Short-sellers, fundamental analysis, and stock returns. Journal of financial Economics, 2001, 61(1): 71-106
    [11] Doshi-Velez F, Kim B. Towards a Rigorous science of interpretable machine learning. arXiv preprint arXiv: 1702.08608, 2017
    [12] Molnar C. Interpretable Machine Learning: A guide for making black box models explainable [Online]. available: https://christophm.github.io/interpretable-ml-book, 2020
    [13] Goodfellow I, Bengio Y, Courville A. Deep Learning. MIT press, 2016.
    [14] Dempster A P. Maximum likelihood from incomplete data via the EM algorithm. Journal of Royal Statistical Society, 1977, 39(1): 1-38
    [15] Rubin D and Thayer D. EM algorithms for ML factor analysis Psychometrika, 1982, 47(1): 69-76 doi: 10.1007/BF02293851
    [16] Ghahramani Z, Hinton G. The EM algorithm for mixtures of factor analyzers. Technical Report CRG-TR-96-1, University of Toronto, Canada, 1996
    [17] Kaiser H. The application of electronic computers to factor analysis. Educational and Psychological Measurement, 1960, 20(1): 141-151 doi: 10.1177/001316446002000116
    [18] Roweis S, Ghahramani Z. A unifying review of linear Gaussian models. Nueral Computation, 1999, 11(2): 305-345 doi: 10.1162/089976699300016674
    [19] Saqib U, Gannot S, Jensen J R. Estimation of Acoustic Echoes Using Expectation-Maximization Methods. Eurasip Journal on Audio, Speech, and Music Processing, 2020, 2020(1): 1-15 doi: 10.1186/s13636-019-0169-5
    [20] Sun Z, Yang Y. An EM Approach to Non-autoregressive Conditional Sequence Generation. In: Proceedings of the 37th International Conference on Machine Learning. arXiv: 2006.16378, 2020
    [21] Nan Y, Quan Y, Jim H. Variational-EM-Based Deep Learning for Noise-Blind Image Deblurring. In: Proceedings of the 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition, 2020: 3626−3635
    [22] 席燕辉, 彭辉, 莫红. 基于EM-EKF算法的RBF-AR模型参数估计. 自动化学报, 2017, 43(9): 1636-1643. doi: 10.16383/j.aas.2017.e160216

    Yanhui Xi, Hui Peng, Hong Mo. Parameter Estimation of RBF-AR Model Based on the EM-EKF Algorithm. Acta Automatica Sinica, 2017, 43(9): 1636-1643. doi: 10.16383/j.aas.2017.e160216
    [23] 马新科, 杨扬, 杨昆, 罗毅. 基于模糊形状上下文与局部向量相似性约束的配准算法. 自动化学报, 2020, 46(2): 342-357. doi: 10.16383/j.aas.c180118

    MA Xin-Ke, YANG Yang, YANG Kun, LUO Yi. Registration Algorithm Based on Fuzzy Shape Context and Local Vector Similarity Constraint. Acta Automatica Sinica, 2020, 46(2): 342-357. doi: 10.16383/j.aas.c180118
    [24] 姚红革, 董泽浩, 喻钧, 白小军. 深度EM胶囊网络全重叠手写数字识别与分离. 自动化学报, DOI: 10.16383/j.aas.c190849

    Yao Hong-Ge, Dong Ze-Hao, Yu Jun, Bai Xiao-Jun. Fully overlapped handwritten number recognition and separation based on deep EM capsule network. Acta Automatica Sinica, DOI: 10.16383/j.aas.c190849
    [25] Thomposon B. Exploratory and confirmatory factor analysis: Under concepts and applications. American Psycholohical Association, 2004
    [26] 郭武, 李轶杰, 戴礼荣, 王仁华. 说话人识别中的因子分析以及空间拼接. 自动化学报, 2009, 35(9): 1193-1198. doi: 10.3724/SP.J.1004.2009.01193

    Guo Wu, Li Yi-Jie, Dai Li-Rong, Wang Ren-Hua. Factor Analysis and Space Assembling in Speaker Recognition. Acta Automatica Sinica, 2009, 35(9): 1193-1198. doi: 10.3724/SP.J.1004.2009.01193
    [27] Gonzalez J A, et al. A silent speech system based on permanent magnet articulography and direct synthesis. Computer Speech & Language, 2016, 39: 67-87
    [28] Li Y, Dixit M, Vasconcelos N. Deep scene image classification with the MFAFVNet. In: Proceedings of the 2017 IEEE International Conference on Computer Vision, 2017: 5746−5754
    [29] Kesteren E van, Kievit R A. Exploratory Factor Analysis with Structured Residuals for Brain Network Data. Network Neuroscience, 2020: 1-45
  • 期刊类型引用(0)

    其他类型引用(3)

  • 加载中
图(1) / 表(4)
计量
  • 文章访问数:  1672
  • HTML全文浏览量:  378
  • PDF下载量:  177
  • 被引次数: 3
出版历程
  • 收稿日期:  2020-05-22
  • 录用日期:  2020-12-31
  • 网络出版日期:  2021-02-04
  • 刊出日期:  2022-01-25

目录

/

返回文章
返回