個股與指數的回歸分析(自帶python ols 參數解讀)


 python金融風控評分卡模型和數據分析微專業課(博主親自錄制視頻):http://dwz.date/b9vv

 

http://blog.csdn.net/csqazwsxedc/article/details/51336322(轉)

# 一 個股與指數的回歸分析 ## 1.1 數據加載 加載分析所需的Python庫

import statsmodels.api as sm import statsmodels.formula.api as smf import statsmodels.graphics.api as smg import patsy %matplotlib inline import matplotlib.pyplot as plt import numpy as np import pandas as pd from pandas import Series,DataFrame from scipy import stats import seaborn as sns

確定起止時間為2015年1月1日至2015年12月31日

import datetime start = datetime.datetime(2015,1,1) end = datetime.datetime(2015,12,31)

 

獲取”上證綜指”2015年股價數據,記為datasz; 獲取”機器人”公司2015年股價數據,記為datajqr。

from pandas.io.data import DataReader datass = DataReader("000001.SS","yahoo",start,end) datajqr = DataReader("300024.SZ","yahoo",start,end)

 

D:\software\新建文件夾 (4)\lib\site-packages\pandas\io\data.py:33: FutureWarning: The pandas.io.data module is moved to a separate package (pandas-datareader) and will be removed from pandas in a future version. After installing the pandas-datareader package (https://github.com/pydata/pandas-datareader), you can change the import “from pandas.io import data, wb“ to “from pandas_datareader import data, wb“. FutureWarning)

datass.head()

 

  Open High Low Close Volume Adj Close
Date            
2015-01-05 3350.52 3350.52 3350.52 3350.52 0 3350.52
2015-01-06 3351.45 3351.45 3351.45 3351.45 0 3351.45
2015-01-07 3373.95 3373.95 3373.95 3373.95 0 3373.95
2015-01-08 3293.46 3293.46 3293.46 3293.46 0 3293.46
2015-01-09 3285.41 3285.41 3285.41 3285.41 0 3285.41
datajqr.head()

 

  Open High Low Close Volume Adj Close
Date            
2015-01-01 39.39 39.39 39.39 39.39 0 39.37083
2015-01-02 39.39 39.39 39.39 39.39 0 39.37083
2015-01-05 38.83 39.33 37.30 39.01 20750100 38.99101
2015-01-06 38.76 41.29 38.50 41.22 24357600 41.19994
2015-01-07 41.21 41.60 40.05 40.18 16364700 40.16044

## 1.2 個股與上證指數數據探索性分析

close_ss = datass["Close"] close_jqr = datajqr["Close"]

 

得到上證綜指2015年各交易日收盤價的簡單統計結果,如下所示。共有233個上證綜指的股價數據,指數的平均值為3739.79,最小值為2927.29,最大值為5166.35。

close_ss.describe()

 

count 233.000000 mean 3739.794893 std 538.105387 min 2927.290000 25% 3320.680000 50% 3617.060000 75% 4034.310000 max 5166.350000 Name: Close, dtype: float64 得到機器人公司2015年各交易日收盤價的簡單統計結果,如下所示。共有261個上證綜指的股價數據,股價的平均值67.31,最小值為39.01,最大值為128.00。

close_jqr.describe()

 

count 261.000000 mean 67.317433 std 20.643055 min 39.010000 25% 51.800000 50% 68.500000 75% 82.550000 max 128.000000 Name: Close, dtype: float64 觀察上證綜指和機器人公司的股價波動圖,如下所示,可以看到,上證綜指與機器人公司的股價波動有着相對一致的趨勢,機器人公司股價波動較上證綜指更大。

fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6)) close_ss.plot(ax=ax[0]) ax[0].set_title("SZZZ") close_jqr.plot(ax=ax[1]) ax[1].set_title("JQR")

 

 

stock = pd.merge(datass,datajqr,left_index = True, right_index = True) stock = stock[["Close_x","Close_y"]] stock.columns = ["SZZZ","JQR"] stock.head()

 

  SZZZ JQR
Date    
2015-01-05 3350.52 39.01
2015-01-06 3351.45 41.22
2015-01-07 3373.95 40.18
2015-01-08 3293.46 40.15
2015-01-09 3285.41 39.36

根據股價得到上證綜指和機器人公司的日收益率序列,如下所示。

daily_return = (stock.diff()/stock.shift(periods = 1)).dropna() daily_return.head()

 

  SZZZ JQR
Date    
2015-01-06 0.000278 0.056652
2015-01-07 0.006714 -0.025230
2015-01-08 -0.023856 -0.000747
2015-01-09 -0.002444 -0.019676
2015-01-12 -0.017072 0.004827

觀察日收益率序列的簡單統計值,如下所示。上證綜指日收益率平均值為0.000556,最小值為-0.0849,最大值為0.0769.機器人公司股價的平均值為0.003665,最小值為-10.00,最大值數據為異常值。

daily_return.describe()

 

  SZZZ JQR
count 232.000000 232.000000
mean 0.000556 0.003665
std 0.025194 0.050061
min -0.084907 -0.100017
25% -0.011398 -0.021297
50% 0.002583 -0.000724
75% 0.016720 0.026968
max 0.076940 0.209524

觀察異常值數據

daily_return[daily_return["JQR"] > 0.105]

 

  SZZZ JQR
Date    
2015-10-12 0.07694 0.209524

經分析,該日股價數據異常的原因主要是10月8日和10月9日兩個交易日的股價數據缺失,導致該日收益率的計算基數為2015年9月30日。

畫出上證綜指和機器人公司日收益率波動圖

fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6)) daily_return["SZZZ"].plot(ax=ax[0]) ax[0].set_title("SZZZ") daily_return["JQR"].plot(ax=ax[1]) ax[1].set_title("JQR")

 

 

<matplotlib.text.Text at 0x7671a40dd8>

png

畫出上證綜指和機器人公司日收益率直方圖和密度圖,如下所示,可以發現,總體上,上證綜指和機器人公司日收益率服從正態分布。相對而言,機器人公司的日收益率較上證綜指偏低。

fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6)) sns.distplot(daily_return["SZZZ"],ax=ax[0]) ax[0].set_title("SZZZ") sns.distplot(daily_return["JQR"],ax=ax[1]) ax[1].set_title("JQR")

 

 

<matplotlib.text.Text at 0x76725906a0>

png

畫出上證綜指和機器人公司股價日收益率散點圖,如下所示。

fig,ax = plt.subplots(nrows=1,ncols=1,figsize=(12,6)) plt.scatter(daily_return["JQR"],daily_return["SZZZ"]) plt.title("Scatter Plot of daily return between JQR and SZZZ")

 

 

<matplotlib.text.Text at 0x76726657b8>

png

散點圖表明,上證綜指和機器人公司的股價可能存在線性的正相關關系。

1.3 個股與上證綜指回歸分析

import statsmodels.api as sm

 

加入截距項。

daily_return["intercept"]=1.0

 

以個股為自變量,上證綜指為因變量,對個股和上證綜指進行回歸分析。得到回歸結果,如下所示。

model = sm.OLS(daily_return["JQR"],daily_return[["SZZZ","intercept"]]) results = model.fit() results.summary()

 

 

OLS Regression Results
Dep. Variable: JQR R-squared: 0.382
Model: OLS Adj. R-squared: 0.379
Method: Least Squares F-statistic: 142.0
Date: Fri, 18 Mar 2016 Prob (F-statistic): 8.29e-26
Time: 22:16:56 Log-Likelihood: 421.79
No. Observations: 232 AIC: -839.6
Df Residuals: 230 BIC: -832.7
Df Model: 1    
Covariance Type: nonrobust    
  coef std err t P>|t| [95.0% Conf. Int.]
SZZZ 1.2275 0.103 11.915 0.000 1.025 1.431
intercept 0.0030 0.003 1.151 0.251 -0.002 0.008
Omnibus: 8.703 Durbin-Watson: 1.824
Prob(Omnibus): 0.013 Jarque-Bera (JB): 9.653
Skew: 0.350 Prob(JB): 0.00801
Kurtosis: 3.714 Cond. No. 39.8

一元最小二乘法回歸結果表明,機器人公司的股票日收益率與上證綜指日收益率之間存在顯著的正相關關系。其中,可決系數為0.382,表明上證綜指日收益率變量對機器人日收益率變量有較強的解釋力,模型擬合結果較好,F統計量和Omnibus統計量的P值都接近於0,自變量的作用顯著。t統計量的P值接近於0,表明上證綜指變量顯著。自變量系數為1.2275,表明機器人公司股票的日收益率波動比上證綜指大,該個股的風險更大,可能獲得的收益和損失也更大。平均上證綜指日收益率波動1%,個股日收益率波動1.2275%。Durbin-Waston檢驗的值為1.824,表明收益率數據不存在序列相關性。Jarque-Bera的P值接近於0,表明日收益率數據服從正態分布。

 

python機器學習生物信息學系列課(博主錄制): http://dwz.date/b9vw

 


免責聲明!

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



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