AI股神:如何用機器學習預測股價?
本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。
首先要強調,文中只是簡單展示了怎樣上手H2o.ai機器學習框架,并不作為投資理財的建議。不要簡單根據本文就做出任何投資理財的決策。
本文將向你展示如何使用R語言和H2o.ai機器學習框架預測股價。該框架也可以在Python中使用,但因為筆者更熟悉R語言,所以本文就用R語言來演示。以下是詳細的步驟:
- 搜集數據
- 導入數據
- 整理并操作數據
- 分割測試并觀察訓練
- 選擇模型
- 訓練模型
- 用模型測試數據
- 評估結果
- 如有必要便改進模型
- 重復步驟5到10,直到對結果滿意為止
本文研究的問題是:股票在接下來一小時的收盤價是多少?
數據整理
導入想要通過MetaTrader軟件進行預測的資產數據之后,需要更改一些變量。首先,定義變量名稱:
- #seting the name of variables
- col_names <- c("Date", "Open", "High","Low", "Close", "Tick", "Volume")
- colnames(data) <- col_names
- head(data)
數據格式如下:

我們僅用到開盤價、最高價、最低價、收盤價和交易量等一些能獲得的數據,那么就需要清除其他數據:
- data$Date <- NULL
- data$Tick <- NULL
因為我們想知道下一個觀測期的收盤價,所以需要將下面的值移到上一行,需要用新數據在原始數據集中創建函數并設置變量:
- #shifting n rows up of a given variable
- shift <- function(x, n) {
- c(x[-(seq(n))], rep(NA, n))
- }
- data$shifted <- shift(data$Close, 1)
- tail(data)
注意,我們已在上一行中給變量收盤價賦了值。所以,在最后一行中會出現NA,我們用na.omit ()函數跳過這一行:
- #remove NA observations
- data <- na.omit(data)
- write.csv(data, "data.csv")
OK,數據已準備就緒,可以開始建模了。
分割數據
用H2O.ai進行數據分割。H2O.ai為我們分析和訓練人工智能模型提供了一套完整的解決方案,非常好用,即便是沒有任何數據科學背景的人也能使用它來解決復雜的問題。先下載H2O.ai:
- #Installing the package
- install.packages("h2o")
- #loading the library
- library(h2o)
安裝加載好后,啟動用于建模的虛擬機。啟動虛擬機時,必須設置所需的核數和內存參數:
- #Initializing the Virtual Machine using all the threads (-1) and 16gb ofmemory
- h2o.init(nthreads = -1, max_mem_size = "16g")
導入數據:
- h2o.importFile("data.csv")
- h2o.describe(data)
接著定義想要在數據集中預測的變量,以及那些用于訓練模型的變量:
- y <- "shifted" #variable we want to forecast
- x <- setdiff(names(data), y)
隨后,分割數據,分別用于訓練和測試,其中80%用于訓練數據。
- parts <- h2o.splitFrame(data, .80)
- train <- parts[[1]]
- test <- parts[[2]]
完成這些步驟,就是時候見證H2O.ai創造奇跡的時候了。
選擇模型
每一位數據科學家在創建自己的機器學習項目時,必須完成的一項任務便是識別出最佳的一個或一組模型來進行預測。這需要大量的知識,尤其是深厚的數學基礎,來決定針對特定任務的最佳方案。
我們可以借助H2O.ai來選擇最佳模型,這樣就可以騰出時間解決其他問題,這便是自動建模。雖然這可能不是解決問題最有效的方法,卻是一個不錯的嘗試。
訓練模型
創建模型,需要調用automl函數并傳遞必要的參數:
- automodel <- h2o.automl(x, y, train, test, max_runtime_secs = 120)
幾分鐘后,我們就能獲取一個按性能順序排列的模型列表:

運用模型
現在,可以用模型來測試數據啦!你還可以用模型對尚未觀察到的數據進行性能評估,以模型和測試數據作為參數調用預測函數:
- predictions <- h2o.predict(automodel@leader, test)
好啦,靜待一小時,看看你的預測能否成真吧。
免責聲明:本文不是投資建議,預測股票價格并不是一項簡單的任務,本文只是簡單說明了用H2O.ai解決機器學習問題是多么容易。預測股價走勢非常容易,但這并不意味著預測都是正確或準確無誤的。