You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按条件切换模型:协同过滤与XGBoost评分预测融合方案咨询

实现方案

核心原则

需要将两个模型封装为输出格式一致的调用函数,避免后续融合逻辑混乱,同时方便统一评估准确率。

分步实现

1. 预处理全局统计量,修正XGBoost数据结构

首先预计算每个被评分对象的总评分次数,作为模型选择的判断依据;同时修正原有XGBoost代码直接删除rated_object的问题,保留对象和特征的映射关系,方便后续按对象查询特征:

# 预计算每个被评分对象的总评分次数
object_rating_count = df.groupby('rated_object')['rating'].count().to_dict()

# 保留XGBoost的对象-特征映射,不要直接删除rated_object列
xgb_feature_map = df2.set_index('rated_object').drop('rating', axis=1)

2. 封装统一输出格式的预测函数

两个函数统一输入worker、rated_object两个参数,输出0/1的预测结果,无对应数据时返回None:

def cf_predict(worker, rated_object):
    # 调用协同过滤模型预测
    try:
        pred = algo.predict(worker, rated_object).est
        return 1 if pred > 0.5 else 0
    except:
        # 无对应worker或对象记录时返回空
        return None

def xgb_predict(worker, rated_object):
    # XGBoost仅依赖对象特征预测,和worker无关
    if rated_object not in xgb_feature_map.index:
        return None
    # 特征预处理逻辑和训练时保持一致即可,这里以填充0为例
    features = xgb_feature_map.loc[rated_object].fillna(0).values.reshape(1, -1)
    return model.predict(features)[0]

3. 实现融合逻辑

按需求优先级实现判断逻辑:

def combine_predict(worker, rated_object):
    cf_res = cf_predict(worker, rated_object)
    xgb_res = xgb_predict(worker, rated_object)
    
    # 优先规则:对象评分≥3且CF有结果,用CF结果
    if cf_res is not None and object_rating_count.get(rated_object, 0) >= 3:
        return cf_res
    # 次优先:XGB有结果用XGB结果
    elif xgb_res is not None:
        return xgb_res
    # 兜底:XGB无结果但CF有结果,用CF结果
    elif cf_res is not None:
        return cf_res
    # 两个模型都无结果,可按业务需求返回默认值
    else:
        return 0

4. 融合模型准确率评估

构造带真实标签的测试集,批量预测后计算准确率即可:

from sklearn.metrics import accuracy_score

# 测试集格式为[worker, rated_object, 真实评分],需保证和训练集无数据泄露
test_samples = [
    ("w1", "o1", 0),
    ("w2", "o5", 1),
    # 更多测试样本
]

y_true = []
y_pred = []
for worker, obj, actual in test_samples:
    y_true.append(actual)
    y_pred.append(combine_predict(worker, obj))

print("融合模型准确率:", accuracy_score(y_true, y_pred))

注意事项

  • 统计object_rating_count时只能使用训练集数据,不能引入测试集的评分数据,避免数据泄露
  • XGBoost的特征预处理逻辑要和训练时完全一致,包括缺失值处理、编码规则等

内容的提问来源于stack exchange,提问作者futuredataengineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:06:04