Я использую функциональные инструменты для создания ежемесячных агрегаций.
У меня есть игрушечные данные, состоящие из заявок на кредит (1000 ID_APPLICATION
; 1000 TIME_APPLICATION
) и транзакций 200 000 (-> ~ 200 транзакций на 1 человека; 1 транзакция имеет такую информацию, как AMOUNT
, TIME
и другие, не требуется для этого примера).Столбец TIME
состоит из ~ 200 раз для одного человека, в предыдущем году или более.
constants.py
____________
ID_APPLICATION_COLUMN = "ID_APPLICATION"
ID_TRANSACTIONS_COLUMN = "ID_TRANSACTION"
TIME_COLUMN = "TIME"
TIME_APPLICATION_COLUMN = "TIME_APPLICATION"
ENTITY_SET_NAME = "clients"
TRANSACTIONS_ENTITY_NAME = "transactions"
APPLICATIONS_ENTITY_NAME = "applications"
creation
____________
# we fill the entity_set with the dataframes, and say, which IDs are relevant for given DF
entity_set.entity_from_dataframe(entity_id=cnst.TRANSACTIONS_ENTITY_NAME,
dataframe=transactions,
index=cnst.ID_TRANSACTIONS_COLUMN,
time_index=cnst.TIME_COLUMN)
entity_set.entity_from_dataframe(entity_id=cnst.APPLICATIONS_ENTITY_NAME,
dataframe=applications,
index=cnst.ID_APPLICATION_COLUMN,
time_index=cnst.TIME_APPLICATION_COLUMN)
# Specification of the relationship between entities
r_transactions_applications = ft.Relationship(
parent_variable=entity_set[cnst.APPLICATIONS_ENTITY_NAME][cnst.ID_APPLICATION_COLUMN],
child_variable=entity_set[cnst.TRANSACTIONS_ENTITY_NAME][cnst.ID_APPLICATION_COLUMN])
entity_set.add_relationship(r_transactions_applications)
Однако у меня есть проблема с временными отсечками.
при созданииих и применить их:
default_agg_primitives = ["count", "sum", "std", "max", "mode", "mean"]
default_trans_primitives = ['month', 'day', 'time_since_previous']
temporal_cutoffs = ft.make_temporal_cutoffs(
instance_ids=applications[cnst.ID_APPLICATION_COLUMN],
cutoffs=applications[cnst.TIME_APPLICATION_COLUMN],
window_size='1m',
num_windows=6)
transformed_data = ft.dfs(entityset=entity_set,
target_entity=cnst.APPLICATIONS_ENTITY_NAME,
cutoff_time=temporal_cutoffs,
cutoff_time_in_index=True,
trans_primitives=default_trans_primitives,
agg_primitives=default_agg_primitives,
max_depth=2)
Поскольку я агрегирую для уровня приложения, я получаю 1000 строк без временных срезов.Когда я применяю их, я получаю 6000 строк, однако 5000 строк (все месяцы раньше, кроме последнего) равны 0 или NaN, а остальное точно так же, как если бы я вообще не использовал временные обрезки.
Мне кажется, что столбец TIME
не зарегистрирован и набор данных не разделен.
Где я могу установить это?