时间序列数据回归分析指南

导航至

这篇文章由 Mercy Kibet 撰写。Mercy 是一位全栈开发人员,热衷于学习和撰写关于新兴和有趣的科技堆栈的文章。

regression-analysis-guide

随着每天生成、捕获和消费的大量时间序列数据,您如何理解它?预计到 2025 年,这些数据将增长到 180 泽字节。 通过将回归分析与时间序列数据结合使用,我们可以深入了解复杂系统随时间推移的行为,识别数据中的趋势和模式,并根据我们的分析和预测做出明智的决策。

这篇文章是时间序列数据回归指南。到最后,您应该了解什么是时间序列数据,以及如何将其与回归分析结合使用。

time-series-data

什么是时间序列数据?

时间序列数据是一种数据类型,您可以在特定时间点记录每个观测值。您还在固定的时间间隔收集观测值。在时间序列数据中,观测值的顺序很重要,您可以使用这些数据来分析变化或模式。

这种类型的数据的示例包括股票价格、天气测量、经济指标等等。时间序列数据常用于各个领域,包括金融、经济学、工程学和社会科学。

时间序列数据与其他数据类型(如分类数据和数值数据)之间的关键区别在于时间成分。这个时间方面使我们能够发现趋势,并有可能对未来进行预测。

什么是回归和回归分析?

回归是一种统计技术,您可以使用它来探索和建模因变量(响应变量)与一个或多个自变量(预测变量或解释变量)之间的关系。

回归分析包括估计回归方程的系数,这些系数描述了自变量和因变量之间的关系。回归模型有很多种,包括线性回归、逻辑回归和多项式回归。

通过回归分析,您试图找到最适合代表变量关系的直线或曲线。

与时间序列数据一样,您会在许多领域发现回归分析,包括经济学、金融学、社会科学、工程学等等,以了解变量之间的潜在关系,并根据这些关系进行预测。

您可以在时间序列数据上运行回归吗?

是的,您可以在时间序列数据上运行回归。在时间序列回归中,因变量是时间序列,自变量可以是其他时间序列或非时间序列变量。

时间序列回归可以帮助您了解变量之间随时间推移的关系,并预测因变量的未来值。

时间序列回归的一些常见应用示例包括

  • 根据经济指标预测股票价格

  • 根据天气数据预测电力需求

  • 估计营销活动对销售额的影响

时间序列回归分析有多种统计技术可用,包括自回归积分滑动平均 (ARIMA) 模型、向量自回归 (VAR) 模型和贝叶斯结构时间序列 (BSTS) 模型等。

时间序列回归分析的步骤是什么?

本指南假设您已设置好环境。但是,为了跟上进度,您需要 Python、Data Package、NumPy、Matplotlib、Seaborn、pandas 和 statsmodels。

回归分析有您需要遵循的关键步骤。它们如下:

数据收集和准备

回归分析的第一步是收集数据。时间序列数据是在特定时期内收集的,包括随时间变化的变量。确保数据的准确性、完整性和一致性至关重要。

收集数据后,您必须准备好进行分析。这包括删除任何异常值、处理缺失数据以及在必要时转换数据。

对于我们的案例,我们将使用天然气价格数据。为此,我们需要导入一些库。我们将使用 pandas 进行数据处理,statsmodels 进行回归分析,Matplotlib 进行数据可视化,NumPy 进行数值运算,以及 Data Package 来提取数据。

import statsmodels.api as sm
import datapackage
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

然后,我们将时间序列数据加载到 pandas 数据帧中。我们的数据是来自 1997 年至今的天然气价格数据。

data_url = 'https://datahub.io/core/natural-gas/datapackage.json'

# to load Data Package into storage
package = datapackage.Package(data_url)

# to load only tabular data
resources = package.resources
for resource in resources:
    if resource.tabular:
        data = pd.read_csv(resource.descriptor['path'])
        print (data)

由于我们正在处理时间序列数据,因此我们需要将数据转换为时间序列格式。我们可以通过将数据帧的索引设置为日期时间格式来做到这一点。

data['Month'] = pd.to_datetime(data['Month'])
data.set_index('Month', inplace=True)

可视化

在进行回归分析之前,可视化数据至关重要。您可以使用折线图、散点图或其他图形表示形式。

这有助于识别因变量和自变量之间的趋势、模式或关系。

我们可以通过创建数据的折线图来做到这一点。

plt.plot(data)
plt.xlabel('Year')
plt.ylabel('Gas Price')
plt.show()

dependent-independent-variables

模型规范和估计

下一步是指定回归模型。这包括选择因变量、识别自变量以及选择模型的功能形式。

该模型必须考虑时间序列数据的时间成分,例如季节性模式、趋势和周期性波动。

指定模型后,使用统计软件对其进行估计。用于时间序列回归分析的最常用方法是普通最小二乘法 (OLS) 回归。该软件将估计模型的系数,这些系数代表因变量和自变量之间关系的强度和方向。

我们将使用具有一个自变量的简单线性回归模型。我们将使用上个月的天然气价格作为自变量,将当月的天然气价格作为因变量。

X = data['Price'].shift(1)
y = data['Price']

在估计模型之前,我们需要将数据拆分为训练集和测试集。我们将使用前 80% 的数据来训练模型,其余 20% 的数据用于测试模型。

train_size = int(len(data) * 0.8)
train_X, test_X = X[1:train_size], X[train_size:]
train_y, test_y = y[1:train_size], y[train_size:]

现在我们可以使用 statsmodels 库中的 OLS 回归来估计模型。

model = sm.OLS(train_y, train_X)
result = model.fit()
print(result.summary())

诊断

估计模型后,检查模型的充分性以及是否违反回归模型的假设至关重要。
这包括测试自相关性、异方差性和残差的正态性。这些测试有助于确保模型是适当且可靠的。

我们可以通过绘制残差图和进行统计测试来做到这一点。

residuals = result.resid
plt.plot(residuals)
plt.xlabel('Year')
plt.ylabel('Residuals')
plt.show()
print(sm.stats.diagnostic.acorr_ljungbox(residuals, lags=[12], boxpierce=True))

解释

估计模型并进行诊断测试后,您需要解释结果。这包括检查自变量的系数以及这些系数的统计显着性。

解释还应包括对模型整体拟合度的评估,例如 R 平方值和调整后的 R 平方值。

可能的预测

时间序列数据回归分析可用于预测因变量的未来值。这包括使用估计的模型根据自变量的值预测因变量的未来值。

重要的是要注意,预测的准确性取决于数据的质量、模型的适当性以及假设的有效性。

如何将回归分析与时间序列数据结合使用?

当因变量和一个或多个自变量之间存在时间关系时,回归分析对于分析时间序列数据非常有价值。

时间序列回归分析可能有所帮助的一些常见场景包括

  • 预测:通过时间序列回归分析,您可以根据变量的过去值和影响它的其他变量的值来预测变量可能的未来值。

  • 趋势分析:时间序列回归分析可以识别和分析数据随时间推移的趋势,包括长期趋势、季节性模式和周期性模式。

  • 影响分析:您可以使用时间序列回归分析来分析特定事件或干预对时间序列数据的影响,例如政策变化、自然灾害或经济冲击。

时间序列数据回归分析是理解变量之间关系的强大工具。它是理解从金融到医疗保健、零售等各个行业数据的关键组成部分。通过掌握时间序列数据回归分析的基础知识,您可以释放数据的力量并做出明智的决策。