【问题标题】:How to use interesting values with training window in feature tools?如何在特征工具中使用带有训练窗口的有趣值?
【发布时间】:2020-03-30 13:50:53
【问题描述】:

代码:

import pandas as pd
import featuretools as ft
import featuretools.variable_types as vtypes
#Create item details table
l = [[1, '1', '2018-05-02', 'A', 2.0, 10], 
[1, '1', '2018-05-02', 'A', 1.0, 10], 
[2, '1', '2018-05-28', 'B', 1.0, 40], 
[3, '1', '2018-06-13', 'A', 2.0, 30], 
[4, '1', '2019-08-20', 'C', 3.0, 60]]
item_detail = pd.DataFrame(l)
item_detail.columns = ['Ticket_id','Customer_id','trans_date','SKU','Qty','Amount']
item_detail["trans_date"] = pd.to_datetime(item_detail["trans_date"])
item_detail["index"] = item_detail.index
display(item_detail)
#Create ticket details table
b = [['1', '2018-05-02', 1], 
['1', '2018-05-28', 2], 
['1', '2018-06-13', 3], 
['1', '2019-08-20', 4]]
ticket_detail = pd.DataFrame(b)
ticket_detail.columns = ['Customer_id','trans_date','Ticket_id']
ticket_detail["trans_date"] = pd.to_datetime(ticket_detail["trans_date"])
display(ticket_detail)
#Create feature tools relationships & entities
es = ft.EntitySet(id = 'customer_features')
es = es.entity_from_dataframe(entity_id="basket",dataframe=ticket_detail,index="Ticket_id",time_index="trans_date")
es.entity_from_dataframe(entity_id='transactions', dataframe= item_detail,index = 'index')
tr_relationship = ft.Relationship(es["basket"]["Ticket_id"],es["transactions"]["Ticket_id"])
es = es.add_relationships([tr_relationship])
print(es)
es["transactions"]["SKU"].interesting_values = ["A"]
#Create cutoff times table necessary for training window
cutoff_times = pd.DataFrame()
cutoff_times['instance_id'] = es['basket'].df['Ticket_id']
cutoff_times['time'] = es['basket'].df['trans_date']
feature_matrix, feature_defs = ft.dfs(entityset=es,
                                      target_entity="basket",
                                      agg_primitives=["count", "sum"],
                                      where_primitives=["count", "sum"],
                                      cutoff_time=cutoff_times,
                                      cutoff_time_in_index=True,
                                      training_window= '365 days')
display(feature_matrix)

输入数据: Item_detail-

Ticket_id   Customer_id trans_date  SKU Qty Amount  index

1   1   2018-05-02  A   2.0 10  0

1   1   2018-05-02  A   1.0 10  1

2   1   2018-05-28  B   1.0 40  2

3   1   2018-06-13  A   2.0 30  3

4   1   2019-08-20  C   3.0 60  4

Ticket_detail-

Customer_id trans_date  Ticket_id

1   2018-05-02  1

1   2018-05-28  2

1   2018-06-13  3

1   2019-08-20  4

代码输出:

Ticket_id   time    Customer_id COUNT(transactions) SUM(transactions.Qty)   SUM(transactions.Amount)    DAY(trans_date) YEAR(trans_date)    MONTH(trans_date)   WEEKDAY(trans_date) COUNT(transactions WHERE SKU = A)   SUM(transactions.Qty WHERE SKU = A) SUM(transactions.Amount WHERE SKU = A)

1 2018-05-02 1 2 3.0 20 2 2018 5 2 2.0 3.0 20.0

2 2018-05-28 1 1 1.0 40 28 2018 5 0 0.0 0.0 0.0

3 2018-06-13 1 1 2.0 30 13 2018 6 2 1.0 2.0 30.0

4 2019-08-20 1 1 3.0 60 20 2019 8 1 0.0 0.0 0.0

预期输出 (对于列 COUNT(transactions WHERE SKU = A) SUM(transactions.Qty WHERE SKU = A) SUM(transactions.Amount WHERE SKU = A)):

Ticket_id   time    Customer_id COUNT(transactions) SUM(transactions.Qty)   SUM(transactions.Amount)    DAY(trans_date) YEAR(trans_date)    MONTH(trans_date)   WEEKDAY(trans_date) COUNT(transactions WHERE SKU = A)   SUM(transactions.Qty WHERE SKU = A) SUM(transactions.Amount WHERE SKU = A)

1 2018-05-02 1 2 3.0 20 2 2018 5 2 2.0 3.0 20.0

2 2018-05-28 1 1 1.0 40 28 2018 5 0 0.0 0.0 0.0

3 2018-06-13 1 1 2.0 30 13 2018 6 2 3.0 5.0 50.0

4 2019-08-20 1 1 3.0 60 20 2019 8 1 0.0 0.0 0.0

【问题讨论】:

    标签: pandas featuretools


    【解决方案1】:

    在上面的示例中,您在训练窗口中正确使用了有趣的值。在 DFS 调用中,聚合特征是按篮子计算的。因此,工单 ID 3 的输出特征 COUNT(transactions WHERE SKU = A) 为 1,因为工单 ID 3 只有一笔交易,其中 SKU 为项目详细信息中的 A。同样的原因也适用于其他预期的输出特征。让我知道这是否有帮助。

    【讨论】:

    • 嘿,谢谢杰夫。我正在尝试使用功能工具(df.groupby(['Customer_id','SKU']).agg() 的替代方法)在 Customer-SKU 级别获取摘要(Sum,count)。我可以使用任何功能工具功能来获得它吗?
    • 是的,如果customers 是一个实体并用作目标实体,那么SUM(transactions.Amount where SKU = A) 将在客户-SKU 级别聚合。
    猜你喜欢
    • 2018-11-17
    • 2019-01-22
    • 2014-03-26
    • 2021-08-17
    • 2019-02-27
    • 2018-01-02
    • 2019-05-16
    • 2016-11-16
    • 2019-10-21
    相关资源
    最近更新 更多