如何从数据中筛选所需数据筛选有效数据?

一、多因子筛选阶段介绍

基本面数据因子(特征)如此之多,那么如何去找到对应的对股票收益率比较好的。并且能在未来一段时间给我们的选股收益率提供帮助。

我们可以大概从这几个方面去做

  • 1、先从上百个因子当中分析出对股票收益率有效的部分因子(这个数量可以根据筛选的严格程度去做)
    • 在每个大类因子当中去做筛选,每个大类因子中筛选出有效的N个因子
      • 质量、估值、成长等因子
    • 严格:例如20个有效因子
    • 不严格:例如50个有效因子
  • 2、在筛选的单个因子当中做相关性分析,合并相关性强的因子
    • 最终得出有效的,相关性弱的因子,数量不多,一般在10个左右

二、单因子有效性分析目的

1、 有效性分析确定的几个问题

    • 对收益率提供正面还是负面的影响
因子值越小越好,如市值、估值类(市盈率、市净率、市销率等)
因子值越大越好,如ROE、利润、利润增长率类因子
因子方向不确定,如周转率、资产负债率等因子

利用这两个分析方式去筛选,最终我们要得出这样的两张表。

三、单因子有效性分析-

因子的IC分析需要确定的是因子与收益率之间的相关性,提供给筛选的依据。也就是这张表格中的IC相关值

    • 这里大于0.02可修改,如果更大,那么意味着筛选更加严格

在这里我们以分析估值类当中的部分因子。

某一期的IC指的是该期因子暴露值和股票下期的实际回报值在横截面上的相关系数

1.1 什么是因子暴露度

  • 斯皮尔曼相关系数表明 X (独立变量) 和 Y (依赖变量)的相关方向。 如果当X增加时, Y 趋向于增加, 斯皮尔曼相关系数则为正
  • 与之前的皮尔逊相关系数大小性质一样,取值 [-1, 1]之间
即某时点某因子在全部股票因子暴露值排名与其下期回报排名的截面相关系数。

但是现在我们知道因子值怎么获取,但是某段时间的收益怎么来?

  • 按照区间大小或者研究的区间大小
  • 计算公式,例如:当前区间D的收益率
公式解读:这期收盘价减上期收盘价/
计算收益率时,假如是月收益率,就认定每月最后一天价格作为当月的价格

3、 案例:单因子某天的IC分析

  • 1、获取这一天因子数据
  • 2、获取与的价格数据,计算的收益率(下期收益率)
# 2、获取当天和下一期的收盘价格 # 计算收益率, 填充缺失值 # 下期价格- 当前价格/ 当前价格, 这里计算的是下期的收益率

使用更加强大的工具去计算IC值

在做分析之前,需要准备所有分析所需的数据格式,事前需 要准备好因子数据、 价格数据和数据。 行业数据可有可无,若有则可以设臵成 Dict 格式或者 Series 格式

一次一个因子数据,MultiIndex系列由时间戳(级别0)和资产(级别1)索引,包含单个alpha因子的值
所有股票的多天价格数据
行业分组信息, 保证每个股票都有行业分类
默认计算了远期收益(预测能力)
分组名称, 把所有的 行业贴上标签。比如说,(煤炭)中信对应数字 1,(钢铁)中信对应数字 2,以此类推。
计算允许因子数据丢弃的最大百分比(0.00到1.00),(例如NaN),未提供足够的价格数据来计算所有因子值的远期收益率,设置max_loss = 0避免数据出现缺失
分组计算可以理解成是传统的行业中性的做法

price格式如下图:

    • 一个简易的summary包含几种综合分析
    • 计算因子值和预期收益之间的基于Spearman等级相关的信息系数(IC)(默认每天)

5、 案例:使用alphalens进行单个因子的IC 分析

我们确定要分析的区间,一般来讲分析因子以最近的2~3年时间,看效果较好的因子。这里我们分析质量因子当中的earnings_per_share因子

# 定义一个装有所有天所有股票的因子数据 # 因子的数据处理,去极值,标准化
# 获取所有股票代码列表
# 获取指定时间的价格数据
 


# 准备一个使用所有alphalens的接口的通用数据

6、 因子IC效果图分析

 
 
    • 时间序列图和移动平均线图
    • 结合:计算月的因子IC, 这个月因子数据。和每月最后一个交易日计算出来的价格收益率
 
6.2 时间序列与移动平均线图
# 画出因子的时间序列图和移动平均线图
 



从时间序列图当中我们可以看出一个因子在时间上的正负性,能清楚知道哪段区间内是正相关、负相关的结果


从中也能得出IC平均值,标准差的大小,就可以填入我们的表格当中


6.3 因子分布直方图


6.4 其它图形查看分析

7、因子有效性分析表格填充

 
 
在筛选因子的时候,会考虑某段时间的平均值大小。判断平均值大于某个数字,IC的值一般根据筛选严格程度取值,这个值可以自定义0.06意味筛选严格,> 0.02会放松筛选(可以用在对开始很多因子的海选中)
 
 
代表:国海证券Rank-IC分析结果剖析

四、单因子有效性分析-因子收益率分析

 
 

1、 什么是因子收益率

 
 
因子收益率是在固定周期内对因子暴露值和下期的收益率之间建立横截面回归方程。得到的权重系数即为因子收益率
注:默认每天进行横截面回归得到的权重系数值
 
 

2、案例:因子收益率计算

 
 





2.2.2 分位数分组结果

从这张图中,我们就能够得出因子在高分位数的股票上表现较好,说明因子的方向为降序,因子越大越好。
当然也可以通过因子累计收益率的分位数分组情况图查看

2.3 因子在周期内的平均收益率
我们的因子有效性分析excel表格当中,需要周期内的计算因子的平均收益率,可以通过以下计算
# 因子的每一期的收益(因子收益)
 

五、单因子测试框架和单因子回测框架搭建

 
 
 
刚才我们在研究平台上所做的因子IC分析和因子收益率分析都属于因子的测试框架,因为我们使用的第三方平台,所以没有办法做一个比较完整的通用的测试系统。但是目的是为了测试选出表现较好的,如果我们建立好了测试结果?因子分析完了接着做什么?
1.1 将所有统计的因子打分排名
统计完结果之后我们需要对上百个因子进行一次筛选,在这里采取打分排名
    • 对于3项标准中的每一项进行打分,每满足一项打分为1,然后每个因子看的多少分
 
注:打分大小看整体情况,以及选出多少因子排名之后可以选出10多个较好的因子,然后做后续相关性分析和合成
 
 
 
当筛选出部分因子之后,其实我们还要去观察它在回测过程当中真是的收益率情况。所以要建立每个因子的回测框架,主要对不同分位数上的股票收益进行统计。也就是下面这张图

# 建立单因子的回测框架 # 调仓频率:一个月,买卖判断 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。 # 选出因子数据,选出不同组的位置进行回测 # 变成行是股票、列是指标的数据 # 求分位数是对于一列数据,dataframe求不了 # 按照分位去分成5组,分别进行回测 # 判断股票仓位是否>0 # before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次 # 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新 # 开始编写你的主要的算法逻辑 # after_trading函数会在每天交易结束后被调用,当天只会被调用一次 """3倍中位数去极值 # 求出因子值的中位数 # 求出因子值与中位数的差值,进行绝对值 # 定义几倍的中位数上下限 # 替换上下限以外的值
 
 

分组去进行练习,统计在表格当中

1、 如何计算因子间的相关性

下图是 某大类因子下的一些因子IC值变化图也能够看出大概相关性

比如说OPM和OPM_TTM相关性较强,变化趋势类似

  • 某研报最终相关性最终结果

相关性分析还是使用斯皮尔曼秩相关系数,但是对象是两个因子的IC值序列分析

目的:将一些相关(高、低)的因子合成一个因子

    • 使用PCA方式(使用于较强相关性)

【编者按】新冠肺炎疫情是对我国治理能力和治理水平的一次重要检验。针对疫情防治中呈现的一些新现象、新问题,社科理论界积极发声,贡献属于学人的智慧和力量。本着”思想温暖学术,学术关怀现实”的办刊理念,上海市社联《探索与争鸣》编辑部于今年1月28日在全国社科学术界,率先推出“国家治理现代化视野下的抗击新型肺炎”主题征文。此次征文获得学界积极关注和支持,截至3月12日,共收到论文1500多篇。为更全面呈现人文社科学者对抗疫过程的思考,《探索与争鸣》与解放日报·上观新闻“思想汇”合作,从征文中选取部分文章组成“抗疫论”专栏予以刊发,希望引发更多思考。


此次疫情期间,大数据辅助下的快速决策对有效防控疫情发挥了重要作用。然而,大数据虽然具备提前预警、辅助研判的功能,但信息主体多、来源渠道广、审核机制不完善、收集方式和分析标准不统一等问题,也在很大程度上影响着决策结果的合理性。如何打通不同主体间的数据共享渠道,如何以法律手段规制疫情防控中的大数据辅助决策行为,是当下值得进一步思考的问题。

疫情防控中大数据辅助决策的现存问题

此次疫情期间,大数据辅助下的决策相关行为不少,各类主体以大量数据为基础,设定算法、构建模型、预估疫情走势,辅助政府实施规制行为。但与此同时,大数据辅助决策仍存在以下三方面问题:

所有考勤数据已经从考勤机取出来了但是怎么筛选出有效的数据,就是取出每个人每天上班和下班的有效数据其他的多次打卡记录不计算在内。考勤记录字段如下:
考勤记录ID 员工ID 打卡时间 打卡机号

必須設定有效考勤時間範圍,比如:8:15~8.45為上班有效考勤時間範圍

这是规则和设计的问题 比如8:00~12:00,有人10:00打了一次卡,你当是上班还是下班?? 考勤是个繁琐的东西,得根据企业的实际情况设计

这个时间是我们公司的上下班时间
[/quote] 我的是用的2008,筛选数据是写个服务还是直接在数据库中搞,我要把数据筛出来查到另一张表里,每天定时筛选
员工ID 这样就直接查询出来了
版主粗心啊,打卡机记录的肯定是n天的数据,只用用户分组取到的是第一次打卡和最后一次打卡数据,中间也许跨了好多天了[/quote] 对了是要按天来取数据的

2008才支持date和time类型的数据,如果是2008之前的版本,自己改下代码去转换日期和时间

员工ID 这样就直接查询出来了
版主粗心啊,打卡机记录的肯定是n天的数据,只用用户分组取到的是第一次打卡和最后一次打卡数据,中间也许跨了好多天了[/quote] 好吧 日期掉了
版主粗心啊,打卡机记录的肯定是n天的数据,只用用户分组取到的是第一次打卡和最后一次打卡数据,中间也许跨了好多天了

我要回帖

更多关于 如何从数据中筛选所需数据 的文章

 

随机推荐