使用機器學習預測股票價格的愚蠢簡便方法
在這篇文章中,我展示了使用H2o.ai框架的機器學習,使用R語言進行股票價格預測的分步方法。 該框架也可以在Python中使用,但是,由于我對R更加熟悉,因此我將以該語言展示該教程。 您可能已經問過自己:如何使用人工智能預測股價? 這是執(zhí)行此操作的步驟:
- 收集資料
- 導入數據
- 清理和處理數據
- 分開進行測試和培訓觀察
- 選擇型號
- 訓練模型
- 將模型應用于測試數據
- 評估結果
- 必要時增強模型
- 重復步驟5至10,直到對結果滿意為止。
在上一篇文章中,我展示了如何使用Plotly庫繪制高頻數據,并解釋了如何收集數據以進行分析。 讓我們直接跳到列表中的第3步,如果您想知道如何執(zhí)行第1步和第2步,請訪問上一本出版物。
我們的研究問題是:"下一個小時資產的收盤價是多少?"
數據清理
導入要使用MetaTrader進行預測的資產數據后,我們需要更改一些變量。 首先,我們定義變量的名稱:
- #seting the name of variables
- col_names <- c("Date", "Open", "High", "Low", "Close", "Tick", "Volume")
- colnames(data) <- col_nameshead(data)
我們的數據將采用以下形式:

> Data — Image by Author
我們將僅使用一些可用變量:開盤價,最高價,最低價,收盤價和交易量。 這樣,我們將消除其他人。
- data$Date <- NULL
- data$Tick <- NULL
由于我們想知道下一次觀察的收盤價,因此我們需要將以下值移動到上方一行。 為此,我們創(chuàng)建一個函數并使用新數據在原始數據集中創(chuàng)建一個變量:
- #shifting n rows up of a given variableshift <- function(x, n) { c(x[-(seq(n))], rep(NA, n))}data$shifted <- shift(data$Close, 1)tail(data)

> Data — Image by Author
注意,我們在上面的第一行分配了變量Close的值。 這樣,我們在最后一行有一個NA,我們使用na.omit()函數來省略該行:
- #remove NA observationsdata <- na.omit(data)write.csv(data, "data.csv")
完美,我們已準備好數據來開始建模。
分割數據
在此問題中,我們將使用名為H2O.ai的軟件包,該軟件包為我們提供了用于分析和訓練人工智能模型的完整解決方案。 其用戶友好的結構使沒有數據科學背景的人們能夠解決復雜的問題。 首先將庫加載到我們的環(huán)境中:
- #Installing the packageinstall.packages("h2o")#loading the library library(h2o)
安裝和加載后,我們將啟動虛擬機,該虛擬機將用作構建模型的基礎。 啟動虛擬機時,我們必須設置所需的內核數和內存參數:
- #Initializing the Virtual Machine using all the threads (-1) and 16gb of memoryh2o.init(nthreads = -1, max_mem_size = "16g")
導入數據:
- h2o.importFile("data.csv")h2o.describe(data)

> Data into h2o — Image by Author
現在,我們定義我們要在數據集中預測的變量以及將用于"教導"模型的變量。
- y <- "shifted" #variable we want to forecastx <- setdiff(names(data), y)
然后,我們按訓練數據的80%的比例將數據分為訓練和測試。
- parts <- h2o.splitFrame(data, .80)train <- parts[[1]]test <- parts[[2]]
分割數據后,我們轉到H2O.ai軟件包不可思議的部分。
選擇模型
每個數據科學家在創(chuàng)建其機器學習項目時需要執(zhí)行的任務之一就是確定最佳模型或一組模型以進行預測。 這需要大量的知識,尤其是扎實的數學基礎,才能為特定任務選擇最佳知識。
借助H2O.ai軟件包,我們可以要求它為我們選擇最佳模型,同時還要照顧其他任何問題。 這稱為自動建模。 顯然,這種魔力可能不是解決問題的最有效方法,但這是一個好的開始。
訓練模型
要創(chuàng)建我們的模型,我們調用automl函數并傳遞必要的參數,如下所示:
- automodel <- h2o.automl(x, y, train, test, max_runtime_secs = 120)
幾分鐘后,我們將獲得按性能排序的模型列表。 要了解有關它們的更多信息,請致電:
automodel@leader

> Model Description — Image by Author
應用模型
現在我們有了領導者,讓我們將其應用于測試數據! 這是最酷的部分,因為我們將使用模型尚未觀察到的數據來評估性能。
我們將模型和測試數據作為參數調用預測函數!
- predictions <- h2o.predict(automodel@leader, test)
結論
在這篇文章中,我們看到了如何處理和操縱資產的財務數據,并輕松創(chuàng)建了機器學習模型,以便在分析數據后的一小時內對收盤價做出預測。
該模型的評估和優(yōu)化將在下一篇文章中進行。
下周見!