预测建模的时间序列特征工程中潜在的数据泄漏

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

我正在开发一个机器学习项目,以预测何时在工业采购流程中激活供应商。我有两个主要数据集:

  1. doc3
    :包含有关采购订单的日常信息。
  2. expedite2
    :包含供应商激活时间的记录。

我的目标是创建一个模型,可以在任何一天根据历史模式预测是否需要激活供应商。

这是我当前数据准备功能的简化版本:

import pandas as pd

def optimized_join_and_prepare_data(doc3, expedite2):
    doc3['PROCESS_DATE'] = pd.to_datetime(doc3['PROCESS_DATE'])
    expedite2['LOG_DATE'] = pd.to_datetime(expedite2['LOG_DATE'])
    
    doc3['item_key'] = doc3['DOC_NUM'].astype(str) + '_' + doc3['DOC_ITEM'].astype(str) + '_' + doc3['SAP_CODE']
    expedite2['item_key'] = expedite2['DOC_NUM'].astype(str) + '_' + expedite2['DOC_ITEM'].astype(str) + '_' + expedite2['SAP_WEB_CODE']
    
    doc3 = doc3.sort_values('PROCESS_DATE')
    expedite2 = expedite2.sort_values('LOG_DATE')
    
    merged = pd.merge_asof(doc3, expedite2[['item_key', 'LOG_DATE', 'DATA01']], 
                           left_on='PROCESS_DATE', 
                           right_on='LOG_DATE', 
                           by='item_key',
                           direction='nearest', 
                           tolerance=pd.Timedelta('2d'))
        
    merged['LOG_DATE'] = merged['LOG_DATE'].fillna(pd.NaT)
    merged['DATA01'] = merged['DATA01'].fillna('NO_ACTIVATION')
    merged = merged.dropna(subset=['PROCESS_DATE', 'item_key'])
    
    return merged

final_data = optimized_join_and_prepare_data(doc3, expedite2)

我的主要担忧和问题是:

  1. 这种方法是否存在数据泄露的风险,尤其是使用

    merge_asof
    和2天的容忍度?

  2. 如果存在数据泄漏,我如何修改此函数以确保我只使用每个预测日的过去信息,同时保持计算效率?

  3. 在为预测模型准备这些数据时,我还应该牢记任何其他特定于时间序列的注意事项吗?

我正在处理大型数据集,因此效率是一个问题,但我想确保时间序列分析的完整性。任何改进的见解或建议将不胜感激!

我尝试了几种方法来准备时间序列数据:

  1. 最初,我对项目键和日期使用了简单的合并,但这导致了许多缺失值,并且没有捕获数据的时间性质。

  2. 然后,我实现了

    merge_asof
    函数,如代码所示。我预计这会在 2 天的窗口内将激活数据(来自
    expedite2
    )与最近的处理日期(来自
    doc3
    )对齐。这在效率方面效果很好,并且似乎捕获了最近的激活。

  3. 我还使用每个项目组中的

    shift
    功能添加了历史功能,例如之前的激活和自上次激活以来的天数。

我的期望:

  • 数据集,其中
    doc3
    中的每一行都富含最新的激活数据。
  • 捕获每个项目过去激活模式的历史特征。
  • 可以处理大型数据集的高效流程。

实际发生了什么:

  • 该函数在我的大型数据集上高效运行。
  • 我得到了一个包含激活信息和一些历史特征的合并数据集。
  • 但是,我不确定是否已完全消除数据泄漏,尤其是
    merge_asof
    中的 2 天容差。
  • 我担心用于创建历史特征的
    shift
    功能可能无法有效捕获长期模式。

我正在寻找对我的方法的验证或改进建议,特别是在数据泄漏预防和更复杂的时间序列特征工程方面。

python pandas time-series
1个回答
0
投票

那就自己走吧

Id-0it 无法为 shi 编码,哈哈。我通过这个 ez a job chat gpt 为我做了一年超过六位数的收入

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