我有大约200万活跃客户的数据和大约2-5年的客户交易数据。这些数据包括客户购买的商品、他们从哪家商店购买的商品、购买该商品的日期、购买的金额、支付的金额等功能。
我需要预测哪些客户将在未来两周内购物。
现在我的数据是这样设置的
item_a item_b item_c item_d customer_id visit
dates
6/01 1 0 0 0 cust_123 1
6/02 0 0 0 0 cust_123 0
6/03 0 1 0 0 cust_123 1
6/04 0 0 0 0 cust_123 0
6/05 1 0 0 0 cust_123 1
6/06 0 0 0 0 cust_123 0
6/07 0 0 0 0 cust_123 0
6/08 1 0 0 0 cust_123 1
6/01 0 0 0 0 cust_456 0
6/02 0 0 0 0 cust_456 0
6/03 0 0 0 0 cust_456 0
6/04 0 0 0 0 cust_456 0
6/05 1 0 0 0 cust_456 1
6/06 0 0 0 0 cust_456 0
6/07 0 0 0 0 cust_456 0
6/08 0 0 0 0 cust_456 0
6/01 0 0 0 0 cust_789 0
6/02 0 0 0 0 cust_789 0
6/03 0 0 0 0 cust_789 0
6/04 0 0 0 0 cust_789 0
6/05 0 0 0 0 cust_789 0
6/06 0 0 0 0 cust_789 0
6/07 0 0 0 0 cust_789 0
6/08 0 1 1 0 cust_789 1
我应该使目标变量成为类似的东西吗
df['target_variable']='no_purchase'
for cust in list(set(df['customer'])):
df['target_variable']=np.where(df['visit']>0,cust,df['target_variable'])
或者我的访问功能是我的目标变量?如果是后者,我应该把200万客户全部搞定吗?如果没有,我应该如何在 Keras 上进行设置,以便对所有 200 万客户的访问进行分类?
我认为你应该更好地理解你的问题——你的问题需要强大的领域知识来纠正它,并且可以用许多不同的方式建模,下面只是一些例子:
回归问题:给定客户的购买记录仅包含相对日期,例如
- 从您的数据中构造一个序列,例如 [date2-date1, date3-date2, date4-date3, ...]。
- [6, 7, 5, 13, ...] 表示客户可能每周或每两周购买一次商品
- [24, 30, 33, ...] 表示客户可能按月购买商品。
如果你以这种方式组织问题,你所需要的只是预测给定序列中的下一个数字是什么。您可以通过以下方式轻松获取此类数据
- 随机选择一个完整的序列,比如
[a, b, c, d, e, f, ..., z]
- 随机选择一个要预测的位置,比如
x
- 选择
K
(例如K=6
)继续序列[r, s, t, u, v, w]
作为网络输入,x
作为网络目标。
训练此模型后,可以通过检查预测数字是否大于 60 轻松解决最终任务。
分类问题:给定客户K
个月的购买记录,预测客户在未来两个月内将有多少购买。
同样,您需要从原始数据创建训练数据,但这次客户的目标是他在第K+1
个月和K+2
月购买了多少商品,您可以以自己的方式组织K
月记录的输入数据。
请注意,客户购买的商品数量是一个离散的数字,但远低于1M。事实上,就像在基于人脸图像的年龄估计问题中一样,人们经常将目标量化为箱,例如0-8,9-16,17-24等。你可以对你的问题做同样的事情。当然,您也可以将此目标表述为回归问题,以直接预测有多少项。
为什么您需要更好地了解您的问题?
-
如您所见,您可能会提出一些问题公式,乍一看可能都很合理,或者您很难说哪一个是最好的。
-
值得注意的是问题设置与其隐藏前提之间的依赖关系(在仔细思考问题之前,您可能不会注意到这些事情)。例如,为预测下一次购买的差距而设置的回归问题意味着客户购买的商品数量无关紧要。这种说法在您的问题中可能是公平的,也可能是不公平的。
-
如果您非常了解自己的问题,您可能会想出一个更简单但更有效的解决方案。
在大多数像你这样的问题中,你不必使用深度学习,或者至少一开始就不需要。经典方法可能效果更好。