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()
OpenHighLowCloseVolumeAdj 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()
OpenHighLowCloseVolumeAdj 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()
SZZZJQR
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()
SZZZJQR
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()
SZZZJQR
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]
SZZZJQR
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")
画出上证综指和机器人公司日收益率直方图和密度图,如下所示,可以发现,总体上,上证综指和机器人公司日收益率服从正态分布。相对而言,机器人公司的日收益率较上证综指偏低。
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")
画出上证综指和机器人公司股价日收益率散点图,如下所示。
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")
散点图表明,上证综指和机器人公司的股价可能存在线性的正相关关系。
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
coefstd errtP>|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