社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【机器学习】基于A股新闻共现网络的股票收益分析

机器学习初学者 • 2 年前 • 592 次点击  

核心观点

▪ 本文利用新闻数据,以全量公司(上市+非上市)为节点,以共同出现在新闻中为边,构建了新闻共现网络,并对其做社群检测;
▪ 新闻共现网络内,有关联的股票对比无关联股票对表现出更强的相关性;社群检测后,社群内的股票对也比社群外的股票对有更强的相关性,且“社群内”+“共现关系”有助于进一步提高相关性;
▪ 上述表现在不同市值板块内部、行业内部也都成立,能在板块或行业内部进一步筛选出相关性高的股票,且新闻共现社群与行业分类也存在差异,可以作为新一类股票关联关系和股票的分类方式。


一、前言


在之前的《基于 A 股供应链网络的股票收益分析》中,我们发现利用供应链网络关系和网络中的社群关系能筛选出相关性更高的股票集,而且筛选效果不受市值、行业的影响,供应链网络社群检测可以作为一种新的股票分类方式。借鉴供应链网络的分析流程,本文主要对来自新闻数据的新闻共现网络进行股票间收益分析,探究来自新闻的关联关系是否也有类似供应链关系的表现,带来增量信息,丰富股票间关联关系的维度和股票的分类方式。
二、构建新闻共现网络
2.1 新闻共现网络构建步骤
新闻共现网络的数据来源于数库提供的 SmarTag 新闻分析数据,主要应用的数据表为 SmarTag 数据中的股票标签表(news_compnay_label 表),标签表的相关字段如下表所示,其中公司包含上市公司与非上市公司,新闻数据选取的时间为 2017 年 1 月至 2023 年 3 月。
构建新闻共现网络步骤如下:
1、首先以每个交易日下午三点为切割时间,把收盘后的新闻算做下一交易日的新闻,将日历日映射到交易日;
2、剔除相关性不高的新闻,选取所有relevance>0.1的公司新闻;
3、新闻共现基础网络:直接将每日公司新闻转化为新闻共现的形式,每行数据为:日期、共现的公司a、共现的公司b、共现次数,该新闻数据构成了新闻共现的基础网络;
4、新闻共现扩展网络:每日的股票共现情况变动相对比较频繁且 A 股覆盖率低,因此在每月末计算共现矩阵过去 90 日的总边数,即如果公司 a 和公司 b 在过去 90 日中存在新闻共现情况,那么也将其纳入新闻共现网络中,扩展网络的覆盖度更高,股票共现关系也相对更稳定,之后的分析主要基于扩展后的新闻共现网络。
下面左图是某一横截面整个新闻共现网络的示意图,右图近距离展示了单个公司与其余公司的共现连接情况。本文构建的新闻共现网络并不局限于上市公司,而是包含了新闻中出现过的全量公司,加入非上市公司的网络包含的信息更丰富。
2.2 新闻共现网络的A股覆盖度
下面分别从节点和边两个维度,统计了新闻共现网络在 201701~202303 这段历史区间内的图规模和 A 股覆盖度情况。对于节点的统计(见下表),平均每日节点数为 2866 家公司,其中 A 股节点约占 27.68%;大盘沪深300 的平均每日覆盖度最高,有 51.68 %;小盘股中证 1000 的平均每日覆盖度最低,只有 18.33 %。为了提高覆盖度,通过每月末滚动过去 90 个交易日的新闻来扩展网络,扩展后的新闻共现网络在各市场板块上的平均覆盖度都提高到了 98% 以上。
对于边的统计(见下表),平均每日边数量为 6249 条,其中双方都为 A 股的边约占 12.28%;平均每日,只有 118 条边的双方都为沪深 300 成分股,而双方都为中下盘股的边数不到 40 条。基于时序滚动扩展后的新闻共现网络,在 A 股上边数量增加到了万级别,在各市场指数上的边数量也增加到了千级别。


三、新闻共现网络的社群检测


3.1 社群检测结果展示
为了更深入探究新闻共现中公司与公司之间的关系,参照前篇《基于 A 股供应链网络的股票收益分析》,依旧引入基于图论的社群检测算法 leiden 算法对新闻共现网络进行社群检测(无向图、带权重,权重为区间内共现的新闻数量)。
在对新闻共现网络进行社群检测时同样发现整个网络是由一个大连接组件和许多小连接组件构成的,小连接组件内的公司数量少,但组件间划分明显,绝大部分公司都集中在最大连接组件内。以 20221231 为例,下图展示了社群检测后小连接组件的连接情况,而最大组件的规模为 72763,远超小组件的规模,因而不方便在图中展示。
统计 20221231 的新闻共现网络初始聚类后的连接组件的规模分布情况(如下图所示),横坐标代表集群规模,纵坐标代表该规模下集群的数量,最大组件的规模为 72763,其余组件的规模均小于 20, 因此,可见公司主要集中在最大组件中,后面只对网络中的最大组件进行集群检测,大组件以外的较小的连接组件对研究作用微乎其微。
将最大组件分离出来后,对最大组件应用 leiden 算法进行社群划分,共划分成了 257 个集群,各集群规模大小分布如下图所示,其中横坐标代表集群的规模范围(即拥有的公司数量),纵坐标代表该集群规模下集群的数量, 前几大集群的规模都比较高。
3.2 社群检测结果分析
下图统计了历史区间内最大连接组件包含的公司数以及这些公司在 A 股上的覆盖度。对各时间截面上的最大连接组件的统计结果求均值,最大连接组件包含了约 88.43% 的公司,约 96.86% 的 A 股都在最大连接组件内,所以仍选择对最大连接组件进行进一步的社群检测。(图中 19 年中后期后公司数量大幅上升,这是因为扩充了新闻源,新闻量大幅增加导致的。)
在各时间截面,对最大连接组件进行集群划分后的集群规模分布情况如下图所示。最近几个月,存在包含 1 万家公司以上的大社群;其余时间的最大社群内包含的公司大约为五六千家;绝大多数的社群规模大都在 100 家公司及以下。在所有社群中,包含 A 股的社群数量占比平均在 43.69% 左右。
下图单独统计了各时间截面对最大连接组件进行社群检测后包含 A 股的社群数量及其规模分布情况,平均有 34% 左右的集群中只包含一只股票(及蓝色部分的集群数量在整个柱子上的占比),绝大多数集群内部包含的 A股数量不超过 200 个(褐色柱子及以下)。
3.3 社群检测与行业分类的差异
新闻共现网络构建了股票之间在新闻上的关联关系,对新闻共现网络进行社群检测得到的股票分类方式是有别于业务分类(即行业分类体系)、公司间商业关系分类(即基于供应链图谱的社区检测)的又一种新的分类方式。同样以中信一级行业分类为比较基准,为了比较新闻共现集群与行业分类的不一致性,下图计算了各时间截面下中信一级行业内成分与新闻共现集群内成分的平均重叠率。( 集群 i 对行业 j 的重叠率 = 集群 i 内属于行业 j 的公司数量 / 所有集群内属于行业 j 的公司数量,然后横截面对 top50 的集群的重叠率计算求平均;排名靠后的集群涉及的股票数较少,会间接拉低重叠率。)在所有中信一级行业中,银行的重叠率始终很高,在 57.2% 左右,说明银行类的上市公司在新闻中普遍会一起出现,而其余类型的上市公司与银行一起出现在新闻中的情况相对较少,银行类上市公司在社区检测时容易自成一个社群。
下面两幅图直观展示了 202302 这个月的中信一级行业成分股在前 50 个集群内部的分布和占比情况,在规模较大的集群内,行业分布是相对分散,基于新闻共现网络集群检测的股票划分方式有别于行业划分,能带来新信息。


四、收益率相关性分析


在之前的供应链网络研究中发现“ 存在供应链关联的股票对比无关联股票对表现出更强的相关性,且供应链集群内股票对的相关性最强。”上述规律是否在新闻共现网络中同样存在?如若存在,量化研究中用到的股票划分依据也可以挖掘自新闻数据,丰富了股票间关联关系的类型。为了验证上述规律,我们同样对新闻关系下股票对的日度收益率序列计算 Pearson 相关系数,通过比较相关系数的分布来体现不同关系下股票间的关系强弱,其中计算 t 月末相关系数用的是 (t-90个交易日, t] 区间上的日度收益率,时间区间的划分与滚动 90 日扩展新闻共现网络的区间相一致。
4.1 新闻共现网络的收益率相关性分析
4.1.1 全 A 上表现
下图对比了各横截面新闻共现网络中相关联和不关联的股票对之间收益率相关系数的均值、中位数、偏度、峰度等统计指标。(关联股票对 connected,即为新闻共现网络中每条边两端的节点对;不关联的股票对 unconnected,即为新闻共现网络所有 A 股节点两两配对后剔除掉前面那部分关联股票对后剩余的股票对。)从相关性强弱水平来看(均值、中位数),关联股票比不关联股票表现出更强的相关性;从相关性分布形态来看(偏度、峰度),关联股票的相关性更右偏,且分布更矮,尾部更厚。
下图挑选了偏度相差最大的时间点 20210730 和最近月份 20230228 横截面下,关联股票间相关系数分布和不关联股票间相关系数分布的差异,从图形中可以清楚的看出上文描述的那些分布特点。
4.1.2 板块内表现
为了探究股票市值是否对新闻共现关系有影响,同样分别在沪深 300、中证 500、中证 1000 板块内部计算了各时点上关联股票间和非关联股票间的收益率相关系数( 对板块内成分股两两配对,并划分成关联股票对和非关联股票对两部分。),并绘制如下分布图。可以发现,各板块内部,也都呈现了“存在新闻共现关联的股票对比非关联股票对表现出更强的相关性”的特点,即分布更偏向 Y 轴上侧。由此可知,新闻共现网络上的股票关系并不受市值的影响。
4.1.3 行业内表现
在前文的“社群检测与行业分类的差异”分析中发现银行业内成分公司在新闻上的关系是相对统一且与外界相对独立。那在银行行业内部,新闻关联性带来的增量信息是否会被削弱?下图绘制了各时点上银行业内部关联股票间和非关联股票间相关系数统计量对比图,可以发现,2020年后,新闻共现关系对于股票间相关性的增强作用已经基本失效了。
下图还进一步分析了新闻共现关系在医药行业内部的作用,可以发现新闻共现关系对于股票间相关性的增强作用一直都存在,且随着疫情的爆发,增强作用变得更强了。(从相关系数的偏度来看,关联股票间的偏度并不总是比非关联股票更右偏,但在均值和中位数都更高的情况下,关联股票间的相关系数分布图仍更位于坐标轴的右侧。这个现象可在下文图中观察到。)
4.2 社群内外的收益率相关性分析
从上文可知,与供应链网络一致,在新闻共现网络中,关联的股票对比无关联股票对也表现出更强的相关性。更进一步,我们同样对新闻共现网络进行社群检测,将聚类得到的集群作为一种新的股票分类方式。我们仍然通过对比集群内外股票的收益率相关性的差异来评判这种分类方式的有效性。对社群检测得到的各集群内部的 A 股分别进行两两配对,然后将这些股票对求并集,得到集群内的股票对集 within_cluster ;将网络内所有 A 股进行两两配对,剔除上一步的 within_cluster 股票对集,就得到了集群外的股票对集 random;从 within_cluster 中筛选出相连的股票对即为 within_cluster_connected 股票对集 ,分别计算这 3 种股票关系的收益率相关系数。
4.2.1 全 A 上表现
下图对比了上述 3 种股票关系的收益率相关性的高低水平和分布形态。其中,相关性高低水平排序为:within_cluster_connected>within_cluster>random,集群内股票间比及集群外股票间表现出更高的相关性,而且集群内相连的股票间 within_cluster_connected 的相关性更是高出很多。对于分布形态,不同时间点上的左偏和右偏并不一致,集群内相连的股票间相关性的分布相对更矮更厚尾,结合均值和中位数,集群内股票的相关性分布整体上更位于 X 轴的右侧。由此可知,新闻共现网络有助于筛选出相关性高的股票,而且网络中社群关系能进一步提高筛选效果(within_cluster_connected 普遍高于上文的 connected)。
下图挑选绘制了最近 2 个年末这 3 种股票关系的相关系数分布图,分布形态也与上图统计的信息相一致。
4.2.2 板块内表现
下图同样在沪深 300、中证 500、中证 1000 不同市值板块上测试了集群内外 3 种股票关系的相关性表现。板块内的表现与全 A 的表现是一致的:within_cluster_connected>within_cluster>random,而且在大市值板块上的表现比小市值板块上的表现更显著。
4.2.3 行业内表现
由于银行业的成分股与集群内的成分股重叠率较高,下图单独绘制了各时间点银行业内成分股的集群划分表现,可以发现集群划分并不能带来更高的相关性,无法从银行成分股中进一步筛选出相关性更高的股票,这可能是因为银行业的成分股之间相关性本身就已经很高了,很难找到增量信息来进一步提高相关性。
除了银行业,下图同样查看了新闻共现网络集群在医药行业上的表现。在医药行业内部,新闻共现网络集群是能带来增量信息进一步筛选出相关性更高的股票的。


五、总结


从上文的分析结果可知,与供应链网络一样,新闻共现网络同样有" 关联股票对比非关联股票对表现出更强的相关性,集群内股票对比集群外股票对也表现出更强的相关性"的表现,且整体上不受市值和行业的影响,能带来新的增量信息。可以将新闻共现网络也作为一类股票间的关联关系,将来自于新闻共现网络的集群也作为一种股票分类方式,应用于投资决策中。



    
往期 精彩回顾





Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/153396
 
592 次点击