天天看點

實時股票分析系統的架構與算法

【編者的話】如果能在一台伺服器上應用人工智能和機器學習算法處理每天的股票交易,而自己則在夏威夷的海灘上享受生活,那将是多麼惬意呀。雖然股票 價格的變化受多種因素的影響,世上也沒有免費的午餐,但是有些公司依然能夠借助于開源的機器學習算法和資料分析平台得到“更好、更健康、更便宜的午餐”。 本文搜集并整理了一些如何實作實時股票分析系統的資料,從架構和算法兩個層面給出了一種可行的方案。

雖然股票交易市場一直在持續地變化,經濟力量、新産品、競争、全球性的事件、法規、甚至是tweet都 有可能引起市場的變動,但是在這個市場上,使用不同的模型通過股票的曆史價格來預測未來的價格依然是一種常見的實踐。一個實時的股票分析系統不僅需要将影 響股票價格的各種資料集合起來進行分析,還需要具有響應低延遲的特性,因而架構必須是高可伸縮、高擴充的,一方面随着時間的流逝,系統将存儲越來越多的數 據;另一方面資料處理應用程式必須能夠通過添加更多的節點進行水準擴充以保持實時地響應速度。

來自于pivotal公司的企業應用解決方案架構師william markito最近在公司的部落格上發表了題為《實時股票預測系統開源參考架構》的文章,介紹了一個通過開源技術實作實時股票分析系統的參考架構。雖然該架構關注于金融交易,但是也适用于其他行業的實時用例場景。william markito首先從最頂層的視角,給出了一個高層架構圖:

實時股票分析系統的架構與算法

從最頂層的視角看,由預測模型驅動的最優化實時股票預測架構包含資料存儲、模型訓練、實時評估和采取行動四部分:首先,進入系統的實時交易資料必須 被捕獲并存儲,作為曆史資料。第二,系統必須能從資料的曆史趨勢中學習,識别出影響決定的模式和機率。第三,系統需要能夠實時地将新傳入的交易資料與從曆 史資料中學到的模式和機率進行比較。最後,系統還需要預測出輸出并決定所要采取的行動。

之後,william markito又使用spring xd (現在稱為spring cloud data flow,是一個統一并且可擴充的分布式系統,可用于資料抽取、實時分析、批量處理和資料導出場景)、apache geode (一個針對高可擴充應用程式的開源分布式記憶體資料庫,目前正在孵化中)、spark mllib 、apache hawq (一個hadoop原生的大規模并行sql分析引擎)以及apache hadoop™等開源元件對架構中的每一部分進行了細化:

實時股票分析系統的架構與算法

如圖所示,整個資料流包含6步,每一部分都是松耦合并且可以水準擴充的:

1.使用spring xd讀取并處理通過yahoo! 金融web服務api擷取到的實時資料,然後通過apache geode 将資料存儲在記憶體中。

2.使用 apache geode中的實時熱資料,通過spark mlib應用建立并訓練模型,将新資料與曆史模式進行比較。當然,也可以使用其他工具集建立模型,例如 apache madlib或者r。

3.将訓練出的機器學習模型推送到部署好的應用程式上,同時更新 apache geode以便于進行實時預測和決策。

4.随着時間的推移,有一部分資料将變成冷資料,将這一部分資料從 apache geode移動到apache hawq上并最終存儲到apache hadoop™中。

5.周期性地基于整個曆史資料集重新訓練并更新機器學習模型。這一步讓系統形成了一個閉環,當曆史模式發生變化或者新的模式出現的時候,它會持續地更新和提升模型。

為了讓讀者能夠在自己的筆記本上運作這一架構,william markito還給出了一個更為簡化的實作,該版本移除了長期的資料存儲元件apache hawq和apache hadoop™。

實時股票分析系統的架構與算法

該解決方案中的每一個元件都責任明确,支援擴充并且能夠在雲環境中運作。那麼除了架構之外,針對影響股票價格的不同因素,應該選擇哪些算法來訓練模型并預測股票價格趨勢呢?

在slideshare上largitdata的ceo david chiu介紹了如何通過隐馬爾科夫模型(hmm)來預測股票價格,david chiu認為股票的曆史行為與目前行為具有一定的相似性,明天的股票價格可能會遵循過去的某種模式:

實時股票分析系統的架構與算法

另外,在vatsal h. shah 的網站上還有一個文檔介紹了decision stump 算法、線性回歸、支援向量機、boosting 算法和基于文本分析的方法在股票預測領域的應用,并對這些算法的預測結果進行了比較。

除此之外,與上市公司相關的新聞動态也會對股票價格造成影響,例如并購定增事項、公司上司人的離開等等,對于這一問題,新加坡的資料科學家lim zhi yuan在slideshare上分享了一些自己的經驗。lim zhi yuan在該分享中研究了外部事件對于股票價格的影響,在分析時他分别通過線性模型和非線性模型兩種方法進行了實驗,線性模型采用了支援向量機(svm)算法,非線性模型采用了深度神經網絡模型。

實時股票分析系統的架構與算法