我嘗試在 featuretool 的 dfs 函數中添加一個 cutoff_time 數據幀,以便我的數據幀中的每一行都有一個特定的截止時間。但我無法使 cutoff_time 數據幀按預期工作文檔說cutoff_time的第一列應該是'instance_id'。我不確定這意味著什么..我嘗試了目標實體(交易)的索引和目標實體(交易)的customer_id(id) . 他們倆都會弄亂feature_matrixmerkle_fake = pd.DataFrame()transaction_fake['order_date'] = ['2019-01-01','2018-01-01','2017-01-01','2018-05-23','2019-02-02','2018-12-21']transaction_fake['product_category'] = ['cat2','cat3','cat2','cat1','cat2','cat2']transaction_fake['id'] = ['1','2','1','3','1','2']transaction_fake['order_date'] = pd.to_datetime(transaction_fake['order_date'])transaction_fake['index'] = transaction_fake.index.tolist()merkle_fake['cust_id'] = ['1','2','3']es_demo = ft.EntitySet(id = 'demo')es_demo.entity_from_dataframe(entity_id='transaction', dataframe= transaction_fake,time_index = 'order_date',index = 'index')es_demo.entity_from_dataframe(entity_id='merkle', dataframe= merkle_fake,index = 'cust_id')relationship_fake = ft.Relationship(es_demo["merkle"]["cust_id"],es_demo["transaction"]["id"])es_demo = es_demo.add_relationship(relationship_fake)cutoff_times_demo = pd.DataFrame()cutoff_times_demo['instance_id'] = es_demo['transaction'].df['id']cutoff_times_demo['time'] = es_demo['transaction'].df['order_date']feature_matrix_demo, feature_defs_demo = ft.dfs(entityset=es_demo, agg_primitives=['count'], trans_primitives=[], target_entity='transaction', cutoff_time= cutoff_times_demo, features_only = False)feature_matrix_demo 我希望輸出會是這樣的: product_category id merkle.COUNT(transaction)2 cat2 1 11 cat3 2 13 cat1 3 15 cat2 2 20 cat2 1 24 cat2 1 3
1 回答

Qyouu
TA貢獻1786條經驗 獲得超11個贊
當您為 cutoff_time 傳入具有“instance_id”和“時間”列的 DataFrame 時,dfs 將計算由其“instance_id”標識的每個實例,直至并包括相應的“時間”?!癷nstance_id”標識目標實體中的行。
因此,當您傳入es_demo['transaction'].df['id']
for時cutoff_times_demo['instance_id']
,您會告訴dfs()
在 '2017-01-01' 處計算第 1 行,在 '2018-01-01' 處計算第 2 行,在 '2018-05-23' 處計算第 3 行,在 '2018-05-23' 處計算第 2 行2018-12-21' 等。這會為返回的 feature_matrix 中的第一行生成 NaN 值,因為在 2017-01-01 之前和之前的第 1 行沒有數據。
要獲得您期望的輸出,請將您設置的 instance_id 列更改為:
cutoff_times_demo['instance_id'] = es_demo['transaction'].df['index']
添加回答
舉報
0/150
提交
取消