一、评价函数概述:到底什么是评价函数?

说实话,我刚开始接触推荐系统时,对「评价函数」这个词挺懵的。总觉得它是个高大上的数学概念,离实际工程很远。后来踩了不少坑才明白——评价函数就是一把尺子,用来量你的模型到底好不好。

你想想看,我们做推荐、做搜索,最终目的是什么?是把最合适的内容推给用户。但「合适」这个词太模糊了。评价函数就是把这个模糊概念,变成一个个可计算的数字。

核心定义:评价函数(Evaluation Function / Scoring Function)是一个从输入特征空间到实数空间的映射。它给每个候选物品打一个分,分数越高,代表越应该被推荐或排在前面。

1.1 评价函数在推荐系统中的作用

我在做电商推荐项目时,遇到过这样一个场景:用户搜索「运动鞋」,后台有 10 万双鞋。怎么决定先展示哪双?

评价函数就是干这个的。它把每双鞋的特征(价格、销量、用户历史行为、品牌偏好等)揉在一起,算出一个分。然后系统按分数排序,把 Top N 展示给用户。

具体来说,评价函数在推荐/搜索系统中承担三个角色:

角色 说明 我见过的坑
排序依据 决定候选物品的展示顺序 曾经只靠 CTR 排序,忽略了转化率,结果曝光高但 GMV 没涨
模型训练目标 作为损失函数的反向传播依据 评价函数和损失函数不一致,模型学偏了
业务指标对齐 把商业目标(GMV、留存)翻译成可优化分数 纯技术指标好看,业务方不买账

我的经验:评价函数的设计,本质上是在做「目标对齐」。你希望系统优化什么,评价函数就该反映什么。别指望一个万能公式解决所有问题。

1.2 评价函数的数学本质

说白了,评价函数就是一个数学表达式。我习惯把它写成这样:

score = f(user_features, item_features, context_features)

其中:

  • user_features:用户画像、历史行为、实时意图
  • item_features:物品属性、统计指标、内容特征
  • context_features:时间、地点、设备、网络状态

从数学角度看,评价函数可以分成三类:

类型 数学形式 典型例子
线性函数 score = w₁x₁ + w₂x₂ + ... + wₙxₙ + b LR、FM 的一阶部分
非线性函数 score = σ( W·x + b ) 或更复杂的神经网络 DNN、DeepFM
组合函数 score = 线性部分 + 交叉部分 + 高阶部分 Wide & Deep、xDeepFM

注意:我曾经犯过一个错误——把评价函数设计得过于复杂。特征交叉层叠了 5 层,线上延迟暴涨,收益却只提升了 0.1%。简单有效,才是评价函数的第一原则。

1.3 评价函数 vs 损失函数:别搞混了

很多新手会把这两个概念混为一谈。我刚开始也这样,直到有一次模型训出来,离线指标漂亮,线上效果一塌糊涂。

它们的区别其实很清楚:

维度 评价函数 损失函数
使用阶段 推理/排序时使用 训练时使用
目标 给候选物品打分排序 衡量预测值与真实值的差距
可微性 不一定可微 必须可微(用于梯度下降)
例子 CTR预估分、GMV预估分 交叉熵、均方误差

嗯,这里要注意:评价函数可以包含不可微的操作,比如排序、截断、业务规则加权。但损失函数必须光滑可导。所以实践中,我们往往用损失函数来「模拟」评价函数的优化方向。

1.4 评价函数体系全景图

为了让你对整个体系有个直观认识,我画了张图。这张图也是我们这门课的整体框架:

评价函数体系全景图 评价函数体系全景图 评价函数 (Scoring Function) 线性评价函数 非线性评价函数 组合评价函数 LR / FM / FFM DNN / DeepFM / DIN Wide&Deep / xDeepFM 搜索排序 推荐系统 广告竞价 NDCG / MAP / MRR CTR / CVR / GMV eCPM / ROI 核心思路:从数学定义出发,理解不同模型的设计哲学 再结合实际业务场景,选择或设计最合适的评价函数

1.5 一个简单的评价函数例子

光说理论太干。我给你看个实际项目中用过的评价函数:

# 一个简单的混合评价函数
def evaluate_score(user, item, context):
    # 基础相关性分
    relevance = compute_relevance(user, item)
    
    # 时效性加分(新品加权)
    freshness = get_freshness_bonus(item, context['current_time'])
    
    # 个性化加权
    personal_bias = user.get_preference_bias(item.category)
    
    # 业务规则:高毛利商品加权
    margin_bonus = item.profit_margin * 0.1 if item.profit_margin > 0.3 else 0
    
    # 最终分数
    score = 0.6 * relevance + 0.2 * freshness + 0.15 * personal_bias + 0.05 * margin_bonus
    
    return score

这个函数看起来简单,但我在实际项目中迭代了 6 个版本才稳定下来。一开始权重拍脑袋设的,线上 A/B 测试直接翻车。后来通过数据回放 + 人工标注,才慢慢调出合理的系数。

一个小建议:评价函数的权重不要靠直觉。用网格搜索或贝叶斯优化去调,比你拍脑袋靠谱 10 倍。

1.6 本章小结

评价函数是整个推荐/搜索系统的「指挥棒」。它决定了模型往哪个方向优化,也决定了用户最终看到什么。

记住三个要点:

  • 评价函数 = 打分器,把特征映射成排序分数
  • 评价函数 ≠ 损失函数,前者用于推理,后者用于训练
  • 设计评价函数 = 对齐业务目标,别为了技术指标牺牲商业价值

嗯,这一章就到这里。评价函数的概念其实不复杂,但它是后面所有章节的基石。后面的内容会越来越深,从线性模型一路讲到多目标优化、自动搜索评价函数。准备好了吗?