拓端tecdat|R語言結合新冠疫情COVID-19對股票價格預測:ARIMA,KNN和神經網絡時間序列分析


原文鏈接:http://tecdat.cn/?p=24057

原文出處:拓端數據部落公眾號

1.概要

本文的目標是使用各種預測模型預測Google的未來股價,然后分析各種模型。Google股票數據集是使用R中的Quantmod軟件包從Yahoo Finance獲得的。


2.簡介

預測算法是一種試圖根據過去和現在的數據預測未來值的過程。提取並准備此歷史數據點,來嘗試預測數據集所選變量的未來值。在市場歷史期間,一直有一種持續的興趣試圖分析其趨勢,行為和隨機反應。不斷關注在實際發生之前先了解發生了什么,這促使我們繼續進行這項研究。我們還將嘗試並了解 COVID-19對股票價格的影響。


3.所需包

  1.  
    library(quantmod) R的定量金融建模和交易框架
  2.  
    library(forecast) 預測時間序列和時間序列模型
  3.  
    library(tseries) 時間序列分析和計算金融。
  4.  
    library(timeseries) 'S4'類和金融時間序列的各種工具。
  5.  
    library(readxl) readxl包使你能夠輕松地將數據從Excel中取出並輸入R中。
  6.  
    library(kableExtra) 顯示表格
  7.  
    library(data.table) 大數據的快速聚合
  8.  
    library(DT) 以更好的方式顯示數據
  9.  
    library(tsfknn) 進行KNN回歸預測 

4.數據准備

4.1導入數據

我們使用Quantmod軟件包獲取了Google股票價格2015年1月1日到2020年4月24日的數據,用於我們的分析。為了分析COVID-19對Google股票價格的影響,我們從quantmod數據包中獲取了兩組數據。

  • 首先將其命名為data_before_covid,其中包含截至2020年2月28日的數據。
  • 第二個名為data_after_covid,其中包含截至2020年4月24日的數據。

所有分析和模型都將在兩個數據集上進行,以分析COVID-19的影響(如果有)。

  1.  
    getSymbols("GOG" fro= "2015-01-01", to = "2019-02-28")
  2.  
    before_covid <-dafae(GOOG)
  3.  
     
  4.  
    getSymbols("GOG" , frm = "2015-01-01")
  5.  
    after_covid <- as.tae(GOOG)
  6.  
     

4.2數據的圖形表示

  1.  
    par(mfrow = c(1,2))
  2.  
    plot.ts(fore_c)
  3.  
     

4.3數據集預覽

最終數據集可以在下面的交互式表格中找到。

table(before_covid)

 

4.4變量匯總

變量 描述
Open 當日股票開盤價
High 當日股票最高價
Low 當日股價最低
Close 當日股票收盤價
Volumn 總交易量
Adjusted 調整后的股票價格,包括風險或策略

5. ARIMA模型

我們首先分析兩個數據集的ACF和PACF圖。

  1.  
    par(mfrow = c(2,2))
  2.  
    acft(bfoe_covid)
  3.  
    pacf(bfre_covid)
  4.  
     

然后,我們進行 ADF(Dickey-Fuller) 檢驗和 KPSS(Kwiatkowski-Phillips-Schmidt-Shin) 檢驗,檢驗兩個數據集收盤價的時間序列數據的平穩性。

print(adf.test)

print(adfes(sata_after_covid))

通過以上ADF檢驗,我們可以得出以下結論:

  • 對於COVID-19之前的數據集,ADF檢驗給出的p值為 0.2093,該值大於0.05,因此說明時間序列數據 不是平穩的

  • 對於COVID-19之后的數據集,ADF檢驗給出的p值為0.01974,該值 小於0.05,這說明時間序列數據是 平穩的

print(kpss.s(t_before_covid))

print(kpss.est(Dafter_covid))

通過以上KPSS檢驗,我們可以得出以下結論:

  • 對於COVID-19之前的數據集,KPSS檢驗得出的p值為 0.01,該值小於0.05,因此說明時間序列數據 不是平穩的

  • 對於COVID-19之后的數據集,KPSS檢驗給出的p值為 0.01,該值小於0.05,這說明時間序列數據 不是平穩的

因此,我們可以從以上兩個檢驗得出結論,時間序列數據 不是平穩的

然后,我們使用 auto 函數來確定每個數據集的時間序列模型。

 auto.ar(befor_covid, lamd = "auto")

 auto.arma(after_covid)

從auto函數中,我們得出兩個數據集的以下模型:

  • 在COVID-19之前:ARIMA(2,1,0)
  • 在COVID-19之后:ARIMA(1,1,1)

獲得模型后,我們將對每個擬合模型執行殘差診斷。

  1.  
    par(mfrow = c(2,3))
  2.  
     
  3.  
    plot(before_covidresiduals)
  4.  
     
  5.  
     
  6.  
    plot(mfter_covidresiduals)
  7.  
     

從殘差圖中,我們可以確認殘差的平均值為0,並且方差也為常數。對於滯后> 0,ACF為0,而PACF也為0。

因此,我們可以說殘差表現得像白噪聲,並得出結論:ARIMA(2,1,0)和ARIMA(1,1,1)模型很好地擬合了數據。或者,我們也可以使用Box-Ljung檢驗在0.05的顯着性水平上進行檢驗殘差是符合白噪聲。

Box.test(moderesiduals)

Box.tst(moeit_fter_covidreia, type = "Ljung-Box")

在此,兩個模型的p值均大於0.05。因此,在顯着性水平為0.05的情況下,我們無法拒絕原假設,而得出的結論是殘差遵循白噪聲。這意味着該模型很好地擬合了數據。

一旦為每個數據集確定了模型,就可以預測未來幾天的股票價格。


6. KNN回歸時間序列預測模型

KNN模型可用於分類和回歸問題。最受歡迎的應用是將其用於分類問題。現在,使用r軟件包,可以在任何回歸任務應用KNN。這項研究的目的是說明不同的預測工具,對其進行比較並分析預測的行為。在我們的KNN研究之后,我們提出可以將其用於分類和回歸問題。為了預測新數據點的值,模型使用“特征相似度”,根據新點與訓練集上點的相似程度為值分配新點。

第一項任務是確定我們的KNN模型中的k值。選擇k值的一般經驗法則是取樣本中數據點數的平方根。因此,對於COVID-19之前的數據集,我們取k = 32;對於COVID-19之后的數據集,我們取k = 36。

  1.  
    par(mfrow = c(2,1))
  2.  
    knn_before_covid <- kn(bfrvdGO.Clse, k = 32)
  3.  
    knn_after_covid <- kn(ber_oiGOG.lose ,k = 36)
  4.  
     
  5.  
    plot(knn_before_covid )
  6.  
    plot(knn_after_covid )

然后,我們針對預測時間序列評估KNN模型。

  1.  
    before_cvid <- ll_ig(pdn_befr_vid)
  2.  
    afer_vd<- rog_ogn(redkn_afer_vd)


7.前饋神經網絡建模

我們將嘗試實現的下一個模型是帶有神經網絡的預測模型。在此模型中,我們使用單個隱藏層形式,其中只有一層輸入節點將加權輸入發送到接收節點的下一層。預測函數將單個隱藏層神經網絡模型擬合到時間序列。函數模型方法是將時間序列的滯后值用作輸入數據,以達到非線性自回歸模型。

第一步是確定神經網絡的隱藏層數。盡管沒有用於計算隱藏層數的特定方法,但時間序列預測遵循的最常見方法是通過計算使用以下公式:

其中Ns:訓練樣本數Ni:輸入神經元數No:輸出神經元數a:1.5 ^ -10

  1.  
    #隱藏層的創建
  2.  
    hn_before_covid <- length(before.Close)/(alpha*(lengthGOOG.Close + 61)
  3.  
    hn_after_covid <- length(after_covidClose)/(alpha*(lengthafter_ovdClose+65))
  4.  
     
  5.  
    #擬合nn
  6.  
     
  7.  
    nn(before_covid$GOOG.Close, size = hn_beoe_cid,
  8.  
     
  9.  
    # 使用nnetar進行預測。
  10.  
    forecast(befe_cvid, h 61, I =UE)
  11.  
    forecast(aftr_coid, h = 5, I = RE)
  12.  
     

plot(nn_fcst_afte_cvid)

然后,我們使用以下參數分析神經網絡模型的性能:

accuracy

accuracy


8.所有模型的比較

現在,我們使用參數諸如RMSE(均方根誤差),MAE(均值絕對誤差)和MAPE(均值絕對百分比誤差)對所有三個模型進行分析 。

  1.  
    sumary_le_efore_oid <- data.frame(RMSE = nuerc(), MAE = uer(),
  2.  
    MAPE = numric(), snsAsacrs = FALSE)
  3.  
     
  4.  
    summ_tabe_fter_ovd <- data.fame(RMSE = umeri(), MAE = nmei(),
  5.  
    MAPE = numeic())
  6.  
     
  7.  
     
  8.  
    kable(smary_abe_eor_oid )
COVID-19之前的數據模型匯總
模型 RMSE MAE MAPE
ARIMA 13.0 8.8 1.0
KNN 44.0 33.7 3.1
神經網絡 13.0 8.7 1.0
  1.  
    kable(sumary_tbl_aft_ci
  2.  
    fulith = F, fixdtead = T )
COVID-19之后的數據模型匯總
模型 RMSE MAE MAPE
ARIMA 16.6 10.4 1.0
KNN 45.9 35.7 3.3
神經網絡 14.7 9.8 1.0

因此,從以上模型性能參數的總結中,我們可以看到神經網絡模型在兩個數據集上的性能均優於ARIMA和KNN模型。因此,我們將使用神經網絡模型來預測未來兩個月的股價。

9.最終模型:COVID-19之前

現在,我們使用直到2月的數據來預測3月和4月的值,然后將預測價格與實際價格進行比較,以檢查是否由於COVID-19可以歸因於任何重大影響。

  1.  
    foestdungcvid<- datafame("De
  2.  
    "Actua Values" =
  3.  
     
  4.  
    datatable(foestdungcvid, ilte= 'to')

從表中我們可以看到,3月和4月期間,Google股票的實際價值通常比預測值要高一些。因此,可以說,盡管發生了這種全球性大流行,但Google股票的表現仍然相當不錯。


10.最終模型:COVID-19之后

現在,我們使用直到4月的數據預測5月和6月的值,以了解Google的未來股價。

  1.  
    foreataov <- data.frae(dn_reataeimean )
  2.  
     
  3.  
    table(foreataov )

從表中可以得出結論,在5月和6月的接下來的幾個月中,Google股票的價格將繼續上漲並表現良好。


最受歡迎的見解

1.在python中使用lstm和pytorch進行時間序列預測

2.python中利用長短期記憶模型lstm進行時間序列預測分析

3.使用r語言進行時間序列(arima,指數平滑)分析

4.r語言多元copula-garch-模型時間序列預測

5.r語言copulas和金融時間序列案例

6.使用r語言隨機波動模型sv處理時間序列中的隨機波動

7.r語言時間序列tar閾值自回歸模型

8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類

9.python3用arima模型進行時間序列預測


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM