我正试图弄清楚如何为Featuretools实现加权和总和。权重应取决于time_since_last之类的
cum_sum(金额)= 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(贷款。WEIGHT_TIME_UNTIL(贷款开始))
但不是
总和(loans.loan_amount *贷款.WEIGHT_TIME_UNTIL(loan_start))
我在这里想念什么?
我进一步尝试了。...
我的猜测是一次类型失误比赛!但“类型”相同。无论如何,我尝试了以下方法:
1)es [“贷款”] .convert_variable_type(“贷款金额”,ft.variable_types.Numeric) 2)贷款[“ loan_amount_”] =贷款[“ loan_amount”] * 1.0
对于(1)以及(2),我都得到了更有前途的功能:
贷款金额* * WEIGHT_TIME_UNTIL(贷款开始)
还有
贷款金额* WEIGHT_TIME_UNTIL(贷款开始)
但仅当我的目标价值=贷款而不是客户时,这才不是我的意图。
答案 0 :(得分:2)
该原语当前不存在。但是,您可以创建自己的自定义原语来完成此计算。
以下是计算滚动总和的示例,可以使用适当的熊猫或python方法将其更新为加权总和
from featuretools.primitives import TransformPrimitive
from featuretools.variable_types import Numeric
class RollingSum(TransformPrimitive):
"""Calculates the rolling sum.
Description:
Given a list of values, return the rolling sum.
"""
name = "rolling_sum"
input_types = [Numeric]
return_type = Numeric
uses_full_entity = True
def __init__(self, window=1, min_periods=None):
self.window = window
self.min_periods = min_periods
def get_function(self):
def rolling_sum(values):
"""method is passed a pandas series"""
return values.rolling(window=self.window, min_periods=self.min_periods).sum()
return rolling_sum