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

导航至

本文由 Mercy Kibet 撰写。 Mercy 是一名全栈开发者,热衷于学习并撰写关于新颖有趣的技术栈。

regression-analysis-guide

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

本文是关于时间序列数据回归分析的指南。到本文结束,您应该了解什么是时间序列数据以及如何使用回归 分析

time-series-data

什么是时间序列数据?

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

此类数据的例子包括股票价格、气象测量、经济指标等。时间序列数据在金融、经济、工程和社会科学等各个领域都得到广泛应用。

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

什么是回归和回归分析?

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

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

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

类似于时间序列数据,你会在许多领域找到回归分析,包括经济学、金融、社会科学、工程等,以理解变量之间的潜在关系,并基于这些关系进行预测。

你能在时间序列数据上运行回归分析吗?

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

时间序列回归有助于你理解变量随时间变化的关系,并预测因变量的未来值。

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

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

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

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

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

时间序列回归分析的步骤有哪些?

本指南假设你已经设置了环境。但为了跟随,你需要Python、数据包、NumPy、Matplotlib、Seaborn、pandas和statsmodels。

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

数据收集和准备

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

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

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

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平方值。

可能的预测

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

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

您如何使用时间序列数据的回归分析?

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

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

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

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

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

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