关于数据挖掘:R使用LASSO回归预测股票收益

42次阅读

共计 2832 个字符,预计需要花费 8 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=4228

原文出处:拓端数据部落公众号

应用 LASSO 预测收益

1. 示例

只有有金融经济学家,金融经济学家始终在寻找可能预测股票收益的变量。对于最近的一些例子,想想 Jegadeesh 和 Titman(1993),它表明股票的以后收益是由前几个月的股票收益预测的,侯(2007),这表明一个行业中最小股票的以后回报是通过行业中最大股票的滞后回报预测,以及 Cohen 和 Frazzini(2008),这表明股票的以后回报是由其次要客户的滞后回报预测的。

两步流程。当你思考它时,找到这些变量实际上包含两个独立的问题,辨认和预计。首先,你必须应用你的直觉来辨认一个新的预测器,而后你必须应用统计来预计这个新的预测器的品质:

然而,古代金融市场宏大。可预测性并不总是产生在易于人们觉察的尺度上,使得解决第一个问题的规范办法成为问题。例如,联邦信号公司的滞后收益率是 2010 年 10 月一小时内所有纽约证券交易所上市电信股票的重要预测指标。你真的能够从虚伪的预测指标中捕捉这个特定的变量吗?

2. 应用 LASSO

LASSO 定义。LASSO 是一种惩办回归技术,在 Tibshirani(1996)中引入。它通过投注稠密性来同时辨认和预计最重要的系数,应用更短的采样周期 – 也就是说,假如在任何工夫点只有多数变量实际上很重要。正式应用 LASSO 意味着解决上面的问题,如果你疏忽了惩办函数,那么这个优化问题就只是一个 OLS 回归。

惩办函数。

然而,这个惩办函数是 LASSO 胜利的秘诀,容许估算器对最大系数给予优先解决,齐全疏忽较小系数。为了更好地了解 LASSO 如何做到这一点,当右侧变量不相干且具备单位方差时。一方面,这个解决方案意味着,如果 OLS 预计一个大系数,那么 LASSO 将提供相似的预计。另一方面,解决方案意味着,如果 OLS 预计了足够小的系数,那么 LASSO 将会抉择。因为 LASSO 能够将除少数系数之外的所有系数设置为零,即便样本长度比可能的预测变量的数量短得多,它也可用于辨认最重要的预测变量。如果只有预测变量非零,那么你应该只须要几个 察看抉择而后预计这几个重要系数的大小。

3. 模仿剖析

我运行模仿来展现如何应用 LASSO 来预测将来的回报。您能够在原文找到所有相干代码。

数据模仿。每次模仿都波及为期间的股票产生回报。每个期间,所有股票的回报都受到一部分股票的回报,以及非凡冲击的影响

使模型适宜数据。这意味着应用时间段来预计具备潜在变量的模型。我预计了一个 OLS 回归真正的预测因子是右侧变量。显然,在事实世界中,你不晓得真正的预测变量是什么,然而这个标准给出了你能够达到的最佳拟合的预计。在将每个模型拟合到先前的数据之后,而后我在 st 期间进行样本外预测。

预测回归。而后,我通过剖析一系列预测回归剖析调整后的统计数据,查看这些预测与第一个资产的实现回报的严密水平。例如,我将 LASSO 的回报预测用于估算上面的回归

4. 调整参数

惩办参数抉择。使 LASSO 拟合数据波及抉择惩办参数。我这样做是通过抉择在数据的第一个时段期间具备最高样本外预测的惩办参数。这就是为什么下面的预测回归仅应用从而不是应用数据开始的起因。下图显示了模仿中惩办参数抉择的散布。

预测数量。最初,如果你看一下调整后数字中标有“Oracle”的面板,你会发现 LASSO 的样本外预测能力大概是实在模型预测能力的三分之一。这是因为 LASSO 没有完满地抉择稠密信号。下图的右侧面板显示 LASSO 通常只选出这些信号中最重要的信号。更重要的是,左侧面板显示 LASSO 还锁定了大量的虚伪信号。这一结果表明,您能够通过抉择更高的惩办参数来进步 LASSO 的预测能力。

5. 什么时候失败?

测试。我通过钻研两个代替模仿来完结这篇文章,其中 LASSO 不应该减少任何预测能力。也就是说,应用上面的模型模拟股票的收益,

下图显示,在这两种状况下,LASSO 都不会减少任何预测能力。因而,运行这些模仿提供了一对不错的测试,显示 LASSO 的确在返回的横截面中拾取稠密信号。

obj.gg2.PLOT <- obj.gg2.PLOT + scale\_y\_continuous(limits = c(0, 0.40),
                                                  breaks = c(0, 0.10, 0.20, 0.30, 0.40),
                                                  labels = c("$0.00$","$0.10$", "$0.20$", "$0.30$", "$0.40$")
                                                  )
obj.gg2.PLOT <- obj.gg2.PLOT + theme(plot.margin      = unit(c(1,0.15,-0.85,0.15), "lines"),
                                     axis.text        = element_text(size = 10),
                                     axis.title       = element_text(size = 10),
                                     plot.title       = element_text(vjust = 1.75),
                                     panel.grid.minor = element_blank(),
                                     legend.position  = "none"
                                     )

obj.gg2.PLOT <- obj.gg2.PLOT + ggtitle("Adjusted $R^2$ Distribution: Dense Shocks")

print(obj.gg2.PLOT)
dev.off()


最受欢迎的见解

1. 用机器学习辨认一直变动的股市情况—隐马尔科夫模型 (HMM) 的利用的利用 ”)

2.R 语言 GARCH-DCC 模型和 DCC(MVT)建模预计

3.R 语言实现 Copula 算法建模依赖性案例剖析报告

4.R 语言应用 ARIMA 模型预测股票收益

5.r 语言中对 LASSO 回归,Ridge 岭回归和 Elastic Net 模型实现

6. 用 R 语言实现神经网络预测股票实例

7.r 语言预测稳定率的实现:ARCH 模型与 HAR-RV 模型

8.R 语言如何做马尔科夫转换模型 markov switching model

正文完
 0