487. H&M Personalized Fashion Recommendations | h-and-m-personalized-fashion-recommendations
首先,感谢竞赛主办方举办了如此有趣的比赛,也感谢我伟大的队友 @rendongltt(他是网购狂,给了我们很大帮助😂)和 @jiaqizhang35(他是我的朋友,没有他我甚至不会参加这次比赛)。我还要感谢 @paweljankiewicz,没有他精彩的帖子,我们走不了这么远。同时也感谢你(以及许多其他乐于分享的好人),是你们激励我更多地与社区分享。
总的来说,我们非常喜欢这次比赛,因为它提供了无限种解决问题的方法,特别是可能的召回方法。说到特征工程,虽然我们对自己的技能很有信心,但与其他宗师相比,我们可能没有机会获得金牌。所以我们从一开始就专注于召回方法。我们的召回方法深度依赖于商品嵌入(图像、文本、word2vec、tfidf)和神奇的 Python 包 faiss 来寻找相似的商品和客户。至于特征工程,我们没有花太多时间,只是使用不同的时间窗口分别创建商品和客户的聚合统计特征,以及客户-商品交叉聚合统计特征和使用上述嵌入的不同余弦相似度特征。
召回方法由以下几部分组成:
总的来说,我们使用了 21 种召回方法来创建商品候选集。
我们使用不同的数据和方法创建了商品嵌入:
因为不同的召回方法有不同的正样本比例,所以最好使用某种方法来校准所有的召回方法。我使用了我在这里分享的方法来进行预处理。
这部分没什么特别的,但我发现了一些可以大大加快特征计算时间的方法。基本上我们将特征分为三部分:
对于第 1 和第 2 部分,你可以计算一次并保存,稍后与第 3 部分的特征合并。这种方法真的为我节省了很多时间,特别是在推理期间。
因为我们花了大部分时间开发召回策略,我们只使用了 LightGBM Ranker 模型进行训练,甚至没有时间尝试其他方法如 CatBoost 和 XGBoost。所以基本上我们的分数是单模型的分数。
我们有一个至今仍无法解决的问题,那就是关于 word2vec 模型的。我们使用所有交易数据来训练 word2vec 模型,这实际上稍微泄露了一点未来信息。
想象一下,对于观测日期 20200915,你使用由所有交易数据训练的 word2vec 模型计算客户-商品余弦相似度。两个商品 ID aid_1、aid_2 的 word2vec �