全文鏈接: https:///?p=37860 分析師:Sabrina Huang 股票市場(chǎng)的波動(dòng)起伏一直備受投資者關(guān)注,準(zhǔn)確預(yù)測(cè)股票價(jià)格對(duì)于投資者制定合理的投資策略至關(guān)重要。股票價(jià)格數(shù)據(jù)具有時(shí)間序列特性,近年來,隨著機(jī)器學(xué)習(xí)和深度學(xué)習(xí)技術(shù)的發(fā)展,各種模型被應(yīng)用于股票價(jià)格預(yù)測(cè)(點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù))。 長(zhǎng)短期記憶(LSTM)模型憑借其記憶功能在剖析時(shí)間序列數(shù)據(jù)關(guān)系方面展現(xiàn)出優(yōu)勢(shì),ARIMA 模型在時(shí)間序列分析中也有廣泛應(yīng)用,此外,CNN - LSTM 等組合模型(附數(shù)據(jù)代碼)也為股票價(jià)格預(yù)測(cè)提供了新的思路。本文將對(duì) LSTM、ARIMA 以及 CNN - LSTM 等模型在股票價(jià)格預(yù)測(cè)中的應(yīng)用進(jìn)行研究,并對(duì)它們的預(yù)測(cè)結(jié)果進(jìn)行分析與比較,以期為投資者提供更可靠的預(yù)測(cè)工具。 相關(guān)視頻 LSTM 與 ARIMA 模型的股票價(jià)格預(yù)測(cè)及比較研究股票價(jià)格數(shù)據(jù)呈現(xiàn)出時(shí)間序列的特性。鑒于機(jī)器學(xué)習(xí)長(zhǎng)短期記憶(LSTM)具備憑借記憶功能剖析時(shí)間序列數(shù)據(jù)間關(guān)系的優(yōu)勢(shì),我們提出一種基于 LSTM 的股票價(jià)格預(yù)測(cè)方法。與此同時(shí),本項(xiàng)目運(yùn)用 OLS、ARIMA 以及其他預(yù)測(cè)模型對(duì)股票價(jià)格逐一進(jìn)行預(yù)測(cè)。此外,還對(duì)這些模型的預(yù)測(cè)結(jié)果展開了分析與比較。 解決方案任務(wù) / 目標(biāo)通過運(yùn)用 LSTM、ARIMA 模型對(duì)股票市場(chǎng)的價(jià)格趨勢(shì)進(jìn)行預(yù)測(cè),并加以比較,從而選出最優(yōu)模型。 數(shù)據(jù)源準(zhǔn)備為檢驗(yàn)時(shí)間序列模型的預(yù)測(cè)能力,探尋預(yù)測(cè)股票價(jià)格的最佳模型,收集了 100 支股票的歷史數(shù)據(jù)。數(shù)據(jù)源自雅虎財(cái)經(jīng),每支股票的時(shí)間段為 2016 年 4 月 1 日至 2022 年 10 月 3 日,未預(yù)先對(duì)名稱、規(guī)模和股票價(jià)格進(jìn)行篩選。在 ARIMA 預(yù)測(cè)部分,選取 AAPL、CLB 和 ELP 這三支股票作為代表。在 LSTM 部分,將所有 100 支股票合并為一個(gè)完整的系列。采用所有 100 支股票的 Adj_Close(調(diào)整后的收盤價(jià))這一變量。該變量對(duì)一只股票的收盤價(jià)進(jìn)行了修正,以反映該股票在考慮到任何公司行為(如股票拆分、股息和供股)后的價(jià)值。 特征轉(zhuǎn)換在 LSTM 模型中,計(jì)算得出以下特征: 構(gòu)造以上說明了如何抽取相關(guān)特征,我們大致有如 劃分訓(xùn)練集和測(cè)試集鑒于最終模型旨在預(yù)測(cè)未來某時(shí)間段的銷量,為更切實(shí)地測(cè)試模型效果,依據(jù)時(shí)間對(duì)訓(xùn)練集和測(cè)試集進(jìn)行劃分。具體操作方式為:將 2016 - 04 - 01 至 2020 - 12 - 13 的銷量數(shù)據(jù)設(shè)定為訓(xùn)練集,而 2020 - 12 - 14 至 2022 - 10 - 03 的數(shù)據(jù)則作為測(cè)試集。 建模ARIMA在股票和電商銷量領(lǐng)域,ARIMA 有著廣泛應(yīng)用。于統(tǒng)計(jì)學(xué)、計(jì)量經(jīng)濟(jì)學(xué)以及時(shí)間序列分析中,ARIMA 是自回歸移動(dòng)平均模型(ARMA)的拓展。這兩種模型均被應(yīng)用于時(shí)間序列數(shù)據(jù)的擬合,旨在更好地理解數(shù)據(jù)或?qū)π蛄兄械奈磥睃c(diǎn)進(jìn)行預(yù)測(cè)。 長(zhǎng)短期記憶(LSTM)一個(gè)常規(guī)的 LSTM 單元由單元、輸入門、輸出門以及遺忘門構(gòu)成。單元能夠在任意時(shí)間間隔內(nèi)記憶數(shù)值,而三個(gè)門則對(duì)進(jìn)入和離開單元的信息流起到調(diào)節(jié)作用。這些門結(jié)構(gòu)借助遞歸方程,持續(xù)在同一時(shí)間更新單元狀態(tài),同時(shí)也激活了從輸入門到輸出門的映射。 模型優(yōu)化包括特征提取、樣本抽樣以及參數(shù)調(diào)參。 ARIMA
LSTM
在本研究中,我們起初采用 ARIMA 模型對(duì)股票收益進(jìn)行預(yù)測(cè)。然而,該模型在個(gè)別股票的預(yù)測(cè)上表現(xiàn)欠佳,無法對(duì)一般股票進(jìn)行有效預(yù)測(cè)。為此,我們計(jì)算得出 8 個(gè) Alphas 以構(gòu)建模型。鑒于這 8 個(gè)字母是從 100 支股票的數(shù)據(jù)集中獲取的,我們將其稱作 “通用字母”,并試圖證實(shí)它們適用于一般股票。借助這 8 個(gè)阿爾法變量,我們運(yùn)用 OLS、XGBoost、LSTM 以及隨機(jī)森林來預(yù)測(cè)股票收益。通過對(duì)比這四種方法的、RMSE 和 DA,我們確定 LSTM 為預(yù)測(cè)股票收益的最優(yōu)模型。實(shí)際上,盡管 LSTM 相較于其他模型優(yōu)勢(shì)明顯,但它的估計(jì)結(jié)果仍未達(dá)到我們的預(yù)期。這或許是因?yàn)檫@ 100 支股票的特征差異過大,又或許是 100 支股票的數(shù)據(jù)集規(guī)模尚不足以讓我們得出 “通用字母”。后續(xù)我們將通過收集更大規(guī)模的數(shù)據(jù)集來完善我們的研究。 股票在金融市場(chǎng)中占據(jù)著重要地位,是吸引眾多投資者的有力手段。它在為投資者帶來豐厚利益的同時(shí),也伴隨著風(fēng)險(xiǎn)。我們的報(bào)告通過長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)模型對(duì)股票時(shí)間序列數(shù)據(jù)進(jìn)行了分析。對(duì)于大多數(shù)投資者而言,該模型從所采用方法的合理性與有效性方面提供了有力支撐,并且其表現(xiàn)優(yōu)于其他時(shí)間序列模型和機(jī)器學(xué)習(xí)方法。 股票市場(chǎng)的復(fù)雜性和不確定性使得準(zhǔn)確預(yù)測(cè)股票收益成為一項(xiàng)極具挑戰(zhàn)性的任務(wù)。在本研究中,我們不斷探索和嘗試不同的模型與方法,旨在為投資者提供更可靠的預(yù)測(cè)工具。雖然當(dāng)前的研究存在一定的局限性,但我們相信,隨著數(shù)據(jù)集的不斷擴(kuò)大和研究的深入,我們能夠進(jìn)一步優(yōu)化模型,提高預(yù)測(cè)的準(zhǔn)確性和可靠性。未來,我們將繼續(xù)努力,為股票市場(chǎng)的研究和投資者的決策提供更有價(jià)值的參考。 Python用CNN - LSTM、ARIMA、Prophet股票價(jià)格預(yù)測(cè)的研究與分析|附數(shù)據(jù)代碼接下來我們深入研究了股票價(jià)格預(yù)測(cè)問題,通過運(yùn)用自回歸移動(dòng)平均(ARIMA)模型和Prophet模型,對(duì)股票數(shù)據(jù)進(jìn)行分析和預(yù)測(cè)。文中詳細(xì)介紹了數(shù)據(jù)預(yù)處理、模型構(gòu)建、擬合、評(píng)估及預(yù)測(cè)的過程,并對(duì)結(jié)果進(jìn)行了討論和分析。 一、引言 股票價(jià)格的波動(dòng)受到多種因素的影響,準(zhǔn)確預(yù)測(cè)股票價(jià)格對(duì)于投資者制定合理的投資策略具有重要意義。時(shí)間序列分析方法在股票價(jià)格預(yù)測(cè)中得到了廣泛應(yīng)用,本文旨在探討ARIMA模型和Prophet模型在股票價(jià)格預(yù)測(cè)中的應(yīng)用。 二、數(shù)據(jù)來源與預(yù)處理 (一)數(shù)據(jù)來源 (二)數(shù)據(jù)預(yù)處理
del df\['Volume'\], df\['Adj Close'\], df\['Low'\], df\['High'\], df\['Open'\]
df\['close\_log'\] = np.log(df\['Close'\])df\['close\_log\_diff'\] = df\['close\_log'\] - df\['close_log'\].shift(1)
train = df\[:2000\]val = df\[2000:\] 三、模型構(gòu)建與擬合 (一)ARIMA 模型
lag\_acf = acf(df\['close\_log\_diff'\].dropna(), nlags = 30)lag\_pacf = pacf(df\['close\_log\_diff'\].dropna(), nlags = 50, method = 'ols')
!pip install pmdarimafrom pmdarima.arima import auto\_arimasmodel = auto\_arima(train\['Close'\], start\_p = 0, start\_q = 0,test = 'adf',max\_p = 10, max\_q = 10,m = 1,d = None,seasonal = False,start\_P = 0,D = 0,trace = True,error\_action = 'ignore',suppress_warnings = True,stepwise = True)print(smodel.summary())
from statsmodels.tsa.arima.model import ARIMAmodel = ARIMA(train\['Close'\], order = (2, 0, 0))result = model.fit()result.summary()
result.plot_diagnostics(figsize=(20, 14))plt.show() (二)Prophet 模型
df\['ds'\] = df.indexdf\['y'\] = df\['Close'\]
import prophetm = Prophet()m.fit(df)
future = m.make\_future\_dataframe(periods = 30, freq = 'D')forecast = m.predict(future) 點(diǎn)擊標(biāo)題查閱往期內(nèi)容 【視頻講解】Xgboost、ARIMA 和 Prophet對(duì)國(guó)際牛肉市場(chǎng)份額、比特幣價(jià)格時(shí)間序列預(yù)測(cè)|數(shù)據(jù)分享 左右滑動(dòng)查看更多 01 02 03 04 四、模型評(píng)估與預(yù)測(cè) (一)ARIMA 模型預(yù)測(cè)
fore = result.predict(start = len(train), end = len(df) - 1)fores = pd.Series(fore)val\['d'\] = fores.values
index\_future\_dates = pd.date\_range(start = '2023 - 03 - 13', end = '2023 - 03 - 31')pred = result.predict(start = len(df), end = len(df) + 18, ).rename('ARIMA Predictions')pred.index = index\_future_datesprint(pred)pred.plot(figsize = (12, 5), legend = True) (二)Prophet 模型預(yù)測(cè)結(jié)果分析
m.plot_components(forecast) 五、結(jié)論 本文通過對(duì)股票數(shù)據(jù)的分析,構(gòu)建并應(yīng)用了 ARIMA 模型和 Prophet 模型進(jìn)行股票價(jià)格預(yù)測(cè)。實(shí)驗(yàn)結(jié)果表明,兩種模型在不同方面都有一定的表現(xiàn)。ARIMA 模型在處理線性時(shí)間序列數(shù)據(jù)方面具有一定的優(yōu)勢(shì),而 Prophet 模型在處理具有季節(jié)性和趨勢(shì)性的數(shù)據(jù)方面表現(xiàn)較好。然而,股票價(jià)格預(yù)測(cè)仍然存在一定的不確定性,未來可以進(jìn)一步探索更復(fù)雜的模型或模型組合,以提高預(yù)測(cè)的準(zhǔn)確性。同時(shí),還可以考慮結(jié)合更多的影響因素,如宏觀經(jīng)濟(jì)數(shù)據(jù)、公司財(cái)務(wù)指標(biāo)等,為股票價(jià)格預(yù)測(cè)提供更全面的信息。 CNN - LSTM的股票價(jià)格預(yù)測(cè)研究|附數(shù)據(jù)代碼我們旨在研究使用卷積神經(jīng)網(wǎng)絡(luò) - 長(zhǎng)短期記憶網(wǎng)絡(luò)(CNN - LSTM)模型對(duì)股票價(jià)格進(jìn)行預(yù)測(cè)。通過對(duì)股票數(shù)據(jù)的預(yù)處理、特征工程、模型構(gòu)建、訓(xùn)練與評(píng)估,展示了該模型在股票價(jià)格預(yù)測(cè)中的應(yīng)用。文中詳細(xì)介紹了數(shù)據(jù)來源、處理方法、模型架構(gòu)及實(shí)驗(yàn)結(jié)果,并對(duì)結(jié)果進(jìn)行了分析和討論。 一、引言 股票價(jià)格的預(yù)測(cè)一直是金融領(lǐng)域的研究熱點(diǎn),準(zhǔn)確預(yù)測(cè)股票價(jià)格對(duì)于投資者制定合理的投資策略具有重要意義。傳統(tǒng)的時(shí)間序列分析方法在處理復(fù)雜的股票數(shù)據(jù)時(shí)存在一定的局限性,而深度學(xué)習(xí)方法,如CNN - LSTM模型,結(jié)合了卷積神經(jīng)網(wǎng)絡(luò)(CNN)和長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)的優(yōu)點(diǎn),能夠更好地捕捉股票價(jià)格數(shù)據(jù)中的時(shí)空特征,提高預(yù)測(cè)精度。 二、數(shù)據(jù)來源與預(yù)處理 (一)數(shù)據(jù)來源 (二)數(shù)據(jù)可視化
import plotly.graph_objects as gofig = go.Figure(data=\[go.Candlestick(x=df.index,open=df.Open, high=df.High,low=df.Low, close=df.Close)\])fig.show()
plt.figure(figsize=(20, 8))plt.plot(df.index, df\["Close"\])plt.plot(df.index, df\["Moving Average for 50 days"\], color='red', label='MA for 50 days')plt.plot(df.index, df\["Moving Average for 100 days"\], color='green', label='MA for 100 days')plt.plot(df.index, df\["Moving Average for 200 days"\], color='orange', label='MA for 200 days')plt.legend()
(三)數(shù)據(jù)縮放與劃分
scaler = StandardScaler()scaler = scaler.fit(df)df_s = scaler.transform(df)
train\_size = int(len(df\_s) * 0.8)train\_data = df\_s\[:train\_size\]test\_data = df\_s\[train\_size - window_size:\]
def df\_to\_x\_y(data, window\_size=7):X = \[\]y = \[\]for i in range(len(data) - window\_size):row = \[r for r in data\[i:i + window\_size\]\]X.append(row)label = \[data\[i + window_size\]\[3\]\]y.append(label)return np.array(X), np.array(y) 三、模型構(gòu)建與訓(xùn)練(一)模型架構(gòu) model.add(Dense(1))model.compile(loss='mse', optimizer='adam')model.summary() (二)模型訓(xùn)練 history = model.fit(x\_train, y\_train, epochs=10, validation\_data=(x\_test, y_test)) (三)訓(xùn)練過程可視化 plt.plot(history.history\['loss'\], label='train')plt.plot(history.history\['val_loss'\], label='test')plt.legend()plt.show() 四、模型評(píng)估與預(yù)測(cè) (一)模型評(píng)估 yhat = model.predict(x\_test)yp = yhat.reshape(yhat.shape\[0\], 1)test\_RMSE = np.sqrt(mean\_squared\_error(y\_test, yp))test\_MAE = mean\_squared\_error(y\_test, yp)print(f"Test RMSE: {test\_RMSE}")print(f"Test MAE: {test_MAE}") (二)預(yù)測(cè)結(jié)果可視化 # 創(chuàng)建空表并填充預(yù)測(cè)值trainPredict\_dataset\_like = np.zeros(shape=(len(yp), 5))trainPredict\_dataset\_like\[:, 0\] = yp\[:, 0\]# 反標(biāo)準(zhǔn)化并繪制圖像trainPredict = scaler.inverse\_transform(trainPredict\_dataset_like)\[:, 0\] 五、結(jié)論 本文通過構(gòu)建 CNN - LSTM 模型對(duì)股票價(jià)格進(jìn)行預(yù)測(cè),經(jīng)過數(shù)據(jù)預(yù)處理、模型訓(xùn)練和評(píng)估,取得了一定的預(yù)測(cè)效果。實(shí)驗(yàn)結(jié)果表明,該模型能夠較好地捕捉股票價(jià)格數(shù)據(jù)中的時(shí)空特征,在一定程度上提高了預(yù)測(cè)精度。然而,股票價(jià)格受到多種復(fù)雜因素的影響,模型仍存在一定的局限性。未來可以進(jìn)一步優(yōu)化模型結(jié)構(gòu)、增加數(shù)據(jù)量、引入更多的特征,以提高股票價(jià)格預(yù)測(cè)的準(zhǔn)確性和可靠性。同時(shí),還可以將該模型與其他預(yù)測(cè)方法進(jìn)行比較和結(jié)合,探索更有效的股票價(jià)格預(yù)測(cè)策略,為投資者提供更有價(jià)值的決策支持。 分析師
在此對(duì) Sabrina Huang 對(duì)本文所作的貢獻(xiàn)表示誠(chéng)摯感謝,她畢業(yè)于加州大學(xué)圣地亞哥分校,專業(yè)為金融數(shù)學(xué),擁有碩士學(xué)位。她擅長(zhǎng)軟件 SQL 語(yǔ)言、Python、R,擅長(zhǎng)領(lǐng)域包括機(jī)器學(xué)習(xí)、數(shù)理金融、數(shù)據(jù)采集等。 |
|