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


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

先知(Prophet)

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

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

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

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

 

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

#importing prophet 導入庫函數

from fbprophet import Prophet

 

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

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

 

#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


免責聲明!

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



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