python 因子分析 权重计算方法_【万矿新品】因子研究利器——WindAlpha
原标题:【万矿新品】因子研究利器——WindAlpha
因子选股模型是我们在量化策略研究中使用最多的一种方法。今天,万矿重磅推出一款高效、便捷的因子分析工具——WindAlpha,让您在万矿上用于进行一站式的因子测试和研究。
WindAlpha是万矿开发的一款基于Python的因子分析函数库,它包括了:
数据获取与处理
对原始数据进行了剔除停牌、ST、新上市、缺失值处理,同时做了去极值、标准化,中性化处理。
原始数据与处理后的数据分布对比
单因子分析
对于因子分析,进行了4个维度的分析:
IC序列分析、IC衰弱
收益率分析
换手率分析
板块分析
多因子组合分析
主要的组合得分计算有以下几种方法:
等权法:该方法对所有因子同等看待,不论其有效性的优劣
IC加权:根据IC均值的大小决定因子的权重,IC高的因子,权重就大,IC的均值为滚动计算
ICIR加权:根据因子ICIR的大小决定因子的权重,ICIR越大,权重越大,ICIR的值为滚动计算
AlphaModel
AlphaModel是一个类,实例化为对象后可以一键对因子进行以上几个维度的分析,也能构建组合进行选股。具体用法请查看帮助文档。
接下来,让我们具体了解一下WindAlpha的用法吧!
数据获取与处理
在这个之前,我们需要确定选股的频率(日度还是月度?),以及在哪里选股(股票池,如沪深300),选择哪些因子。
在接下来的示例中,我们以沪深300指数成分股为股票池,每月调仓。选择因子,获取以下数据(每个月最后一个交易日):
沪深300成分股的数据
所有成分股的因子数据
所有成分股的收益率
所有成分股的市值数据
所有成分股的所属行业
策略收益比较基准的数据
先引入WindAlpha库,获取原始因子数据:
#20日收集派发指标, 净利润/营业总收入(TTM), 增长率-净利润(TTM)
ind_code = ['TECH_AD20', 'FA_ROENP_TTM', 'FA_NPGR_TTM']
raw_inds_ret = wa.prepare_raw_data('000300.SH',ind_code,
'2016-01-01', '2018-04-30')
prepare_raw_data函数用于获取原始因子数据,参数见帮助文档,该函数返回一个多重索引的Dataframe,第一层索引为日期('date'),第二层索引为股票代码('codes')。
原始因子数据处理(去极值、标准化):
对于原始数据(在获取的过程中已经去除了停牌、新上市、因子值缺失的股票),接下来我们需要做的是对每一个选股期的数据作数据处理:
process_raw_data函数用于处理原始因子数据,处理的过程包括去极值、标准化处理,去极值的主要目的是为了使因子数据在一个合理的范围之内,而不会因为某些异常值对因子的整体分布造成影响,去极值的方法一般有两种:
* 平均绝对离差法(MAD)
* 标准差法(Std)
标准化是使得横截面数据在一个固定的范围内(量纲的一致性),主要的方法有普通标准化和行业标准化,区别是因子均值的计算方法不一样,具体的区别请看代码实现。
单因子分析
WindAlpha主要对单因子进行四个维度的分析:IC分析、收益率分析、换手率分析及版块分析。
IC分析:计算每一期因子值与下一期股票收益率之间的相关性(信息系数IC),并对IC序列进行进一步分析
收益率分析:每一期对股票池内的股票按因子值由优到劣进行排序,并分为N组,对每一组的收益率进行分析
换手率分析:通过每一期买入股票的变动,评价因子的交易成本暴露
版块分析:对于所选出来的股票的行业分布进行分析
ic_analysis()-具体用法见帮助文档
IC分析在整个单因子分析的过程中起主导性作用。
IC的大小反应了因子暴露值与股票表现之间的线性关系,IC的值越大说明因子的预测性越高,选股的效果就越好。IC的计算方法主要有两种 ,但常用的更有解释性的为RankIC。
代码实现:
ic_ana = wa.ic_analysis(processed_inds_ret)
ind = "FA_ROENP_TTM"
fig_ic=WLine("IC序列:{}".format(ind),"2016.01-2018.03", ic_ana.ic_series.ix[ind])
fig_ic.plot()
知识拓展
IC信号衰减
我们经常在研报上听到这个词,那什么是IC信号衰减,怎么计算出来的呢?WindAlpha提供了这样的算法(ic_decay为每个因子12期的IC衰减)
具体的计算方法如下:
如果一共有N期的因子数据和收益率数据,我们先把所有i期因子和i+1期收益率的IC值算出来求平均,再把i期因子和i+2收益率的IC求平均....(i=1,...,N-LAG),最终我们得到LAG个IC的均值,这几个均值就体现了IC的衰减。
代码实现:
fig_decay=WBar('{} IC Decay'.format(ind), '',ic_ana.ic_decay[ind].to_frame())
fig_decay.plot()
return_analysis()-具体用法见帮助文档
收益率分析也是对因子的进一步分析,在因子通过IC分析后,我们知道了因子对于股票收益的相对关系有预测性的作用,但具体反应到收益上还得根据收益率分析的相关指标来判断。
由于运算效率的取舍问题,在因子筛选的初期,我们可以直接用每期股票的平均收益率来计算分析期间的分组累计收益率等指标,而不用写到策略中每日回测。
代码实现:
group_data_ind =
wa.add_group(processed_inds_ret,ind_name=ind, industry_neu=True)
## 根据FA_ROENP_TTM分组后的数据,按组排序
group_data_ind.groupby(level=0).apply
(lambdax: x.reset_index(level=0,drop=True).sort_values('GROUP'))
# 分组后每组收益的平均值
direction_dict = {'TECH_AD20': 'descending'}
ret_ana = wa.return_analysis(processed_inds_ret,'000300.SH',
'2016-01-01', '2018-04-30',ind_direction=direction_dict)
# 计算相关的收益率指标
ret_ana.return_stats.applymap(lambdax: round(x,4)
ifnotisinstance(x, tuple) else(round(x[0],4), round(x[1],4)))
sig_ret_line = WLine("收益率:{}".format(ind),
"2016.01-2018.03", round(ret_ana.group_cum_return
[['G01-G05','BENCH_RET']].ix[ind],4),auto_yaxis=True)
sig_ret_line.plot()
turnover_analysis()-具体用法见帮助文档
对于换手率的分析,常用的方法有两种:个数法和权重法。
所谓个数法就是计算每期之间股票变动的数量并处以股票的总数量计算出的比率,例如t期买入[A,B,C,D,E]五只股票,t+1期买入[A,D,E,F,G]五只股票,那么这期间的换手率就是(2/5=40%)。
而权重法不仅考虑股票本身的变化,还考虑了股票权重的变化。
代码实现:
turnover_ana=wa.turnover_analysis(processed_inds_ret)
fig3=WLine("换手率:TECH_AD20","2016.01-2017.12",
turnover_ana.turnover.ix["TECH_AD20"])
fig3.plot()
知识拓展
买入信号衰减与反转
在因子分析过程中,我们经常看到衰减这个词,实际上很好理解,衰减的越快持续性越差,衰减的越慢持续性越好。
买入信号反转与衰减的原理类似,唯一的区别是统计的组别不一样。当对因子进行排序后,我们默认买入的是G1组(第一组),卖出G5组(最后一组),买入信号衰减度量的是当前买入的股票在后续调仓期卖出的比率。
代码实现:
fig_signal=WBar('FA_ROENP_TTM Buy Signal Decay',
'',turnover_ana.buy_signal.ix["FA_ROENP_TTM"])
fig_signal.plot()
sector_analysis()-具体用法见帮助文档
该函数用于对处理后的因子数据进行版块分析。
代码实现:
code_ana = wa.sector_analysis(raw_inds_ret)
fig_mean_cap=WBar('FA_ROENP_TTM Mean Cap',
'',code_ana.group_cap_mean.ix['FA_ROENP_TTM'].mean().
to_frame(name='CAP'))
fig_mean_cap.plot()
code_ana.group_industry_ratio.ix['FA_NPGR_TTM'].ix['G05'].fillna(0)
data =code_ana.group_industry_ratio.ix['FA_NPGR_TTM'].ix['G01'].fillna(0)
chart = WStacking_bar(title='FA_NPGR_TTM因子选股行业占比', data=data.T, data_label=False)
chart.plot()
code_ana.group_industry_mean_ratio
ind_mean_G01=code_ana.group_industry_mean_ratio.ix['FA_NPGR_TTM']['G01']
ind_mean_G01 = pd.DataFrame({'name':ind_mean_G01.index, 'value': ind_mean_G01.values})
fig5 = WPie('G01 Section Percent', '', ind_mean_G01)
fig5.plot()
多因子组合分析
打分法函数 score_indicators()
返回数据会合并各因子列并新增‘SCORE’列为打分结果:
回归法函数 regress_indicators()
返回数据会合并各因子列并新增‘PRED_RET’列为下期收益率预测:
—end—
责任编辑:
python 因子分析 权重计算方法_【万矿新品】因子研究利器——WindAlpha相关推荐
- python 因子分析 权重计算方法_因子得分如何计算_spss如何计算因子得分
因子得分如何计算 各个因子得分是如何计算的?是旋转后的各个因子载荷矩阵中的因子系数*相应的各个指标标准后数据? 解答:因子得分=因子得分系数(因子得分系数矩阵里相应的值)*标准化转化后的数据 再问如何 ...
- 周长相等的正方形面积一定相等_万萍:画图研究图形与几何问题—怎样围面积更大(四下)...
点击蓝字 关注我们 <画图研究图形与几何问题-怎样围面积更大>教学设计 内江市市中区教师进修校 万萍 一.教学目标: 1.加深对长方形(包括正方形)周长.面积概念的理解,巩固长方形 ...
- python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...
算法 数据结构 机器学习笔记--模型调参利器 GridSearchCV(网格搜索)参数的说明 GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个 ...
- python音频颤音算法_数字音效算法的研究与实现
摘要: 随着科技的发展,数字信号处理器DSP(Digital Signal Processor)被广泛的应用在各种电子产品中,从便携的个人数字助手PDA(Personal Digital Assist ...
- 小学生学python到底能干什么-小学生都学Python了,你还没用万矿?
2 不止步于策略回测,还提供各种量化分析工具和实用模板 3 交互式可视化库,要多炫酷有多炫酷 4 丰富的机器学习和人工智能框架,方便进行前沿投资技术研究 Hold 住~ 前方高能! 1 强大数据接口+ ...
- python权重是什么意思_在python带权重的列表中随机取值的方法
1 random.choice python random模块的choice方法随机选择某个元素 foo = ['a', 'b', 'c', 'd', 'e'] from random import ...
- python 因子分析_因子分析在python上的实现
因子分析(Factor Analysis)是指研究从变量群中提取共性因子的统计技术,这里的共性因子指的是不同变量之间内在的隐藏因子.例如,一个学生的数学.物理.化学成绩都很好,那么潜在的共性因子可能是 ...
- spss可以关键词词频分析吗_综合词位置因素和词频因素的文本关键词权重计算方法与流程...
本发明涉及一种综合词位置因素和词频因素的文本关键词权重计算方法,具体是涉及采用调和级数综合词位置因素和词频因素对词的权重进行计算,提高标题及首尾两段的词的权重,并且使得每个词随着词频增加,该词出现位置 ...
- python金融量化风险_【手把手教你】Python量化策略风险指标
如何衡量一个量化策略的好坏?一是比较稳定的收益,二是有严谨的回测,三是有清晰的逻辑.--刘富兵 引言 尽管过去不能代表未来,通过历史回测来评估量化策略仍然是量化投资非常重要的一环.量化回测过程中常用到 ...
最新文章
- 活久见!如何看待北京理工大学某硕士生被指几乎一字不差地抄袭论文?
- linux的rt补丁安装,微软发布补丁封杀允许Surface RT安装Linux的“漏洞”
- 一键提升多媒体内容质量:漫谈图像超分辨率技术
- 计算机学校招生分数线,重庆工商计算机学校2020年招生录取分数线
- (25)Verilog HDL循环语句:forever
- CentOS7 按nodejs和npm的方法
- Vsphere auto deploy 简介
- python字典元素的值是否相等_对Python中等值和大小比较
- DPDK 网卡绑定和解绑
- 基于matlab的模糊控制器的设计与仿真,基于MATLAB的模糊控制洗衣机的设与仿真详解.doc...
- [转]win7添加xp的快速启动栏
- 基于SSM的校园订餐管理系统
- altium PCB文件瘦身
- Fortran的全局变量(Common blocks)
- 浅谈微积分以及泰勒展开
- unctf2020部分wp
- Excel第8享:COUNT函数及其应用
- 大学计算机基础教学目标,大学计算机基础教学大纲2015.doc
- webservice wsdl 转java对象
- 基于高精度单片机开发红外测温仪方案
热门文章
- 《统计学习方法》第15章习题答案(持续更新)
- java体温_java实现体温单实例-eclipse-java工程
- 三国志9攻略-磨炼史话情之章 孙家编 攻略
- 手把手教你摆地摊之地摊形式有哪些
- [528]attrib隐藏文件夹
- MongoDB+robomongo
- 英语计算机简历范文模板,计算机英文简历范文模板
- 汽车软件刷新——当前安全访问策略的缺陷及改进方案
- 华为运营商级路由器配置示例 | EVdPdNd VPLS over SR-MPLS BE(BD EVdPdNd)
- linux 查看hive版本号,查看hive版本号