学生做题章节掌握率评估流程
设计
简介
通过学生做题结果判定学生章节掌握度
掌握判定条件
学生掌握度由经验值计算,达到所需经验值 exp_end 后则为掌握。
主要由学生做题数量和做题结果决定,目标越高需要练习的题量也越高。
学生在系统里做题时,每做 n 道题为一组,每组到达最低正确率 p_min 后开始计算经验值,最低加成为 exp_min,达到最高正确率 p_max 加成最大为 exp_max,设有最直接通过正确率 p_end,达到后经验值加满为掌握(当出现跨组间的连对时也当作满足直接通过条件)。满足中点正确率 p_mid 的组数达到足够数量 m 后被判定为累积掌握。不管做题对错,所做每道题增加经验值 exp_did。
| 目标 | 掌握级别 | 每组题目数量 | 每组最低正确率 | 每组最高正确率 | 每组直接通过正确率 | 中点正确率 | 掌握所需达到中点正确率的组数 | 练习题目的难度 |
|---|---|---|---|---|---|---|---|---|
| 一本 | 了解 | 5 | 50% | 90% | 100% | 80% | 2 | 根据章节不同而不同 |
| 一本 | 理解 | 5 | 50% | 90% | 100% | 80% | 3 | 根据章节不同而不同 |
| 一本 | 应用 | 5 | 50% | 90% | 100% | 80% | 3 | 根据章节不同而不同 |
| 二本 | 了解 | 5 | 50% | 90% | 100% | 80% | 2 | 根据章节不同而不同 |
| 二本 | 理解 | 5 | 50% | 90% | 100% | 80% | 2 | 根据章节不同而不同 |
| 二本 | 应用 | 5 | 50% | 90% | 100% | 80% | 1 | 根据章节不同而不同 |
初始定位
由测试卷得分结果决定学生初始经验值,用默认在系统中已经做了几组题为标准。若需要更加精确,则可以由学生试卷的做题结果相关,如:某题做错代表某章掌握度不高。
| 初始得分 | 了解已经完成组数 | 理解已经完成组数 | 应用已经完成组数 |
|---|---|---|---|
| 120-150 | 2 | 2 | 1 |
| 100-119 | 1 | 1 | 0 |
| 0-99 | 0 | 0 | 0 |
插值评分换算
经验值最高为 exp_end (取 600 数字较大方便做小步长,能够被小的质数整除便于划分),中点正确率组数 m 为最少所需步数。以中点正确率 p_mid 转折点向最大与最小正确率作线性变化。
以目标一本的应用难度掌握度为例,中点正确率为 80%,所需步数为 3,则每次学生做题组正确率达到 80%,经验值增加 600/3 = 200 点。最低正确率为 50%,满足时增加最小设定为 50 点,则正确率 a%<80% 时增加 (a-50)*(200-50)/(80-50)+50 点(当 a=60 时,经验值增加100)。当正确率 a%>90% 时,增加最大经验值 300。
以最大经验值的目标层次为基础,其余目标层次递减。
难度大的层次对低难度有影响。理解层次对了解层次有 100% 的效果,应用层次对理解层次有 30% 的效果
掌握率需要产品表现为初始时很快,越接近满分提升越慢,则掌握率在经验值得基础上乘以一个幂函数达到要求。公式为 degree = norm * exp^r,其中 degree 为掌握率;norm 为归一化系数,使得 degree 在一定区间内;r 为幂系数。
数据结构
数据表
学生掌握度统计表
CREATE TABLE tb_student_mastery_degree
(id BIGINT(20) PRIMARY KEY NOT NULL AUTO_INCREMENT,student_id BIGINT(20) COMMENT '学生',chapter_id BIGINT(20) COMMENT '章',section_id BIGINT(20) COMMENT '节,可以为空,表示为本记录为章掌握率',difficulty INT COMMENT '对应理解层次(了解,理解,应用)',degree DOUBLE COMMENT '掌握率',exp INTEGER COMMENT '经验值',latest_prolems VARCHAR(200) COMMENT '最近做题数组记录n条,可配置',problem_results VARCHAR(20) COMMENT '做题结果,记录m条,可配置',created_dt DATETIME,updated_dt DATETIME,version INT(11) DEFAULT '0'
);CREATE UNIQUE INDEX UN_Student_Section_Diff ON tb_student_mastery_degree(student_id, section_id, difficulty)
章节配置表(题目要求难度,每章要求配置)
CREATE TABLE tb_student_mastery_degree
(id BIGINT(20) PRIMARY KEY NOT NULL AUTO_INCREMENT,chapter_id BIGINT(20) COMMENT '章',section_id BIGINT(20) COMMENT '节,可以为空,表示为本记录为章掌握率',layer INT COMMENT '对应理解层次(了解,理解,应用)',difficulties VARCHAR(20) COMMENT '满足的题目难度列表',over_count DOUBLE COMMENT '掌握所需达到中点正确率的组数',created_dt DATETIME,updated_dt DATETIME,version INT(11) DEFAULT '0'
);
配置参数
经验值算法中,针对每个不同层次,每组题目数量 n;中点正确率 p_mid, 每组达到中点正确率的题目增加的经验值 exp_mid;最低正确率 p_min,最低正确率 增加经验值 exp_min;最大正确率 p_max,最大正确率经验值增加 exp_max;掌握所需中点正确率组数 m,直接判定为掌握的正确率 p_end;跨组连对所需题目数量 allow_combo,无论对错每道题增加的经验值 exp_did;
向下影响力,理解层次对了解 inf21,应用层次对理解层次inf32,应用层次对了解inf31;
掌握度与经验值算法中,公式为 degree = norm * exp^r,其中 degree 为掌握率;norm 为归一化系数,使得 degree 在一定区间内;r 为幂系数。
程序结构
主要流程
- 输入学生做题记录
- 预处理必要信息,题目或学生相关
- 通过题目所属章节获取相关学生掌握度记录
- 判断连对状态
- 判断是否达到分组个数,
- 若没有达到,记录题目信息,经验值加上题目经验值。
- 若达到要求个数,计算分组正确率,换算成经验值。
- 经验值增加,换算成掌握率。
- 存储新的学生记录。
类结构
流程控制类 Engine
控制整个学生章节掌握度的评估流程,调用不同的方法。
题目信息预处理类 ProblemPre
将题目预处理成包含全部必要输入信息的VO
经验值计算类 ExpCalculator
输入做题信息和学生之前的记录,得到本次经验值
掌握度判定类 DegreeDeterminer
将经验值转换为掌握度
完结
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
