如何在 Python 中对具有不规则观察日期和每个日期不均匀观察的数据应用时间序列交叉验证?

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

使用不规则观察日期和每个日期不均匀观察执行时间序列交叉验证的最佳方法?

我有一个数据集,我一直在尝试将其用于 XGBoost 回归。我遇到的问题是如何最好地为我的训练集和测试集应用时间序列交叉验证(或组时间序列交叉验证)。

我的数据集包括目标变量,观察日期,然后是目标变量观察日期的特征值。每个观察日期平均每天有 5 次目标观察,但是,有些日期记录了 4 或 10 次观察。无论如何,大多数日期记录了 5 个观察结果。

我发现这个问题/答案我认为可以适用于我的用例,但是,它需要我在观察值大于 4 的日子里减少目标变量的观察值,以便每个日期正好有 4 个目标观察值.

每天有多个记录的拆分时间序列

是否有适当的方法来确定要删除哪些观察结果,以便我可以让所有观察日期正好有 4 个观察结果?或者,如果可能,确定一种不删除观察结果并对整个数据集执行 GroupTimeSeries 交叉验证的方法?

我不能随机拆分,所以我根据特定日期索引(70/30 拆分)将我的数据集拆分为训练/测试。

这是我的数据框示例

                     Target      Feature      dayofmonth  weekofyear
Obs. Date                                      ...                        
2008-06-16                 140.2           25  ...          16          
2008-06-16                 140.7           25  ...          16          
2008-06-16                 139.0           25  ...          16          
2008-06-16                 144.5           25  ...          16          

2018-09-04                  64.9           36  ...           4          
2018-09-04                  72.9           36  ...           4          
2018-09-04                  75.6           36  ...           4          
2018-09-04                  71.6           36  ...           4          
2018-09-04                  74.9           36  ...           4          

[618 rows x 46 columns]
python machine-learning scikit-learn time-series cross-validation
1个回答
0
投票

如果您想删除额外的观察结果,您可以尝试按日期对它们进行分组,然后简单地选择四个最接近当天的平均观察结果或选择四个最具“代表性”的观察结果(0-百分位数、33-百分位数、66-百分位数、100-百分位数观察值按观察时间排序)。

如果您不想删除观察结果,您可以尝试一些插值方法来“填补空白”。

然而,最好结合这两种方法:分析您的时间序列并选择每天观察的中位数。对于观察次数少于中位数的日子应用插值,对于观察次数高于中位数的日子删除额外的观察

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