【发布时间】:2019-11-06 12:01:48
【问题描述】:
我试图弄清楚如何为 Featuretools 实现加权和求和原语。权重应取决于 time_since_last 之类的
cum_sum (amount) = sum_{i} exp(-a_{i} ) * amount_{i}
i 的滚动周期为 6 个月......
您可以在上面找到原始问题。经过一段时间的尝试和错误,我想出了这个代码来达到我的目的:
使用来自here的实体和关系的数据和初始设置
def weight_time_until(array, time):
diff = pd.DatetimeIndex(array) - time
s = np.floor(diff.days/365/0.5)
aWidth = 9
a = math.log(0.1) / ( -(aWidth -1) )
w = np.exp(-a*s)
return w
WeightTimeUntil = make_trans_primitive(function=weight_time_until,
input_types=[Datetime],
return_type=Numeric,
uses_calc_time=True,
description="Calc weight using time until the cutoff time",
name="weight_time_until")
features, feature_names = ft.dfs(entityset = es, target_entity = 'clients',
agg_primitives = ['sum'],
trans_primitives = [WeightTimeUntil, MultiplyNumeric])
当我执行上述操作时,我接近了我想要的功能,但最后我没有做对,我不明白。所以我得到了功能
SUM(loans.WEIGHT_TIME_UNTIL(loan_start))
但不是
SUM(loans.loan_amount * loan.WEIGHT_TIME_UNTIL(loan_start))
我在这里错过了什么???
我进一步尝试......
我的猜测是类型未匹配!但“类型”是相同的。无论如何,我尝试了以下方法:
1) es["loans"].convert_variable_type("loan_amount",ft.variable_types.Numeric) 2) 贷款["loan_amount_"] = 贷款["loan_amount"]*1.0
对于 (1) 以及 (2),我得到了更有希望的结果功能:
loan_amount_ * WEIGHT_TIME_UNTIL(loan_start)
还有
loan_amount * WEIGHT_TIME_UNTIL(loan_start)
但只有当我有目标价值 = 贷款而不是客户时,这实际上不是我的意图。
【问题讨论】:
-
嗨,你能把你的跟进作为一个新问题发布吗?另外,你能分享你获得的功能的完整输出吗?
-
ok max 我使用的数据你有吧?!
标签: featuretools