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