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

> Data — Image by Author
我們將僅使用一些可用變量:開(kāi)盤(pán)價(jià),最高價(jià),最低價(jià),收盤(pán)價(jià)和交易量。 這樣,我們將消除其他人。
- data$Date <- NULL
- data$Tick <- NULL
由于我們想知道下一次觀察的收盤(pán)價(jià),因此我們需要將以下值移動(dòng)到上方一行。 為此,我們創(chuàng)建一個(gè)函數(shù)并使用新數(shù)據(jù)在原始數(shù)據(jù)集中創(chuàng)建一個(gè)變量:
- #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
注意,我們?cè)谏厦娴牡谝恍蟹峙淞俗兞緾lose的值。 這樣,我們?cè)谧詈笠恍杏幸粋€(gè)NA,我們使用na.omit()函數(shù)來(lái)省略該行:
- #remove NA observationsdata <- na.omit(data)write.csv(data, "data.csv")
完美,我們已準(zhǔn)備好數(shù)據(jù)來(lái)開(kāi)始建模。
分割數(shù)據(jù)
在此問(wèn)題中,我們將使用名為H2O.ai的軟件包,該軟件包為我們提供了用于分析和訓(xùn)練人工智能模型的完整解決方案。 其用戶(hù)友好的結(jié)構(gòu)使沒(méi)有數(shù)據(jù)科學(xué)背景的人們能夠解決復(fù)雜的問(wèn)題。 首先將庫(kù)加載到我們的環(huán)境中:
- #Installing the packageinstall.packages("h2o")#loading the library library(h2o)
安裝和加載后,我們將啟動(dòng)虛擬機(jī),該虛擬機(jī)將用作構(gòu)建模型的基礎(chǔ)。 啟動(dòng)虛擬機(jī)時(shí),我們必須設(shè)置所需的內(nèi)核數(shù)和內(nèi)存參數(shù):
- #Initializing the Virtual Machine using all the threads (-1) and 16gb of memoryh2o.init(nthreads = -1, max_mem_size = "16g")
導(dǎo)入數(shù)據(jù):
- h2o.importFile("data.csv")h2o.describe(data)

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

> Model Description — Image by Author
應(yīng)用模型
現(xiàn)在我們有了領(lǐng)導(dǎo)者,讓我們將其應(yīng)用于測(cè)試數(shù)據(jù)! 這是最酷的部分,因?yàn)槲覀儗⑹褂媚P蜕形从^察到的數(shù)據(jù)來(lái)評(píng)估性能。
我們將模型和測(cè)試數(shù)據(jù)作為參數(shù)調(diào)用預(yù)測(cè)函數(shù)!
- predictions <- h2o.predict(automodel@leader, test)
結(jié)論
在這篇文章中,我們看到了如何處理和操縱資產(chǎn)的財(cái)務(wù)數(shù)據(jù),并輕松創(chuàng)建了機(jī)器學(xué)習(xí)模型,以便在分析數(shù)據(jù)后的一小時(shí)內(nèi)對(duì)收盤(pán)價(jià)做出預(yù)測(cè)。
該模型的評(píng)估和優(yōu)化將在下一篇文章中進(jìn)行。
下周見(jiàn)!