殷麗鳳,李夢琳
(大連交通大學 計算機與通信工程學院,遼寧 大連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.該算法可以有效過濾無效數據,提升算法運行效率,改善了股票間聯動效應的滯后性問題.
本節介紹關聯規則指標,如支持度、置信度、提升度的相關概念.
支持度(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表明沒有相關性,即相互獨立.
本節介紹經典關聯性分析算法,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項集,最后以此迭代直到項集歸一,算法結束.
本節提出基于時序的改進的關聯規則挖掘算法Gap-Apriori.
假設事務數據庫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項集的搜查過程,直到沒有能夠滿足最小支持度的集合為止.
文中結合時域壓縮、矩陣約簡和候選集優化策略的改進思想提出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 算法結束,輸出所有頻繁項集的組合.
股票交易數據的爬取時間范圍從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 股票數據特征含義
由于從雅虎財經獲取的交易數據起止時間受股票上市與退市影響,存在不一致的現象.為了規整數據格式,減少實驗誤差,需要對已有數據進行篩選.在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 股票分析數據
實驗目的是驗證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 各算法在不同支持度下挖掘的規則數
實驗數據采用 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年以來,南方沿海地區經濟整體發展強勢,有互聯網助力的商貿行業繁榮;西北新疆地區擁有廣闊的農業用地,迅速適應了智能機械化的新型農耕方式,農業發展良好.未來我國各地區會有更加清晰的產業劃分,因地制宜,科學分配資源,以提高生產效率和生產質量.
實驗數據采用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%的規律在未來也可以應用.被篩選出的股票的漲勢相似,而價格卻存在差異,如中金黃金與山東黃金.股票交易者可以參考算法結果,選擇更合適的股票進行交易.
文中針對股票間的聯動效應的滯后性的問題,提出了一種基于時序的改進關聯規則挖掘算法Gap-Apriori,并利用關聯規則挖掘算法分析了我國A股市場 1 112 只股票間的聯動效應,獲得的關聯規則有助于投資者做出更加理性的投資決策.此外,股票市場聯動效應的強弱可以用于衡量風險傳遞的可能性,為市場監管機制的制定提供借鑒.然而,股票的價格往往是政治、經濟、社會等因素共同作用的結果,具有隨機性的特征.為了提高投資決策的有效性,下一步的研究中應該將關聯規則挖掘的結果與傳統的技術分析以及基本面分析相結合,以更好地預測股票走勢.