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的更多相关文章

  1. 逻辑回归 Logistic Regression

    逻辑回归(Logistic Regression)是广义线性回归的一种.逻辑回归是用来做分类任务的常用算法.分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上.比如一个人有没有病,又因为噪声的 ...

  2. Logistic Regression and Gradient Descent

    Logistic Regression and Gradient Descent Logistic regression is an excellent tool to know for classi ...

  3. Gradient Boosted Regression Trees 2

    Gradient Boosted Regression Trees 2   Regularization GBRT provide three knobs to control overfitting ...

  4. Logistic Regression:银行贷款申请审批实例

    问题定义 这是一个贷款的审批问题,假设你是一个银行的贷款审批员,现在有客户需要一定额度的贷款,他们填写了个人的信息(信息在datas.txt中给出),你需要根据他们的信息,建立一个分类模型,判断是否可 ...

  5. 03.Regression

    01.regression # -*- coding: utf-8 -*- """ scipy 패키지 선형 회귀분석 """ from s ...

  6. 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 ...

  7. [机器学习]回归--Decision Tree Regression

    CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值:当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好的解决分类问题. ...

  8. [机器学习]回归--Support Vector Regression(SVR)

    来计算其损失. 而支持向量回归则认为只要f(x)与y偏离程度不要太大,既可以认为预测正确,不用计算损失,具体的,就是设置阈值α,只计算|f(x)−y|>α的数据点的loss,如下图所示,阴影部分 ...

  9. [机器学习]回归--Polinomial Regression 多项式回归

    首先我们需要明确一个概念,我们讨论的线性或者非线性针对的是自变量的系数,而非自变量本身,所以这样的话不管自变量如何变化,自变量的系数如果符合线性我们就说这是线性的.所以这里我们也就可以描述一下多项式线 ...

随机推荐

  1. 商业价值:苹果iTV,再一次改变世界?

    苹果(Apple)公司打算进军智能电视领域,这在行业里已经不是秘密,有关苹果智能电视的消息也是不绝于耳,结合苹果产品线的命名规则,苹果智能 电视基本上就是iTV.就目前而言,Android智能系统已经 ...

  2. Ubuntu vim+ ctags(包括系统函数) + taglist 配置

    阅读大型代码,我们常常须要打开非常多的代码文件,搜索各种定义.windows下用惯了ide的朋友.转战Linux的时候可能会认为非常难受,找不到合适的阅读工具. 事实上万能的vim就能够实现. 以下介 ...

  3. 解决 maven 项目启动 提示 class not find

    第一种方法: 项目 --> .classpath <classpathentry exported="true" kind="con" path=& ...

  4. maven 配置环境变量

      maven 环境变量配置 CreationTime--2018年6月4日18点45分 Author:Marydon 前言 要先运行maven,需要按安装并配置jdk,没有配置的见文末推荐. 1.m ...

  5. WEB客户端和服务器

    # encoding=utf-8 #python 2.7.10 #xiaodeng #HTTP权威指南 #HTTP协议:超文本传输协议是在万维网上进行通信时所使用的协议方案. #WEB客户端和服务器: ...

  6. 为什么WEB-INF外的jsp无法根据cookie享受国际化

    243行走WEB-INF外则获取为空,走springmvc则可以获取到:

  7. Linux 系统访问控制列表ACL

    常见的文件系统的一般权限(rwx).特殊权限(SUID,SGID,STICK).隐藏权限(chattr)其实有个共性——权限是针对某一类用户设置的.而如果希望对某个指定的用户进行单独的权限控制,那么就 ...

  8. java线上应用问题排查方法和工具

    linux性能监测点 CPU, Memory, IO, Network Linux性能监测工具-cpu 基本概念: 上下文切换(Context Switches): 如果可运行的线程数大于CPU的数量 ...

  9. php新特性:trait 关键字使用

    1.trait关键字:含义[特性] 1.1 和require include 区别: 后两者需要 实例化一个类或者静态调用,而trait相当于继承,但又不是extends关键字,它解决了单继承. 2. ...

  10. 网站博客更换主机空间搬家:Discuz! X2.5老鹰主机搬家全过程

    http://www.freehao123.com/discuz-x2-5-banjia/由于我放在hawkhost老鹰主机主机的部落论坛就要到期了,而老鹰主机的续费价格却是按照原价来的,没有任何优惠 ...