畢業(yè)設(shè)計 時間序列的股票預(yù)測分析系統(tǒng)
1 簡介
Hi,大家好,這里是丹成學(xué)長,今天向大家介紹一個大數(shù)據(jù)項目
大數(shù)據(jù)分析:基于時間序列的股票預(yù)測于分析
畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見B站個人主頁
https://space.bilibili.com/33886978
2 時間序列的由來
提到時間序列分析技術(shù),就不得不說到其中的AR/MA/ARMA/ARIMA分析模型。這四種分析方法的共同特點都是跳出變動成分的分析角度,從時間序列本身出發(fā),力求得出前期數(shù)據(jù)與后期數(shù)據(jù)的量化關(guān)系,從而建立前期數(shù)據(jù)為自變量,后期數(shù)據(jù)為因變量的模型,達到預(yù)測的目的。來個通俗的比喻,大前天的你、前天的你、昨天的你造就了今天的你。
2.1 四種模型的名稱:
AR模型:自回歸模型(Auto Regressive model);
MA模型:移動平均模型(Moving Average model);
ARMA:自回歸移動平均模型(Auto Regressive and Moving Average model);
ARIMA模型:差分自回歸移動平均模型。
AR模型:
如果某個時間序列的任意數(shù)值可以表示成下面的回歸方程,那么該時間序列服從p階的自回歸過程,可以表示為AR(p):

AR模型利用前期數(shù)值與后期數(shù)值的相關(guān)關(guān)系(自相關(guān)),建立包含前期數(shù)值和后期數(shù)值的回歸方程,達到預(yù)測的目的,因此成為自回歸過程。這里需要解釋白噪聲,白噪聲可以理解成時間序列數(shù)值的隨機波動,這些隨機波動的總和會等于0,例如,某餅干自動化生產(chǎn)線,要求每包餅干為500克,但是生產(chǎn)出來的餅干產(chǎn)品由于隨機因素的影響,不可能精確的等于500克,而是會在500克上下波動,這些波動的總和將會等于互相抵消等于0。
3 數(shù)據(jù)預(yù)覽
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#準備兩個數(shù)組
list1 = [6,4,8]
list2 = [8,6,10]
#分別將list1,list2轉(zhuǎn)為Series數(shù)組
list1_series = pd.Series(list1)
print(list1_series)
list2_series = pd.Series(list2)
print(list2_series)
#將兩個Series轉(zhuǎn)為DataFrame,對應(yīng)列名分別為A和B
frame = { 'Col A': list1_series, 'Col B': list2_series }
result = pd.DataFrame(frame)
result.plot()
plt.show()

4 理論公式
4.1 協(xié)方差
首先看下協(xié)方差的公式:


4.2 相關(guān)系數(shù)
計算出Cov后,就可以計算相關(guān)系數(shù)了,值在-1到1之間,越接近1,說明正相關(guān)性越大;越接近-1,則負相關(guān)性越大,0為無相關(guān)性 公式如下:

4.3 scikit-learn計算相關(guān)性

#各特征間關(guān)系的矩陣圖
sns.pairplot(iris, hue='species', size=3, aspect=1)

Andrews Curves 是一種通過將每個觀察映射到函數(shù)來可視化多維數(shù)據(jù)的方法。 使用 Andrews Curves 將每個多變量觀測值轉(zhuǎn)換為曲線并表示傅立葉級數(shù)的系數(shù),這對于檢測時間序列數(shù)據(jù)中的異常值很有用。
plt.subplots(figsize = (10,8))
pd.plotting.andrews_curves(iris, 'species', colormap='cool')

這里以經(jīng)典的鳶尾花數(shù)據(jù)集為例
setosa、versicolor、virginica代表了三個品種的鳶尾花。可以看出各個特征間有交集,也有一定的分別規(guī)律。
#最后,通過熱圖找出數(shù)據(jù)集中不同特征之間的相關(guān)性,高正值或負值表明特征具有高度相關(guān)性:
fig=plt.gcf()
fig.set_size_inches(10,6)
fig=sns.heatmap(iris.corr(), annot=True, cmap='GnBu', linewidths=1, linecolor='k', \
square=True, mask=False, vmin=-1, vmax=1, \
cbar_kws={"orientation": "vertical"}, cbar=True)

5 金融數(shù)據(jù)的時序分析
主要介紹:時間序列變化情況計算、時間序列重采樣以及窗口函數(shù)
5.1 數(shù)據(jù)概況
import pandas as pd
tm = pd.read_csv('/home/kesci/input/gupiao_us9955/Close.csv')
tm.head()

數(shù)據(jù)中各個指標含義:
AAPL.O | Apple Stock
MSFT.O | Microsoft Stock
INTC.O | Intel Stock
AMZN.O | Amazon Stock
GS.N | Goldman Sachs Stock
SPY | SPDR S&P 500 ETF Trust
.SPX | S&P 500 Index
.VIX | VIX Volatility Index
EUR= | EUR/USD Exchange Rate
XAU= | Gold Price
GDX | VanEck Vectors Gold Miners ETF
GLD | SPDR Gold Trust
8年期間價格(或指標)走勢一覽圖

5.2 序列變化情況計算
計算每一天各項指標的差異值(后一天減去前一天結(jié)果)
計算pct_change:增長率也就是 (后一個值-前一個值)/前一個值)
計算平均計算pct_change指標
繪圖觀察哪個指標平均增長率最高
計算連續(xù)時間的增長率(其中需要計算今天價格和昨天價格的差異)
計算每一天各項指標的差異值(后一天減去前一天結(jié)果)

計算pct_change:增長率也就是 (后一個值-前一個值)/前一個值)

計算平均計算pct_change指標 繪圖觀察哪個指標平均增長率最高

除了波動率指數(shù)(.VIX指標)增長率最高外,就是亞馬遜的股價了!貝佐斯簡直就是宇宙最強光頭強
計算連續(xù)時間的增長率(其中需要計算今天價格和昨天價格的差異)
#第二天數(shù)據(jù)
tm.shift(1).head()
#計算增長率
rets = np.log(tm/tm.shift(1))
print(rets.tail().round(3))
#cumsum的小栗子:
print('小栗子的結(jié)果:',np.cumsum([1,2,3,4]))
#增長率做cumsum需要對log進行還原,用e^x
rets.cumsum().apply(np.exp).plot(figsize=(10,6))

以上是在連續(xù)時間內(nèi)的增長率,也就是說,2010年的1塊錢,到2018年已經(jīng)變?yōu)?0多塊了(以亞馬遜為例)
畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見B站個人主頁
https://space.bilibili.com/33886978