层
指标测算{{ item.title }}
{% if result and result.get('algorithm') == 'adjacent-layer-markov-v2' %} 导出总表 {% endif %}
{% if step == 1 %}

第一步:成绩表体检

这里只检查源表识别结果。缺考学生在后续测算中会按 0 分参加同方向排名。

识别学生{{ summary.n }}
班级{{ summary.n_class }}
考试次数{{ summary.exams|length }}
异动备注{{ summary.moves }}
{% for w in summary.warnings %}
{{ w }}
{% endfor %}

工作表

{% for s in summary.sheets %} {% endfor %}
名称类型行数
{{ s.name }}{{ s.kind }}{{ s.rows }}

考试识别

{% for e in summary.score_scale %} {% endfor %}
考试有分人数最低最高平均
{{ e.exam }}{{ e.n }}{{ e.min }}{{ e.max }}{{ e.mean }}

有分人数不等于测算人数:未排除的异动学生若缺考,仍会按 0 分进入排名。

{% endif %} {% if step == 2 %}

第二步:口径、层次与线

考试范围

考试列只来自本次上传工作簿的物理/历史人员表;只比较这里勾选后的相邻两次考试。例如勾选 7 次,会生成 6 组转移样本;最后一次既进入相邻概率计算,也用于最终摊派。

本次源表:{{ item.filename }};方向人员表识别到 {{ summary.exams|length }} 个考试列。
{% for e in summary.exams %} {% endfor %}

纳入范围

勾选后,「异动/备注」列非空的学生整行不参与排名和概率计算;不勾选则纳入,且缺考按 0 分排名。

{% if preview_n is not none %}

当前口径进入测算 {{ preview_n }} 人。

{% endif %}

计算规则

同分数为同名次,后续名次递增。层次边界遇到同分时整组留在上一层; 下一层从下一个不同名次开始,不会把边界同分拆到两组。

各方向线与层次宽度

线按“方向内名次”设置,可在下方直接修改。历史方向默认按 basedata.xlsx 使用 5 人一层;物理默认 20 人一层。

{% for g in settings.groups %}
{{ g }}方向
{% endfor %}
{% endif %} {% if step == 3 %}

第三步:相邻命中概率与拟合

{% if not result %}

还没有测算结果。请回到第二步点击测算。

去设置 {% elif result.get('algorithm') != 'adjacent-layer-markov-v2' %}
这是旧算法结果。请回到第二步重新测算一次。
{% else %}
进入测算{{ result.n_selected }} 人
缺考处理0 分排名
异动排除{{ '是' if result.exclude_moves else '否' }}
相邻对数{{ result.pair_count }}
{% for g in result.groups %}
{{ g.group }}方向:{{ g.n }} 人,{{ g.layer_size }} 名一层,共 {{ g.n_layers }} 层; 尖子线前 {{ g.line_settings.top }} 名,特控线前 {{ g.line_settings.control }} 名。

汇总概率与拟合概率

拟合规则与 basedata.xlsx 保持一致:第 1 层保留合成概率;中间层用加权 logistic 拟合;首个命中为 0 的层及其后取 0。最后一次考试也已纳入相邻转移计算。

{% for line_id in ['top', 'control'] %} {% set sm = g.summary[line_id] %}

{{ '尖子线' if line_id == 'top' else '特控线' }}

{% for x in sm.layers %} {% endfor %}
前一次层次样本 n命中 k合成概率拟合概率
{{ x.label }}{{ x.previous_n }}{{ x.hit_n }} {{ '%.2f'|format(x.probability * 100) if x.probability is not none else '—' }} {{ '%.2f'|format(x.fitted_probability * 100) }}
{% endfor %}

每次相邻比较明细

{% for line in g.pairs %} {% for pair in line.pairs %}
{{ line.line }}:{{ pair.from_exam }} → {{ pair.to_exam }}
{% for x in pair.layers %} {% endfor %}
前一次层次人数下次到线概率
{{ x.label or x.layer }}{{ x.previous_n }}{{ x.hit_n }} {{ '%.2f'|format(x.probability * 100) if x.probability is not none else '—' }}
{% endfor %} {% endfor %} {% endfor %} {% endif %} {% endif %} {% if step == 4 %}

第四步:最后一次成绩摊派

{% if not result or result.get('algorithm') != 'adjacent-layer-markov-v2' %}

还没有新算法结果。请回第二步重新测算。

去设置 {% else %}

按最后一次考试的各班层次人数,乘以汇总后的拟合概率;加权计算四舍五入为摊派指标。点击班级可查看学生最后一次名次。

{% for g in result.groups %} {% for t in g.targets %}

{{ g.group }}方向 · {{ t.name }}(前 {{ t.k }} 名)

年级最后一次在线 {{ t.sum_current }} 人;加权合计 {{ t.sum_expected }};摊派合计 {{ t.sum_assigned }} 人。

{% for row in t.classes %} {% endfor %}
班级测算人数最后在线加权计算摊派指标相对最后在线
{{ row.class_name }}班{{ row.n }}{{ row.current }} {{ '%.2f'|format(row.expected) }}{{ row.assigned }} {% if row.delta > 0 %}+{{ row.delta }}{% else %}{{ row.delta }}{% endif %}
{{ class_comment(row, t.name) }}
合计{{ g.n }}{{ t.sum_current }}{{ t.sum_expected }}{{ t.sum_assigned }}—
查看班级层次分布
{% for label in t.labels %}{% endfor %} {% for row in t.classes %} {% for c in row.layer_counts %}{% endfor %} {% endfor %} {% for p in t.fitted %}{% endfor %}
班级{{ label }}
{{ row.class_name }}班{{ c }}
拟合概率{{ '%.2f'|format(p * 100) }}
{% endfor %} {% endfor %} {% endif %} {% endif %}