我正在构建一个模型,用于根据用户的阅读历史等活动来预测用户是否会购买订阅。我使用featuretools
(https://www.featuretools.com/)来自动进行特征工程,这里变得有点棘手:
考虑到以下情况,我应该如何决定训练数据的截止时间/窗口:
- 训练窗口应该持续多久,一个月,六个月等?
- 鉴于用户在订阅前后的活动可能不同,我应该根据用户订阅的时间来截取当前订阅者的数据(防止数据泄露)。但对于非订阅者,我应该在什么时候截取数据呢?
feature_matrix, feature_defs = ft.dfs(entityset=es, target_entity="users", max_depth=2, agg_primitives=["sum", "std", "max", "min", "mean", "median", "count", "percent_true", "num_unique", "mode", "avg_time_between"], trans_primitives=["day", "year", "month", "weekday", "time_since_previous", "time_since", "is_weekend"], cutoff_time=cutoff_times, cutoff_time_in_index=True, training_window=ft.Timedelta(180,"d"), n_jobs=8, verbose=True)
回答:
你如何决定训练数据的截止时间将取决于以下因素:
训练窗口应该持续多久,一个月,六个月等?
我认为你可以尝试不同的训练窗口大小,看看哪个对模型的效果更好。
鉴于用户在订阅前后的活动可能不同,我应该根据用户订阅的时间来截取当前订阅者的数据(防止数据泄露)。但对于非订阅者,我应该在什么时候截取数据呢?
我认为你可以随机选择这些时间,或者选择那些代表未来你将在这些订阅者上使用模型的时间点。
我们的开源库Compose非常适合构建这个标签过程。如果你在Compose中定义你的预测问题,它会根据你如何定义预测问题来自动选择负面示例。它还具有参数化的预测窗口,让你可以在特定时间生成标签。请告诉我这是否有帮助。