532. OTTO – Multi-Objective Recommender System | otto-recommender-system
首先,我要感谢组织者和那些分享知识的人。特别感谢 @cdeotte 和 @radek1 发布了如此多的代码和讨论。我从你们那里学到了很多。
考虑到关于可能存在的作弊者的争议,我将在一切尘埃落定后发布完整代码,目前只分享这个方案中的思路。(尽管 Will 说分享代码不应该被保留)

我的代码在这里:https://github.com/kiccho1101/kaggle-otto2
| 步骤 | CV | LB |
|---|---|---|
| 候选生成 | TrainData + ValidDataA | TrainData + ValidDataA + ValidDataB + TestDataA |
| 用户特征创建 | ValidDataA | TestDataA |
| 物品特征创建 | TrainData + ValidDataA | TrainData + ValidDataA + ValidDataB + TestDataA |
| 用户-物品特征创建 | ValidDataA | TestDataA |
| 重排序 | ValidDataA | TestDataA |
class ItemMFModel(nn.Module):
def __init__(self, n_aid: int, n_factors: int):
super().__init__()
self.criterion = BPRLoss()
self.n_factors = n_factors
self.n_aid = n_aid
self.aid_embeddings = nn.Embedding(self.n_aid, self.n_factors)
initrange = 1.0 / self.n_factors
nn.init.uniform_(self.aid_embeddings.weight.data, -initrange, initrange)
def forward(self, aid_x, aid_y):
aid_x = self.aid_embeddings(aid_x)
aid_y = self.aid_embeddings(aid_y)
return (aid_x * aid_y).sum(dim=1)
def calc_loss(self