如何預測股票分析--先知(Prophet)

上一篇中,咱們探討了自動ARIMA,可是好像表現的仍是不夠完善,接下來看看先知的力量!html

先知(Prophet)

有許多時間序列技術能夠用在股票預測數據集上,可是大多數技術在擬合模型以前須要大量的數據預處理。Prophet(先知)由Facebook設計和開發,是一個時間序列預測庫,不須要數據預處理,而且很是容易實現。先知的輸入是一個帶有兩列的數據框:日期和目標(ds和y)。

時間序列預測一直是預測問題中的難點,人們很難找到一個適用場景豐富的通用模型,這是由於現實中每一個預測問題的背景知識,例如數據的產生過程,每每是不一樣的,即便是同一類問題,影響這些預測值的因素與程度也每每不一樣,再加上預測問題每每須要大量專業的統計知識,這又給分析人員帶來了難度,這些都使得時間序列預測問題變得尤爲複雜。傳統的時間序列預測方法一般有以下缺陷:python

    1. 適用的時序數據過於侷限
    2. 缺失值須要填補
    3. 模型缺少靈活性
    4. 指導做用較弱
    2017年2月24號facebook開源了時間序列預測框架prophet,目前支持R語言和python語言。託管在github上:https://github.com/facebookincubator/prophet。prophet是基於可分解(趨勢+季節+節假日)模型的開源庫,Prophet充分的將業務背景知識和統計知識融合起來,它讓咱們能夠用簡單直觀的參數進行高精度的時間序列預測,而且支持自定義季節和節假日的影響。git

Prophet官方文檔:https://facebook.github.io/prophet/
Prophet論文:https://peerj.com/preprints/3190/
Prophet-github:https://github.com/facebook/prophetgithub

 

先知試圖在過去的數據中捕捉季節性,而且在數據集很大的時候依然表現良好。框架

#importing prophet 導入庫函數函數

from fbprophet import Prophet測試

 

#creating dataframe 創建新的數據集框架,以長度爲索引,取date和close這兩列spa

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

 #給這個框架灌輸數據設計

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']

 

#preparing data對數據集的列名重命名

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

 

#train and validation劃分訓練集和測試集

train = new_data[:987]

valid = new_data[987:]

 

#fit the model創建模型,給模型喂訓練集

model = Prophet()

model.fit(train)

 

#predictions 預測,make_future_datafram是庫自帶的函數,新建一個數據框,指明須要預測到未來多長時間

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

forecast = model.predict(close_prices)

結果

#rmse 計算rms

forecast_valid = forecast['yhat'][987:]

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

rms

 

57.494461930575149

 

 

#plot 繪圖(老三樣)

valid['Predictions'] = 0

valid['Predictions'] = forecast_valid.values

 

plt.plot(train['y'])

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

推論

先知(像大多數時間序列預測技術同樣)試圖從過去的數據中捕捉趨勢和季節性。該模型一般在時間序列數據集上表現良好,但在本例中沒有達到預期效果。

事實證實,股票價格沒有特定的趨勢或季節性。價格的漲跌很大程度上取決於目前市場上的狀況。所以,像ARIMA、SARIMA和Prophet這樣的預測技術並不能很好地解決這個特殊的問題。

跟多的關於理論的知識,你能夠訪問

https://blog.csdn.net/h4565445654/article/details/78398089  fbProphe時序預測----論文總結以及調參思路

http://blog.51cto.com/13591395/2066888 騰訊技術工程 | 基於Prophet的時間序列預測

 

 

參考:https://www.jiqizhixin.com/articles/2019-01-04-16

相關文章
相關標籤/搜索