время выключения и тренировочное окно в Featuretools - PullRequest
0 голосов
/ 07 июня 2018

Предположим, у меня есть два набора данных (соответствующих двум сущностям в моем наборе сущностей):

Первый: клиенты (cust_id, name, дата рождения, customer_since)
Второй: бронирования (booking_id, service, chargeamount, booking_date)

Теперь я хочу создать набор данных с функциями, созданными из всех клиентов (независимо от того, когда они являются клиентами), но только бронирования за последние два года .

Как мне использовать «last_time_index»?Могу ли я установить «last_time_index» только для одного объекта?В этом случае только для сущности бронирования, потому что я хочу ВСЕХ клиентов, но не все заказы.

Если этот код используется для создания функций:

feature_matrix, features = ft.dfs(entityset=es,
                              target_entity="customers",
                              cutoff_time= pd.to_datetime('30/05/2018'),
                              training_window = ft.Timedelta(2*365,"d"),
                              agg_primitives=["count"],
                              trans_primitives=["time_since","year"],
                              cutoff_time_in_index = True)

1 Ответ

0 голосов
/ 08 июня 2018

time_index объекта указывает первый раз, когда экземпляр является допустимым для использования.Таким образом, выбор, который вы делаете при настройке индекса времени, может повлиять на ваш конечный результат.В зависимости от того, как вы настроили time_index, можно использовать ft.dfs с точно такими же настройками в вашем примере, чтобы получить желаемый результат.Вот игрушечный пример, похожий на данные, которые вы описали:

bookings_df = pd.DataFrame()
bookings_df['booking_id'] = [1, 2, 3, 4]
bookings_df['cust_id'] = [1, 1, 2, 5]
bookings_df['booking_date'] = pd.date_range('1/1/2014', periods=4, freq='Y')

customer_df = pd.DataFrame()
customer_df['cust_id'] = [1, 2, 5]
customer_df['customer_since']  = pd.to_datetime(['2014-01-01', '2016-01-01', '2017-01-01'])

es = ft.EntitySet('Bookings')
es.entity_from_dataframe('bookings', bookings_df, 'booking_id', time_index='booking_date')
es.entity_from_dataframe('customers', customer_df, 'cust_id')

es.add_relationship(ft.Relationship(es['customers']['cust_id'], es['bookings']['cust_id']))

Мы настроили нашу bookings_df с одним событием в год в течение последних четырех лет.Кадр данных выглядит следующим образом:

    booking_id  cust_id  booking_date
0    1           1        2014-12-31
1    2           1        2015-12-31
2    3           2        2016-12-31
3    4           5        2017-12-31

Обратите внимание, что not устанавливает индекс времени для customers, что означает, что все данные клиентов всегда действительны для использования.Запуск DFS без аргумента training_window вернет

         YEAR(customer_since)   COUNT(bookings)
cust_id     
1         2014                   2.0
2         2016                   1.0
5         2017                   1.0

, а добавив, что training_window за два года (как в вашем примере), мы увидим результаты только с использованием двух из четырех предыдущих бронирований:

         YEAR(customer_since)   COUNT(bookings)
cust_id     
1         2014                   0.0
2         2016                   1.0
5         2017                   1.0
...