逻辑回归模型预测股票涨跌

http://www.cnblogs.com/lafengdatascientist/p/5567038.html

逻辑回归模型预测股票涨跌

逻辑回归是一个分类器,其基本思想可以概括为:对于一个二分类(0~1)问题,若P(Y=1/X)>0.5则归为1类,若P(Y=1/X)<0.5,则归为0类。

一、模型概述

1、Sigmoid函数

为了具象化前文的基本思想,这里介绍Sigmoid函数:

函数图像如下:

红色的线条,即x=0处将Sigmoid曲线分成了两部分:当 x < 0,y < 0.5 ;
当x > 0时,y > 0.5 。

实际分类问题中,往往根据多个预测变量来对响应变量进行分类。因此Sigmoid函数要与一个多元线性函数进行复合,才能应用于逻辑回归。

2、逻辑斯谛模型

其中θx=θ1x1+θ2x2+……+θnxn 是一个多元线性模型。

上式可转化为:

公式左侧称为发生比(odd)。当p(X)接近于0时,发生比就趋近于0;当p(X)接近于1时,发生比就趋近于∞。

两边取对数有:

公式左侧称为对数发生比(log-odd)或分对数(logit),上式就变成了一个线性模型。

不过相对于最小二乘拟合,极大似然法有更好的统计性质。逻辑回归一般用极大似然法来拟合,拟合过程这里略过,下面只介绍如何用R应用逻辑回归算法。

二、逻辑回归应用

1、数据集

应用ISLR包里的Smarket数据集。先来看一下数据集的结构:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

summary(Smarket)

      Year           Lag1                Lag2         

 Min.   :2001   Min.   :-4.922000   Min.   :-4.922000 

 1st Qu.:2002   1st Qu.:-0.639500   1st Qu.:-0.639500 

 Median :2003   Median : 0.039000   Median : 0.039000 

 Mean   :2003   Mean   : 0.003834   Mean   : 0.003919 

 3rd Qu.:2004   3rd Qu.: 0.596750   3rd Qu.: 0.596750 

 Max.   :2005   Max.   : 5.733000   Max.   : 5.733000 

      Lag3                Lag4                Lag5        

 Min.   :-4.922000   Min.   :-4.922000   Min.   :-4.92200 

 1st Qu.:-0.640000   1st Qu.:-0.640000   1st Qu.:-0.64000 

 Median : 0.038500   Median : 0.038500   Median : 0.03850 

 Mean   : 0.001716   Mean   : 0.001636   Mean   : 0.00561 

 3rd Qu.: 0.596750   3rd Qu.: 0.596750   3rd Qu.: 0.59700 

 Max.   : 5.733000   Max.   : 5.733000   Max.   : 5.73300 

     Volume           Today           Direction

 Min.   :0.3561   Min.   :-4.922000   Down:602 

 1st Qu.:1.2574   1st Qu.:-0.639500   Up  :648 

 Median :1.4229   Median : 0.038500            

 Mean   :1.4783   Mean   : 0.003138            

 3rd Qu.:1.6417   3rd Qu.: 0.596750            

 Max.   :3.1525   Max.   : 5.733000

  

Smarket是2001年到2005年间1250天的股票投资回报率数据,Year是年份,Lag1~Lag5分别指过去5个交易日的投资回报率,Today是今日投资回报率,Direction是市场走势,或Up(涨)或Down(跌)。

先看一下各变量的相关系数:


1

2

3

library(corrplot)

corrplot(corr = cor(Smarket[,-9]),order = "AOE",type = "upper",tl.pos = "d")

corrplot(corr = cor(Smarket[,-9]),add=TRUE,type = "lower",method = "number",order = "AOE",diag = FALSE,tl.pos = "n",cl.pos = "n")

  

可见除了VolumeYear之间相关系数比较大,说明交易量基本随年份在增长,其他变量间基本没多大的相关性。说明股票的历史数据与未来的数据相关性很小,利用监督式学习方法很难准确预测未来股市的情况,这也是符合常识的。不过作为算法的应用教程,我们还是试一下。

2、训练并测试逻辑回归模型

逻辑回归模型是广义线性回归模型的一种,因此函数是glm(),但必须加上参数family=binomial


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

attach(Smarket)

# 2005年前的数据用作训练集,2005年的数据用作测试集

> train = Year<2005

# 对训练集构建逻辑斯谛模型

> glm.fit=glm(Direction~Lag1+Lag2+Lag3+Lag4+Lag5+Volume,

+             data=Smarket,family=binomial, subset=train)

# 对训练好的模型在测试集中进行预测,type="response"表示只返回概率值

> glm.probs=predict(glm.fit,newdata=Smarket[!train,],type="response")

# 根据概率值进行涨跌分类

> glm.pred=ifelse(glm.probs >0.5,"Up","Down")

# 2005年实际的涨跌状况

> Direction.2005=Smarket$Direction[!train]

# 预测值和实际值作对比

table(glm.pred,Direction.2005)

        Direction.2005

glm.pred Down Up

    Down   77 97

    Up     34 44

# 求预测的准确率

mean(glm.pred==Direction.2005)

[1] 0.4801587

  预测准确率只有0.48,还不如瞎猜。下面尝试着调整模型。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#检查一下模型概况

summary(glm.fit)

Call:

glm(formula = Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 +

    Volume, family = binomial, data = Smarket, subset = train)

Deviance Residuals:

   Min      1Q  Median      3Q     Max 

-1.302  -1.190   1.079   1.160   1.350 

Coefficients:

             Estimate Std. Error z value Pr(>|z|)

(Intercept)  0.191213   0.333690   0.573    0.567

Lag1        -0.054178   0.051785  -1.046    0.295

Lag2        -0.045805   0.051797  -0.884    0.377

Lag3         0.007200   0.051644   0.139    0.889

Lag4         0.006441   0.051706   0.125    0.901

Lag5        -0.004223   0.051138  -0.083    0.934

Volume      -0.116257   0.239618  -0.485    0.628

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1383.3  on 997  degrees of freedom

Residual deviance: 1381.1  on 991  degrees of freedom

AIC: 1395.1

Number of Fisher Scoring iterations: 3

  

可以发现所有变量的p值都比较大,都不显著。前面线性回归章节中提到AIC越小,模型越优,这里的AIC还是比较大的。

加入与响应变量无关的预测变量会造成测试错误率的增大(因为这样的预测变量会增大模型方差,但不会相应地降低模型偏差),所以去除这样的预测变量可能会优化模型。

上面模型中Lag1和Lag2的p值明显比其他变量要小,因此只选这两个变量再次进行训练。


1

2

3

4

5

6

7

8

9

10

11

12

13

> glm.fit=glm(Direction~Lag1+Lag2,

+             data=Smarket,family=binomial, subset=train)

> glm.probs=predict(glm.fit,newdata=Smarket[!train,],type="response")

> glm.pred=ifelse(glm.probs >0.5,"Up","Down")

table(glm.pred,Direction.2005)

        Direction.2005

glm.pred Down  Up

    Down   35  35

    Up     76 106

mean(glm.pred==Direction.2005)

[1] 0.5595238

> 106/(76+106)

[1] 0.5824176

  

这次模型的总体准确率达到了56%,总算说明统计模型的预测准确度比瞎猜要好(虽然只有一点点)。根据混淆矩阵,当逻辑回归模型预测下跌时,有50%的准确率;当逻辑回归模型预测上涨时,有58%的准确率。(矩阵的行名表预测值,列名表实际值)

应用这个模型来预测2组新的数据:


1

2

3

> predict(glm.fit,newdata = data.frame(Lag1=c(1.2,1.5),Lag2=c(1.1,-0.8)),type="response")

        1         2

0.4791462 0.4960939

  可见对于(Lag1,Lag2)=(1.2,1.1)和(1.5,-0.8)这两点来说,模型预测的都是股票会跌。需要注意的是,逻辑回归的预测结果并不能像线性回归一样提供置信区间(或预测区间),因此加上interval参数也没用。

时间: 2024-08-01 16:30:27

逻辑回归模型预测股票涨跌的相关文章

《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌

数据准备:一组股票历史成交数据(股票代码:601106 中国一重),起止日期:2011-01-04至今,其中变量有“开盘”.“最高”.“最低”.“收盘”.“总手”.“金额”.“涨跌”等 UPDATE FactStock SET [涨跌] = N'涨' WHERE [涨幅] > 0 UPDATE FactStock SET [涨跌] = N'跌' WHERE [涨幅] < 0 UPDATE FactStock SET [涨跌] = N'持平' WHERE [涨幅] = 0 SELECT [涨跌]

用贝叶斯判别分析再次预测股票涨跌情况

可以转载,禁止修改.转载请注明作者以及原文链接 注:本文是从贝叶斯分类器的角度来讨论判别分析,有关贝叶斯分类器的概念可参考文末延伸阅读第1-2篇文章.至于Fisher判别分析,未来会连同PCA一同讨论. 判别分析也是一种分类器,与逻辑回归相比,它具有以下优势: 当类别的区分度高的时候,逻辑回归的参数估计不够稳定,它点在线性判别分析中是不存在的: 如果样本量n比较小,而且在每一类响应变量中预测变量X近似服从正态分布,那么线性判别分析比逻辑回归更稳定: 多于两类的分类问题时,线性判别分析更普遍. 贝

Python之逻辑回归模型来预测

建立一个逻辑回归模型来预测一个学生是否被录取. import numpy as np import pandas as pd import matplotlib.pyplot as plt import os path='data'+os.sep+'Logireg_data.txt' pdData=pd.read_csv(path,header=None,names=['Exam1','Exam2','Admitted']) pdData.head() print(pdData.head())

机器学习之——判定边界和逻辑回归模型的代价函数

判定边界(Decision Boundary) 上一次我们讨论了一个新的模型--逻辑回归模型(Logistic Regression),在逻辑回归中,我们预测: 当h?大于等于0.5时,预测y=1 当h?小于0.5时,预测y=0 根据上面的预测,我们绘制出一条S形函数,如下: 根据函数图像,我们知道,当 z=0时,g(z)=0.5 z>0时,g(z)>0.5 z<0时,g(z)<0.5 又有: 所以 以上,为我们预知的逻辑回归的部分内容.好,现在假设我们有一个模型: 并且参数?是向

逻辑回归模型(Logistic Regression)及Python实现

逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳性,目标变量是离散的,只有两种取值,通常会编码为0和1.假设我们有一个特征X,画出散点图,结果如下所示.这时候如果我们用线性回归去拟合一条直线:hθ(X) = θ0+θ1X,若Y≥0.5则判断为1,否则为0.这样我们也可以构建出一个模型去进行分类,但是会存在很多的缺点,比如稳健性差.准确率低.而逻辑

逻辑回归模型梯度下降法跟牛顿法比较

1.综述 机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解.梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值.在逻辑回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法. 2 梯度下降法 2.1算法描述 1.确定误差范围和下降的步长,确定函数的导函数 2.while(|新值 -旧值| >误差) 3.       旧值=新值 4.       新值=初始值-步长*导函数

基于分类问题的逻辑回归模型

由于分类问题的输出是0.1这样的离散值,因而回归问题中用到的线性回归模型就不再适用了.对于分类问题,我们建立逻辑回归模型. 针对逻辑回归模型,主要围绕以下几点来讨论. Logistic Regression (逻辑回归) Sigmoid Function (逻辑函数) Decision Boundaries (决策边界) Cost Function (代价函数) 决策边界不是数据集的属性,而是假设本身及其参数的属性.我们不是用训练集来定义的决策边界,我们用训练集来拟合参数θ,一旦有了参数θ就可以

逻辑回归模型

1. 逻辑回归是一种监督式的学习算法. [ 监督式学习算法有两组变量:预测变量(自变量x)和目标变量(因变量y),通过这些变量(x,y),搭建一个可以由已知的预测变量值x,得到对应的目标变量值y. 重复训练这个模型,直到能够在训练数据集上达到预定的准确度.] 2. 逻辑回归是一个分类算法. 利用已知的自变量,来预测一个离散型因变量的值(比如0/1, 是/否,真/假). 每个离散值的概率结果即是我们要预测的,可以通过一个逻辑函数(logit function),自然地,输出值在0到1之间. odd

逻辑回归模型分析

本文主要分两个部分进行讨论,首先介绍最简单的线性回归模型:接着对逻辑回归进行分析 1.线性回归-->最小二乘法 对于线性回归问题,我们根据自变量的个数将其分为一元线性回归和多元线性回归,本部分先详细介绍一元线性模型,然后将其推广到多元线性模型 1)一元线性模型 当输入只有一个自变量时,我们称之为一元线性模型.(最简单) 设样本集合为:(xi,yi),i=1,2,…,m. 目标为:在平面上找出一条线,使得样本点尽可能多的在这条直线上. 设一元线性模型为:h(x)=ax+b,输出误差为:Si=yi-