An example of using Pandas for regression
An example of using Pandas for regression
这个例子来自这本书 - "Python for Data Analysis", 这本书的作者 Wes McKinney 就是pandas的作者。

pandas提供了一些很方便的功能,比如最小二乘法(OLS),可以用来计算回归方程式的各个参数。 同时pandas还可以输出类似ANOVA的汇总信息,比如决定系数(R平方), F 统计量等。
OK,直接上例子。
数据准备
首先创建1000只股票,股票代码(5个字符)通过随机方式生成。
In [29]: import string
In [32]: import random
In [33]: random.seed(0)
In [34]: N = 1000
In [35]: def rands(n):
....: choices = string.ascii_uppercase
....: return ''.join([random.choice(choices) for _ in xrange(n)])
....:
In [36]: tickers = np.array([rands(5) for x in xrange(N)])
回归分析
假设现在有个 multiple factor model, 如下所示:
y = 0.7 * x1 - 1.2 * x2 + 0.3 * x3 + random value
按照这个模型创建一个portfolio, 然后我们再拿实际得到的值来跟这3个factor来做下回归分析,看得到的系数是不是跟上面的这个model比较接近。
首先创建三个随机数组(每个大小都为1000, 对应刚才创建的1000只股票),分别为fac1, fac2, 和fac3.
In [58]: from numpy.random import rand
In [59]: fac1, fac2, fac3 = np.random.rand(3, 1000)
In [62]: ticker_subset = tickers.take(np.random.permutation(N)[:1000])
用选择的1000只股票按照上面的model创建portfolio, 得到的一组值也就是因变量y.
In [64]: port = Series(0.7*fac1 - 1.2*fac2 + 0.3*fac3 + rand(1000), index=ticker_subset)
现在我们用实际得到y和x1/x2/x3来做下回归。 首先把三个factors 构建成DataFrame.
In [65]: factors = DataFrame({'f1':fac1, 'f2':fac2, 'f3':fac3}, index=ticker_subset)
然后就直接调用pd.ols方法来进行回归 -
In [70]: pd.ols(y=port, x=factors)
Out[70]:
-------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <f1> + <f2> + <f3> + <intercept>
Number of Observations: 1000
Number of Degrees of Freedom: 4
R-squared: 0.6867
Adj R-squared: 0.6857
Rmse: 0.2859
F-stat (3, 996): 727.6383, p-value: 0.0000
Degrees of Freedom: model 3, resid 996
-----------------------Summary of Estimated Coefficients------------------------
Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
--------------------------------------------------------------------------------
f1 0.6968 0.0311 22.44 0.0000 0.6359 0.7577
f2 -1.2672 0.0312 -40.64 0.0000 -1.3283 -1.2061
f3 0.3345 0.0310 10.80 0.0000 0.2738 0.3952
intercept 0.5018 0.0275 18.28 0.0000 0.4480 0.5557
---------------------------------End of Summary---------------------------------
In [71]:
根据回归结果,得到的方程式是 -
y = 0.5018 + 0.6968 * f1 - 1.2672 * f2 + 0.3345 * f3
对比下实际的model -
y = 0.7 * x1 - 1.2 * x2 + 0.3 * x3 + random value
可以看出还是比较match的。这个从每个参数p-value也可以看出来。
另外,如果只想关注每个系数,可以直接读取beta.
In [71]: pd.ols(y=port, x=factors).beta
Out[71]:
f1 0.696817
f2 -1.267172
f3 0.334505
intercept 0.501836
dtype: float64
怎么样,感觉pandas是不是棒棒哒!
An example of using Pandas for regression的更多相关文章
- 逻辑回归 Logistic Regression
逻辑回归(Logistic Regression)是广义线性回归的一种.逻辑回归是用来做分类任务的常用算法.分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上.比如一个人有没有病,又因为噪声的 ...
- Logistic Regression and Gradient Descent
Logistic Regression and Gradient Descent Logistic regression is an excellent tool to know for classi ...
- Gradient Boosted Regression Trees 2
Gradient Boosted Regression Trees 2 Regularization GBRT provide three knobs to control overfitting ...
- Logistic Regression:银行贷款申请审批实例
问题定义 这是一个贷款的审批问题,假设你是一个银行的贷款审批员,现在有客户需要一定额度的贷款,他们填写了个人的信息(信息在datas.txt中给出),你需要根据他们的信息,建立一个分类模型,判断是否可 ...
- 03.Regression
01.regression # -*- coding: utf-8 -*- """ scipy 패키지 선형 회귀분석 """ from s ...
- Linear Regression with machine learning methods
Ha, it's English time, let's spend a few minutes to learn a simple machine learning example in a sim ...
- [机器学习]回归--Decision Tree Regression
CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值:当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好的解决分类问题. ...
- [机器学习]回归--Support Vector Regression(SVR)
来计算其损失. 而支持向量回归则认为只要f(x)与y偏离程度不要太大,既可以认为预测正确,不用计算损失,具体的,就是设置阈值α,只计算|f(x)−y|>α的数据点的loss,如下图所示,阴影部分 ...
- [机器学习]回归--Polinomial Regression 多项式回归
首先我们需要明确一个概念,我们讨论的线性或者非线性针对的是自变量的系数,而非自变量本身,所以这样的话不管自变量如何变化,自变量的系数如果符合线性我们就说这是线性的.所以这里我们也就可以描述一下多项式线 ...
随机推荐
- (算法)构造MaxTree
题目: 给定一个没有重复元素的数组A,定义A上的MaxTree如下:MaxTree的根节点为A中最大的数,根节点的左子树为数组中最大数左边部分的MaxTree,右子树为数组中最大数右边部分的MaxTr ...
- linux查询文件中某几行
查询文件中某几行: sudo cat /etc/tinyproxy.conf | head -n | tail -n + [一]从第3000行开始,显示1000行.即显示3000~3999行 cat ...
- 微信小程序 - 使用npm(第三方包)
使用示例: 1. 开启“使用npm模块” 2. 新建 node_modules 文件夹 3. cd到新建 node_modules 所在的目录(非node_modules文件夹内) npm insta ...
- linux kernel下输入输出console怎样实现
近期工作在调试usb虚拟串口,让其作为kernel启动的调试串口,以及user空间的输入输出控制台. 利用这个机会,学习下printk怎样选择往哪个console输出以及user空间下控制台怎样选择. ...
- 算法笔记_194:历届试题 翻硬币(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 小明正在玩一个“翻硬币”的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情 ...
- BeautifulSoup的成员结构
>>> dir(soup)['ASCII_SPACES', 'DEFAULT_BUILDER_FEATURES', 'HTML_FORMATTERS', 'ROOT_TAG_NAME ...
- webapp 里主要的 mate 用途
一.meta 标签分两大部分:HTTP 标题信息(http-equiv)和页面描述信息(name). 1.http-equiv 属性的 Content-Type 值(显示字符集的设定) 说明:设定页面 ...
- CSS3 选择器浏览器兼容性汇总 IE8
1.css选择器 css(包括css1.css2和css3)有哪些选择器? http://www.w3school.com.cn/cssref/css_selectors.asp 2.CSS3选择器 ...
- 修改wamp apache 默认端口
目标:新配置一个虚拟主机,要求端口为8080,但要保证原来的80端口仍可用 1.修改 httpd.conf 开启vhost文件支持 2.httpd-vhosts.conf 中增加,记得把原来的内容全部 ...
- CAS 5.1.x 的搭建和使用(四)—— 配置使用HTTP协议访问的服务端
CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...