通过Keras的大型(超过一百万个类)多分类器

时间:2019-07-14 22:28:06

标签: keras deep-learning keras-layer multiclass-classification

我有大约200万活跃客户的数据以及大约2-5年的客户交易数据。这些数据包括诸如客户购买了什么商品,从哪个商店购买商品,购买商品的日期,购买了多少,支付了多少等功能。

我需要预测未来2周内将有哪些客户购物。

现在我的数据是这样设置的

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万客户提供OHE吗?如果不是,我应该如何在Keras上进行设置,以便对所有200万客户的访问进行分类?

1 个答案:

答案 0 :(得分:1)

我认为您应该更好地理解您的问题-您的问题需要强大的领域知识才能对其进行建模,并且可以通过许多不同的方式对其进行建模,下面仅是一些示例:


回归问题:给定客户的购买记录,其中仅包含相对日期,例如

  • 根据您的数据构建一个序列,例如[date2-date1,date3-date2,date4-date3,...]。
  • [6、7、5、13 ...]表示客户可能每周或每两周购买一次商品
  • [24、30、33,...]表示客户可能每月购买商品。

如果以此方式组织问题,那么您所需要做的就是预测给定序列中的下一个数字。您可以通过

轻松获得此类数据
  1. 随机选择一个完整的序列,例如<script src="https://d3js.org/d3.v5.min.js"></script> <svg></svg>
  2. 随机选择一个位置进行预测,例如说[a, b, c, d, e, f, ..., z]
  3. 选择x(例如K)行进顺序K=6作为网络输入,选择[r, s, t, u, v, w]作为网络目标。

一旦训练好该模型,即可通过检查预测数字是否大于60来轻松解决最终任务。


分类问题:给定x个月的客户购买记录,请预测该客户在接下来的两个月中有多少次购买。

同样,您需要从原始数据创建培训数据,但是这次客户的目标是他在KK+1月份购买了多少商品,您可以组织自己的以您自己的方式输入K+2月记录的数据。

请注意,客户购买的商品数量是离散数量,但低于1M。实际上,就像在基于面部图像的年龄估计问题中一样,人们经常将目标量化为垃圾箱,例如0-8、9-16、17-24等。对于您的问题,您可以做同样的事情。当然,您也可以将此目标公式化为回归问题,以直接预测有多少项。


为什么您需要更好地了解自己的问题?

    如您所见,
  • 您可能会提出许多问题的表述,这些表述乍看起来似乎都很合理,或者很难说出哪个是最好的。

  • 值得注意的是问题设置与其隐含前提之间的依赖关系(除非仔细考虑问题,否则您可能不会注意到这些事情)。例如,用于预测下一次购买间隔的回归问题设置意味着客户购买的商品数量无关紧要。此主张在您的问题中可能是公平的,也可能是不公平的。

  • 如果您很清楚自己的问题,那么您可能会想出一个更简单但更有效的解决方案。

在像您这样的大多数问题中,您不必使用深度学习,或者至少不必首先使用。经典方法可能会更好。