繁体   English   中英

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

[英]large(over 1 million classes) multi-class classifier via Keras

我有大约 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'])

或者让我的访问特征成为我的目标变量? 如果是后者,我应该 OHE 所有 200 万客户吗? 如果没有,我应该如何在 Keras 上进行设置,以便对所有 200 万客户的访问进行分类?

我认为你应该更好地理解你的问题——你的问题需要强大的领域知识来纠正它的建模,它可以用许多不同的方式建模,下面只是一些例子:


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

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

如果您以这种方式组织问题,您只需要预测给定序列中的下一个数字是什么。 您可以通过以下方式轻松获取此类数据

  1. 随机选择一个完整的序列,比如[a, b, c, d, e, f, ..., z]
  2. 随机选择一个位置进行预测,比如x
  3. 选择K (比如K=6 )处理序列[r, s, t, u, v, w]作为您的网络输入,并选择x作为您的网络目标。

一旦你训练了这个模型,你的最终任务可以通过检查预测数字是否大于 60 来轻松解决。


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

同样,您需要根据您的原始数据创建训练数据,但这次客户的目标是他在第K+1K+2月购买了多少件商品,您可以整理您的K月记录的输入数据以你自己的方式。

请注意,客户购买的商品数量是一个离散数字,但远低于 1M。 事实上,就像在基于人脸图像的年龄估计问题中一样,人们经常将目标量化为 bin,例如 0-8、9-16、17-24 等。您可以为您的问题做同样的事情。 当然,你也可以把这个目标表述成一个回归问题,直接预测有多少个item。


为什么你需要更好地了解你的问题?

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

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

  • 如果你很了解你的问题,你可能会想出一个更简单但更有效的解决方案。

在像您这样的大多数问题中,您不必使用深度学习,至少一开始就不必。 经典方法可能效果更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM