淘金『因子日历』:因子筛选与机器学习

2023-05-26 0 592

原副标题:掘金『胺基酸书签』:胺基酸甄选与机器学习

定量股权投资、套期保值公募基金、Fintech、人工智慧、大统计数据应用领域的非主流自新闻媒体公募公募基金、私募公募基金、公募基金公司、期货市场、商业银行、保险业务、院校等金融行业30W+年被百度云+街道社区评选活动为“本年度最差译者”。

这就教你怎样或者说采用胺基酸统计数据!

出他们的网红大IP胺基酸书签

淘金『因子日历』:因子筛选与机器学习

2024年《胺基酸书签》已赶及撰写中~

QIML始终在想, 除书签这类外还能改爸爸妈妈增添点甚么?

因而,他们花了一个多月天数对大部份胺基酸展开了Cadours,与此同时紧密结合原有统计数据得出了250+个可对外计算的胺基酸。如此,让书签和统计数据紧密结合在一起,成为一个更加实用的学习工具!

淘金『因子日历』:因子筛选与机器学习

那么今天,QIML会给大家一系列教程,为购买胺基酸书签的读者介绍怎样采用定量手段来挖掘和分析胺基酸!

话不多说,好好看看今天分享的这篇文章吧!

胺基酸书签统计数据下载

如需下载胺基酸书签提供的统计数据, 请大家在

操作方式如下:

淘金『因子日历』:因子筛选与机器学习

核心观点

1、胺基酸甄选应与所用模型相匹配,若是线性胺基酸模型,只需选用能评估胺基酸与收益间线性关系的指标,如IC、Rank IC;若是机器学习类的非线性模型,最好选用能进一步评估非线性关系的指标,如 Chi-square 及 Carmers V 等;

2、本文主要测试了机器学习类的非线性模型所需的胺基酸甄选指标,推荐采用 CramerV 和互信息,它们都能捕捉非线性关系;虽然胺基酸和收益都是连续型变量,但也可以将它们离散化后再做测试,特别是胺基酸尾部统计数据与收益的关系,极端统计数据往往有更强的预测能力。

前言

在传统的多胺基酸模型体系下,已经有一套相对成熟的胺基酸检验和胺基酸甄选流程,胺基酸检验大多涉及胺基酸的 IC 分析、收益率分析、换手率分析、板块分析等多个方面,是对单个胺基酸做检验,判断其是否对收益有显著影响;胺基酸甄选主要有逐步回归、主成分分析 PCA 等方法,是对批量胺基酸做甄选,剔除冗余胺基酸,降低胺基酸间的相关性,胺基酸检验得到的胺基酸有效性程度也可以作为胺基酸甄选的评价指标,用于剔除低效胺基酸。而本文主要是站在机器学习视角介绍相关的胺基酸甄选方法,即特征甄选方法,机器学习下的胺基酸甄选主要是为了模型能有更好的预测效果、更强的泛化能力,其中也会涉及相应的评价指标和甄选规则,但指标和规则不再局限于简单的线性相关性和线性回归,也涵盖了很多非线性关系的考察。

在机器学习视角下,根据是否考虑胺基酸间的冗余信息 redundancy 或是多重共线性的影响 substitution effects,可以将胺基酸甄选分为单胺基酸甄选和多胺基酸甄选,单胺基酸甄选通常是对单个胺基酸做独立评价,然后再基于甄选规则选出排名靠前的部分胺基酸,选出的胺基酸集可能存在冗余信息;多胺基酸甄选通常是逐个比较新胺基酸在已选胺基酸基础上增添的“增强”作用来决定该胺基酸的去留,选出的胺基酸集是对收益有最强解释力且胺基酸间不相关的胺基酸,传统的胺基酸甄选多属于这类。

下文先重点介绍单胺基酸甄选常用的评价指标,了解胺基酸书签中的胺基酸在这些评价指标上的排名情况,单胺基酸甄选的甄选规则通常选的过滤法,即甄选出排名靠前的部分胺基酸,本文就不再赘述。选用的评价指标有:方差、信息熵、F统计量、卡方检验、互信息,其中前两个指标在计算时不考虑收益 y 的信息,可称为非监督型评价指标,其余指标在计算时与此同时考虑了收益 y 的信息,可称为监督型评价指标。

淘金『因子日历』:因子筛选与机器学习

测试说明

▪ A 股范围:中证全指成分股;

▪ 胺基酸预处理:MAD 异常值处理、金融行业中位数缺失值填充、市值金融行业中心化处理、标准化处理;前 3 步处理都在横截面上操作,第 4 步标准化处理可展开横截面或跨横截面操作;

▪ 测试频率:月频,特征为胺基酸值,标签为股票下个月收益率;

▪ 有 2 种滚动测试的样本划分:① 横截面测试:以每个月末 t 横截面对应的行统计数据为样本,展开滚动测试;② 跨横截面测试:模拟模型滚动训练时天数窗的划分,在每个月末 t ,回溯过去 24 个月(包含当前月),以这个天数区间上的行统计数据为样本,展开滚动测试;

▪ 胺基酸预处理:提前剔除缺失率高的胺基酸,最终参与测试的胺基酸数为 232 个。

非监督型评价指标

非监督型评价指标只计算单个胺基酸 x 自身的统计指标来用于胺基酸甄选,不涉及标签 y 的信息,是对胺基酸自身情况的评价,常用的统计指标有:缺失率、方差、信息熵等,下文重点介绍方差、信息熵。

方差

方差衡量了变量的离散程度。如果某个胺基酸的方差很小,说明该胺基酸在大部份样本上的取值都趋于相同,对样本没有区分度,对模型来说用处不大。计算方差时,胺基酸预处理不做标准化处理,但会做归一化处理。

对比大类胺基酸的平均方差情况,排名靠前的有估值胺基酸>无形资产胺基酸>规模胺基酸>流动性胺基酸,而且这些类胺基酸(特别是规模胺基酸)跨横截面后方差有些许降低(胺基酸取值波动反而变小了);常用的动量胺基酸的方差排名相对靠后;波动型技术指标的方差受天数维度的影响较大,跨横截面后该类胺基酸取值波动变得更大了。

淘金『因子日历』:因子筛选与机器学习

紧密结合下面几幅图可知各大类胺基酸中方差排名最靠前和排名最靠后的具体胺基酸以及它们在分布图中的大致位置(最顶端的点和最底端的点),大部份胺基酸过去大部份横截面的平均方差都在 0.025 以上。

淘金『因子日历』:因子筛选与机器学习

淘金『因子日历』:因子筛选与机器学习

淘金『因子日历』:因子筛选与机器学习

淘金『因子日历』:因子筛选与机器学习

信息熵

信息熵衡量了变量所包含的平均信息量。可以用信息熵来衡量胺基酸取值的混乱程度(反过来说是“纯度”),如果某个胺基酸的信息熵很高,说明该胺基酸取值相对混乱和丰富,不确定性高,而不是偏向于单一取值,能为模型提供的信息也多。在计算单个胺基酸的信息熵时,先将胺基酸按取值范围的 10% 分位间隔展开离散化处理,分为 10 组,各组内的频数不等,再基于如下公式计算信息熵,其中p(xi)为各组内的频率:

对比大类胺基酸的平均信息熵情况,排名靠前的有规模胺基酸>财务质量胺基酸-改进>成长胺基酸>股权投资胺基酸>流动性胺基酸等,但各大类胺基酸间的信息熵差距并不是很大。值得注意的是,大部份大类胺基酸的信息熵在跨横截面后都有所下降(占比小于0.5)。

淘金『因子日历』:因子筛选与机器学习

紧密结合下面几幅图可知各大类胺基酸中信息熵排名最靠前和排名最靠后的具体胺基酸以及它们在分布图中的大致位置(最顶端的点和最底端的点)。当大部份组内频数都一致,即p(xi)=0.1时,信息熵达到最大,取值约为 3.32,对数市值、营业利润相关胺基酸的取值都接近该水平。

淘金『因子日历』:因子筛选与机器学习

淘金『因子日历』:因子筛选与机器学习

淘金『因子日历』:因子筛选与机器学习

淘金『因子日历』:因子筛选与机器学习

信息熵示例代码

def_entropy(x, bins=None):

“””

calculate Shanon Entropy

“””

N = len(x)

x_ = x[~np.isnan(x)] # drop nan

iflen(x_)< 1:

returnnp.nan

ifbins isNone:

_,counts = np.unique(x_, return_counts= True)

else:

counts = np.histogram(x_, bins=bins)[0]

prob = counts[np.nonzero(counts)] / N

en = -np.sum(prob * np.log2(prob))

returnen

监督型评价指标

计算监督型评价指标时除考虑胺基酸 x 的信息外,还会与此同时考虑收益 y 的信息,是对胺基酸与收益间关系的评价,常用的统计指标有 F 统计量、Cramer V值、互信息等,测试用的收益 y 为股票未来一个月的收益率。

F统计量

此处的 F 统计量通过对单个胺基酸 x 与收益 y 展开一元线性回归得到,具体调用的 sklearn 中的 f_regression,该方法采用如下公式计算 x 与 y 之间的回归系数:E[(X[:, i] – mean(X[:, i])) * (y – mean(y))] / (std(X[:, i]) * std(y)),该公式本质上就是计算的 x 与 y 的 pearson 相关系数(也就是胺基酸 IC 值),可以证明得到该相关系数的平方即为该回归方程的判定系数R^2(回归平方和与总离差平方和之比值 SSR/SST),最终的 F 统计量为:

回归中的 F 统计量通常用于检测回归方程整体的显著性,由于单变量回归只涉及一个回归系数,此时的 F 统计量衡量了胺基酸 x 和收益 y 的关联程度,F 值越高,关联性越强,对应的 p 值可用于判定胺基酸 x 和收益 y 的关系是否显著。为了消除不同横截面样本量的影响,下图中的 F 统计量都是经过归一化后的值。

对比大类胺基酸的平均 F 统计量情况,排名靠前的是规模胺基酸>无形资产胺基酸>股权投资胺基酸>杠杆胺基酸,常用的动量胺基酸排名最后,估值胺基酸也排名较后;基本上大部份的大类胺基酸在跨横截面后 F 统计量都有所提升(可能受样本量影响),但排名头部的大类胺基酸提升的可能性相对更低些。在看 P 值显著占比情况,排名靠前的是规模胺基酸>流动性胺基酸>来自量价的技术胺基酸、动量胺基酸、波动率胺基酸等,前面 F 值高的胺基酸反倒排名靠后了,说明这些胺基酸在不同横截面上的表现不是很稳定,有些时点上表现很突出,但大多数天数表现并不理想。

紧密结合下面几幅图可知各大类胺基酸中 F 统计量排名最靠前和排名最靠后的具体胺基酸以及它们在分布图中的大致位置(最顶端的点和最底端的点)。与大类胺基酸一致,就 F 值来看,排名靠前的胺基酸中,基本面胺基酸居多,排名靠后的胺基酸中,量价胺基酸居多,但量价胺基酸在时序上表现的更稳定。

卡方检验

此处的卡方检验指的是 Pearsons chi squared test,它借助列联表来判断两个分类变量是否独立,所以若想用卡方检验来做胺基酸甄选,需要对胺基酸 x 和收益 y 做离散化处理,对于胺基酸 x 的离散化有 2 种方式:① 离散化为 N 类:利用 qcut 等分为 N 组,组内样本量相等;② 离散化为 2 类:只取胺基酸值排名靠前的 n% 样本作为一组和排名靠后的 n% 样本作为一组,剔除掉中间的那部分样本,只保留尾部 tail;对于收益 y 的离散化有 2 种方式:① 离散化为 N 类:利用 qcut 等分为 N 组,组内样本量相等;② 离散化为 2 类:将收益大于等于 0 的为一组,收益小于 0 的为一组。若 x 的划分选用的方式 ②,则保留相应的 y ,但 y 的分类是基于全样本确定的。对于评价指标,可以选用 CramerV 和 p 值:

, 为实际观测数、 为期望观测数。

, 和 为列联表的行数和列数, 为样本量。

在甄选胺基酸时,一般用 CramerV ,其取值为 0-1,取值越高,关联性越强,更方便做比较。相比回归的 F 统计值,CramerV 能衡量胺基酸 x 与收益 y 的非线性关系,而且胺基酸 x 的尾部划分,能进一步知道胺基酸的极端取值与收益的关系,而胺基酸对收益的预测能力往往依赖于极端值。

卡方检验 示例代码

defchi2(x, y, x_bin= 0.1, y_bin=3) -> tuple:

Chi-square test of independence between x and y

x_bin: int -> use all cases and split equally; 0<float<=0.5 -> use tails only and get two bins

y_bin: int -> split equally; zero -> split at zero and get only two bins (win and lose), y=0 belong to win

return:tuple (chi_square, p_value, contingency coefficient, cramerv)

x,y = discretization_processing(x, y, x_bin, y_bin)

# get chi2

arr = pd.crosstab(index=x, columns=y).sort_index.to_numpy

chi2_stat = chi2_contingency(arr, correction= True, lambda_=None)

chi2 = chi2_stat[ 0]

phi2 = chi2 / arr.sum

n_rows, n_cols = arr.shape

cramer = np.sqrt(phi2 / min(n_cols –1, n_rows – 1))

contingency = np.sqrt(chi2 / (chi2+arr.sum))

return(chi2,chi2_stat[ 1],contingency,cramer)

下图测试,胺基酸 x 离散化采用方式②,阈值取0.1,收益 y 离散化采用方式①,阈值取 3,更多的是测试胺基酸极端值的表现;对比大类胺基酸的平均 CramerV 统计量情况,排名靠前的有:规模胺基酸>流动性胺基酸>来自量价的技术胺基酸、波动率胺基酸、动量胺基酸等,量价胺基酸普遍优于基本面胺基酸,与前面 F 统计量的 p 值占比相对一致;紧密结合卡方检验的 p 值显著性占比情况,与 CramerV 统计量的排名也是保持一致的。对比跨横截面的结果,大部份大类胺基酸在跨横截面后 CramerV 值都有所降低,但显著天数点占比有所提高,这可能是受样本量的影响。对比 F 统计量,CramerV 得出的结果更一致,更稳定,而且还能捕捉非线性关系。

紧密结合下面几幅图可知各大类胺基酸中 CramerV 统计量排名最靠前和排名最靠后的具体胺基酸以及它们在分布图中的大致位置(最顶端的点和最底端的点)。排名靠前胺基酸中,量价胺基酸居多,排名靠后胺基酸中,基本面胺基酸居多。

下图还进一步对比了胺基酸 x 的 2 种离散化方式下大类胺基酸 CramerV 均值分布情况(胺基酸 x 采用 3 等均分 equal 和保留 10% 的尾部 tail,收益 y 同上,采用 3 等均分),极端值下胺基酸与收益的关联关系相对更高,这个现象在财务质量胺基酸上的表现相对要弱些。

互信息

互信息是从信息熵的角度考察变量间的关系,即收益 y 在给定胺基酸 x 信息的情况下减少的不确定性,互信息越高,胺基酸 x 增添的关于收益 y 的信息越多,越有助于减少收益 y 的不确定性,收益 y 对胺基酸 x 的依赖程性也越高,也能捕捉变量间的非线性关系。决策树中用于判断分支节点的信息增益(公式2)本质上和互信息(公式1)是一致的。sklearn 在特征选择模块中提供了 2 中计算互信息的方法,mutual_info_classif (即mutual_info_score)适用于离散目标变量,mutual_info_regression 适用于连续目标变量。

不对胺基酸和收益做离散化处理

下图测试结果调用 mutual_info_regression 计算互信息,大类胺基酸中,互信息排名靠前的有:流动性胺基酸>规模胺基酸>来自量价的技术胺基酸、波动率胺基酸、动量胺基酸等,也是量价胺基酸表现优于基本面胺基酸,跨横截面后互信息也都有所降低,整体上与卡方检验的结果较为一致。

紧密结合下面几幅图可知各大类胺基酸中互信息排名最靠前和排名最靠后的具体胺基酸以及它们在分布图中的大致位置(最顶端的点和最底端的点)。排名靠前胺基酸中,量价胺基酸居多,比如 Amihud 非流动性胺基酸、总波动率胺基酸、各类换手率胺基酸等;排名靠后胺基酸中,基本面胺基酸居多,如各类财务质量胺基酸。

对胺基酸和收益做离散化处理

下图测试结果调用 mutual_info_score 计算互信息,在测试前对胺基酸和收益做了离散化操作(胺基酸 x 离散化采用方式 ②,阈值取0.1,收益 y 离散化采用方式 ①,阈值取 3),重点评价极端值的表现。大类胺基酸排序有些许变化,但整体上也是呈现“量价胺基酸表现优于基本面胺基酸,跨横截面后互信息也都有所降低”的规律。对比连续值下的互信息,极端值下互信息头尾差异较大,规模胺基酸、流动性胺基酸极端值的作用比基本面胺基酸高很多。

极端值下,互信息最高的是市值调整的换手率,其次是 Amihud 非流动性胺基酸,然后是一些规模因子,规模胺基酸极端值的作用整体上要强于流动性胺基酸。

胺基酸x和收益y离散化示例代码

defdiscretization_processing(x, y, x_bin= 0.1, y_bin= 3) -> tuple:

x_bin: int -> use all cases and split equally; 0<float<=0.5 -> use tails only and get two bins; None -> raw x

y_bin: int -> split equally; zero -> split at zero and get only two bins (win and lose), y=0 belong to win; None -> raw y

return:tuple (discretized feature, discretized target)

# cut target y

ifisinstance(y_bin, int):

y = pd.qcut(y, q=y_bin, duplicates= drop)

elify_bin== zero:

y = np.where(y>= 0, 1,0)

elify_bin isNone:

y = y

else:

raiseValueError( “y_bin must be int or zero or None !”)

# cut predictor x

ifisinstance(x_bin, float) & (x_bin<= 0.5) & (x_bin> 0):

x_bin_ = int( 1/x_bin)

x = pd.qcut(x, q=x_bin_, duplicates=drop)

elifisinstance(x_bin, int):

x = pd.qcut(x, q=x_bin, duplicates= drop)

elifx_bin isNone:

x = x

else:

raiseValueError( “x_bin must be fraction in (0,0.5] or int or None !”)

# only get tail

ifisinstance(x_bin, float):

un = np.unique(x)

id = np.where((x==un[ 0])|(x==un[ -1]))[ 0]

x = x[id]

y = y[id]

return(x,y)

总结

本文对胺基酸书签计算了多个可用于胺基酸甄选的评价指标。但总体上,胺基酸甄选的指标要与模型的选择保持一致,具体来说:

1、如果是线性的胺基酸模型,那么胺基酸评价的指标只需要能够评估胺基酸与收益率之间的线性关系即可,如 IC 或 Rank IC;

2、如果是机器学习的非线性模型,那么胺基酸评价的指标不仅要能反映胺基酸与收益的线性关系还要反映非线性关系,如 Chi-square 及 Carmers V 等。

后面他们会将本文介绍的胺基酸甄选指标与机器学习模型紧密结合采用,测试胺基酸甄选对模型效果的提升作用。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务