时间序列回归

关注微信公众号“时序人”获取更好的阅读体验
在这里插入图片描述

时间序列知识整理系列
  1. 时间序列统计分析
  2. 时间序列聚类
  3. 时间序列预测
  4. 时间序列回归
  5. 时间序列特征工程
  6. 时间序列补缺
  7. 时间序列异常检测

上篇我们讲了时间序列预测,其中提到了时序预测模型与回归预测模型的不通。换句话说,时序预测模型依赖于数值在时间上的先后顺序,是回归模型中的一部分。

回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,是一种预测性的建模技术,它研究的是因变量 Y Y Y)和自变量 X = { x t , x t − 1 , . . . } X=\{x_t, x_{t-1},...\} X={xt,xt1,...})之间的关系,例如不同的施肥量对苗木高生长的关系、中国人的消费习惯对美国经济的影响等等。回归分析衡量自变量 x t x_t xt对因变量Y的影响能力,进而可以用来预测因变量的发展趋势。

本文为大家描述时间序列的回归方法。简单来说,时间序列的回归分析需要我们分析历史数据,找到历史数据演化中的特征与模式,其主要分为线性回归分析和非线性回归分析两种类型。

模型构建与验证

回归分析多采用机器学习方法,我们首先需要明确机器学习(或深度学习)模型构建与验证的主体思路:

  • 分析数据构建数据特征,将数据转化为特征样本集合;
  • 明确样本与标签(Label),划分训练集与测试集;
  • 比较不同模型在相同的训练集中的效果,或是相同模型的不同参数在同一个训练集中拟合的效果;
  • 在验证样本集中验证模型的准确度,通过相关的结果评估公式选择表现最好同时没有过拟合的模型。

线性模型

回归就是使用若干已知的样本对公式参数的估计。 Y = F ( X 1 , X 2 , X 3 ) Y=F(X_1,X_2,X_3) Y=F(X1,X2,X3),这里的回归函数 F ( . . . ) F(...) F(...)可以是任意函数,其中线性回归的模型如下所示:

Y = F ( X 1 , X 2 , X 3 ) = a ∗ X 1 + b ∗ X 2 + c ∗ X 3 + d Y = F(X_1,X_2,X_3) = a*X_1 + b*X_2 + c*X_3 + d Y=F(X1,X2,X3)=aX1+bX2+cX3+d

其中, X 1 , X 2 , X 3 X_1,X_2,X_3 X1,X2,X3是训练样本集合中样本的各个维度, a , b , c , d a,b,c,d a,b,c,d是模型中的未知参数。

通过对线性模型的训练,可以较好的得到模型中各个变量之间的关系。

常用的线性模型有:线性回归、多项式回归、岭回归、套索回归等,下面为大家简单介绍。

线性回归(Linear Regression)

线性回归是最为人熟知的建模技术,是人们学习如何做预测时的首选方法之一。在此技术中,因变量是连续的,自变量可以是连续的也可以是离散的。回归的本质是线性的。
线性回归通过使用最佳的拟合直线(又被称为回归线),建立因变量(Y)和一个或多个自变量(X)之间的关系。
它的表达式为: Y = w × X + e Y=w\times X + e Y=w×X+e,其中 w 直线斜率,e 为误差项。如果给出了自变量 X,就能通过这个线性回归表达式计算出预测值,即因变量 Y。

在这里插入图片描述

多元线性回归与一元线性回归的区别在于,多元线性回归有大于 1 个自变量,而一元线性回归只有 1 个自变量。接下来的问题是“如何获得最佳拟合直线(确定 a 和 b 值)?

这个问题可以使用最小二乘法(Least Square Method)轻松解决。最小二乘法是一种拟合回归线的常用算法。它通过最小化每个数据点与预测直线的垂直误差的平方和来计算,优化的目标函数如下:

min ⁡ w ∣ ∣ w ⋅ X − Y ∣ ∣ 2 2 \min_{w}{|| w\cdot X - Y||_2^2} wminwXY22

使用各种优化方法,求解 w w w向量,得到线性模型中的相关参数,在使用逐点预测的方式,得到相应的预测结果。

重点:

  • 自变量和因变量之间必须满足线性关系。
  • 多元回归存在多重共线性,自相关性和异方差性。
  • 线性回归对异常值非常敏感。异常值会严重影响回归线和最终的预测值。
  • 多重共线性会增加系数估计的方差,并且使得估计对模型中的微小变化非常敏感。结果是系数估计不稳定。
  • 在多个自变量的情况下,我们可以采用正向选择、向后消除和逐步选择的方法来选择最重要的自变量。
多项式回归(Polynomial Regression)

对应一个回归方程,如果自变量的指数大于 1,则它就是多项式回归方程:

y = w ⋅ x 2 + e y=w\cdot x^2 + e y=wx2+e

在多项式回归中,最佳的拟合线不是直线,而是拟合数据点的曲线。

重点:
虽然可能会有一些诱导去拟合更高阶的多项式以此来降低误差,但是这样容易发生过拟合。应该画出拟合曲线图形,重点放在确保曲线反映样本真实分布上。下图是一个例子,可以帮助我们理解。

图 | 欠拟合(红) / 正常拟合(蓝) / 过拟合(绿)

尤其要注意曲线的两端,看看这些形状和趋势是否有意义。更高的多项式可以产生怪异的推断结果。

逐步回归(Stepwise Regression)

当我们处理多个独立变量时,就使用逐步回归。在这种技术中,独立变量的选择是借助于自动过程来完成的,不涉及人工干预。

逐步回归的做法是观察统计值,例如 R-square、t-stats、AIC 指标来辨别重要的变量。基于特定标准,通过增加/删除协变量来逐步拟合回归模型。常见的逐步回归方法如下所示:

  • 标准的逐步回归做两件事,每一步中增加或移除自变量。
  • 前向选择从模型中最重要的自变量开始,然后每一步中增加变量。
  • 反向消除从模型所有的自变量开始,然后每一步中移除最小显著变量。

这种建模技术的目的是通过使用最少的自变量在得到最大的预测能力。它也是处理高维数据集的方法之一。

岭回归(Ridge Regression)

岭回归是当数据遭受**多重共线性(独立变量高度相关)**时使用的一种技术。在多重共线性中,即使最小二乘估计是无偏差的,但是方差很大,使得观察智远离真实值。岭回归通过给回归估计中增加额外的偏差度,能够有效减少方差。

在线性方程中,预测误差可以分解为两个子分量。首先是由于偏颇,其次是由于方差。预测误差可能由于这两个或两个分量中的任何一个而发生。这里将讨论由于方差引起的误差。岭回归通过收缩参数 λ 解决了多重共线性问题。请看下面的方程式:

arg ⁡ min ⁡ β ∈ R p ∣ ∣ y − β ⋅ X ∣ ∣ 2 2 ⏟ L o s s + λ ∣ ∣ β ∣ ∣ 2 2 ⏟ P e n a l t y \arg\min_{\beta\in\bf{R}^p}{ \begin{matrix} \underbrace{|| y-\beta\cdot X||_2^2 } \\ Loss \end{matrix}+ \begin{matrix} \lambda \underbrace{|| \beta||_2^2 } \\ Penalty \end{matrix} } argβRpmin yβX22Loss+λ β22Penalty

上面这个公式中包含两项。第一个是最小平方项,第二个是系数 β 的平方和项,前面乘以收缩参数 λ。增加第二项的目的是为了缩小系数 β 的幅值以减小方差。

重点:

  • 除非不假定正态性,岭回归与最小二乘回归的所有假设是一样的。
  • 岭回归缩小了系数的值,但没有达到零,这表明它没有特征选择特征。
  • 这是一个正则化方法,使用了 L2 正则化。
套索回归(Lasso Regression)

类似于岭回归,套索回归惩罚的是回归系数的绝对值。此外,它能够减少变异性和提高线性回归模型的准确性。请看下面的方程式:

arg ⁡ min ⁡ β ∈ R p ∣ ∣ y − β ⋅ X ∣ ∣ 2 2 ⏟ L o s s + λ ∣ ∣ β ∣ ∣ 1 ⏟ P e n a l t y \arg\min_{\beta\in\bf{R}^p}{ \begin{matrix} \underbrace{|| y-\beta\cdot X||_2^2 } \\ Loss \end{matrix}+ \begin{matrix} \lambda \underbrace{|| \beta||_1 } \\ Penalty \end{matrix} } argβRpmin yβX22Loss+λ β1Penalty

套索回归不同于岭回归,惩罚函数它使用的是系数的绝对值之和,而不是平方。这导致惩罚项(或等价于约束估计的绝对值之和),使得一些回归系数估计恰好为零。施加的惩罚越大,估计就越接近零。实现从 n 个变量中进行选择。
重点:

  • 除非不假定正态性,套索回归与最小二乘回归的所有假设是一样的。
  • 套索回归将系数收缩到零(正好为零),有助于特征选择。
  • 这是一个正则化方法,使用了 L1 正则化。
  • 如果一组自变量高度相关,那么套索回归只会选择其中一个,而将其余的缩小为零。
弹性回归(ElasticNet Regression)

弹性回归是岭回归和套索回归的混合技术,它同时使用 L2 和 L1 正则化。当有多个相关的特征时,弹性网络是有用的。套索回归很可能随机选择其中一个,而弹性回归很可能都会选择:

β ^ = arg ⁡ min ⁡ β ( ∣ ∣ y − β ⋅ X ∣ ∣ 2 + λ 2 ∣ ∣ β ∣ ∣ 2 + λ 1 ∣ ∣ β ∣ ∣ 1 ) \hat{\beta} = \arg\min_{\beta}(||y-\beta\cdot X||^2 + \lambda_2||\beta||^2 + \lambda_1||\beta||_1) β^=argβmin(yβX2+λ2β2+λ1β1)

权衡岭回归和套索回归的一个优点是它让弹性回归继承了一些岭回归在旋转状态下的稳定性。
重点:

  • 在高度相关变量的情况下,它支持群体效应。
  • 它对所选变量的数目没有限制
  • 它具有两个收缩因子 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2

非线性模型

在之前的文章中介绍过时序统计学模型(AR、ARMA、ARIMA)模型,建模的思路源于针对当前观测点的最近P个点和最近Q个点的误差值进行建模,结构如下:

Y t = ∑ j = 1 P ϕ j ∗ Y t − j − ∑ k = i Q θ k ∗ ϵ t − k + ϵ t Y_t = \sum_{j=1}^{P}\phi_j * Y_{t-j} - \sum_{k=i}^{Q} \theta_k * \epsilon_{t-k} + \epsilon_t Yt=j=1PϕjYtjk=iQθkϵtk+ϵt

在利用相应的数学工具进行求解,具体的原理文章,请见《TS技术课堂 | 时间序列统计分析》

而在现实背景中,很多数据并不是严格按照线性关系刻画的。为了兼顾模型的可解释性,很多工作将非线性的数据进行各种变换(幂函数变换、倒数变换、指数变换、对数变换、Box-Cax等)将一个非线性问题转换成一个呈现线性关系的问题,再利用相应的模型进行解决。

常见的可以进行非线性回归预测的机器学习算法模型有:逻辑回归,树回归,支持向量机,神经网络模型等等,下面为大家介绍。

逻辑回归

逻辑回归用来计算事件成功(Success)或者失败(Failure)的概率。当因变量是二进制(0/1,True/False,Yes/No)时,应该使用逻辑回归。这里,Y 的取值范围为 [0,1],它可以由下列等式来表示:

o d d s = p / ( 1 − p ) = p r o b a b i l i t y   o f   e v e n t   o c c u r r e n c e p r o b a b i l i t y   o f   n o t   e v e n t   o c c u r r e n c e odds = p/ (1-p) =\frac{probability~of~event~occurrence}{probability~of~not~event~occurrence} odds=p/(1p)=probability of not event occurrenceprobability of event occurrence

l n ( o d d s ) = l n ( p ( 1 − p ) ) ⋅ l o g i t ( p ) ln(odds) = ln\left( \frac{p}{(1-p)} \right)\cdot logit(p) ln(odds)=ln((1p)p)logit(p)

l n ( p ( 1 − p ) ) = b 0 + b 1 X 1 + b 2 X 2 + b 3 X 3 . . . . + b k X k ln\left( \frac{p}{(1-p)} \right) = b_0+b_1X_1+b_2X_2+b_3X_3....+b_kX_k ln((1p)p)=b0+b1X1+b2X2+b3X3....+bkXk

其中,p 是事件发生的概率。你可能会有这样的疑问:为什么在等式中使用对数 log 呢?因为我们这里使用的二项分布(因变量),所以需要选择一个合适的激活函数能够将输出映射到 [0,1] 之间,Logit 函数满足要求。在上面的等式中,通过使用最大似然估计来得到最佳的参数。

在这里插入图片描述

重点:

  • 逻辑回归广泛用于分类问题。
  • 逻辑回归不要求因变量和自变量之间是线性关系,它可以处理多类型关系,因为它对预测输出进行了非线性 log 变换。
  • 为了避免过拟合和欠拟合,我们应该涵盖所有有用的变量。实际中确保这种情况的一个好的做法是使用逐步筛选的方法来估计逻辑回归。
  • 训练样本数量越大越好,因为如果样本数量少,最大似然估计的效果就会比最小二乘法差。
  • 自变量不应相互关联,即不存在多重共线性。然而,在分析和建模中,我们可以选择包含分类变量相互作用的影响。
  • 如果因变量的值是序数,则称之为序数逻辑回归。
  • 如果因变量是多类别的,则称之为多元逻辑回归。
回归树

分类与回归树(Classification and Regression Tree, CART)是一种经典的决策树,可以用来处理涉及连续数据的分类或者回归任务。其主要思想是将自变量的取值空间切分为若干个碎块,并假设这个空间碎块内的所有样本的因变量取值接近(甚至相同)。

在这里插入图片描述

假设已经将空间划分成M个区域 R 1 , R 2 , . . . , R M R_1, R_2, ..., R_M R1,R2,...,RM,并且在每个区域内用常量 c m c_m cm对对应的区块进行建模:

f ( x ) = ∑ m = 1 M c m ∗ I ( x ∈ R m ) f(x) = \sum_{m=1}^{M}c_m * I(x \in R_m) f(x)=m=1McmI(xRm)

优化的目标函数采用误差平方和 ∑ ( y i − f ( x i ) ) 2 \sum (y_i - f(x_i))^2 (yif(xi))2的极小值作为衡量标准,推导得到最佳的 c ^ m \hat{c}_m c^m,其恰好是 y i y_i yi在区域 R m R_m Rm的平均值:

c ^ m = a v g ( y i ∣ x i ∈ R m ) \hat{c}_m = avg(y_i | x_i \in R_m) c^m=avg(yixiRm)

从所有的数据开始,考虑一个分裂变量j和分裂点s,并定义一对半平面:

R 1 ( j , s ) = { X ∣ X j ≤ s } , R 2 ( j , s ) = { X ∣ X j > s } R_1(j, s) = \{X|X_j \leq s\} , R_2(j, s) = \{X | X_j > s\} R1(j,s)={XXjs},R2(j,s)={XXj>s}

然后搜索分裂变量j和分裂点s,它求解:

m i n j , s = [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] min_{j,s} = [min_{c_1} \sum_{x_i \in R_1(j, s)}(y_i - c_1)^2 + min_{c_2} \sum_{x_i \in R_2(j, s)}(y_i - c_2)^2] minj,s=[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]

对于任意的j和s,内部极小化可以用下式求解:

c ^ 1 = a v g ( y i ∣ x i ∈ R 1 ( j , s ) ) , c ^ 2 = a v g ( y i ∣ x i ∈ R 2 ( j , s ) ) \hat{c}_1 = avg(y_i|x_i \in R_1(j, s)), \hat{c}_2 = avg(y_i|x_i \in R_2(j, s)) c^1=avg(yixiR1(j,s)),c^2=avg(yixiR2(j,s))

找到最好的分裂,数据从而可以划分成两个结果区域。每个区域再不断重复分裂过程,直到最小绝对偏差(LAD)或者最小二乘偏差(LSD)最小。

后来很多树模型,在回归树的基础上,结合集成学习,更进一步提升了拟合能力,包括我们尝尝在竞赛中看到的分类任务大杀器GBDT/XGBoost等。

神经网络模型

深度学习方法近年来逐渐替代机器学习方法,成为人工智能与数据分析的主流,因为其可以构建多层深层的结构,实现相比线性方法更加复杂的拟合方式,包括:循环神经网络/卷积神经网络/基于注意力机制的模型等等。之后就这部分内容我们单独出


更多原创内容与系列分享,欢迎关注微信公众号“时序人”获取。
在这里插入图片描述

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中进行时间序列回归,可以使用统计和机器学习工具箱中的函数来实现。以下是一个基本的时间序列回归的步骤: 1. 准备数据:将时间序列数据加载到Matlab中,并将其转换为适当的格式。确保数据包含时间索引和要预测的目标变量。 2. 数据预处理:根据需要对数据进行预处理,例如去除趋势、季节性或异常值。 3. 特征提取:根据问题的特点,从时间序列中提取合适的特征。常见的特征包括滞后项、移动平均、差分等。 4. 拟合模型:选择适当的回归模型,例如线性回归、支持向量机回归、神经网络等。使用训练数据拟合模型,并得到模型参数。 5. 模型评估:使用测试数据评估模型的性能,例如计算均方根误差(RMSE)、决定系数(R^2)等指标。 6. 预测未来值:使用训练好的模型对未来的时间序列值进行预测。 以下是一个简单的示例代码,演示如何在Matlab中进行时间序列回归: ```matlab % 加载数据 data = load('timeseries_data.mat'); X = data.X; % 特征数据 y = data.y; % 目标变量 % 拆分数据为训练集和测试集 train_ratio = 0.8; train_size = round(train_ratio * length(X)); X_train = X(1:train_size); y_train = y(1:train_size); X_test = X(train_size+1:end); y_test = y(train_size+1:end); % 拟合模型(线性回归) model = fitlm(X_train, y_train); % 预测测试集结果 y_pred = predict(model, X_test); % 评估模型性能 rmse = sqrt(mean((y_pred - y_test).^2)); r_squared = 1 - sum((y_test - y_pred).^2) / sum((y_test - mean(y_test)).^2); ``` 请注意,这只是一个简单的示例,实际应用中可能需要根据具体问题进行更复杂的处理和模型选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值