- : содержит ежедневную информацию о заказах на покупку.
Код: Выделить всё
doc3 - : Содержит записи о том, когда были активированы поставщики.
Код: Выделить всё
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)
- Существует ли при таком подходе риск утечки данных, особенно с использованием merge_asof и двухдневной терпимостью?
- Если присутствует утечка данных, как я могу это изменить функция, гарантирующая, что я использую только прошлую информацию для каждого прогнозируемого дня, сохраняя при этом вычислительную эффективность?
- Есть ли какие-либо другие соображения, специфичные для временных рядов Что следует учитывать при подготовке этих данных для прогнозной модели?
Я попробовал несколько подходов к подготовке данных временных рядов:
- Изначально я использовал простое объединение ключа и даты элемента, но это привело к множеству пропущенных значений и не отразило временную природу данных.
- Затем я реализовал функцию merge_asof, как показано в моем коде. Я ожидал, что это позволит совместить данные активации (из expedite2) с ближайшей датой обработки (из doc3) в пределах двухдневного окна. Это работало хорошо с точки зрения эффективности и, похоже, фиксировало недавние активации.
- Я также добавил исторические функции, такие как предыдущие активации и дни с момента последней активации, используя функцию сдвига внутри каждой группы элементов.
- Набор данных, в котором каждая строка в документе 3 дополнена самыми последними данными об активации.
- Исторические объекты, фиксирующие прошлые шаблоны активации для каждый элемент.
- Эффективный процесс, способный обрабатывать большие наборы данных.
- Эта функция эффективно работает с моим большим набором данных.
- Я получаю объединенный набор данных с информацией об активации и некоторыми историческими функциями. >
- Однако я не уверен, что мне удалось полностью устранить утечку данных, особенно с помощью двухдневного допуска в merge_asof.
- Я' Меня беспокоит, что функция сдвига для создания исторических объектов может не эффективно фиксировать долгосрочные закономерности.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ve-modelin