基于关联规则挖掘算法的A股股票联动性分析

2022-07-18 09:12殷丽凤李梦琳
关键词:项集事务关联

殷丽凤,李梦琳

(大连交通大学 计算机与通信工程学院,辽宁 大连116028)

数据挖掘(KDD)是一个成果丰硕且不断发展的数据科学研究领域,其中的关联规则挖掘(ARM)常用于发现项目与项目集之间关系[1].关联性分析是利用机器学习算法分析数据的起点,早于1994年Agrawal等就提出了经典的Apriori算法[2].然而,因算法存在多次扫描数据库,产生大量频繁候选项集等缺点,研究人员后续对其进行了一系列的改进.Rahman等[3]提出了一种从不确定数据库中挖掘具有权重约束的序列的新算法.林甲祥等[4]提出了参数自适应的关联规则挖掘算法AdapARM,降低算法对先验知识的依赖性.廖纪勇等[5]提出了一种基于布尔矩阵约简的Apriori改进算法,将事务数据库转换为布尔矩阵,并在矩阵行列末分别记录每列事务的数量、每行项的种类和同一事务出现的次数.Wicaksono等[6]在Apriori算法中加入使用聚集函数的预处理,降低了规则查找时耗和内存占用.Li[7]提出了一种可扩展、高度并行的关联规则挖掘算法SARL算法.Li 等[8]将加权支持度记录在二维表中,省去了通过遍历加权FP树来搜索第1个条件模式库的过程,提高了生成加权频繁项集的效率.王常武等[9]提出了一种改进的时间序列Apriori算法,将频繁项集应用于基于时间约束的关联规则挖掘.

文中利用关联规则挖掘算法探究了 1 112 只A股于2007年到2021年间的联动规律,并提出了一种基于时序的改进关联规则挖掘算法Gap-Apriori.该算法可以有效过滤无效数据,提升算法运行效率,改善了股票间联动效应的滞后性问题.

1 关联性分析算法

1.1 关联规则指标

本节介绍关联规则指标,如支持度、置信度、提升度的相关概念.

支持度(support)[10],关联规则A→B的支持度是指包含A和B的事务占所有事务的比例,即事务A和B同时出现在数据集D中的概率.

support(A→B) =fsup(A→B) =P(A∩B).

(1)

置信度(Confidence)[10],在数据集中已经出现A时,B发生的概率.即事务A包含事务B的比例,事务A出现在事务B中的概率.

(2)

若support(A→B)和confidence(A→B)均满足最小支持度和置信度阈值,则认为关联规则A→B为一条强关联规则.

提升度(Lift)[10],表示含有A的条件下,同时含有B的概率,与只看B发生的概率之比.

(3)

提升度反映了关联规则中的A与B的相关性,lift(A→B)>1且越高表明正相关性越高,lift(A→B)<1且越低表明负相关性越高,lift(A→B)=1表明没有相关性,即相互独立.

1.2 经典算法

本节介绍经典关联性分析算法,Apriori算法、FP-growth算法[11]和Eclat算法[12].

在Apriori算法中,如果某个项集是频繁的,那么它的所有子集也是频繁的.如果一个项集是非频繁集,那么它的所有超集也是非频繁的.算法原理见图1,其中黑圆代表频繁项集,白圆代表非频繁项集.

图1 Apriori算法原理图

FP-growth算法采用深度优先搜索方式,首先扫描数据库,将交易数据存储在称为FP-tree的前缀树的树结构中.然后,通过扫描树找到频繁模式.算法原理见图2,算法依次查找以E、B、C、D、A结尾的频繁项集,考察包含特定节点的路径,就能发现以E结尾的频繁项集.

图2 FP-growth算法原理图

以上2种算法都采用水平数据格式,从TID-项集格式(即{TID:item_set})的事务集中挖掘频繁模式.

Eclat算法采用垂直数据格式,从项集-TID的格式(即{item:TID_set})的事务集中挖掘频繁模式.算法原理见图3,首先由2个频繁k项集求并集得到候选k+1项集,然后对候选k+1项集的事务集做交集操作,生成频繁k+1项集,最后以此迭代直到项集归一,算法结束.

2 Gap-Apriori算法

本节提出基于时序的改进的关联规则挖掘算法Gap-Apriori.

2.1 算法思想

假设事务数据库D中存在m个事务,事务集合D={T1,T2,T3,…,Tm};n个事项,项目集合I={I1,I2,I3,…,In}.它们可以构造一个m行n列的0-1传递矩阵M:

其中,

矩阵M的行对应事务,列对应事项.

时域压缩.Gap-Apriori算法针对时序数据,将每周事务项叠加,进一步泛化数据,将出现频率过半的事项标记为时域正向趋势,从而使统计情况更加符合实际,涵盖了以周为单位的关联情况.

矩阵约简.通过对布尔矩阵行列分别求和,得到2个分别对应行列和的向量D′和I′.利用D′剔除不需要的事务行,如本次实验查找A股之间的联动性,不需要事务数为1的事务,利用I′将小于最小支持度的事项列全部删除.

图3 Eclat算法原理图

候选集优化策略.将列j从矩阵M中分离,并与M中列j右侧的数据执行加操作,得到矩阵Aj;将Aj行累加,得到向量ai,则向量ai为频繁2项集判断条件i;依次对每列执行加操作,将结果组合形成1个右上三角形矩阵P,此时可以用最小支持度来过滤频繁2项集,并进行频繁3项集的搜查过程,直到没有能够满足最小支持度的集合为止.

2.2 算法实现

文中结合时域压缩、矩阵约简和候选集优化策略的改进思想提出Gap-Apriori算法,通过减少访问数据库的次数和冗余候选项集的产生,提高算法效率.算法实现步骤如下:

Step 1 扫描目标事务数据库D,将数据库中的信息映射成布尔矩阵M.

Step 2 按照时域范围t_gap,将矩阵沿时间轴累加行合并,如果aij>t_gap/2,aij=1,否则aij=0,得到矩阵M′.

Step 3 计算出布尔矩阵M′中的col_sum和row_sum,分别按照col_sum和row_sum升序将矩阵行列排序.

Step 4 删除小于最小支持度的列得到频繁一项集C1,随后将row_sum<2的行删除,矩阵记为G.

Step 5 根据计算候选集频数优化策略,生成频繁项集判断矩阵P,将过滤的到的频繁k项集存储到对应的二维数组map_k中.

Step 6 重复 Step 5,直至不再产生频繁项集.

Step 7 算法结束,输出所有频繁项集的组合.

3 股票数据

3.1 数据爬取

股票交易数据的爬取时间范围从2007年1月8日到2021年6月11日.

首先,调用python中的bs4库和requests库,从看板网分别爬取了 1 485 条深市A股代码、1 653 条沪市A股代码;然后,依据股票代码,调用Pandas-datareader库从雅虎财经的数据接口,下载了 1 484 只沪市A股、1 222 只深市A股交易数据,并按股票的代码和名称,将数据保存在对应的.csv文件中.

图4 股票爬取数据

爬取的股票交易数据共有7个维度,详情见表1.其中,调整后的收盘价也称为复权和分配股息后的价格.

表1 股票数据特征含义

3.2 数据预处理

由于从雅虎财经获取的交易数据起止时间受股票上市与退市影响,存在不一致的现象.为了规整数据格式,减少实验误差,需要对已有数据进行筛选.在2021年6月11日前退市的股票已在爬取过程中跳过,故现有交易数据的截止时间均为2021年6月11日,起始时间分布见图5.统计筛选后,得到 1 112 只在2007年1月8日到2021年6月11日期间正常与市的A股,单只股票交易数据量 3 511 条.

图5 股票交易起始时间

分析数据保留日期与当日走势2个特征,当日走势由开盘价与收盘价比较得出.个股停市导致的数据缺失,以临近数据的均值填补.借助pandas库将 1 112 条数据归并,存储为一个 3 511×1 112 的分析数据表.分析数据表见图6,0代表当日股价下跌或无变化,1代表当日股价上涨.

图6 股票分析数据

4 股票联动性分析

4.1 对比实验

实验目的是验证Gap-Apriori算法的有效性,同时在时间执行效率上与经典关联性分析算法进行比较.实验环境为:内存16G,CPU版本为i7-10710U的Window10操作系统.算法开发工具是PyCharm,使用Python语言编程.本文设置了3个实验对算法的时间性能进行对比,1个实验对算法的挖掘效果进行对比.

实验1 在不同的事务量条件下,将最小置信度设为0.4,事项数量设为20,分别对Apriori、FP-growth、Eclat和Gap-Apriori 4种算法进行性能测试.

实验结果见表2,Gap-Apriori算法在较高的支持度阈值和事项数量情况下,执行速度快于FP-growth、Eclat算法,半数情况下快于Apriori算法.

表2 各算法在不同事务数条件下的运行时间 s

实验2 在不同的事项数量条件下,将最小置信度设为0.4,事务量设为 2 000,分别对Apriori、FP-growth、Eclat和Gap-Apriori 4种算法进行性能测试.

实验结果见表3,随着事项数量的增加,Gap-Apriori算法的执行效率逐渐超过其他3种算法.其中,FP-growth算法中FP-tree的节点结构需要设计大量的指针,生成的频繁项集存在过多的冗余信息,频繁项头表的遍历耗费了过多的时间.因此其在数据项增加时,运行时间大幅增加.

表3 各算法在不同事项数条件下的运行时间 s

实验3 在不同的支持度等级下,事务量设为 3 000,事项数量设为20,分别对Apriori、FP-growth、Eclat和Gap-Apriori 4种算法进行性能测试.

实验结果见表4,在支持度小于0.35时,Gap-Apriori算法运行效率明显优于其他3种算法.在支持度到达0.35时,4种算法的时耗出现了异常情况,可见算法不能挖掘出更多的关联规则,或者挖掘出的关联规则为0.

表4 各算法在不同支持度条件下的运行时间 s

实验4 当事务数为 2 000,事项数为40时,设最小置信度为0.5,最小提升度为1.Apriori、FP-growth、Eclat和Gap-Apriori 4种算法在不同支持度下,挖掘出的规则数量见表5.其中,Gap-Apriori的参数t_gap设置为1.

从以上4组实验可以看出,在4种关联规则挖掘算法中,Gap-Apriori的运行速度最快,其次分别为Apriori、Eclat和FP-growth算法.由此可见,改进算法的执行效率得到了明显提高,达到了预期的目标.但是从表5中可见,同样的参数条件下,Gap-Apriori挖掘出的规律数量少于Apriori和FP-growth算法,其在加快挖掘速度的同时,也损失了一部分关联规律.

表5 各算法在不同支持度下挖掘的规则数

4.2 关联分析

实验数据采用 1 112 只A股从2007年1月8日到20年6月5日的交易数据,单股交易数据 3 265 条.

参数设置min_sup=0.4,min_conf=0.8,min_lift=1,采用Apriori算法进行关联分析,共得到15条关联规则,如表6所示.

表6 A股单日联动规则表

从表6中A股单日涨势规律挖掘的结果可见,资源类股票,如山西焦煤、潞安环能等,以及能充当交易货币的黄金,如中金黄金、山东黄金,在股市的波动中紧密相关.

参数设置min_sup=0.25,min_conf=0.5,min_life=1,gap=5,采用Gap-Apriori算法进行关联分析,共得到6条关联规则,如表7所示.

表7 A股周期联动规则表

从表7中的A股周期联动情况可见,以周为时间跨度时,我国南方浙江省的宁波韵升与福建省的惠泉啤酒、江苏省的*ST澄星、广东省的厦门信达、浙江省的数源科技,江苏省的*ST澄星与安徽省的六国化工,西北新疆的农业股票新赛股份与新农开发周期内联动性较强.同时,上述股票均为频繁1项集,说明其在众多股票中的上涨机率更大,反映了国内部分行业的发展动向.07年以来,南方沿海地区经济整体发展强势,有互联网助力的商贸行业繁荣;西北新疆地区拥有广阔的农业用地,迅速适应了智能机械化的新型农耕方式,农业发展良好.未来我国各地区会有更加清晰的产业划分,因地制宜,科学分配资源,以提高生产效率和生产质量.

4.3 规律验证

实验数据采用2020年6月8日到2021年6月11日的股票交易数据,单股交易数据247条.根据4.2中得出的联动规律,循迹验证.

参数设置min_sup=0.35,min_conf=0.6,min_life=1,采用Apriori算法进行关联分析,结果如表8所示.

表8 Apriori规则验证表

参数设置min_sup=0.2,min_conf=0.5,min_life=1,gap=5,采用Gap-Apriori算法进行关联分析,挖掘出的规律如表9所示.

表9 周期联动规则验证表

由表7、表8可见,在算法从历史交易数据挖掘出的联动规律中,有33%的规律在未来也可以应用.被筛选出的股票的涨势相似,而价格却存在差异,如中金黄金与山东黄金.股票交易者可以参考算法结果,选择更合适的股票进行交易.

5 结语

文中针对股票间的联动效应的滞后性的问题,提出了一种基于时序的改进关联规则挖掘算法Gap-Apriori,并利用关联规则挖掘算法分析了我国A股市场 1 112 只股票间的联动效应,获得的关联规则有助于投资者做出更加理性的投资决策.此外,股票市场联动效应的强弱可以用于衡量风险传递的可能性,为市场监管机制的制定提供借鉴.然而,股票的价格往往是政治、经济、社会等因素共同作用的结果,具有随机性的特征.为了提高投资决策的有效性,下一步的研究中应该将关联规则挖掘的结果与传统的技术分析以及基本面分析相结合,以更好地预测股票走势.

猜你喜欢
项集事务关联
北京市公共机构节能宣传周活动“云”彩纷呈北京市机关事务管理局
基于哈希表与十字链表存储的Apriori算法优化
Sp-IEclat:一种大数据并行关联规则挖掘算法
含负项top-k高效用项集挖掘算法
“一带一路”递进,关联民生更紧
奇趣搭配
针对基于B/S架构软件系统的性能测试研究
一种Web服务组合一致性验证方法研究
Hibernate框架持久化应用及原理探析
智趣