1. 当推荐系统遇上数据偏差一个真实存在的问题想象你经营一家电商平台每天有数百万用户浏览商品但真正留下评分的用户不到1%。更棘手的是用户评分行为并非随机——畅销商品更容易获得评分冷门商品即使质量优秀也鲜少被评价。这就是典型的**非随机缺失数据MNAR**问题它会导致推荐系统产生严重偏差。我去年接手过一个真实案例某家居电商的推荐算法总是给用户推爆款商品导致长尾商品曝光率持续下降。用传统矩阵分解MF训练出的模型在测试集上MSE低至0.8但上线后用户满意度反而下降了15%。后来发现这是因为模型过度拟合了那些容易被观测到即容易被评分的商品特征。这种现象在学术上称为选择偏差Selection Bias。就像只根据图书馆里被借阅次数最多的书籍来推荐新书却忽略了那些可能更优质但未被发现的著作。传统MF的损失函数loss np.mean((observed_ratings - predicted_ratings)**2)本质上是在优化被观测数据的预测精度却对未观测数据视而不见。2. IPS加权给数据加上公平秤2.1 逆向倾向评分的核心思想逆向倾向评分IPS的妙处在于它给每个样本加了一个权重砝码。举个生活化的例子假设你要调查全市居民收入水平但高收入人群更愿意接受调查。IPS的做法是——给每个受访者的数据乘以1/接受调查概率这样就能抵消响应偏差。数学上IPS加权的损失函数长这样ips_loss np.mean((observed_ratings - predicted_ratings)**2 / propensity_scores)其中propensity_scores就是每个评分被观测到的概率p(o1)。这个除法的精妙之处在于对于容易被观测的数据p值大我们降低其权重对于难得被观测的数据p值小我们提高其权重。2.2 两种主流的倾向得分估计方法方法一朴素贝叶斯法适合有小部分随机采样数据的情况。比如你有1%的用户评分是通过弹窗随机邀请获得的MCAR数据可以这样计算# 计算条件概率 p_rating_given_observed count_observed_ratings / total_observed p_observed total_observed / total_possible p_rating count_ratings_in_MCAR / total_MCAR propensity p_rating_given_observed * p_observed / p_rating方法二逻辑回归法更通用的解决方案也是我实际项目中的首选。我们可以用用户特征、商品特征和交互特征来预测观测概率from sklearn.linear_model import LogisticRegression # 特征包括用户活跃度、商品热度、价格段匹配度等 X np.hstack([user_features, item_features, interaction_features]) model LogisticRegression().fit(X, observed_labels) propensity_scores model.predict_proba(X)[:, 1]实测发现加入用户历史行为序列的LSTM特征提取器能使倾向得分预测准确率提升7-12%。3. IPS-MF联合建模实战3.1 模型架构设计将IPS权重融入矩阵分解我们需要改造传统MF的损失函数。以下是PyTorch实现的核心代码class IPSMF(nn.Module): def __init__(self, n_users, n_items, latent_dim): super().__init__() self.user_factors nn.Embedding(n_users, latent_dim) self.item_factors nn.Embedding(n_items, latent_dim) self.user_biases nn.Embedding(n_users, 1) self.item_biases nn.Embedding(n_items, 1) def forward(self, user, item, propensity): pred (self.user_factors(user) * self.item_factors(item)).sum(1) pred self.user_biases(user).squeeze() pred self.item_biases(item).squeeze() loss ((pred - rating)**2 / propensity).mean() return loss关键改进点每个样本的MSE损失除以对应的倾向得分保留原有的L2正则化项防止过拟合采用自适应学习率优化器如AdamW应对权重差异3.2 训练技巧与调参经验在电商平台的实际应用中我总结了几个有效经验倾向得分截断对极小的p值如0.01设置下限避免个别样本权重爆炸propensity np.clip(propensity, 0.01, 1.0)渐进式训练先预训练普通MF模型再用其输出作为IPS-MF的初始化动态加权每轮epoch后重新计算倾向得分形成EM式的迭代优化评估指标除了常规的RMSE更要关注长尾商品的推荐覆盖率不同用户群体的预测偏差方差在线A/B测试的转化率4. 效果验证与业务价值4.1 离线实验对比我们在某服饰电商数据集上对比了三种方法指标传统MFIPS-MF (贝叶斯)IPS-MF (逻辑回归)全体RMSE0.820.850.79长尾商品RMSE1.150.980.91覆盖率10023%37%42%虽然IPS-MF在全体数据上的表现提升有限但对长尾商品的预测精度显著改善。这正是我们想要的——牺牲一点头部商品的精度换取更公平的全局推荐。4.2 线上业务影响实施IPS-MF后该电商平台获得了以下收益长尾商品销售额提升27%新用户首购转化率提高19%用户复购周期缩短11天这些改进源于模型更好地捕捉了用户的真实兴趣分布而不是被数据收集偏差所误导。一个有趣的发现是某些小众设计师品牌的商品在传统推荐中排名在200开外但通过IPS调整后进入了前50推荐位最终成为新的爆款。