Featuretools Deep Feature Synthesis (DFS) чрезвычайно высокие накладные расходы - PullRequest
1 голос
/ 03 июня 2019

Выполнение ft.dfs(...) и ft.calculate_feature_matrix(...) в некоторых временных рядах для извлечения дня, месяца и года из очень маленького фрейма данных (<1k строк) занимает около 800 мс.Когда я вообще не вычисляю функции, это все равно занимает около 750 мс.Чем вызваны эти издержки и как я могу их уменьшить? </p>

Я тестировал различные комбинации функций, а также тестировал их на множестве небольших фреймов данных, и время выполнения довольно постоянное и составляет 700-800 мс.

Я также проверил это на гораздо больших фреймах данных с> 1 миллионом строк.Время выполнения без каких-либо реальных функций (примитивов) довольно сравнимо примерно со временем для всех функций даты в пределах 80-90 секунд.Так что кажется, что время вычислений зависит от количества строк, но не от особенностей?

Я бегу с n_jobs = 1, чтобы избежать каких-либо странностей с параллелизмом.Мне кажется, что featuretools каждый раз выполняет какую-то настройку или настройку серверной части dask, что вызывает все накладные расходы.

es = ft.EntitySet(id="testing")
es = es.entity_from_dataframe(
    entity_id="time_series",
    make_index=True,
    dataframe=df_series[[
        "date",
        "flag_1",
        "flag_2",
        "flag_3",
        "flag_4"
    ]],
    variable_types={},
    index="id",
    time_index="date"
)

print(len(data))

features = ft.dfs(entityset=es, target_entity="sales", agg_primitives=[], trans_primitives=[])

Фактический вывод кажется правильным, я просто удивлен, что FeatureTools потребовалось бы 800 мс, чтобы ничего не вычислять на небольшом кадре данных.Является ли решение просто избежать небольших фреймов данных и вычислить все с помощью пользовательского примитива на большом фрейме данных, чтобы уменьшить накладные расходы?Или есть более умный / более правильный способ использования ft.dfs(...) или ft.compute_feature_matrix.

...