import pandas as pd
import pandas_datareader
import datetime
import matplotlib.pylab as plt
import seaborn as sns
from matplotlib.pylab import style
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
style.use('ggplot')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
stockFilePath = './data/T10yr.csv'
stock = pd.read_csv(stockFilePath, index_col=0, parse_dates=[0])
print(stock.head())
print(stock.tail())
Open High Low Close Volume Adj Close
Date
2000-01-03 6.498 6.603 6.498 6.548 0 6.548
2000-01-04 6.530 6.548 6.485 6.485 0 6.485
2000-01-05 6.521 6.599 6.508 6.599 0 6.599
2000-01-06 6.558 6.585 6.540 6.549 0 6.549
2000-01-07 6.545 6.595 6.504 6.504 0 6.504
Open High Low Close Volume Adj Close
Date
2016-07-25 1.584 1.584 1.554 1.571 0 1.571
2016-07-26 1.559 1.587 1.549 1.563 0 1.563
2016-07-27 1.570 1.570 1.511 1.515 0 1.515
2016-07-28 1.525 1.535 1.493 1.511 0 1.511
2016-07-29 1.525 1.530 1.458 1.458 0 1.458
stock_week = stock['Close'].resample('W-MON').mean()
stock_train = stock_week['2000':'2015']
stock_train.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title('Stock close')
sns.despine()
首先做差分,满足最基本的平稳性
stock_diff = stock_train.diff()
stock_diff = stock_diff.dropna()
plt.figure(figsize=(12,8))
plt.plot(stock_diff)
plt.title('一阶差分')
plt.show()
acf = plot_acf(stock_diff, lags=20)
plt.title('ACF')
acf.show()
C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\figure.py:445: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.
% get_backend())
pacf = plot_pacf(stock_diff, lags=20)
plt.title('PACF')
pacf.show()
C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\figure.py:445: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.
% get_backend())
model = ARIMA(stock_train, order=(1,1,1),freq='W-MON')
result = model.fit()
print(result.summary())
ARIMA Model Results
==============================================================================
Dep. Variable: D.Close No. Observations: 834
Model: ARIMA(1, 1, 1) Log Likelihood 720.846
Method: css-mle S.D. of innovations 0.102
Date: Fri, 29 Mar 2019 AIC -1433.692
Time: 15:41:45 BIC -1414.787
Sample: 01-10-2000 HQIC -1426.444
- 12-28-2015
=================================================================================
coef std err z P>|z| [0.025 0.975]
---------------------------------------------------------------------------------
const -0.0052 0.005 -1.145 0.252 -0.014 0.004
ar.L1.D.Close 0.2841 0.203 1.397 0.163 -0.115 0.683
ma.L1.D.Close -0.0869 0.213 -0.408 0.683 -0.504 0.330
Roots
=============================================================================
Real Imaginary Modulus Frequency
-----------------------------------------------------------------------------
AR.1 3.5199 +0.0000j 3.5199 0.0000
MA.1 11.5087 +0.0000j 11.5087 0.0000
-----------------------------------------------------------------------------
pred = result.predict('20140609', '20160609',dynamic=True, typ='levels')
print(pred)