金融时序数据因子筛选篇--统计分析(附代码)

论坛 期权论坛 期权     
期权匿名问答   2022-4-22 04:12   12054   0
第一次处理时序数据,经验+1,嘿嘿~
目标
对06~21年股票数据(时间序列数据)进行建模,预测收益率。
数据情况
由股票宏观因子(x们)和国债收益情况(y们)组成。
步骤
①选择变量(选择进入模型的特征,任何一个特征的变化如入选和处理方式都会对结果有影响)、②选择模型、③策略回测。
整体方法描述
第一步为数据处理,因为时序数据的噪声多比较杂乱(波动大,机器不宜学习到规律),所以使用了差分滞后的处理,使数据的波动幅度变平缓;对缺失值做向前填充及对齐处理。
第二步就是选择要进入模型的因子,差分后的因子共有125个,但并不是全部的因子都适合放入模型,不相干的因子反而会干扰预测结果,原理类似特征处理,所以对宏观变量的因子使用假设检验其显著性保留相关性低(为了不选冗余因子)但是对目标y显著性高的变量;本篇详细介绍这部分(附代码)。
第三步就是将选好的因子放入模型,从准确率可解释性来选择模型,再对选好的模型进行调参,我们分别尝试了分类和回归模型。有一点需要注意的是分类模型和回归模型的因子筛选方式是不同的,分类模型使用分类方法筛选如逻辑回归,回归模型使用线性回归进行筛选;下篇详细介绍这部分(附代码)。
最后使用不同策略进行回测查看年度收益情况。
本篇目录

  • 筛选进入回归模型的因子
  • 筛选进入分类模型的因子
注:使用训练集
宏观因子筛选

常用回归分析模型做筛选方法——分析自变量和因变量的的关系。如线性回归、多项式回归、逐步回归、岭回归、 套索回归、Elastic Net(弹性网)回归 [1]。
回归分析显著性检验:x或x们与y是否有线性关系(多元线性需考虑多重共线性问题)以及x能在多大程度上影响y
python包:statsmodels: 一个用于统计计算的python包
检验:

平稳性检验——adf test:

差分后的因子的第一步就是平稳性检验,我们需要知道哪些因子对未来的趋势有可预测性,波动过大的因子被认为不具备代表性。ADF检验,通过时间序列中是否存在单位根,判断差分后的序列是否平稳。
DF检验应用于一阶情况,当序列存在高阶的滞后相关时,则使用ADF检验
判断标准:p小于0.05(95%置信区间下adf检验的值), 则拒绝时序存在单位根的原假设(原假设时序存在单位根,是非平稳的)。


正态分布检验:

因子筛选的方差分析需要因子符合正态分布且样本间相互独立。
stats.kstest(temp['y'],'norm',(u,std))
回归因子筛选:

使用一元线性回归(广义最小二乘)和中位数回归检验变量与因变量之间的关系和这种关系的强弱(回归系数的显著性)。
被选中的平稳的因子们,就要开始接受显著性检验的筛选啦~
最小二乘法(一元线性回归):

原理:
求得线性回归模型残差平方和最小时的参数估计量(我理解为类似求最小化损失函数)
公式:
        y = β0 + β1 * x + ε (参数分别为截距,回归系数,误差项)
判断标准:
        检验回归方程的显著性:f检验
        检验自变量与因变量的显著性:回归系数的显著性检验(t检验);
一元为x和y的线性关系,多元为x们与y的线性关系。此处使用一元线性回归所以f检验和t检验结果相同
假设:(我理解为类似反证法,有罪推论不够严谨)
        H0: β1=0, 即线性关系不显著(或不是线性相关)
        H1:β1 ! = 0, 即x与y线性相关,x对y有显著影响
解释:β1=0时,依据公式y与这个x无关,这个x当然无法影响y,故不显著(无关)。
检验:
下面可以选择检验假设的指标了,根据阈值留下可以推翻H0的x们。这里选了f值(一元线性f检验等同于t检验)。
t检验:
p值(也就是P>|t| ):
代表了按照正态分布的每一个因子的coef的分布概率,正态分布中的区间概率【黄】,与显著性水平(一般是小于0.05的概率区间【蓝】)相比,小于P0.05说明发生概率极低,可以极显著的认为H0错了,我们要的正是拒绝H0的因子们,所以我们选中这些因子进入模型。


广义最小二乘python代码实现



注:gls比ols步骤多一步,需先拟合ols

结果分析:



显著性水平取0.05,p<0.05时,认为可以较有力拒绝原假设,图中变量的f检验的值显然证明变量对y的显著性很高

左:响应变量,模型名称,计算参数的方法,日期,时间,样本量,残差自由度,模型自由度。 右:依次为R方,调整后的R方,f统计量,f统计量的p值,似然函数的log值,AIC和BIC为信息指标。 下方:【const为截距项,x1为变量】coef为回归系数,std err为相关系数的均方误差,t为t检验的值,P>|t|为t检验的p值,[0.025,0.975]为置信区间的最低和最高值。[1]
ols需要满足五个假设,所以不仅需要关注f检验,还需要计算残差。
ols假设:
自变量(X)和因变量(y)线性相关
自变量(X)之间相互独立
误差项(ε)之间相互独立
误差项(ε)为正态分布,期望为0,方差相同
自变量(X)和误差项(ε )之间相互独立
广义最小二乘消除了同方差的假设,所以仅关注f检验即可
中位数回归:

中位数不像最小二乘基于均值回归,而是基于中位数,所以不受离群值影响。
公式



基于残差的绝对值进行回归系数的估计

python实现:



导入statsmodels.regression.quantile_regression计算拟合结果



plot

结果分析
为了查看它和最小二乘的具体对比,下图plot了其中一个特征的散点图,并添加了ols和中位数的拟合曲线。
可以看出中位数回归并不受图中离群点的影响,所以回归曲线较为平稳。


结论:

普通最小二乘和中位数都受残差假设限制,广义最小二乘突出重围。
分类因子筛选:

逻辑回归:

通过计算每个因子回归系数的p值和相关系数,对因子进行选择。
p值用来判断单个变量的系数是否显著,选择p值为0.2作为阈值筛选因子,即当因子的p值小于0.2时,认为该因子会显著影响y=1的概率;相关系数可用来参考变量与概率y=1的相关程度,相关系数越大则变量与y越相关。
公式



比线性回归多了一个sigmoid函数

python实现:


结果分析:



关注p值

方差分析:

统计每个宏观指标状态与y达到显著的次数。
具体而言则是判断宏观经济指标A在状态b下的资产C其收益率分布的均值  = 是否显著不同于资产C全样本收益率的分布的均值  。同时如果特殊状态均值大于全样本均值:  = >  ,我们称为正向关系显著,如果特殊状态均值小于全样本均值:  = <  ,我们称为负向关系显著。
python:
f, p = stats.f_oneway(d1, d)
结论

分类因子把数据处理为-1,0,1,在降噪方面更为有效。

参考文献:
《基本面量化之一:国债的重要因子》
参考


  • ^参数详细说明https://www.datarobot.com/blog/ordinary-least-squares-in-python/?redirect_source=blog.datarobot.com
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP