时间序列滚动窗口功能

问题描述 投票:0回答:1

如果我根据我的销售额(目标)列创建滚动平均特征,是否有必要对其进行移动?

我举个例子:

假设我的数据集中有第 01~10 天。例如,如果我在第 10 天的行中创建 7 天的平均滚动窗口列,它将考虑第 7 天作为该行的值来计算滚动平均值。现在,如果我要预测第 11 天,即明天,我需要这一天的销售值才能获得滚动平均值,这没有意义。

因此,我认为始终获得最后 7 天更有意义,而不考虑当前的情况。

有人可以帮忙吗?

machine-learning feature-engineering
1个回答
0
投票

我假设你可以使用Pandas库,因为它强大的滚动功能可以轻松满足你的要求。

考虑以下示例:

import pandas as pd
my_values = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
my_window_size = 3
rolling_mean = my_values.shift(1).rolling(window=my_window_size).mean()
print(rolling_mean)

这会导致

0    NaN
1    NaN
2    NaN
3    2.0
4    3.0
5    4.0
6    5.0
7    6.0
8    7.0
9    8.0

如您所见,这使您能够使用索引 [0,1,2] 的平均值显示在索引 3 处 ((1+2+3)/3 =2)。 开头的 NA 之所以存在,是因为如果窗口函数不与序列完全重叠,窗口函数不知道该怎么办。

我们在计算滚动变换之前将系列移至此处,这是您想要避免的。

在您的特殊情况下(即您移动 1),窗口函数可以通过

closed
参数进行改进:

import pandas as pd

my_values = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
my_window_size = 3
rolling_mean = my_values.rolling(window=my_window_size, closed='left').mean()
print(rolling_mean)
0    NaN
1    NaN
2    NaN
3    2.0
4    3.0
5    4.0
6    5.0
7    6.0
8    7.0
9    8.0

“左”闭合意味着最后一个点将意味着当前点不应该成为窗口计算的一部分。 (窗口的左右发生了某种变化,当我们谈到窗口中的最左边的点时,它将是窗口“看到”的子系列中的最右边的点,这是由于其背后的数学原理,我只想滚动它:D)

您可以在这里找到关闭的选项:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html#:~:text=DataFrame%20first%20instead.- ,关闭,-str%2C%20default%20None

© www.soinside.com 2019 - 2024. All rights reserved.