为了账号安全,请及时绑定邮箱和手机立即绑定

功能工具 cutoff_time 无法正常工作

功能工具 cutoff_time 无法正常工作

慕哥9229398 2022-05-24 16:40:39
我尝试在 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”标识的每个实例,直至并包括相应的“时间”。“instance_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']


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号