2.1 KiB
2.1 KiB
推荐引擎调试笔记
rows_dict 同校多计划类型去重 Bug (2026-06-21)
问题
推荐算法 _calc_prob_data() 中,schools 表数据通过 rows_dict[r[0]] = r 按学校名去重。当同一学校有多个计划类型时(如 鹤壁职业技术学院:普通类 222分/较高收费专业 185分),只有最后一条被保留。
对于 2025 年数据:ORDER BY min_score DESC,最高分被保留
对于 2024 年回退数据:if r[0] not in rows_dict 检查,最先出现的被保留(最高分)
影响:低分考生看不到较高收费专业入口,高分考生只能看到较高收费专业入口。
修复
改前:rows_dict[r[0]] = r(按 school_name 去重)
改后:rows_dict[(r[0], r[5])] = r(按 (school_name, plan_type) 去重)
改了 3 处:
rows_dict[(r[0], r[5])] = r— 2025 年数据if (r[0], r[5]) not in rows_dict:— 2024 回退检查rows_dict[(r[0], r[5])] = r— 2024 回退赋值
下游 with_entry_points() 已正确处理多计划类型 → 按学校名分组,取距考生分数最近的入口。
测试验证
190分 物理类 河南 → 鹤壁职业技术学院 较高收费专业 (185) 出现在保底 ✅
250分 → 鹤壁职业技术学院不在保底(rank_diff < 30000,正常行为)✅
320分 → 鹤壁职业技术学院出现在深保(但可能在 top(6) 后被截断)✅
bao_deep 30000 位次差条件
深保(bao_deep)要求:
- gap < -15(专科批)或 gap < -30(本科批)
(school_rank - student_rank) >= 30000
当使用 2024 年回退数据时,2024 年的位次与 2025 年考生位次直接比较,可能因年份差异导致偏差。此条件设计用于防止推荐位次差距过小的保底学校,当前逻辑合理,无需修改。
front-end min score validation (2026-06-21)
plan.html 第 245 行和 384 行硬编码了 min="200" 和 score < 200。改到 160 覆盖专科线以下考生。
修复位置:
plan.html:245:min="200"→min="160"plan.html:384:score < 200→score < 160