EN 中文

基于SmarTag系统的新闻情绪因子测试(二)

Oct 18,2019



在上一篇新闻情绪因子测试报告中,我们详细分析对比了采用不同情绪得分计算方法的因子表现。从而得出一个很重要且结论,即情绪因子构建时应该考虑新闻与股票的相关度即情绪得分的时间衰减。基于以上的结论,在本篇报告中,我们主要基于中证800指数的成分股,测试新闻情绪因子在这些成份股中的具体表现。报告的第一部分我们会对从各个维度对新闻情绪数据进行统计,第二部分主要对基于日度的新闻情绪因子进行测试及对比。



一、新闻数据统计说明


在数库监控的新闻版面中,每天新闻中出现的股票数量平均有700只左右,这些股票的总市值占当日A股总流通市值的50%左右。每个月出现在新闻中的股票平均为3100只,基本能覆盖A股市场上的所有股票。


图1:每日新闻中出现的股票数量


每日股票出现的重复率即今天出现在新闻中的股票在昨天的新闻中也出现过的比例平均为43%左右。重复率最大的日期出现在2019年8月31日,当天出现在新闻中的股票有84%在2019年8月30日的新闻中出现过。


图2:每日股票与昨日股票的重复率


每日出现在新闻的股票中,平均52%为沪深300的成分股,30%为中证500的成分股,40%为中证800的成分股(如下图):


图3: 每日各指数成分股占比


除了以上不同维度的统计数据,还有以下几个数据值得我们关注:


  1. 所有情绪数据中,正面情绪占45%,中性在40%,负面15%;

  2. 新闻发布高峰在开盘与收盘前后,盘中的新闻占当日所有新闻的36%左右;

  3. 所有情绪数据中,任意类型的情绪,概率大于80%的数据占所有数据的70%。


以上统计带我们直观的了解了整个新闻情绪数据集,结合我们上一篇测试报告,在接下来的部分,我们将要测试新闻情绪数据在中证800指数成分股中的因子化应用。所有的测试都基于开源因子测试工具AlphaLens,并会在csf_kit中提供示例代码。




二、基于中证800的新闻情绪因子的测试对比


基于第一篇报告的结论,情绪得分因子的计算需要去除中性新闻且要考虑新闻与股票的相关度及情绪得分的时间衰减,我们将计算中证800成分股的情绪得分因子。具体的计算逻辑我们将结合csf_kit中的样例数据详细说明:


  1. 过滤中性情绪:删除数据中情绪类型senti_type为0的记录。

  2. 匹配交易日期:将每天情绪得分记录匹配到对应的交易日期,我们的做法是把t-1日15点到t日15:00点的记录对应到t+1日(假设是每日汇总得分)。

  3. 计算考虑时间衰减的情绪得分, 其中dt为新闻发布的时间,T当前新闻匹配的交易日期与上一个交易日之间的时间间隔:



  4. 计算该时间段(比如每日)每只股票在所有新闻中情绪得分(按照步骤C计算)的总分或平均分。


表格1:新闻情绪样例数据


我们将测试基于以上步骤计算的情绪得分平均分因子和情绪得分总分因子,并分别命名为SENTI_MEAN和SENTI_TOTAL。


1、日度SENTI_MEAN_1D因子测试


SENTI_MEAN_1D因子计算的是中证800成分股每天在不同新闻得分中的平均分。需要说明的是这里的“一天”并不只日历日中的一天,而是指交易日。也就是说,节假日出现的新闻会加总到其往后最近一个交易日。

在因子测试过程中,股票分组的方法至关重要,由于情绪因子的数据分布极度不均匀,所以采用等分的方法肯定是不明智的选择,所以在确定分组方法之前,我们有必要对我们的因子数据做一个更全面的了解。我们按20分的区间将因子值的范围[-100,100]划成了10个区间,进而观察每个区间出现的股票的数量及收益率表现。基于表2及图4的数据,我们有以下结论:


  1. 市场对于负面事件的反应要大于正面事件,所以极度正面的股票组合(大于80分)的收益只有极度负面股票组合(小于-80分)的四分之一。

  2. 70%的股票的得分处于0-40分的区间,且这部分股票的平均收益基本为0。

  3. 越靠近得分区间的两端,股票的数量就越少,在考虑可投资性股票的数量时,我们不能只选择处于两端的股票。


表格2:因子分布统计数据




图4:分组收益率统计


基于以上的结论,我们在进行分组时并没有采用等分的方法,而是采用了以下两种方法:

  1. 固定分位数法(SENTI_MEAN_1D/QUANTILE)

    每日按以下分位数区间,[0,0.05, 0.25, 0.45, 0.75, 0.95, 1.0],把出现在新闻中的中证800成分股分为6个组(首尾各占当日总股票数量的5%)。该方法的好处是股票的数量相对固定。

  2. 固定分数区间法(SENTI_MEAN_1D/BIN):

    尽量考虑了选股数量后,我们确定一个划分的区间[-100,-40,-20,0,40,60,100]。每天将处于同一情绪得分区间的股票合为一组。


图5:SENTI_MEAN_1D的因子值分布(偏度=0.05)


Alphalens中对因子的收益率测试主要分为两部分,首先是计算因子的收益指标(如表格3中Ann.alpha及beta)。此时并不对因子进行分组,以当期的股票构建一个组合,组合中各股票的权重由因子值决定,买入因子为正的股票,卖出因子为负的股票,计算整个样本期间的因子累计收益率(未扣除交易成本)。该Alpha收益是按照所有股票因子值计算各股票权重后构建股票组合的Alpha收益,并不是买入Top组卖出Bottom的收益,所以仅仅作为因子是否有效的判断依据,并不作为最终构建组合的实际收益。然后是分组计算各组的平均收益及累计收益,最后是计算IC及换手率等指标。



表格3:SENTI_MEAN_1D因子收益率统计




图6:SENTI_MEAN_1D分组平均收益


图7:SENTI_MEAN_1D分组累计收益


从表格3及图6、图7中,我们可以明显的看出,以固定分数区间分组的方式得到的股票组别间的收益分层性更加明显,如图7右所示,无论是持仓期是1天、5天还是10天(分别以蓝色、黄色及绿色的柱状表示),收益与情绪得分呈严格的单调性,情绪得分越高的股票组,平均收益越高。而且,以固定分数区间法划分的股票组,第一组与最后一组的收益差更大。


似乎所有数据都在告诉我们,应该采用固定分数区间法给股票分组,因为使用这种方法更能区分股票收益的高低,且头尾股票组的收益差更明显。确实,在以上的分数区间选择是我们考虑到了股票数量的问题。我们知道采用固定了分数的区间,但每天落在每个区间的股票的数量是不一定的,特别是落在首尾区间的股票数量,所以在确定分数区间时要根据自己的策略需求来尝试不同的划分区间进行测试。在接下来的测试中,如果涉及到分组划分,我们将只采用以固定分数区间[-100,-40,-20,0,40,60,100]划分的方法。


接下来是信息系数IC测试,信息系数反应的是因子值与股票收益率之间的相关性,信息系数越高,说明因子的预测性越好。按照经验值,因子的IC大于3%可以认为该因子是一个有预测性的因子。可是SENTI_MEAN_1D的IC值只有0.018(1D)、0.02(5D)及0.018(10D),是不是说明新闻情绪因子不具有预测性或分层性呢?在上面的收益率测试中,我们发现处于0-40分区间的股票的平均收益率基本为0,考虑到新闻情绪得分因子的特点,这部分股票对我们的因子造成了很大的干扰,所以我们可以尝试把这部分股票去掉,再看一下因子的IC值(如图9),果然不出所望,因子的IC值成倍的增加,达到了4%左右。


图8:SENTI_MEAN_1D因子IC序列


图9:去除部分股票后的因子IC值序列



因子的分层性和预测性固然重要,但最终还是要看交易的可行性,A股的换仓成本极大的限制了中高频多因子策略的收益,因子的换手率可以直观的反映交易成本,下表给出了不同调仓周期的各组平均换手率,基本上都在1左右,除了占比最大的第四组。


表格4:SENTI_MEAN_1D换手率


2、  日度SENTI_TOT_1D因子测试及与SENTI_MEAN_1D因子的对比


SENTI_TOT_1D因子计算的是中证800成分股每天在不同新闻得分中的总分,与SENTI_MEAN_1D不同的是总分因子考虑了新闻的热度,所以总分因子没有固定的区间,造成了SENTI_TOT_1D分布的极度不均匀(如下图所示)。既然没有固定的得分区间,那么用就不适合采用固定分数区间的分组方法。所以我们采用固定分位数法对SENTI_TOT_1D进行分组,并命名该因子为SENTI_TOT_1D/QUANTILE


图10:SENTI_TOT_1D箱形图


我们对SENTI_TOT_1D总分因子与SENTI_MEAN_1D平均分因子的相关性进行计算,结果显示这两个因子的平均相关系数达到了0.92,这与我们的逻辑相符合。我们认为绝大多数的股票热度相近,总分因子相对于平均分因子的区别就是能够在正负面情绪比较极端的股票中区分出热度比较高的股票。所以基于这个假设,我们分别用以下三组分位数区间对两个因子进行分组测试及对比,三组分位数比例主要是首尾比例的不同,分别是1%,5%及10%:


        [0,0.01,0.25,0.45,0.75,0.99,1.0],

        [0,0.05,0.25,0.45,0.75,0.95,1.0],

        [0,0.10,0.25,0.45,0.75,0.90,1.0]



图11:SENTI_TOT_1D与SENTI_MEAN_1D的相关系数序列


图12:SENTI_MEAN_1D与SENTI_TOT_1D分组平均收益率对比


图12中左边三副图是SENTI_MEAN_1D首尾分别取1%、5%及10%的分组平均收益,右边是SENTI_TOT_1D首尾分别取1%、5%及10%的分组平均收益。对比左右两部分,我们可以清楚的发现,在取同样百分比的股票的情况下,总分因子第一组(最负面一组)的收益要明显小于平均分因子,但平均分因子第六组(最正面一组)的收益要明显大于总分因子,也就是说,热度因素并不能从正面情绪的股票中选出更优的股票,反而在负面情绪的股票中有提升组合表现的效果。所以我们可以得出以下结论,热度因子适用于负面股票的增强,在后续的测试中我们讲结合这两个因子构建股票多空组合。

        

最后,我们以[0,0.05,0.25,0.45,0.75,0.95,1.0]的分位数区间,测试因子的其他指标,该因子的分组累计收益如下各图所示,全样本股票的因子IC值为0.02左右,如果去除中间两组平均收益为0的股票,IC值可以上升到0.037左右,同样说明总分因子也是在得分靠左右两端时,分层效果比较明显。


图13:SENTI_TOT_1D/QUANTILE分组收益累计




三、总结



本报告主要测试了日度情绪因子,包括日度情绪平均分因子SENTI_MEAN_1D及日度情绪总分因子SENTI_TOT_1D,并对比了不同分组方法的效果。主要有以下结论:


1)    无论是均分还是总分,情绪因子在两端的分层效果更为明显,当去除得分处于中间50%的股票时,IC值明显上升。

2)    对于平均分因子,由于有固定的分数区间,所以固定分数区间的分组的分层效果要明显好于固定分位数分组的分层效果。

3)    总分因子更利于筛选出负面情绪的股票,均分因子更利于筛选出正面情绪的股票。