午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

使用機(jī)器學(xué)習(xí)和深度學(xué)習(xí)技術(shù)預(yù)測(cè)股票價(jià)格

 CDA數(shù)據(jù)分析師 2019-05-08

介紹

預(yù)測(cè)股市的走勢(shì)是最困難的事情之一。影響預(yù)測(cè)的因素很多 - 包括物理因素與心理因素,理性行為和非理性行為等。所有這些因素結(jié)合在一起共同導(dǎo)致股價(jià)波動(dòng),很難以高精度預(yù)測(cè)。

我們是否可以將機(jī)器學(xué)習(xí)作為該領(lǐng)域的游戲規(guī)則改變者嗎?利用一些特性,比如關(guān)于一個(gè)組織的最新公告,他們的季度收入結(jié)果等功能,機(jī)器學(xué)習(xí)技術(shù)有可能發(fā)掘出我們以前沒有看到的模式和見解,并且可以用來做出準(zhǔn)確無誤的預(yù)測(cè)。

在本文中,我們將使用有關(guān)上市公司股票價(jià)格的歷史數(shù)據(jù)。我們將使用多種機(jī)器學(xué)習(xí)算法來預(yù)測(cè)該公司的未來股票價(jià)格,從平均算法和線性回歸等簡(jiǎn)單的算法開始,然后轉(zhuǎn)向Auto ARIMA和LSTM等高級(jí)技術(shù)。

本文背后的核心思想是展示如何實(shí)現(xiàn)這些算法。我將簡(jiǎn)要介紹該技術(shù)并提供相關(guān)鏈接,以便在必要時(shí)了解這些概念。

問題描述

我們很快就會(huì)深入到本文的實(shí)現(xiàn)部分,但首先要確定我們要解決的問題。從廣義上講,股票市場(chǎng)分析分為兩部分 - 基礎(chǔ)分析和技術(shù)分析。

  • 基礎(chǔ)分析是根據(jù)公司當(dāng)前的商業(yè)環(huán)境和財(cái)務(wù)業(yè)績分析公司未來的盈利能力。

  • 另一方面,技術(shù)分析包括閱讀圖表和使用統(tǒng)計(jì)數(shù)據(jù)來確定股票市場(chǎng)的趨勢(shì)。

你可能已經(jīng)猜到了,我們的重點(diǎn)將放在技術(shù)分析部分。我們將使用Quandl的數(shù)據(jù)集(你可以在這里查找各種股票的歷史數(shù)據(jù)),對(duì)于這個(gè)特定的項(xiàng)目,我使用了“ 塔塔全球飲料 ” 的數(shù)據(jù)。是時(shí)候讓我們動(dòng)起來了!

注意:有關(guān)文章的數(shù)據(jù)集我將在文章最后放出

首先我們先加載數(shù)據(jù)集,定義問題的目標(biāo)變量:

導(dǎo)入包

import pandas as pd
import numpy as np

在筆記本上繪圖

import matplotlib.pyplot as plt
%matplotlib inline

設(shè)置圖的大小

from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 20,10

規(guī)范數(shù)據(jù)

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))

讀取文件

df = pd.read_csv('NSE-TATAGLOBAL(1).csv')

打印頭部數(shù)據(jù)

df.head()

數(shù)據(jù)集中有多個(gè)變量 - date,open,high,low,last,close,totaltradequantity和turnover。

  • “ 開盤價(jià)(open)“和“收盤價(jià)(close)”列表示股票在特定日期交易的起始和最終價(jià)格。

  • 高(hight)、低(low)和最后(last)代表當(dāng)天股票的最高,最低和最后價(jià)格。

  • 總交易數(shù)量(Total Trade Quantity)是當(dāng)天買入或賣出的股票數(shù)量,而成交量(Lacs)是特定公司在特定日期的成交量。

另一個(gè)需要注意的重要事項(xiàng)是,市場(chǎng)在周末和公共假期關(guān)閉。再次注意上表,一些日期值缺失 - 2/10/201,6/10/201,7/10/201。在這些日期中,2號(hào)是法定假日,6號(hào)和7號(hào)是周末。

損益的計(jì)算通常由當(dāng)天股票的收盤價(jià)確定,因此我們將收盤價(jià)視為目標(biāo)變量。讓我們繪制目標(biāo)變量,以了解它在我們的數(shù)據(jù)中是如何形成的:

將索引設(shè)置為日期

df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']

畫圖

plt.figure(figsize=(16,8))
plt.plot(df['Close'], label='Close Price history')

!](http://upload-images./upload_images/13825820-1713f7366318e2b4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在接下來的部分中,我們將探索這些變量,并使用不同的技術(shù)來預(yù)測(cè)股票的每日收盤價(jià)。

1.移動(dòng)平均法

介紹

“平均”很容易成為我們?nèi)粘I钪凶畛S玫脑~匯之一。例如,計(jì)算平均分來確定整體性能,或者找出過去幾天的平均溫度以了解今天的溫度 - 這些都是我們經(jīng)常做的例行工作。因此,這是一個(gè)很好的起點(diǎn),可以用于我們的數(shù)據(jù)集進(jìn)行預(yù)測(cè)。

每天的預(yù)計(jì)收盤價(jià)將是一組先前觀測(cè)值的平均值。我們將使用移動(dòng)平均技術(shù)而不是使用簡(jiǎn)單平均值,該技術(shù)為每個(gè)預(yù)測(cè)使用最新的一組值。換句話說,對(duì)于每個(gè)后續(xù)步驟,在從集合中移除最老的觀測(cè)值的同時(shí)考慮預(yù)測(cè)值。下面是一個(gè)簡(jiǎn)單的圖形,可以幫助你更清晰地理解這一點(diǎn)。

我們將在我們的數(shù)據(jù)集上實(shí)現(xiàn)此技術(shù)。第一步是創(chuàng)建一個(gè)僅包含Date和Close price列的DataFrame,然后將其拆分為訓(xùn)練集和驗(yàn)證集以驗(yàn)證我們的預(yù)測(cè)。

Python代碼

使用日期和目標(biāo)變量創(chuàng)建dataframe

data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

在將數(shù)據(jù)拆分為訓(xùn)練集和驗(yàn)證集時(shí),我們不能使用隨機(jī)拆分,因?yàn)檫@會(huì)破壞時(shí)間組件。所以這里我把去年的數(shù)據(jù)和之前四年的數(shù)據(jù)進(jìn)行了驗(yàn)證。

分隔為訓(xùn)練集和驗(yàn)證集

train = new_data[:987]
valid = new_data[987:]

new_data.shape, train.shape, valid.shape
((1235, 2), (987, 2), (248, 2))

train['Date'].min(), train['Date'].max(), valid['Date'].min(), valid['Date'].max()

(Timestamp('2013-10-08 00:00:00'),
Timestamp('2017-10-06 00:00:00'),
Timestamp('2017-10-09 00:00:00'),
Timestamp('2018-10-08 00:00:00'))

下一步是為驗(yàn)證集創(chuàng)建預(yù)測(cè),并使用實(shí)際值檢查RMSE。

做出預(yù)測(cè)

preds = []
for i in range(0,248):
a = train['Close'][len(train)-248+i:].sum() + sum(preds)
b = a/248
preds.append(b)

結(jié)果

計(jì)算 rmse

rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-preds),2)))
rms

104.51415465984348

僅檢查RMSE并不能幫助我們理解模型的執(zhí)行方式。讓我們把它形象化來獲得更直觀的理解。因此,這是預(yù)測(cè)值與實(shí)際值的關(guān)系圖。

畫圖

valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])

推論

RMSE值接近105,但結(jié)果不是很有希望(可以從圖中看出)。預(yù)測(cè)值與驗(yàn)證集中的觀測(cè)值具有相同的范圍(最初存在增加趨勢(shì),然后緩慢減?。?。

在下一節(jié)中,我們將介紹兩種常用的機(jī)器學(xué)習(xí)技術(shù) - 線性回歸和kNN,并了解它們?cè)谖覀児善笔袌?chǎng)數(shù)據(jù)上的表現(xiàn)。

2.線性回歸

介紹

可以在此數(shù)據(jù)上實(shí)現(xiàn)的最基本的機(jī)器學(xué)習(xí)算法是線性回歸。線性回歸模型返回一個(gè)確定自變量和因變量之間關(guān)系的方程。

線性回歸的方程可以寫成:

這里,x1,x2,... .Xň代表獨(dú)立變量,而系數(shù)θ1,θ2,...θ?表示的權(quán)重。

對(duì)于我們的問題描述,我們沒有一組自變量。我們只有日期而已。讓我們使用日期列來提取諸如 - 日,月,年,星期一/星期五等特征,然后擬合線性回歸模型。

Python代碼

我們將首先按升序?qū)?shù)據(jù)集進(jìn)行排序,然后創(chuàng)建一個(gè)單獨(dú)的數(shù)據(jù)集,以便創(chuàng)建的任何新要素都不會(huì)影響原始數(shù)據(jù)。

將索引設(shè)置為日期值

df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']

排序

data = df.sort_index(ascending=True, axis=0)

創(chuàng)建單獨(dú)的數(shù)據(jù)集

new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

創(chuàng)建功能

from fastai.structured import add_datepart
add_datepart(new_data, 'Date')
new_data.drop('Elapsed', axis=1, inplace=True) #elapsed will be the time stamp

這會(huì)創(chuàng)建以下特征:

‘Year’, ‘Month’, ‘Week’, ‘Day’, ‘Dayofweek’, ‘Dayofyear’, ‘Ismonthend’, ‘Ismonthstart’, ‘Isquarterend’, ‘Isquarterstart’, ‘Isyearend’, and ‘Isyearstart’.

注意:我使用了fastai庫中的add_datepart。如果你沒有安裝它,只需使用命令pip install fastai?;蛘?,你可以在python中使用簡(jiǎn)單的for循環(huán)創(chuàng)建這個(gè)功能。我在下面展示了一個(gè)例子。

除此之外,我們可以添加我們自己認(rèn)為與預(yù)測(cè)相關(guān)的特征。例如,我的假設(shè)是,本周的第一天和最后一天可能會(huì)影響股票的收盤價(jià),并且遠(yuǎn)遠(yuǎn)超過其他日子。所以我創(chuàng)建了一個(gè)特征,可以確定某一天是周一/周五還是周二/周三/周四。這可以使用以下的代碼行完成:

new_data['mon_fri'] = 0
for i in range(0,len(new_data)):
if (new_data['Dayofweek'][i] == 0 or new_data['Dayofweek'][i] == 4):
new_data['mon_fri'][i] = 1
else:
new_data['mon_fri'][i] = 0

如果星期幾等于0或4,則列值將為1,否則為0。同樣的,你可以創(chuàng)建多個(gè)特征。如果你對(duì)可以幫助預(yù)測(cè)股票價(jià)格的功能有一些想法,請(qǐng)?jiān)谠u(píng)論區(qū)分享。

我們現(xiàn)在將數(shù)據(jù)拆分為訓(xùn)練集和驗(yàn)證集,以檢查模型的性能。

拆分為訓(xùn)練集與驗(yàn)證集

train = new_data[:987]
valid = new_data[987:]

x_train = train.drop('Close', axis=1)
y_train = train['Close']
x_valid = valid.drop('Close', axis=1)
y_valid = valid['Close']

實(shí)現(xiàn)線性回歸

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_train,y_train)

結(jié)果

做出預(yù)測(cè)并找rmse

preds = model.predict(x_valid)
rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))
rms

121.16291596523156

RMSE值高于之前的技術(shù),這清楚地表明線性回歸表現(xiàn)不佳。讓我們看一下圖表,并理解為什么線性回歸做的不好:

畫圖

valid['Predictions'] = 0
valid['Predictions'] = preds

valid.index = new_data[987:].index
train.index = new_data[:987].index

plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])

推論

線性回歸是一種簡(jiǎn)單的技術(shù),并且很容易解釋,但有一些明顯的缺點(diǎn)。使用回歸算法的一個(gè)問題是模型與日期列和月份列過度匹配。模型將考慮一個(gè)月前的同一日期或一年前的同一日期/月的值,而不是從預(yù)測(cè)的角度考慮以前的值。

從上圖可以看出,2016年1月和2017年1月,股價(jià)出現(xiàn)下跌。該模型已預(yù)測(cè)2018年1月的情況相同。線性回歸技術(shù)可以很好地解決諸如大型超市的銷售問題,在這些問題中獨(dú)立特征對(duì)于確定目標(biāo)值是有用的。

3.K-近鄰

介紹

這里可以使用的另一個(gè)有趣的ML算法是KNN(K近鄰)。KNN基于自變量找到新數(shù)據(jù)點(diǎn)和舊數(shù)據(jù)點(diǎn)之間的相似性。讓我用一個(gè)簡(jiǎn)單的例子解釋一下。

考慮11個(gè)人的身高和年齡。根據(jù)給定的特征('年齡Age'和'身高Height'),表格可以用圖形格式表示,如下所示:

為了確定ID#11的權(quán)重,K-NN考慮該ID的最近鄰的權(quán)重。ID#11的權(quán)重預(yù)計(jì)是其鄰居的平均值。如果我們現(xiàn)在考慮三個(gè)鄰居(k = 3),ID#11的權(quán)重將是=(77 + 72 + 60)/ 3 = 69.66千克。

PYthon代碼

導(dǎo)入庫

from sklearn import neighbors
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))

使用上一節(jié)中相同的訓(xùn)練集和驗(yàn)證集:

尺度數(shù)據(jù)

x_train_scaled = scaler.fit_transform(x_train)
x_train = pd.DataFrame(x_train_scaled)
x_valid_scaled = scaler.fit_transform(x_valid)
x_valid = pd.DataFrame(x_valid_scaled)

使用gridsearch查找最佳參數(shù)

params = {'n_neighbors':[2,3,4,5,6,7,8,9]}
knn = neighbors.KNeighborsRegressor()
model = GridSearchCV(knn, params, cv=5)

擬合模型并做出預(yù)測(cè)

model.fit(x_train,y_train)
preds = model.predict(x_valid)

結(jié)果

查看RMSe值

rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))
rms

115.17086550026721

RMSE值沒有太大差異,但預(yù)測(cè)值和實(shí)際值的圖應(yīng)提供一個(gè)更清晰的理解。

畫圖

valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(valid[['Close', 'Predictions']])
plt.plot(train['Close'])

推論

RMSE值幾乎與線性回歸模型類似,并且圖表也顯示了相同的模式。與線性回歸一樣,KNN也確定了2018年1月的下降,因?yàn)檫@是過去幾年的形式。我們可以有把握地說,回歸算法在這個(gè)數(shù)據(jù)集上表現(xiàn)不佳。

讓我們繼續(xù)看看一些時(shí)間序列預(yù)測(cè)技術(shù),以了解它們?cè)诿鎸?duì)股票價(jià)格預(yù)測(cè)挑戰(zhàn)時(shí)的表現(xiàn)。

4.Auto ARIMA

介紹

ARIMA是一種非常流行的時(shí)間序列預(yù)測(cè)統(tǒng)計(jì)方法。ARIMA模型考慮了過去的值來預(yù)測(cè)未來的價(jià)值。ARIMA有三個(gè)重要參數(shù):

  • p(用于預(yù)測(cè)下一個(gè)值的過去值)

  • q(用于預(yù)測(cè)未來值的過去預(yù)測(cè)誤差)

  • d(差分的順序)

ARIMA的參數(shù)調(diào)整會(huì)消耗大量時(shí)間。因此,我們將使用auto ARIMA,它自動(dòng)選擇(p,q,d)提供最小錯(cuò)誤的的最佳組合。

Python代碼

from pyramid.arima import auto_arima

data = df.sort_index(ascending=True, axis=0)

train = data[:987]
valid = data[987:]

training = train['Close']
validation = valid['Close']

model = auto_arima(training, start_p=1, start_q=1,max_p=3, max_q=3, m=12,start_P=0, seasonal=True,d=1, D=1, trace=True,error_action='ignore',suppress_warnings=True)
model.fit(training)

forecast = model.predict(n_periods=248)
forecast = pd.DataFrame(forecast,index = valid.index,columns=['Prediction'])

結(jié)果

rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-np.array(forecast['Prediction'])),2)))
rms

44.954584993246954

畫圖

plt.plot(火車[ '關(guān)閉'])
plt.plot(有效[ '關(guān)閉'])
plt.plot(預(yù)測(cè)[ '預(yù)測(cè)'])

推論

如前所述,auto ARIMA模型使用過去的數(shù)據(jù)來理解時(shí)間序列中的模式。使用這些值,模型獲得了該系列中的增長趨勢(shì)。雖然使用這種技術(shù)的預(yù)測(cè)遠(yuǎn)比先前實(shí)現(xiàn)的機(jī)器學(xué)習(xí)模型的預(yù)測(cè)好,但這些預(yù)測(cè)仍然沒有接近實(shí)際值。

從圖中可以看出,該模型已經(jīng)捕捉到了該系列中的一個(gè)趨勢(shì),但并沒有關(guān)注季節(jié)性部分。在下一節(jié)中,我們將實(shí)現(xiàn)一個(gè)時(shí)間序列模型,而這個(gè)模型考慮了系列的趨勢(shì)和季節(jié)性。

5.Prophet

介紹

有許多時(shí)間序列技術(shù)可以在股票預(yù)測(cè)數(shù)據(jù)集上實(shí)現(xiàn),但是大多數(shù)這些技術(shù)在擬合模型之前需要大量的數(shù)據(jù)預(yù)處理。由Facebook設(shè)計(jì)和開創(chuàng)的Prophet是一個(gè)時(shí)間序列預(yù)測(cè)庫,它不需要數(shù)據(jù)預(yù)處理,實(shí)現(xiàn)起來也非常簡(jiǎn)單。Prophet的輸入是一個(gè)包含兩列的數(shù)據(jù)框:date和target(ds和y)。

Prophet試圖獲取過去數(shù)據(jù)中的季節(jié)性,并在數(shù)據(jù)集很大時(shí)可以進(jìn)行很好的工作。

Python代碼

導(dǎo)入 prophet

from fbprophet import Prophet

創(chuàng)建 dataframe

new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

new_data['Date'] = pd.to_datetime(new_data.Date,format='%Y-%m-%d')
new_data.index = new_data['Date']

準(zhǔn)備數(shù)據(jù)

new_data.rename(columns={'Close': 'y', 'Date': 'ds'}, inplace=True)

訓(xùn)練和驗(yàn)證

train = new_data[:987]
valid = new_data[987:]

使用合適的模型

model = Prophet()
model.fit(train)

預(yù)測(cè)

close_prices = model.make_future_dataframe(periods=len(valid))
forecast = model.predict(close_prices)

結(jié)果

查看rmse

forecast_valid = forecast['yhat'][987:]
rms=np.sqrt(np.mean(np.power((np.array(valid['y'])-np.array(forecast_valid)),2)))
rms

57.494461930575149

畫圖

valid['Predictions'] = 0
valid['Predictions'] = forecast_valid.values

plt.plot(train['y'])
plt.plot(valid[['y', 'Predictions']])

推論

Prophet(與大多數(shù)時(shí)間序列預(yù)測(cè)技術(shù)一樣)試圖從過去的數(shù)據(jù)中獲取趨勢(shì)性和季節(jié)性。此模型通常在時(shí)間序列數(shù)據(jù)集上表現(xiàn)良好,但在這種情況下無法達(dá)到它的名譽(yù)。

事實(shí)證明,股票價(jià)格沒有特定的趨勢(shì)性或季節(jié)性。它在很大程度上取決于市場(chǎng)目前的情況,從而價(jià)格會(huì)上漲和下跌。因此,像ARIMA,SARIMA和Prophet這樣的預(yù)測(cè)技術(shù)對(duì)于這個(gè)特定問題不會(huì)顯示出良好的結(jié)果。

讓我們繼續(xù)嘗試另一種先進(jìn)技術(shù) - 長短時(shí)記憶(LSTM)。

6.長短時(shí)記憶(LSTM)

介紹

LSTM廣泛用于序列預(yù)測(cè)問題,并且已被證明是非常有效的。他們非常有效的原因是因?yàn)長STM能夠存儲(chǔ)過去重要的信息,并忘記不重要的信息。LSTM有三個(gè)門:

  • 輸入門:輸入門將信息添加到單元格狀態(tài)

  • 遺忘門:它刪除模型不再需要的信息

  • 輸出門: LSTM的輸出門選擇要顯示為輸出的信息

現(xiàn)在,讓我們將LSTM實(shí)現(xiàn)為一個(gè)黑盒子,并檢查它在我們的特定數(shù)據(jù)上的性能。

Python代碼

導(dǎo)入所需要的庫

from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM

創(chuàng)建dataframe

data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])
for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

設(shè)置索引

new_data.index = new_data.Date
new_data.drop('Date', axis=1, inplace=True)

創(chuàng)建訓(xùn)練集和測(cè)試集

dataset = new_data.values

train = dataset[0:987,:]
valid = dataset[987:,:]

將數(shù)據(jù)集轉(zhuǎn)換為X列和Y列

scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(dataset)

x_train, y_train = [], []
for i in range(60,len(train)):
x_train.append(scaled_data[i-60:i,0])
y_train.append(scaled_data[i,0])
x_train, y_train = np.array(x_train), np.array(y_train)

x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1))

創(chuàng)建并使用LSTM網(wǎng)絡(luò)

model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1],1)))
model.add(LSTM(units=50))
model.add(Dense(1))

model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)

使用訓(xùn)練集中的過去的60個(gè)值預(yù)測(cè)246個(gè)值

inputs = new_data[len(new_data) - len(valid) - 60:].values
inputs = inputs.reshape(-1,1)
inputs = scaler.transform(inputs)

X_test = []
for i in range(60,inputs.shape[0]):
X_test.append(inputs[i-60:i,0])
X_test = np.array(X_test)

X_test = np.reshape(X_test, (X_test.shape[0],X_test.shape[1],1))
closing_price = model.predict(X_test)
closing_price = scaler.inverse_transform(closing_price)

結(jié)果

rms=np.sqrt(np.mean(np.power((valid-closing_price),2)))
rms

11.772259608962642

畫圖

train = new_data[:987]
valid = new_data[987:]
valid['Predictions'] = closing_price
plt.plot(train['Close'])
plt.plot(valid[['Close','Predictions']])

推論

LSTM模型可以根據(jù)不同的參數(shù)進(jìn)行調(diào)整,例如改變LSTM層的數(shù)量,添加dropout值或增加epoch的數(shù)量。但LSTM的預(yù)測(cè)是否足以確定股價(jià)是漲還是降?當(dāng)然不是!

正如我在文章開頭提到的那樣,股票價(jià)格受到有關(guān)公司的新聞以及其他因素的影響,如公司的非貨幣化或合并/分拆。還有一些無形因素,往往是事先無法預(yù)測(cè)的。

結(jié)束筆記

時(shí)間序列預(yù)測(cè)是一個(gè)非常有趣的領(lǐng)域,正如我在撰寫這些文章時(shí)所認(rèn)識(shí)到的那樣。在社區(qū)中有一種看法,認(rèn)為它是一個(gè)非常復(fù)雜的領(lǐng)域,雖然有些的確比較復(fù)雜,但是一旦掌握了基本技術(shù),也就不那么困難了。

本文作者使用了六種方法來進(jìn)行了對(duì)股票漲跌的預(yù)測(cè),并從結(jié)果中分析了每個(gè)算法用于時(shí)間序列模型的優(yōu)劣,并且從圖中可以看出LSTM方法是擬合最好的一種方法,但是股票市場(chǎng)需要考慮的因素有很多,并不是只需要幾個(gè)關(guān)鍵的特征就可以預(yù)測(cè)的,我們可以根據(jù)以前的數(shù)據(jù),對(duì)算法進(jìn)行驗(yàn)證,但使用算法去預(yù)測(cè)未來的股票的漲跌,還是有一些風(fēng)險(xiǎn)的,所以還是要謹(jǐn)慎的去使用這些算法。至少現(xiàn)在沒有一種算法可以百分之百的去預(yù)測(cè)未來股票的時(shí)間序列模型算法,還是先暫時(shí)的用算法去不斷的訓(xùn)練,直到未來技術(shù)成熟的一天。

Stock Prices Prediction Using Machine Learning and Deep Learning Techniques (with Python codes)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多