【Kaggle时间序列教程:时间序列入门之时间序列的线性回归(1)】
【Kaggle时间序列教程:时间序列入门之时间序列的线性回归(1)】
本系列概述
我翻译了Kaggle上的时间序列教程:为初学者打开学习大门
时间序列分析是数据科学和机器学习中的一个重要领域,广泛应用于金融、气象、销售预测等多个行业。然而,对于很多初学者来说,时间序列的概念和方法可能会显得有些复杂,尤其是如何构建模型、如何处理数据等。
最近,我在Kaggle上发现了一个关于时间序列分析的非常有价值的教程。这个教程不仅讲解了时间序列的基础知识,还提供了实用的代码示例,帮助读者逐步理解如何处理和建模时间序列数据。由于我认为这个教程对初学者非常有帮助,因此我决定将其翻译成中文,以便更多的学习者能够受益。
为什么选择翻译这个教程?
Kaggle是数据科学领域一个非常受欢迎的平台,它提供了丰富的实战项目和教程,帮助大家通过实践提高技能。这篇时间序列教程的内容清晰、结构合理,适合没有时间序列背景的读者逐步掌握这一领域的知识。
在这篇教程中,作者从基础开始,讲解了时间序列的定义、常见问题、如何进行数据预处理、如何选择合适的模型等内容。尤其是在时间序列的特征工程部分,教程介绍了如何使用滞后特征、季节性特征等来增强模型的预测能力。这些内容不仅适合刚接触时间序列的初学者,也对有一定经验的分析师和数据科学家提供了有价值的参考。
翻译过程中的感悟
翻译这个教程的过程中,我自己也学到了很多新东西。虽然我之前有过一些时间序列分析的经验,但通过逐字逐句地翻译教程,我重新梳理了很多基础概念,对时间序列的处理方法有了更加深刻的理解。
时间序列数据常常具有时间依赖性,这与一般的机器学习任务有很大不同。因此,如何处理缺失值、如何设计滞后特征、如何选择合适的模型,这些问题对于初学者来说确实具有一定挑战性。但通过这个教程,读者能够系统地学习到这些技巧,逐步掌握时间序列建模的核心要点。
翻译后的效果
通过将这个教程翻译成中文,我希望能够帮助更多的中文读者能够更轻松地理解和学习时间序列分析。特别是对于那些没有英语基础或者在阅读英文资料时遇到困难的学习者,翻译后的教程能够提供更好的学习体验。
此外,我也在翻译过程中补充了一些中文的注释和示例,以帮助读者更好地理解代码的实现和背后的原理。通过这样的实践,大家不仅能够掌握时间序列分析的技术,还能提升自己的编码能力和问题解决能力。
结语
时间序列分析是数据科学中一个极具挑战和趣味的领域,掌握这一技能将为我们在多个行业中解决实际问题提供巨大的帮助。我非常高兴能将这个Kaggle上的教程翻译给大家,希望能够为更多的初学者提供帮助,让大家能够顺利地入门时间序列分析,并在未来的学习和工作中取得更好的成绩。
如果你是初学者,或者希望进一步提升你的时间序列分析技能,欢迎阅读我翻译的教程。我相信,这将是你学习数据科学路上的一块坚实基石。
欢迎来到时间序列预测课程!
预测是机器学习在现实世界中最常见的应用之一。企业用它来预测产品需求,政府用它来预测经济和人口增长,气象学家用它来预测天气。对未来的预测不仅是科学、政府和工业界的迫切需求,也是我们日常生活中的重要一环。因此,越来越多的领域和行业开始利用机器学习技术来满足这一需求。
时间序列预测是一个广泛而深远的研究领域,拥有悠久的发展历史。本课程将重点介绍现代机器学习方法在时间序列数据分析中的应用,目标是实现最准确的预测结果。本课程的内容灵感来源于过去Kaggle竞赛中的获奖解决方案,但我们将始终把准确预测放在首位,确保适用于各种实际情况。
通过学习本课程,您将能够:
- 对时间序列的主要组成部分(如趋势、季节性和周期性)进行建模;
- 使用多种时间序列图表来可视化数据;
- 构建结合不同模型优势的预测混合体;
- 使机器学习方法适应各种不同类型的预测任务。 希望您能在本课程中获得有价值的知识和技能,提升对时间序列数据预测的理解和应用能力!
什么是时间序列?
时间序列是指按照时间顺序记录的一组数据或观测值。在预测应用中,通常这些数据是以固定的时间间隔(比如每天、每月或每小时)收集的。换句话说,时间序列就是我们用来描述和分析随时间变化的现象的数据集合。
Date | Hardcover |
---|---|
2000-04-01 | 19 |
2000-04-02 | 128 |
2000-04-0 | 172 |
2000-04-04 | 19 |
2000-04-05 | 191 |
该系列记录了零售店 0 天内精装书的销售数量。请注意,我们有一列Hardcover带有时间索引的观测值Date。
时间序列的线性回归
在本课程的第一部分,我们将使用线性回归算法来构建预测模型。线性回归在实践中广泛使用,并且自然地适应复杂的预测任务。
线性回归算法学习如何根据其输入特征进行加权和。对于两个功能,我们将有:
target = weight_1 * feature_1 + weight_2 * feature_2 + bias
在训练期间,回归算法会学习最适合的参数weight_1、weight_2和的值。 (此算法通常称为普通最小二乘法,因为它选择最小化目标与预测之间的平方误差的值。)权重也称为回归系数,也称为截距,因为它告诉您该函数的图形在哪里穿过 y 轴。bias target bias
时间步特征
时间序列数据具有两种独特的特征:时间步长特征和滞后特征。
时间步特征是指我们可以直接从时间索引中提取的特征。最基本的时间步特征是时间虚拟变量,它表示从序列开始到结束的每一个时间步长。
代码语言:javascript代码运行次数:0运行复制import pandas as pd
import numpy as np
df = pd.read_csv(
"../input/ts-course-data/book_",
index_col='Date',
parse_dates=['Date'],
)
df['Time'] = np.arange(len(df.index))
df.head()
Hardcover | Time | |
---|---|---|
Date | ||
2000-04-01 | 19 | 0 |
2000-04-02 | 128 | 1 |
2000-04-0 | 172 | 2 |
2000-04-04 | 19 | |
2000-04-05 | 191 | 4 |
使用时间虚拟变量的线性回归生成模型:
target = weight * time + bias
然后,时间虚拟变量让我们将曲线拟合到时间图中的时间序列,其中Time形成 x 轴。
时间步功能可让您对时间依赖性进行建模。如果序列的值可以从发生的时间预测,则序列是时间相关的。在精装销售系列中,我们可以预测当月晚些时候的销售量通常高于当月早些时候的销售量。
滞后特征 为了制作滞后特征,我们改变了目标序列的观察结果,使它们看起来是在较晚的时间发生的。在这里,我们创建了 1 步滞后特征,尽管也可以进行多步移动。
代码语言:javascript代码运行次数:0运行复制df['Lag_1'] = df['Hardcover'].shift(1)
df = df.reindex(columns=['Hardcover', 'Lag_1'])
df.head()
Date | Hardcover | Lag_1 |
---|---|---|
2000-04-01 | 19 | a |
2000-04-02 | 128 | 19.0 |
2000-04-0 | 172 | 128.0 |
2000-04-04 | 19 | 172.0 |
2000-04-05 | 191 | 19.0 |
具有滞后特征的线性回归模型:
target = weight * lag + bias
因此,滞后特征让我们可以将曲线拟合到滞后图上,其中系列中的每个观测值都根据先前的观测值进行绘制。
可以从滞后图中看到,一天的销售额 ( Hardcover) 与前一天的销售额 (Lag_1) 相关。
一般来说,滞后特征可以帮助我们建模时间序列中的依赖关系。当后续的观察值能够通过先前的观察值来预测时,时间序列就表现出依赖性。例如,在精装书籍的销售中,我们可以发现当天的高销量通常意味着第二天也会有较高的销量。
将机器学习算法应用于时间序列问题主要是关于时间索引和滞后的特征工程。
示例 - 隧道流量
隧道交通是一个时间序列,描述从 200 年 11 月到 2005 年 11 月每天穿过瑞士 Baregg 隧道的车辆数量。在这个示例中,我们将进行一些将线性回归应用于时间步特征和滞后特征的练习。
Day | umVehicles |
---|---|
200-11-01 | 1056 |
200-11-02 | 92051 |
200-11-0 | 100795 |
200-11-04 | 10252 |
200-11-05 | 106569 |
时间步长特征
如果时间序列没有任何缺失的日期,我们可以通过计算序列的长度来创建时间虚拟值
代码语言:javascript代码运行次数:0运行复制df['Time'] = np.arange(len(tunnel.index))
df.head()
Day | umVehicles | Time |
---|---|---|
200-11-01 | 1056 | 0 |
200-11-02 | 92051 | 1 |
200-11-0 | 100795 | 2 |
200-11-04 | 10252 | |
200-11-05 | 106569 | 4 |
使用scikit-learn来拟合线性回归模型。
代码语言:javascript代码运行次数:0运行复制from sklearn.linear_model import LinearRegression
# 训练数据
X = df.loc[:, ['Time']] # 特征
y = df.loc[:, 'umVehicles'] # 目标
model = LinearRegression()
model.fit(X, y)
# 将拟合值存储为时间序列,其时间索引与训练数据相同
y_pred = pd.Series(model.predict(X), index=X.index)
实际创建的模型大致为:Vehicles = 22.5 * Time + 98176。通过绘制随时间变化的拟合值,我们可以看到将线性回归应用于时间虚拟变量时,如何生成由该方程定义的趋势线。
滞后特征
Pandas 为我们提供了一种简单的方法来滞后序列,即shift()方法。
代码语言:javascript代码运行次数:0运行复制df['Lag_1'] = df['umVehicles'].shift(1)
df.head()
Day | umVehicles | Time | Lag_1 |
---|---|---|---|
200-11-01 | 1056 | 0 | a |
200-11-02 | 92051 | 1 | 1056.0 |
200-11-0 | 100795 | 2 | 92051.0 |
200-11-04 | 10252 | 100795.0 | |
200-11-05 | 106569 | 4 | 10252.0 |
在创建滞后特征时,我们需要决定如何处理产生的缺失值。一种选择是填充这些缺失值,常见的做法是使用 0.0 或者使用第一个已知值进行“回填”。然而,在此情况下,我们选择删除缺失值,并确保同时删除目标变量中相应日期的值。
代码语言:javascript代码运行次数:0运行复制from sklearn.linear_model import LinearRegression
X = df.loc[:, ['Lag_1']]
X.dropna(inplace=True) # 删除缺失值
y = df.loc[:, 'umVehicles'] # 创建目标列
y, X = y.align(X, join='inner') # 删除目标中的相应值
model = LinearRegression()
model.fit(X, y)
y_pred = pd.Series(model.predict(X), index=X.index)
滞后图向我们展示了我们如何能够很好地拟合一天的车辆数量与前一天的车辆数量之间的关系。
滞后特征的引入对我们预测随时间变化的序列具有重要影响。通过引入滞后特征,我们能够更好地捕捉到序列的历史行为对当前预测的影响。下面的时间图展示了在引入滞后特征后,我们的预测如何更有效地反映该序列最近的变化趋势。
最有效的时间序列模型通常结合了时间步长特征和滞后特征。在接下来的几节课中,我们将学习如何以本课中的特征为基础,设计新的特征,并利用这些特征来建模时间序列中最常见的模式。
本文原文链接本翻译仅供学习交流使用,若有版权问题,请联系我删除。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-07,如有侵权请联系 cloudcommunity@tencent 删除教程入门线性回归kaggle翻译#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
下一篇:【一文搞懂:什么是集成学习
推荐阅读
留言与评论(共有 5 条评论) |
本站网友 域名主机管理系统 | 6分钟前 发表 |
广泛应用于金融 | |
本站网友 华西附二院 | 1分钟前 发表 |
季节性和周期性)进行建模;使用多种时间序列图表来可视化数据;构建结合不同模型优势的预测混合体;使机器学习方法适应各种不同类型的预测任务 | |
本站网友 银谷财富 | 12分钟前 发表 |
我们可以预测当月晚些时候的销售量通常高于当月早些时候的销售量 | |
本站网友 王莽岭景区 | 24分钟前 发表 |
我们的预测如何更有效地反映该序列最近的变化趋势 |