- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于 CRM 项目,我有一些机会快照。我已经能够使用 featuretools
构建许多功能,但我真正想要的是历史获胜次数和胜率。换句话说,我想知道:
For a given opportunity, how many deals have been won up until the opportunity was last modified?
import pandas as pd
import featuretools as ft
df = pd.DataFrame(
{'OpportunityId': [111, 111, 222, 222, 222, 333, 333, 333],
'UpdateId': [1,3,2,5,7,4,6,8],
'Label': ['Open', 'Win', 'Open', 'Open', 'Win', 'Open', 'Open', 'Open'],
'CreatedOn': pd.to_datetime(['9/27/18','9/27/18','9/28/18','9/28/18','9/28/18','10/2/18','10/2/18','10/2/18']),
'ModifiedOn': pd.to_datetime(['9/27/18','10/1/18','9/28/18','10/3/18','10/7/18','10/2/18','10/6/18','10/10/18']),
'EstRevenue': [2000, 2000, 80000, 84000, 78000, 100000, 95000, 110000]})
df
| OpportunityId | UpdateId | Label | CreatedOn | ModifiedOn | EstRevenue |
|---------------|----------|-------|------------|------------|------------|
| 111 | 1 | Open | 2018-09-27 | 2018-09-27 | 2000 |
| 111 | 3 | Win | 2018-09-27 | 2018-10-01 | 2000 |
| 222 | 2 | Open | 2018-09-28 | 2018-09-28 | 80000 |
| 222 | 5 | Open | 2018-09-28 | 2018-10-03 | 84000 |
| 222 | 7 | Win | 2018-09-28 | 2018-10-07 | 78000 |
| 333 | 4 | Open | 2018-10-02 | 2018-10-02 | 100000 |
| 333 | 6 | Open | 2018-10-02 | 2018-10-06 | 95000 |
| 333 | 8 | Open | 2018-10-02 | 2018-10-10 | 110000 |
| OPPORTUNITIES | Label | CreatedOn | Max( ModifiedOn ) | AVG( EstRevenue ) | Wins |
|---------------|-------|-----------|-------------------|------------------:|------|
| 111 | Win | 9/27/18 | 10/1/18 | 2000 | 0 |
| 222 | Win | 9/28/18 | 10/7/18 | 80667 | 1 |
| 333 | Open | 10/2/18 | 10/10/18 | 101667 | 2 |
让我难以思考的是......
Label
:
标签
的当前值,以及Label
列为0时的计数我面临的挑战是 Label
列...虽然通常我会创建一个 CurrentLabel
列,但我很确定ft
可以处理这个...
es = (ft.EntitySet(id='CRM')
.entity_from_dataframe(
entity_id='updates',
dataframe=df,
index='UpdateId',
time_index='ModifiedOn')
.normalize_entity(
base_entity_id='updates',
new_entity_id='opportunities',
index='OpportunityId',
make_time_index='CreatedOn',
copy_variables=['Label'],
additional_variables=['CreatedOn']
)
)
es['updates']['Label'].interesting_values = ['Win']
Entityset: CRM
Entities:
updates [Rows: 8, Columns: 5]
opportunities [Rows: 3, Columns: 3]
Relationships:
updates.OpportunityId -> opportunities.OpportunityId
feature_matrix, feature_defs = ft.dfs(
entityset=es,
target_entity="opportunities",
agg_primitives=[
"mean","count","num_unique","time_since_first"],
trans_primitives=[
'time_since_previous'],
where_primitives=[
"sum","count"],
max_depth=2,
verbose=1
)
最佳答案
有几种不同的方法可以解决这个问题:
last
聚合基元对于这种方法,在创建实体集之前,首先在数据框中创建一个新的 Wins
列,用于跟踪一段时间内的累积获胜总数。您可能需要按 ModifiedOn
列对数据帧进行排序,以确保累积总和值正确。另外,我在这里使用 .shift()
将列值移动一个位置,以仅计算更新之前发生的胜利:
df = df.sort_values('ModifiedOn')
df['Wins'] = df['Label'].shift().eq('Win').cumsum()
当您运行深度特征综合时,将last
基元添加到agg_primitives
列表中:
feature_matrix, feature_defs = ft.dfs(
entityset=es,
target_entity="opportunities",
agg_primitives=["mean", "count", "num_unique", "time_since_first", "last"],
trans_primitives=["time_since_previous"],
where_primitives=["sum", "count"],
max_depth=2,
verbose=1
)
现在,当您检查特征矩阵时,您将看到一个标记为 LAST(updates.Label)
的列,其中显示上次机会时 Label
的值更新。您还将有一个标记为LAST(updates.Wins)
的列,其中显示机会上次更新时的总获胜数。
在运行深度功能综合之前,创建一个新的 bool 种子功能,用于定义 Label
是否等于 Win
:
label_is_win = ft.Feature(es["updates"]["Label"]) == "Win"
接下来,定义一个自定义转换基元,它将使用此种子功能返回胜利的累积总和:
class ShiftedCumSumBoolean(ft.primitives.TransformPrimitive):
name = "shifted_cum_sum_boolean"
input_types = [ft.variable_types.Boolean]
return_type = ft.variable_types.Numeric
uses_full_entity = True
def get_function(self):
def shifted_cum_sum(values):
return values.shift(fill_value=(False)).cumsum()
return shifted_cum_sum
当您运行深度特征综合时,将新的 ShiftedCumSumBoolean
原语添加到 trans_primitives
列表中。此外,将 last
原语添加到 agg_primitives
列表中,以在机会更新时提供最后一个标签值。最后,将 label_is_win
种子特征添加到 ft.dfs
调用中的种子特征列表中:
feature_matrix, feature_defs = ft.dfs(
entityset=es,
target_entity="opportunities",
agg_primitives=["mean","count","num_unique","time_since_first", "last"],
trans_primitives=["time_since_previous", ShiftedCumSumBoolean],
where_primitives=["sum", "count"],
seed_features=[label_is_win],
max_depth=2,
verbose=1,
)
使用此解决方案,您的特征矩阵将有一个标记为 LAST(updates.Label)
的列,该列显示机会上次更新时 Label
的值。您还将有一个标记为 LAST(updates.SHIFTED_CUM_SUM_BOOLEAN(Label = Win))
的列,其中显示机会上次更新时的总获胜数。
关于python - featuretools历史标签计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043685/
我目前正在使用我自己的数据完成功能工具演示 ( https://github.com/Featuretools/predict_next_purchase/blob/master/Tutorial.i
在将数据帧作为实体集中的实体传递并在其上使用 DFS 时,我们是否应该从 DFS 中排除目标变量?在手动尝试传统特征选择方法并使用特征工具查看它是否提高了分数后,我有一个模型的 roc_auc 分数为
我想尝试 featuretools,但我需要提示,如何将其用于我的数据集。我在 pandas 数据框中有数据,这是一个回归问题。 这是我的数据集的示例: 我尝试了什么: import featuret
我想尝试 featuretools,但我需要提示,如何将其用于我的数据集。我在 pandas 数据框中有数据,这是一个回归问题。 这是我的数据集的示例: 我尝试了什么: import featuret
我正在尝试使用 featuretools 来计算时间序列函数。具体来说,我想通过组键(user_id)从前一个(x)中减去当前(x),但是我在实体集中添加这种关系时遇到了麻烦。 df = pd.Dat
我在数据帧中有两个时间参数,即 start_date 和 end_date,当从数据帧创建实体集时,这两个参数都是时间参数。 在指定 time_index 时,我们可以指定 2 个不同的列吗? 我不想
我正在尝试向实体添加新变量。 我正在尝试添加如下变量: es['Product'].add_variable("inventory", data=inventory_series) 但是我收到了这个错
Featuretools 提供了处理分类变量的集成功能 variable_types={"product_id": ft.variable_types.Categorical} https://doc
我正在尝试使用特征工具生成特征来帮助我预测下个月的博物馆参观次数。 featuretools 可以生成时间序列的特征吗?我应该更改数据以便 id 是月份还是 featuretools 可以自动执行?
我有一个包含多个列的购买数据框,包括以下三个: PURCHASE_ID (index of purchase) WORKER_ID (index of worker) ACCOUNT_ID (i
我的数据看起来像:People <-- Events <--Activities。父对象是 People,其中唯一的变量是 person_id。 Events 和 Activity 都有一个时间索引,
我正在使用 featuretools dfs 函数使用与时间相关的聚合原语(例如 TimeSince ( https://docs.featuretools.com/api_reference.htm
当我尝试在实体集之间创建关系(使用我自己的数据)时遇到问题。没有错误,但它只是没有为我的实体之一(“prods”实体)创建功能,尽管一切都应该连接得很好。 我无法共享我的数据,但我使用一些模拟数据创建
我正在尝试根据之前的结果预测足球比赛的结果。我在 Windows 上运行 Python 3.6 并使用 Featuretools 0.4.1。 假设我有以下表示结果历史记录的数据框。 Original
Featuretools 已经支持处理多个截止时间 https://docs.featuretools.com/automated_feature_engineering/handling_time.
我使用了@willk 的答案,但它弹出了一个错误。在这里查看威尔克的回答。 willk's anser我无法在他的回答中发表评论,因为我没有足够的声誉(超过 50)。 所以我的问题是如何使下面的代码工
featuretools文档在其第一句话中指出: “Featuretools 是一个执行自动化特征工程的框架。它擅长将时间和关系数据集转换为机器学习的特征矩阵。” 这似乎暗示数据集必须有一个日期时间列
我尝试按照 featuretools.com 的文档学习功能工具。 出现错误:AttributeError: 'EntitySet' 对象没有属性 'entity_from_dataframe' 你能
使用 featuretools 时有没有办法在运行时显示进度条 dfs ? 最佳答案 在 dfs 中设置参数 verbose=True函数调用应该给你一个进度条。 关于运行 dfs 时的 featur
我正在使用 featuretools 为当前行生成历史特征。例如, session 期间最后一小时的交易数量。 包 featuretools 包含参数 cutoff_time 以及时排除 cutoff
我是一名优秀的程序员,十分优秀!