(四川大學 四川 成都 610000)
關聯規則是美國IBM Almaden Research Center Rakeesh Agrawal等人于1993年首先提出來的KDD研究的一個重要課題。關聯規則挖掘本質是從大量的數據中或對象間抽取關聯性,它可以揭示數據間的依賴關系,根據這種關聯性就可以從某一數據對象的信息來推斷另一個的信息。
在證券交易市場中,每天都有以交易行情為主的大量數據匯入數據庫。如果把同一天股票的上升(或下降)事件看成是被放入同一個貨籃的貨物,那么一個時期的股票交易數據就會形成多個貨籃數據。既然可以挖掘出規則:“如果一個貨籃中有嬰兒紙尿布,那么該貨籃中有啤酒的概率是80%”,也可以挖掘出同一時期內股票上升(或下跌)的聯動規則。Apriori 算法恰好是解決這類問題的有效方法,但是,由于股票行情數據是以時間序列方式存儲在數據庫中,無法直接用Apriori 算法進行數據挖掘;要在股票行情數據庫中挖掘出根據時間而前后聯動的關聯規則,需要在貨籃數據中多引入一個參數:時間間隔。
另外,為了提高挖掘過程的有效性,還應確定目標關聯規則(即元規則)的形式。根據上面給出的用戶感興趣的規則形式:“T時間內,當A股票價格上漲時,B股票價格也會隨之上漲”。所以我們主要關心的是股票交易的時間和漲跌幅,其他如開盤價、成交量等可以認為是一些無關信息。
本文從國泰君安數據庫中選取從2016年8月至2017年8月所有交易日下編號靠前的部分股票作為測試樣本,以探求關聯規則在股票市場中的應用,剔除停盤日后初始下載樣本數為52109條。
1.導入數據
首先,我們將包含編號(gtacode)、股票名稱(Title)、交易日期(accpertime)、開盤價(Opnprc_JY)、收盤價(Clsprc_JY)和漲跌幅在內的原始數據通過txt的形式導入到R語言中。
>setwd(“/Users/zhongzhong/Documents”)
>mydata 導入數據后,使用View(mydata)將會在軟件中顯示出所導入的數據。 2.數據的檢驗 (1)缺失值 ①識別缺失值 我們首先用is.na()函數識別數據中的缺失值。 ②探究缺失值 然后我們用sum(is.na())函數計算上海這個數據框中缺失值的數目,得到為1。 (2)錯誤值 除了缺失值以外,我們還需要檢驗數據中有沒有不符合實際的情況,比如漲跌幅中不可能有超過+10%和-10%的股票。經檢驗,沒有出現這種情況。 (3)變量類型 在數據錄入過程中,我們通過str()函數發現gtacode為數值型(int),Title和時間為(Factor),其余都為類別型(chr),所有在后面的數據清理當中需要進行類型的轉換。 3.數據的清理 (1)缺失值的處理 通過na.omit()移除所有含有缺失值的觀測,使得數據中不再含有缺失值。 (2)類型的轉換 通過as.character()對Title進行轉換為字符型,然后通過as.Data()對時間進行轉換。 4.數據的規整 考慮到主要關鍵信息是股票交易的時間和漲跌幅,所以只篩選出編號、時間和漲幅三列有效數據: >mydata<-mydata[,c(1,3,6)] 為了清晰明了的挖掘出用戶感興趣的規則形式:“T時間內,當A股票價格上漲時,B股票價格也會隨之上漲”,我們首先設定出一個時間間隔,同時限定最小漲幅來減少工作量。 定義1 設最小漲幅Zmin,|Zmin|<10% 定義2 設過票交易集T={T1,T2,…,Ts},其中T1=2016-08-02,Ts=2017-08-02 按最小漲幅篩選之后,可以由下圖看到,之前5萬多條數據驟減到了1345條,故時間段上我們將不做篩選調整,保留一年交易日的數據: >mydata1<-subset(mydata,漲跌幅>=0.05) >view(mydata1) 5.apriori算法運用 這樣之后,我們將mydata1讀出為txt格式,為后面讀入成transactions數據格式做準備。然后使用read.transactions函數轉換成事務型數據,可以利用dim(trans)和summary(trans)來查看數據集的基本情況。 圖1 apriori算法代碼展示 上圖得到前五個item的支持度分別為0.10169492、0.10169492、0.09322034、0.08898305、0.08898305。 這里我們所做的是在生成規則:知道了頻繁項集,過濾掉非頻繁項集,并找出第一步的頻繁項集中的規則: >sum(itemFreq) >trans[size(trans)>1] >myrules=apriori(trans,parameter=list(support=0.01,confidence=0.1,minlen=2,maxlen=20,target=“rules”)) 接下來我開始使用apriori算法生成一條關聯規則myrules如上圖:支持度為0.01,置信度為0.1,這里的minlen和maxlen是指規則的LHS+RHS的并集的元素個數,具體的規則顯示在下圖中。 圖2 apriori算法顯示 從返回結果中看,可以看到總共有1299條規則生成。同時,有236條交易記錄的transaction,225個商品item等信息。然后使用summary(myrules)可以查看規則匯總信息如下,包括每個籃子(交易)中含有的股票數目以及支持度、置信度的最小值、最大值和中位數等信息。 圖3 規則匯總信息 第一部分:規則的長度分布:就是minlen到maxlen之間的分布。如上例,len=2有492條規則,len=3有372條規則… 第二部分:quality measure的統計信息 第三部分:挖掘的相關信息。 了解了這些信息以后,我們所最關心的就是具體規則了,使用inspect()函數進行查看具體的規則,下面我們先展現前十條規則: 圖4規則的具體展示 本文選擇了國泰安數據庫中的部分股票進行關聯規則的應用實驗分析,得到了許多有意義的規則。如上圖,在支持度為1%,置信度為10%的條件下,代碼為000026和000678的兩只股票有同時上漲的趨勢,在上述挖掘結果的基礎上,我們可以進行二次挖掘,進一步分析各支股票之間趨勢變化的周期性和多維相似性等,得到更多有用的結果。 【參考文獻】 [1]Usama Fayyad,Gregpru Oatesdu-Shapiro,Padhraic Smyth,RAMASACY UTHURU SAMYMY,ETAL.Advances in Knowledge Discovery and Data Mining[M].AAAI Press/The MIT Press,1996. [2]Gregory Piatesdy-Shapiro,Willam J Frawley,Editors.Knowledge Discovery in Databases[M].AAAI Press,1991. [3]陸麗娜,陳亞萍,揚麥順,等.挖掘關聯規則算法的優化處理[J].計算機工程與應用,2000,(8):99~102. [4]鄭朝霞,劉延建.關聯規則在股票分析中的應用[J].成都大學學報,2002,(12),46-49.



三、相關結果