如何基于含教师调分规则的学生成绩数据确定各科目及格cutoff值
问题背景
- 数据集包含500名学生的5门科目(数学、物理、化学、音乐、历史)期末成绩,单科目分值范围为0-100
- 科目及格基础规则:成绩低于科目对应cutoff值即判定为该科不及格;科任教师可调整最多*不足5%*学生的科目结果,仅支持将不及格调整为及格
- 总评规则:任意1门科目不及格则总评为不及格,5门科目全部及格则总评为及格
已知当数学、物理、化学、音乐、历史cutoff分别为45、45、45、60、60时,样例数据如下,其中ID为2的学生历史59分,经教师调整判定为及格,总评结果为pass:
ID math physics chemistry music history overall_assessment 1 95 96 70 65 75 pass 2 46 61 72 86 59 pass 3 55 32 21 95 96 fail
待解决问题
仅持有上述格式的成绩总评表(含学生ID、5门科目分数、总评结果),如何反推每门科目的真实cutoff值?
提问者提供的R语言模拟数据构造代码如下:
set.seed(1) math <- sample(30:100, 500, replace=T) physics <- sample(30:100, 500, replace=T) chemistry<- sample(30:100, 500, replace=T) music<- sample(30:100, 500, replace=T) history<- sample(60:100, 500, replace=T) grade <- as.data.frame(cbind(math,physics,chemistry,music,history)) grade$assess <- ifelse(grade$math > 45 & grade$physics >55 & grade$chemistry > 60 & grade$music > 50 & grade$history > 80, "pass","fail") grade$ID <- seq(1,500,1) change_grade <- sample(1:500, 25, replace=F) grade$assess[grade$ID %in% change_grade] <- "pass"
反推实现方案
整个反推逻辑完全基于题目给出的两个刚性约束:
- 教师调整的学生占比不足5%,对应500个样本里最多25人属于人工调整后及格,剩余至少95%的样本总评结果完全由cutoff规则自然判定,不需要人工干预
- 人工调整仅支持将不及格结果改为及格,不存在把及格改成不及格的反向操作
具体落地步骤:
- 5门科目的cutoff都是0-100之间的整数,直接枚举所有可能的cutoff组合即可,加约束剪枝后普通电脑几秒就能跑完计算
- 对每一组候选cutoff,统计自然符合总评规则的样本量:总评为pass的学生所有科目分数都高于候选cutoff,总评为fail的学生至少有1门科目分数小于等于候选cutoff
- 筛选出自然符合样本量≥475的所有候选组合(对应需要调整的样本≤25个,满足调整比例<5%的要求)
- 最终真实cutoff取所有符合条件组合里各科目阈值最高的一组:如果更高的阈值就能满足调整比例要求,更低的阈值只会让更多学生自然及格,不可能是实际执行的判定线
用提供的模拟数据跑这套逻辑,可以完全还原真实cutoff值:数学45、物理55、化学60、音乐50、历史80。
内容的提问来源于stack exchange,提问作者Mizzle
相关产品推荐
相关产品推荐

