趙會群,曲 藝
(北方工業大學 信息學院,北京 100144)
為了解決組合投資預測問題,我們不僅需要各個投資項信息數據,還需要宏觀經濟因素、微觀經濟因素、行業因素等大量數據。然而真實、大量、多樣的金融數據由于保密性、時間等一些問題的限制不易獲取,因此需要一種可以基于真實數據集建模并保持真實數據集特征的大數據生成方法。
真實的金融數據一般以時間序列的形式表現。現關于時間序列數據模擬和生成的方法主要有:回歸移動平均模型(autogressive integrated moving average,ARIMA)[1]、自回歸條件異方差模型(autoregressive conditional hete-roscedasticity model,ARCH)[2]、支持向量回歸模型(support vector regression,SVR)[3]、長短期記憶網絡模型(long short term memory,LSTM)[4]等。由于本文所需模擬生成的數據表現出較明顯的季度或月度的周期性變化,所以將采用季節性差分自回歸移動模型(seasonal autogressive integrated moving average,SARIMA)來對各項時間序列數據進行自動模擬生成,為原有歷史數據集補充部分未來數據,用于后續組合投資數據生成模型的更新。
為了解決組合投資預測的數據生成問題,需要先將其轉化為影響因素和投資項的組合優化問題,通過模型分析各數據項之間的關系,最終生成大規模數據集。近年來,已有學者使用遺傳算法[5]、粒子群算法[6]、蟻群算法[7]等解決組合優化問題的經典算法,來實現測試數據的自動生成。此外,由于貝葉斯網絡模型[8]可清晰揭示節點變量間的關系及概率分布,該模型同樣已應用于數據生成領域。但隨著時間的變化和金融數據的增加,將更新的信息應用到投資組合預測之中是十分必要的。本文提出一種基于增量式貝葉斯網絡的投資組合數據生成方法,可以實現基于動態更新的數據集,生成具有大數據4V(variety, volume, velocity, value)特性的[9]、保持一定準確度的數據集。
迄今為止,已經有一些應用于大數據領域的數據生成器和數據生成算法的研究。金澈清等[10]在介紹數據管理系統評測基準的發展同時,也詳細介紹了數據驅動的數據生成方式和查詢驅動的生成方式在各數據庫系統基準中的實現。詹劍鋒等[11]詳細介紹了其研制的BigDataBench,即一種開源的大數據系統評測基準。并提供了一種通過真實數據的建模分析,快速生成保持真實數據特征的指定規模數據集的大數據生成工具(BDGS)。目前該工具可生成文本、表和圖這3種類型的數據。
本文中所用到的各項金融數據本質上是一種時間序列數據。所以,當涉及到對數據集進行生成擴展時,可以通過訓練時間序列模型來生成數據。目前已有時間序列模型和時間序列分析方法,通過序列的歷史統計數據揭示現象隨時間變化的規律,并按照需要將該規律延伸到未來。孫亞圣等[12]提出基于注意力機制的行人軌跡預測生成模型(AttenGAN),生成器使用LSTM算法根據行人過去的軌跡對未來的可能性進行預測,判別器用來判斷一個軌跡是否真實,進而促進生成器生成符合社會規范的預測軌跡。敖建松等[13]針對數據的時序性,利用ARIMA模型對未來時刻數據進行預測生成,計算出各個狀態數據偏離正常狀態空間的程度,再使用滑動窗口對過去和未來的數據進行融合計算,實現工控系統網絡的態勢感知。Vasantha Kumar S等[14]通過SARIMA模型利用有限的歷史數據,分析出長期趨勢和季節性模式,并利用該模型對交通流量數據進行短期的準確預測,且發現SARIMA模型性能優于簡單ARIMA模型。
用時間序列模型生成數據,擴展數據集,只保證了生成數據的時序性,但本文主要解決如何生成組合投資數據的問題,還需要生成的數據保持數據相關性等真實特征。本文將組合投資數據的生成模型構建轉化成組合優化問題,并根據模型生成大數據集。以下是目前外關于該類問題的部分研究成果:曾夢凡等[7]采用一種解決組合優化問題的搜索算法——蟻群算法,應用于求解覆蓋表的生成問題。為了挖掘蟻群算法生成覆蓋表的潛力,文章對參數配置、演化策略等進行調整,并引入并行計算來節省時間開支。馬驪等[15]先利用支持向量機對匯率進行短期的預測,然后提出基于Pareto排序理論的雙目標非支配排序人工魚群算法(nondominated sorting artificial fish swarm algorithm,NSAFSA)來求解生成外匯投資組合方案。
上述生成模型,可以生成各項變量的組合方案,但未能清晰體現各變量之間的相關關系。而本文通過增量式貝葉斯網絡模型體現各項變量之間潛在的關系,并且可以隨著新生成的數據集的加入,對原有的歷史網絡進行更新。以不同時間段的網絡中各變量之間的關系及概率為基礎,按照需求對網絡進行路徑搜索,并生成所需數據。目前已有研究將增量式貝葉斯網絡模型應用于海量數據流的分析處理[16]和金融數據的預測等領域,但尚未被應用于組合投資數據內在關系的挖掘、生成用于組合投資預測的大數據集方向。
時間序列數據作為數據的表現形式之一,真實地記錄了不同時間點(或時間片)的各種重要信息,其中蘊含著豐富而有價值的知識。本文使用SARIMA對多列金融時間序列數據進行生成。SARIMA模型來源于差分自回歸移動平均模型(ARIMA)。ARIMA(p,d,q)模型中,p為自回歸項數,q為移動平均項數,d為時間序列成為平穩序列所做的差分次數。若時間序列{Yt}是一個非平穩序列,ARIMA模型可表示為
Φ(B)ΔdYt=c+Θ(B)εt
(1)

SARIMA(p,d,q)(P,D,Q)s模型主要用于分析由于周期性(包括周度、月度、季度、年度等)變化或因其它因素引起的具有周期性變化的時間序列,對ARIMA模型進行基于周期的季節差分。設季節性序列的變化周期為s,季節差分算子定義為
Δs=1-Bs
(2)
Bs為s步滯后算子。若季節性時間序列用{Yt}表示,則一次季節差分表示為
Δs·yt=(1-Bs)yt=yt-yt-s
(3)
若{Yt}為非平穩季節性時間序列,則需進行D次季節差分,并建立關于周期為s的P階自回歸Q階移動平均季節時間序列模型
(4)
現有的SARIMA模型建立方法中通常先對數據進行平穩性檢驗及處理:觀察序列是否為平穩的時間序列,如果序列是非平穩的時間序列,則需要對原序列進行普通差分和季節差分,并由此確定參數d,D;通過觀察時間序列的自相關、偏自相關函數的截尾或者拖尾特性,確定模型的p,q,P,Q參數。
但本文中需要對數據集中多列時間序列數據進行數據自動生成。上述步驟大多需要人工觀察確定參數取值,且對于不同的時間序列數據,模型的參數也會不盡相同。但通過文獻閱讀和多次實驗發現,p,q,d,P,Q,D的取值范圍都較為常規,所以本文使用網格搜索法確定模型最優參數組合。之后使用確定的參數組合,對模型進行檢驗和測試,若實用測試集中數據得出的預測值與實際值的相對誤差小于5%,則說明建立的模型準確度較高,該模型可準確地模擬生成未來的數據。
算法1:SARIMA模型建模及數據生成算法
input:歷史數據集D中的m列時間序列數據,參數的取值范圍[i,j],需要生成的數據數量n
output:生成的n行m列新數據集D’
(1)begin
(2)fori←1…m/*處理數據集D中第i列時間序列數據*/
(3) 對讀取的差分后平穩數據進行歸一化處理
(4)pSet=(1,1,1)(1,1,1) /*為最優參數組合設置初始值*/
(5)minAic=-231
(6)forp,d,q,P,D,Q←i…j//尋找最優參數
(7) 將(p,d,q)(P,D,Q)帶入SARIMA模型中,計算當前參數對應的模型aic值nAic
(8)IfnAic (9)minAic=nAic (10)pSet=(p,d,q)(P,D,Q) (11)fork←1…n (12)通過SARIMA(p,d,q)(P,D,Q)s模型進行滾動預測生成第k個值Pk (13)D’=D’∪Pk (14)End 貝葉斯網絡是一種基于概率論和圖論的不確定性知識表示和推理的模型,可以定量且定性地描述隨機變量之間關系,可以形象、直觀展示數據中所蘊涵的知識信息。但股票、房產、以及經濟、政策等影響因素,均具有很強的時效性;而且模型在建立時本身就會有一定的誤差,再加上數據隨著時間而變化,就會出現構建的歷史模型無法適應新數據的情況。所以若想生成長期的組合投資方案數據,網絡需要隨著新產生的數據進行調整。貝葉斯網絡更新技術可以讓原有的歷史模型隨著新數據加入發生變化,使貝葉斯網絡模型具有更全面的描述能力,以便后續生成更可靠的數據。 目前常用的貝葉斯網絡更新算法主要有兩種:一種方法是naive方法,這是一種批量式算法,該算法在新數據到來時將新舊數據集整合到一起,在一個更大的數據集下舍棄已有結構重新學習,如圖1所示,但這種方法需要消耗大量的存儲空間和計算時間。另一種解決方法MAP方法,是把通過學習歷史數據訓練得到的模型看作歷史數據的代表,這樣可以避免重復多次地處理歷史數據,如圖2所示。但是這一模型過于依賴歷史模型,可能會在多次迭代后,不能再根據新數據更新模型。 圖1 naive方法 圖2 MAP方法 本文將采用一種增量式學習方法對貝葉斯網絡模型進行更新。該方法的主要思想是,從歷史數據中隨機抽取一定量的數據樣本,與新數據集合并之后,訓練出貝葉斯網絡結構,再將此貝葉斯網絡結構與歷史模型做并集處理,以完善貝葉斯網絡結構。最后進行參數的學習,對網絡參數進行更新,如圖3所示。 圖3 增量式方法 使用上述算法1時間序列生成結果作為新加入的數據集,結合歷史數據及歷史貝葉斯網絡,得到更新的貝葉斯網絡,并以時間為新貝葉斯網絡命名保存于對應矩陣中,以便后續按照時間調用查詢。具體實現算法如下。 算法2:貝葉斯網絡模型更新算法 input:歷史數據集D, 其中的變量集合為V={X1,X2,…,Xn},歷史數據集訓練的貝葉斯網絡S(G,θ),其有向無環圖G(V,E),新數據集Dnew,且其變量集合Vnew={X1,X2,…,Xm} output:更新的貝葉斯網絡S(G’,θ’) (1)Begin (2)ifn!=mthen: (3) 從D中隨機抽取p條數據,組成數據集D’ (4)Dt=D’∪Dnew (5) 使用K2算法通過Dt訓練出貝葉斯網絡結構 (6)Gnew(Vnew,Enew) (7)V’=V∪Vnew (8)E’=E∪Enew (9)G’=(V’,E’) #更新的貝葉斯網絡結構 (10)Endif (11) 原參數θ變成貝葉斯網絡中的先驗參數 (12) 通過Dt內數據,使用最大似然估計求得更新的參數θ’ (13)End 用于組合投資預測的大數據生成算法主要分成兩步實現。首先是在分析對應的貝葉斯網絡結構及其概率分布表,按照需求在貝葉斯網絡模型上進行路徑搜索,生成可用于組合投資方案測試的路徑數據集合,及集合中各路徑的概率;之后,根據集合中的路徑節點取值及對應的概率生成所需數量的大數據集。 選取指定時間段的貝葉斯網絡,此貝葉斯網絡是對該段時間內新舊數據中各項關系的精確刻畫。按需求選取起始節點Xs和終止節點Xe,按照給定的條件概率閾值Pmin和每條組合數據的規模Len,使用回溯法生成出以Xs為起始節點,Xe為終止節點的所有路徑長度大于最低閾值的節點序列,并計算每個序列節點不同取值的概率,保留概率大于設定概率閾值的序列變量的取值。最后根據需求,對不同貝葉斯網絡迭代生成數據集。 以圖4為例,圖中X1節點到X4、X5節點的路徑:X1->X3->X4,X1->X4,X1->X3->X5,X1->X2->X5。以X1到X4路徑為例,假設概率最低閾值為0.7,由概率表計算X1->X4路徑上節點不同取值概率,P(X4=1|X1=1,X3)=P(X4=1|X3=0,X1=1)*P(X3=0|X1=1)+P(X4=1|X3=1,X1=1)*P(X3=1|X1=1)=0.676,同理可求P(X4=0|X1=1,X3)=0.324,P(X4=0|X1=1,X3)=0.028,P(X4=1|X1=1,X3)=0.972,在這條路徑上,X4=1,X1=1時概率最大且超過所定閾值,保存該路徑節點取值及相應概率。按照此方法,生成網絡路徑節點取值及概率的集合,此集合可用于組合投資預測的分析研究。 圖4 貝葉斯網絡例圖 算法3:組合數據集生成算法 input:貝葉斯網絡集,需要預測生成的年份y,開始節點Xs,終止節點Xe output:貝葉斯結點不同取值的路徑序列,及其概率的集合 (1)Begin (2)G=BN[y],SS{}=?,ES=?,Xvisit[n]=0/*取時間標記為y的貝葉斯網絡矩陣,初始化序列集合,其中n為網絡結構中的節點數目*/ (3)Generate_ES(Xs,Xe,Len,Pmin) /*生成Xs…Xe節點序列,Len是序列長度的閾值,Pmin是概率的最低閾值*/ (4){ (5)ES∪Xs (7) { (8)SS∪ES (9)ES=ES-Xlast/*回溯到上一個訪問節點*/ (10) return (11) } (12)Xvisit[Xs]=1 //標記Xs已被訪問過 (13)if(Xs存在鄰接點) (14) { (15)for(k←1…m) //m為Xs的鄰接點數 (16)if(Xvisit[Xk] == 0) //Xk未被訪問過 (17) Generate_ES(Xk,Xe,Len,Pmin) (18)ES=ES-Xlast//回溯 (19) } (20)else (21)ES=ES-Xlast//回溯 (22) } (23)generate_probablity_ES() (24){ (25) generate_ES(Xs,Xe) (26)if(SS!= null) (27) { (28)for(i←1…n) /*計算每個序列發生的聯合概率,保留概率大于最低閾值的序列*/ (29) P(Si) =P(Xi|X1…Xi-1)P(Xi-1|X1…Xi-2)…P(X1) (30) if(P(Si)>Pmin) (31) { (32)OutS=Si (33) } (34) } (35)else (36)Xs,Xe條件獨立 (37) } (38)End 可根據已有網絡路徑和路徑節點取值概率數據集,通過權重隨機生成方法,生成所需數量的大數據集。 在配置為Intel Xeon 3.00 GHz,NVIDIA Tesla K40c GPU,64 G內存,Windows10操作系統,Python 3.6的實驗平臺環境下編程實現本文算法。 投資項2008年12月到2019年10月歷史數據來源如下:選取在十大行業中具有較大影響力的10支股票,分別為中國石油、寶鋼股份、中國建筑、中國聯通、中國中車、長江電力、格力電器、恒瑞醫藥、貴州茅臺和中國平安,在Tushare數據庫中,獲取以上10支股票的收益率,以及滬深300指數的收益率數據;房價數據來源于安居客網站北京市石景山區房價月平均數據。 另外,宏觀經濟因素2008年12月到2019年10月數據來源如下:央行存款利率、存款準備金率、貸款利率均下載自中國人民銀行官網;貨幣和準貨幣供應量M2、商品消費總額、證券投資者信心指數來自東方財富網數據中心;商品住宅銷售額、房地產投資額來自于國家統計局網站公布的月度數據。其中2008年12月到2018年12月的所有數據為訓練數據,2019年1月到10月數據作為測試數據。 首先,由于數據時間頻率不一致,我們按照月份做平均值重采樣處理。另外,由于構建貝葉斯網絡的需要,對數據進行離散化處理。先對數據做一階差分,對于時間序列數據{Xt},p階差分運算公式為 ΔPXt=ΔP-1Xt-ΔP-1Xt-1 (5) 一階差分后即獲得所有數據的變化值,然后對求得的變化值做如式(6)的離散映射處理,用于貝葉斯網絡的訓練。式(6)的意義為,當某變量數據值呈上升趨勢時取值為1,下跌趨勢時為0,平穩趨勢時為2。離散化處理完后的部分數據見表1 (6) 表1 離散后的部分數據 利用處理好的歷史數據訓練模型,得到貝葉斯網絡結構結果如圖5所示,淺灰色的節點表示宏觀經濟因素,白色節點為股票和房地產等投資項。表2為網絡中節點變量對照。 圖5 歷史數據生成的貝葉斯網絡 表2 貝葉斯網絡變量聲明 央行存款、貸款利率、存款準備金率數據值較穩定,采用權重隨機生成方法,此方法較于隨機生成更符合現實情況。本實驗中,生成3年數據。實驗結果如圖6所示。 圖6 存款利率、貸款利率、存款準備金率數據生成結果 對其余數據使用SARIMA算法生成新數據,以便后續貝葉斯網絡的更新。由于生成數據種類較多,此處以第一列數據貨幣和準貨幣供應量M2變化量為例,展示使用SARIMA時間序列算法,通過學習歷史數據對未來3年新數據進行生成的過程。由于處理過的數據已較為平穩但數值較大,實驗中使用min-max標準化處理數據。其中2009年1月-2016年12月的數據用于模型標定,2017年1月-2018年12月數據用于模型預測評估。 數據處理完后對SARIMA(p,d,q)(P,D,Q)s模型參數進行確定。由于進行1階差分已使數據平穩,d=D=1,s為時間序列的周期,本實驗中使用的是月度數據,s取12。運用算法1確定其余參數,并將確定的參數組合帶入模型中,對兩年數據進行預測。如圖7所示,灰色實線表示真實值,黑色點線為預測值。 圖7 2年數據預測結果 從圖中可看出預測結果與真實值較為接近,且基本擬合真實值的變化趨勢。計算出預測的MSE(均方誤差)為0.02,驗證該模型的預測精確度較高。模型建立且經過評估后,生成未來3年的數據。最后將生成的數據從歸一化的形式還原,結果見表3。 表3 生成3年數據部分結果 按照以上方法,生成其余各項的3年數據,按照年份分成3個數據集,且分別加入歷史數據集中未使用的股票數據,模擬新數據集中出現的新變量。 按照算法2從歷史數據集中隨機抽取部分數據,與上一節新生成的2019年數據集合并,并用此合并的數據集訓練出一個新的貝葉斯網絡。如圖8所示。 圖8 合并數據集生成的貝葉斯網絡 與圖5對比可看出,新數據集訓練的網絡中,有編號16的深灰色新節點,該節點代表貴州茅臺,且增加了以下邊:(1, 12),(7, 9), (2, 9), (2, 7), (1, 3), (3, 4), (1, 6), (9, 10), (13, 16), (15, 16), (3, 5), (13, 15), (5, 7), (6, 9), (11, 16), (2, 6), (6, 7), (3, 6), (5, 11)。合并歷史數據、新數據集訓練出的貝葉斯網絡,實現貝葉斯網絡更新,生成可以對2019年各節點關系更準確描述的貝葉斯網絡,結果如圖9所示。并對該網絡進行參數學習,獲得各節點的概率分布表。 圖9 更新后的2019年數據貝葉斯網絡模型 按照以上方法,繼續生成對應2020年數據的貝葉斯網絡,其中的新節點17,18分別代表恒瑞醫藥,格力電器的收益率;以及2021年數據的貝葉斯網絡,圖中新加入的節點19,20分別代表長江電力,中國中車股票的收益率。最后結果如圖10所示。 圖10 2020年、2021年數據的貝葉斯網絡模型 以圖9:2019年數據的貝葉斯網絡模型為例,根據該模型生成可用于2019年的組合投資測試數據集。將聯合概率閾值設置為0.6,實驗起始節點設置為9,終止節點為16,生成投資項的組合,結合算法3生成的節點序列和節點取值數據見表4。 可根據上述方法生成網絡中所有節點路徑序列集合,及路徑中節點不同取值對應的概率,確定節點之間取值變化趨勢的關系,用于指導生成可用于組合投資預測的大數據集。本實驗中生成以天為時間單位的365行,16列的2019年的離散數據集,部分數據見表5;生成的離散數據集可確定數據變化的趨勢,數據集中每列數據的均值和方差可用來確定生成數據值的范圍,可由此進一步生成連續值數據。 表4 部分路徑節點取值及概率 表5 生成的離散數據集 將生成的2019年前10個月每月所有的離散數據,與測試集中2019年的10個月真實數據分別進行比較,使用余弦相似度來衡量生成數據與真實數據的接近程度,余弦值越接近1,表示兩個向量相似度越高。測試集相似度值如圖11所示,從圖中可看出,生成數據集與樣本數據集相似度均超過70%,基本保留真實數據的事件分布特征。 圖11 2019年生成數據相似度 針對當下組合投資預測對數據需求問題,本文提出一個基于增量式貝葉斯網絡模型的大數據生成方法。本文涉及時間序列生成算法,可自動批量地對多列時間序列數據進行較準確的生成;構建增量式貝葉斯網絡,使得貝葉斯網絡可以隨著新數據的產生動態更新,便于后續生成長期準確數據;對貝葉斯網絡進行路徑搜索生成各節點的路徑集合,在集合中各個路徑節點取值及其對應的概率基礎上,生成大數據集。結果表明,大數據生成系統可以生成保持時序性與相關性特征的數據,彌補了實際數據的不足,生成數據可滿足組合投資預測研究所需。然而本文在更新貝葉斯網絡選取歷史數據的方法較為簡單,只是選取歷史數據最后幾項數據;另外,由生成的離散值轉換為連續值數據的方法也有待進一步研究。2.2 貝葉斯網絡更新算法



2.3 數據生成算法


3 實驗分析
3.1 實驗環境搭建
3.2 實驗數據來源和處理


3.3 歷史數據模型構建


3.4 新時間序列數據集的生成



3.5 貝葉斯網絡的更新



3.6 組合數據及大數據集生成



4 結束語