国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
用機(jī)器學(xué)習(xí)預(yù)測(cè)股市:為什么僅僅是歷史回測(cè)準(zhǔn)確率高?

國(guó)慶長(zhǎng)假要結(jié)束了,大家收收心,回來(lái)學(xué)習(xí)成長(zhǎng)吧。

金融市場(chǎng)里,為什么99.99%的機(jī)器學(xué)習(xí)算法從未真正發(fā)揮作用?

機(jī)器學(xué)習(xí)給人的感覺(jué)是能做很好的預(yù)測(cè),于是人們開始濫用它。隨著機(jī)器學(xué)習(xí)算法不斷應(yīng)用到各行各業(yè),越來(lái)越多聲稱能夠預(yù)測(cè)股市的機(jī)器學(xué)習(xí)算法模型也層出不窮,有的還給出了準(zhǔn)確率近乎完美的結(jié)果,這些模型和結(jié)果看上去確實(shí)令人興奮,然而在現(xiàn)實(shí)中如果真的使用這些模型去預(yù)測(cè)市場(chǎng),就會(huì)被市場(chǎng)教育。

之前有微信朋友圈盛傳deepmind團(tuán)隊(duì)用alphago算法在A股做投資賠了很多錢,這個(gè)是假新聞, 不過(guò)很多機(jī)器學(xué)習(xí)算法確實(shí)在A股表現(xiàn)不盡人意。

「特斯拉股價(jià)的機(jī)器學(xué)習(xí)模型得出的預(yù)測(cè)準(zhǔn)確性近乎完美」

為了理解為什么這些模型在市場(chǎng)上如此不準(zhǔn)確,這里先簡(jiǎn)單解釋一下原因,然后用Python深入研究一個(gè)LSTM的TensorFlow模型,從而進(jìn)一步闡明理由。

為什么市場(chǎng)如此難以預(yù)測(cè)?

為了回答這個(gè)問(wèn)題,我們先從基礎(chǔ)知識(shí)說(shuō)起。股市本質(zhì)上是一個(gè)無(wú)數(shù)投資者參與的市場(chǎng),由供求關(guān)系驅(qū)動(dòng)。盡管聽起來(lái)非常簡(jiǎn)單,但實(shí)際上有無(wú)限多的因素在發(fā)揮作用。不理解金融市場(chǎng)而用機(jī)器學(xué)習(xí)野蠻預(yù)測(cè),就會(huì)學(xué)到不應(yīng)該學(xué)的東西,從而在實(shí)際交易中遭遇血虧。


從技術(shù)上講,你可以創(chuàng)建一個(gè)模型,把所有已知的、曾經(jīng)影響市場(chǎng)的因素都考慮進(jìn)去。然而,絕大多數(shù)的市場(chǎng)因素實(shí)際上是不可能事先知道的,比如自然災(zāi)害、流行病和政治動(dòng)向。此外,市場(chǎng)有時(shí)是純粹的非理性行為。


但是,即使你能夠成功地預(yù)測(cè)或準(zhǔn)確地把握市場(chǎng)的時(shí)機(jī),其他人也會(huì)模仿你的策略,最終導(dǎo)致市場(chǎng)做出不同于你的預(yù)測(cè)的反應(yīng)。


這里可能會(huì)有些confusing,下面拆解分析一下。


假設(shè)你擁有一個(gè)可以預(yù)測(cè)X公司未來(lái)股價(jià)的模型,那么你會(huì)用這個(gè)模型來(lái)做什么呢?你很可能會(huì)試圖利用它來(lái)賺取大量的利潤(rùn),從而促使你在實(shí)際市場(chǎng)中創(chuàng)造出無(wú)限量的買入和賣出信號(hào),而其他所有能夠使用這種方法的人也會(huì)如此。所有這些交易的結(jié)果就是——它會(huì)以一種你的模型無(wú)法預(yù)測(cè)的方式影響X股票的價(jià)格,不管它是發(fā)生暴漲還是暴跌;所以本質(zhì)上,這里的悖論是,你通過(guò)使用模型的預(yù)測(cè),直接影響了未來(lái),使預(yù)測(cè)在某種程度上變得過(guò)時(shí)。


你有可能預(yù)測(cè)到市場(chǎng)的一些趨勢(shì),從而獲得更大的成功機(jī)會(huì),因?yàn)檫@基本上就是市場(chǎng)研究人員和分析師所做的工作,但這些預(yù)測(cè)更接近于有根據(jù)的猜測(cè),而不是99%的精確預(yù)測(cè)。而且,市場(chǎng)未來(lái)會(huì)如何變化的置信區(qū)間太大,以至于這些方法都無(wú)法做出靠譜的交易指導(dǎo)。

在Python中使用TensorFlow創(chuàng)建LSTM模型

雖然在市場(chǎng)上使用這樣的模型不太靠譜,但創(chuàng)建一個(gè)機(jī)器學(xué)習(xí)模型是學(xué)習(xí)和熟悉模型如何工作以及它們的潛在能力的好方法。接下來(lái)將用Python創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)模型來(lái)“預(yù)測(cè)”TSLA的價(jià)格,還要了解它有哪些缺點(diǎn)。

#import the librariesimport mathimport warningsimport datetime import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom tensorflow.keras import Sequentialfrom pandas_datareader import DataReaderfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.metrics import mean_squared_errorfrom tensorflow.keras.layers import Dense, LSTMwarnings.filterwarnings('ignore')#get the stock quote for the past 10 yearsstock = input('Enter a stock ticker: ')num_of_years = 10start_date = datetime.datetime.now() - datetime.timedelta(days=int(365.25*num_of_years))end_date = datetime.date.today()

「導(dǎo)入模塊并設(shè)置參數(shù)」

首先,需要導(dǎo)入依賴關(guān)系,并設(shè)置程序其余部分需要的參數(shù),然后在LSTM模型中使用TensorFlow,并用Scikit-Learn來(lái)測(cè)試其準(zhǔn)確性。

df = DataReader(stock, 'yahoo', start_date, end_date)data = df.filter(['Close'])dataset = data.valuestrain_data_len = math.ceil(len(dataset)*.8)#scale the datascaler = MinMaxScaler(feature_range=(0,1))scaled_data = scaler.fit_transform(dataset)#create the training datasettrain_data = scaled_data[0:train_data_len, :]#split the data into x_train and y_train datasetx_train=[]y_train=[]for i in range(60,len(train_data)):  x_train.append(train_data[i-60:i, 0])  y_train.append(train_data[i, 0])  if i<=61:    #print(x_train)    #print(y_train)    print()#convert x_train and y_train to numpy arraysx_train, y_train = np.array(x_train), np.array(y_train)#reshape the data to 3 dimensionx_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))

「獲取數(shù)據(jù)并重塑數(shù)據(jù)以在模型中工作」

首先,使用pandas_datareader從Yahoo Finance讀入數(shù)據(jù)。其次,為了讓LSTM模型發(fā)揮作用,必須以正確的方式對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。可以使用Scikit-Learn中的MinMaxScaler和NumPy模塊來(lái)實(shí)現(xiàn)。另外,還必須創(chuàng)建x_train和y_train數(shù)據(jù)列表,以便在下一節(jié)發(fā)送給模型。

#build LSTM modelmodel = Sequential()model.add(LSTM(50, return_sequences=True, input_shape=(x_train.shape[1],1)))model.add(LSTM(50,return_sequences=False))model.add(Dense(25))model.add(Dense(1))#compile the modelmodel.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])#train the modelmodel.fit(x_train, y_train, batch_size=1, epochs=5)#create test datasettest_data = scaled_data[train_data_len-60:, :]#create dataset x_test, y_testx_test = []y_test = dataset[train_data_len:, :]for i in range(60,len(test_data)): x_test.append(test_data[i-60:i, 0])#convert data to numpy arrayx_test = np.array(x_test)#reshape the datax_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))#get the models predicted price valuespredictions = model.predict(x_test)predictions = scaler.inverse_transform(predictions)

「擬合模型,得到預(yù)測(cè)結(jié)果」

這里必須構(gòu)建、編譯和訓(xùn)練LSTM模型以獲得最終的預(yù)測(cè)結(jié)果,TensorFlow和Scikit-Learn讓這個(gè)過(guò)程變得非常簡(jiǎn)單。模型生成之后,可以用測(cè)試數(shù)據(jù)進(jìn)行測(cè)試,以獲得最終的預(yù)測(cè)結(jié)果,看看它的準(zhǔn)確度如何。對(duì)于這個(gè)特定的模型,將epochs設(shè)置為5,也可以改變這個(gè)設(shè)置,看看它對(duì)模型的輸出有什么影響。

#get the root mean squared error (RMSE)rmse = np.sqrt(np.mean((predictions-y_test)**2))#plot the datatrain = data[:train_data_len]valid = data[train_data_len:]valid['Predictions'] = predictionsplt.figure(figsize=(16,8))plt.title('Model for {}'.format(stock.upper()))plt.xlabel('Date', fontsize=16)plt.ylabel('Close Price', fontsize=16)plt.plot(train['Close'])plt.plot(valid[['Close','Predictions']])plt.legend(['Train','Valid','Prediction'],loc='lower right')plt.show()print (valid)# find the accuracy based on predicting day-to-day movements valid_movement = []pred_movement = []close_prices = valid.Close.tolist()pred_prices = valid.Predictions.tolist()n = 0for index, value in enumerate(close_prices[:-1]):    if value > close_prices[index+1]:         valid_movement.append(1)    else:        valid_movement.append(0)for index, value in enumerate(pred_prices[:-1]):    if value > pred_prices[index+1]:         pred_movement.append(1)    else:        pred_movement.append(0)for val, pred in zip(valid_movement, pred_movement):    if val == pred:        n=n+1    else:        passtotal = len(valid_movement)accuracy = n/totalprint (f'The accuracy of the LSTM Model predicting the movement of a stock each day is {100 * round(accuracy, 3)}%')dataframe = pd.DataFrame(list(zip(valid_movement, pred_movement)), columns =['Valid Movement', 'Predicted Movement'])print (dataframe)#get predicted price for next daylast_60day = data[-60:].valueslast_60day_scaled = scaler.transform(last_60day)xx_test = []xx_test.append(last_60day_scaled)xx_test = np.array(xx_test)xx_test = np.reshape(xx_test, (xx_test.shape[0], xx_test.shape[1],1))pred = model.predict(xx_test)pred = scaler.inverse_transform(pred)pred = pred[0]pred = pred[0]print('The predicted price for the next trading day is: {}'.format(round(pred, 2)))#get stats#Root mean squared error print (f'The root mean squared error is {round(rmse, 2)}')error = mean_squared_error(valid['Close'].tolist(), valid['Predictions'].tolist())print('Testing Mean Squared Error: %.3f' % error)

「使用預(yù)測(cè)來(lái)實(shí)際測(cè)試模型」

我們成功地利用LSTM模型對(duì)股票價(jià)格進(jìn)行了 '預(yù)測(cè) ',并得到了預(yù)測(cè)的準(zhǔn)確性。在這部分代碼中,我們繪制了訓(xùn)練數(shù)據(jù)、測(cè)試數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù),同時(shí)也獲得了一堆其他指標(biāo),比如預(yù)測(cè)日常走勢(shì)的準(zhǔn)確率、下一個(gè)交易日的預(yù)測(cè)價(jià)格,以及模型的均方根誤差和測(cè)試均方根誤差。

「TSLA的LSTM模型」

乍一看,這個(gè)模型似乎非常好。它甚至預(yù)測(cè)了2020年史無(wú)前例的大崩盤!


但是,你再往下看,就會(huì)發(fā)現(xiàn)這個(gè)模型只是簡(jiǎn)單地跟蹤了上一天的收盤價(jià),因?yàn)樗J(rèn)為簡(jiǎn)單地跟蹤昨天的收盤價(jià)是預(yù)測(cè)明天價(jià)格的最好方式。

「LSTM模型近視圖」

但回顧之前找到的統(tǒng)計(jì)數(shù)據(jù),就可以驗(yàn)證這一點(diǎn)(下面附上一張截圖)。預(yù)測(cè)日線走勢(shì)的準(zhǔn)確率是48.19%,比拋硬幣的概率還低!

「LSTM模型的結(jié)果」

結(jié)論

機(jī)器學(xué)習(xí)在資產(chǎn)管理中有巨大的作用,但是并不是外行想的這樣的簡(jiǎn)單。

人工智能的很多場(chǎng)景可以套用成熟的算法而立刻獲得不錯(cuò)的準(zhǔn)確率,LSTM算法雖然很強(qiáng)大,但是金融市場(chǎng)的預(yù)測(cè)并不是簡(jiǎn)單套用就可以成功的。


模型的表現(xiàn)并不取決于模型本身的能力,而是取決于模型是如何在深刻理解應(yīng)用場(chǎng)景時(shí)被修正的。


需要指出的是:這個(gè)LSTM模型不work,不代表LSTM行不通,更不代表機(jī)器學(xué)習(xí)行不通。這就好像有人偷學(xué)了降龍十八掌,結(jié)果發(fā)現(xiàn)還是打不過(guò)別人,這并不代表降龍十八掌不夠厲害,而是因?yàn)檫@個(gè)人沒(méi)有用對(duì)。

本內(nèi)容僅代表原作者的分析、推測(cè)與判斷,所依據(jù)信息和資料來(lái)源于公開渠道,不保證其準(zhǔn)確性、充足性或完整性,相關(guān)信息僅供參考,不構(gòu)成廣告、銷售要約,或交易任何證券、基金或投資產(chǎn)品的建議。本內(nèi)容中引用的任何實(shí)體、品牌、商品等僅作為研究分析對(duì)象使用,不代表投資實(shí)例和建議。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
基于SARIMA、XGBoost和CNN-LSTM的時(shí)間序列預(yù)測(cè)對(duì)比
Tensorflow實(shí)例:利用LSTM預(yù)測(cè)股票每日最高價(jià)(二)
深度學(xué)習(xí)文本分類方法綜述(代碼)
Python那些事——極簡(jiǎn)Python帶你探索分類與回歸的奧秘
Pipeline, ColumnTransformer和FeatureUnion
時(shí)間序列深度學(xué)習(xí):狀態(tài) LSTM 模型預(yù)測(cè)太陽(yáng)黑子(中)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服