我试图弄清楚如何为Featuretools 实现加权总和原语。权重应取决于 time_since_last 就像
cum_sum (金额) = sum_{i} exp( -a_{i} ) * amount_{i}
where i
正在滚动 6 个月期......
在上面你可以找到原来的问题。经过一段时间的尝试和错误后,我出于我的目的想出了这段代码:
使用实体和关系的数据和初始设置here https://github.com/WillKoehrsen/automated-feature-engineering/blob/master/walk_through/Automated_Feature_Engineering.ipynb
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(贷款.WEIGHT_TIME_UNTIL(贷款开始))
but not
SUM(贷款.贷款金额 * 贷款.WEIGHT_TIME_UNTIL(贷款开始))
我在这里错过了什么???
我进一步尝试了......
我的猜测是类型不匹配!但“类型”是相同的。无论如何,我尝试了以下方法:
1) es["贷款"].convert_variable_type("贷款金额",ft.variable_types.Numeric)
2) 贷款["贷款金额_"] = 贷款["贷款金额"]*1.0
对于(1)以及(2),我得到了更有希望的结果特征:
贷款金额_ * WEIGHT_TIME_UNTIL(贷款开始)
and also
贷款金额 * WEIGHT_TIME_UNTIL(贷款开始)
但只有当我的目标价值=贷款而不是客户时,这实际上不是我的意图。