Featuretools の加重総和プリミティブを実装する方法を理解しようとしています。重み付けは、次のように time_since_last に依存するものとします
cum_sum (金額) = sum_{i} exp( -a_{i} ) * amount_{i}
i
ローリング 6 か月の期間はどこにありますか....
上に元の質問があります。しばらく試行錯誤した後、私は自分の目的のためにこのコードを思いつきました:
ここからエンティティとリレーションのデータと初期設定を使用する
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 * Loans.WEIGHT_TIME_UNTIL(loan_start))
私はここで何を見逃したのですか?
さらに試してみました....
私の推しはタイプミスマッチでした!しかし、「タイプ」は同じです。とにかく私は次のことを試しました:
1) es["ローン"].convert_variable_type("loan_amount",ft.variable_types.Numeric) 2) ローン["loan_amount_"] = ローン["loan_amount"]*1.0
(1) についても (2) についても、より有望な結果の機能が得られます。
ローン金額_ * WEIGHT_TIME_UNTIL(ローン開始)
そしてまた
ローン金額 * WEIGHT_TIME_UNTIL(ローン開始)
しかし、実際には私の意図ではなかったクライアントの代わりに、目標値=ローンがある場合に限ります。