Python----股票ARIMA模型拟合

# coding=utf-8
import pandas as pd
import numpy as np
from pandas import Series ,DataFrame
import matplotlib.pyplot as plt
#### 股票时间序列分析 ####
# 参数初始化
datafile= u'E:/python 数据分析 / 12 /stock_px.xls'
import sys
reload(sys)
sys.setdefaultencoding( 'utf8')
# 读取数据
data=pd.read_ Excel(datafile , index_col= u' 日期 ')
data=DataFrame(data , dtype=np.float64)
data=data.iloc[: ,:- 1] # 取三只股票数据
data
# 时序图
plt.rcParams[ 'font.sans-serif']=[ 'SimHei'] # 用来正常显示中文标签
plt.rcParams[ 'axes.unicode_minus']= False # 用来正常显示负号
data.plot()
plt.title( ' 三只股票时序图 ')

# 自相关数
from statsmodels.graphics.tsaplots import plot_acf
#AAPL 取前 100 条数据
plot_acf(data[ 'AAPL'].iloc[: 100]).show()
plt.title( 'AAPL 自相关图 ')
#MSFT 取前 100 条数据
plot_acf(data[ 'MSFT'].iloc[: 100]).show()
plt.title( 'MSFT 自相关图 ')
#XOM 取前 100 条数据
plot_acf(data[ 'XOM'].iloc[: 100]).show()
plt.title( 'XOM 自相关图 ')
# 平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
#AAPL 的平稳性检测,看 pvalue
print 'AAPL pvalue:' ,ADF(data[ 'AAPL'])[ 1] #pvalue 值为 0.99, 大于 0.05, 不稳定,考虑差分数值建模
#MSFT 的平稳性检测,看 pvalue
print 'MSFT pvalue:' ,ADF(data[ 'MSFT'])[ 1] #pvalue 值为 0.04, 小于 0.05, 稳定
#XOM 的平稳性检测,看 pvalue
print 'MSFT pvalue:' ,ADF(data[ 'XOM'])[ 1]   #pvalue 值为 0.45, 大于 0.05, 不稳定

### 差分
D_data=data.diff().dropna()
D_data.columns=[ u'AAPL 差分 ' , u'MSFT 差分 ' , u'XOM 差分 ']
D_data
## 差分后的结果
# 差分时序图
D_data.plot()
plt.title( ' 三只股票差分时序图 ')
# 差分自相关数
from statsmodels.graphics.tsaplots import plot_acf
#AAPL 差分 取前 100 条数据
plot_acf(D_data[ 'AAPL 差分 '].iloc[: 100]).show()
plt.title( 'AAPL 差分自相关图 ')
#MSFT 差分 取前 100 条数据
plot_acf(D_data[ 'MSFT 差分 '].iloc[: 100]).show()
plt.title( 'MSFT 差分自相关图 ')
#XOM 差分 取前 100 条数据
plot_acf(D_data[ 'XOM 差分 '].iloc[: 100]).show()
plt.title( 'XOM 差分自相关图 ')
# 偏自相关图
from statsmodels.graphics.tsaplots import plot_pacf
#AAPL 差分偏自相关 取前 100 条数据
plot_pacf(D_data[ 'AAPL 差分 '].iloc[: 100]).show()
plt.title( 'AAPL 差分偏自相关图 ')
#MSFT 差分偏自相关 取前 100 条数据
plot_pacf(D_data[ 'MSFT 差分 '].iloc[: 100]).show()
plt.title( 'MSFT 偏差分自相关图 ')
#XOM 差分偏自相关 取前 100 条数据
plot_pacf(D_data[ 'XOM 差分 '].iloc[: 100]).show()
plt.title( 'XOM 偏差分自相关图 ')
# 差分平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
#AAPL 差分的平稳性检测,看 pvalue
print 'AAPL pvalue:' ,ADF(D_data[ 'AAPL 差分 '])[ 1] # 远小于 0.05, 稳定!
#MSFT 差分的平稳性检测,看 pvalue
print 'MSFT pvalue:' ,ADF(D_data[ 'MSFT 差分 '])[ 1] # 远小于 0.05, 稳定!
#XOM 差分的平稳性检测,看 pvalue
print 'MSFT pvalue:' ,ADF(D_data[ 'XOM 差分 '])[ 1]   # 远小于 0.05, 稳定!

# 白噪声检测
from statsmodels.stats.diagnostic import acorr_ljungbox
#AAPL 差分白噪声检测
acorr_ljungbox(D_data[ 'AAPL 差分 '] , lags= 1) # 返回统计量和 p   p 值大于 0.05 ,不排除白噪声
#MSFT 差分白噪声检测
acorr_ljungbox(D_data[ 'MSFT 差分 '] , lags= 1) # 返回统计量和 p   p 值小于 0.05 ,排除白噪声
#XOM 差分白噪声检测
acorr_ljungbox(D_data[ 'XOM 差分 '] , lags= 1) # 返回统计量和 p    p 值小于 0.05 ,排除白噪声



#AAPL  ARIMA 建模
from statsmodels.tsa.arima_model import  ARIMA
pmax= 3
qmax= 3
bic_matrix=[] #bic 矩阵
for p in range(pmax+ 1):
    tmp=[]
    for q in range(qmax+ 1):
         try: # 存在部分报错,所以用 try 来跳过报错。
            tmp.append(ARIMA(data[ 'AAPL'] ,(p , 1 ,q)).fit().bic)
         except:
            tmp.append( None)
    bic_matrix.append(tmp)
bic_matrix=pd.DataFrame(bic_matrix) # 从中可找出最小值
p ,q=bic_matrix.stack().idxmin() # 先用 stack 展平,然后用 idxmin 找出最小位置。
print u'BIC 最小的 p 值和 q 值为 : %s %s'%(p ,q) #0,0
model=ARIMA(data[ 'AAPL'] ,(p , 1 ,q)).fit() # 建立 ARIMA(0,1,0) 模型
model.summary() # 股票 AAPL 给出一份模型报告

#MSFT  ARIMA 建模
from statsmodels.tsa.arima_model import  ARIMA
pmax= 3
qmax= 3
bic_matrix=[] #bic 矩阵
for p in range(pmax+ 1):
    tmp=[]
    for q in range(qmax+ 1):
         try: # 存在部分报错,所以用 try 来跳过报错。
            tmp.append(ARIMA(data[ 'MSFT'] ,(p , 1 ,q)).fit().bic)
         except:
            tmp.append( None)
    bic_matrix.append(tmp)
bic_matrix=pd.DataFrame(bic_matrix) # 从中可找出最小值
p ,q=bic_matrix.stack().idxmin() # 先用 stack 展平,然后用 idxmin 找出最小位置。
print u'BIC 最小的 p 值和 q 值为 : %s %s'%(p ,q) #0,1
model=ARIMA(data[ 'MSFT'] ,(p , 1 ,q)).fit() # 建立 ARIMA(0,1,1) 模型
model.summary() # 给出一份模型报告

#XOM  ARIMA 建模
from statsmodels.tsa.arima_model import  ARIMA
pmax= 3
qmax= 3
bic_matrix=[] #bic 矩阵
for p in range(pmax+ 1):
    tmp=[]
    for q in range(qmax+ 1):
         try: # 存在部分报错,所以用 try 来跳过报错。
            tmp.append(ARIMA(data[ 'XOM'] ,(p , 1 ,q)).fit().bic)
         except:
            tmp.append( None)
    bic_matrix.append(tmp)
bic_matrix=pd.DataFrame(bic_matrix) # 从中可找出最小值
p ,q=bic_matrix.stack().idxmin() # 先用 stack 展平,然后用 idxmin 找出最小位置。
print u'BIC 最小的 p 值和 q 值为 : %s %s'%(p ,q) #2,3
model=ARIMA(data[ 'XOM'] ,(p , 1 ,q)).fit() # 建立 ARIMA(2,1,3) 模型
model.summary() # 给出一份模型报告 result:
AAPL的ARIMA模型拟合报告:
                            ARIMA Model Results                              
==============================================================================
Dep. Variable:                 D.AAPL   No. Observations:                 2213
Model:                 ARIMA(0, 1, 0)   Log Likelihood               -5731.237
Method:                           css   S.D. of innovations              3.225
Date:                Sat, 24 Sep 2016   AIC                          11466.474
Time:                        13:12:28   BIC                          11477.878
Sample:                    01-03-2003   HQIC                         11470.640
                         - 10-14-2011                                         
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
const          0.1873      0.069      2.733      0.006         0.053     0.322
==============================================================================
MSFT的ARIMA模型拟合报告:
                             ARIMA Model Results                              
==============================================================================
Dep. Variable:                 D.MSFT   No. Observations:                 2213
Model:                 ARIMA(0, 1, 1)   Log Likelihood               -1127.640
Method:                       css-mle   S.D. of innovations              0.403
Date:                Sat, 24 Sep 2016   AIC                           2261.280
Time:                        13:13:45   BIC                           2278.387
Sample:                    01-03-2003   HQIC                          2267.529
                         - 10-14-2011                                         
================================================================================
                   coef    std err          z      P>|z|      [95.0% Conf. Int.]
--------------------------------------------------------------------------------
const            0.0028      0.008      0.351      0.726        -0.013     0.018
ma.L1.D.MSFT    -0.0752      0.021     -3.498      0.000        -0.117    -0.033
                                    Roots                                    
=============================================================================
                 Real           Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
MA.1           13.3040           +0.0000j           13.3040            0.0000
-----------------------------------------------------------------------------

XOM的ARIMA模型拟合报告:

                             ARIMA Model Results                              
==============================================================================
Dep. Variable:                  D.XOM   No. Observations:                 2213
Model:                 ARIMA(2, 1, 3)   Log Likelihood               -3267.532
Method:                       css-mle   S.D. of innovations              1.059
Date:                Sat, 24 Sep 2016   AIC                           6549.063
Time:                        13:14:26   BIC                           6588.978
Sample:                    01-03-2003   HQIC                          6563.644
                         - 10-14-2011                                         
===============================================================================
                  coef    std err          z      P>|z|      [95.0% Conf. Int.]
-------------------------------------------------------------------------------
const           0.0219      0.017      1.284      0.199        -0.012     0.055
ar.L1.D.XOM    -1.4970      0.090    -16.722      0.000        -1.672    -1.322
ar.L2.D.XOM    -0.5351      0.085     -6.287      0.000        -0.702    -0.368
ma.L1.D.XOM     1.3333      0.087     15.238      0.000         1.162     1.505
ma.L2.D.XOM     0.1787      0.081      2.201      0.028         0.020     0.338
ma.L3.D.XOM    -0.2140      0.021    -10.334      0.000        -0.255    -0.173
                                    Roots                                    
=============================================================================
                 Real           Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
AR.1           -1.1026           +0.0000j            1.1026            0.5000
AR.2           -1.6948           +0.0000j            1.6948            0.5000
MA.1           -1.1927           -0.1691j            1.2046           -0.4776
MA.2           -1.1927           +0.1691j            1.2046            0.4776
MA.3            3.2206           -0.0000j            3.2206           -0.0000
-----------------------------------------------------------------------------




result:

figure_11.png (23.52 KB)

下载附件 保存到相册

2016-9-24 13:06 上传


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值