使用 pd.qcut(使用分位数)对时间序列进行分箱会造成数据泄漏吗?

数据挖掘 时间序列 熊猫 特征工程 特征 数据泄露
2022-02-25 04:09:31

假设我想预测一家公司是否会在某个时间点拖欠债务(所以是二元分类),而我使用的时间序列变量之一是该公司思考时间的“收入”。我可以使用分位数切割(如 => pd.qcut(df['revenue'],bins=10)) 将这个变量“收入”分箱而不造成数据泄漏吗?

我的印象是我不能真正做到这一点,因为分位数削减是通过了解整个期间变量“收入”的整个分布来进行的。也就是说,在我的训练数据中的任何时间点归属于“收入”的 bin 都将携带有关未来的信息。

我是否正确地假设这会为此时间序列预测问题造成数据泄漏?如果是这样,我可以安全地使用 pd.cut 代替没有分位数吗?

谢谢

2个回答

我认为您确实可能通过使用pd.qcut. 避免泄漏的一种解决方案是以时间序列交叉验证的方式进行。这个想法是在训练折叠中导出分位数值,并使用这些值在其验证折叠中进行切割。

这有点复杂,如果您希望它更简单,您可以使用pd.cut,只要您不从完整分布中获得削减,就不会出现泄漏问题。如果您使用您定义的一些默认切割,泄漏的风险将非常低。

好的,谢谢,这证实了我的想法。对于pd.cut“不从完整分配中得出削减”是什么意思?那么我应该如何选择该分布的一个子集呢?据推测,同样的问题可能会出现类似于pd.qcut权利的问题?此外,是否有一种直接的方法可以从训练集中导出分位数,然后在验证集上应用切割?看起来我必须在创建折叠时创建该分箱功能。