📝

得点をいい感じに調整したい

2023/09/01に公開

はじめに

同じ科目を三人の教員がそれぞれ担当する状況を考えましょう。教える内容は一緒でも、各教員によって採点基準が異なる場合がよくあります。

Name A (%) B (%) C (%) D (%) F (%)
data1 18 23 8 16 35
data2 15 12 20 9 44
data3 19 14 20 12 35

学生の質がクラスによって偏ることも考慮に入れられますが、毎年似たような評価傾向が続く場合、評価方法に改善の余地があるかもしれません。

問題点

点数調整の手法としては、正規化や分位数を用いる方法が研究されています。正規化は点数分布の偏りを均一化する一方で、最低点も上がってしまうことがあります。分位数に基づく方法は数学的に妥当ですが、計算が複雑であり、数学に詳しくない人には説明が難しい場合があります。

加えて、成績のカテゴリー(A, B, C, D)が事前に定められている場合が多く、この制約が問題をさらに複雑にします。

目標

まず、AやDの割合を例えば20%程度と共通の基準で設定します。さらに、公平性を考慮して、各教員から与えられるA, B, C, Dの割合をできるだけ均一に保ちます。そして、各教員が独自に評価した点数分布の特性は、できるだけ維持するようにします。

解決策

理想的な分布に合わせて、A, B, C, Dを分位数で設定します。たとえば下位20%をD以下、上位10%をAと定義し、その他はなるべく元の分布を保つように変換います。ここではAとDなどに対応する分位数の間は線形補完を用いました。

具体的にquantile 0.2, 0.8, 1で区分的に線形変換します。具体的にquantile 0.2, 0.8, 1をq20, q80, q100とします。このとき、

  • 点数xがx<q_20なら (0,0)と(q_20, 50)を通る直線
  • 点数xがq_20<x<q_80なら (q_20,50)と(q_80, 80)を通る直線
  • 点数xがq_80<x=<q_100なら (q_80,80)と(q_100, 100)を通る直線

としています。

このアプローチにより、既存の分布を理想的な割合に調整しつつ、各教員の独自の評価基準も尊重することができます。この方法はAとDの割合だけを設定するだけなので、非常にシンプルに実装できます。

実運用

  1. D列の青いシートに点数をいれる。
  2. A以上を18%、D以下を20%として自動で変換した点数はF列になります。
  3. 2-6行目で変換前と変換後のA, B, C, Dなどの数や割合が自動で計算できているので確認。
  4. 素点と変換後の特典のマッピングも可視化されているので確認できます。

これを以下のシートで実現しています。これでスプレッドシートだけで完結するので便利かもしれません。

https://docs.google.com/spreadsheets/d/121aGxxuFV0LI_mjZBtTRbdcP24cW8QrR5T9mhGBisOs/edit#gid=0

おまけ

より詳しい具体的なPythonのコードなどは以下に置いておきます。

https://colab.research.google.com/drive/1DMmZgm4JCwlBurKUR9_TO7e2nAkPP0Iw?usp=sharing

Discussion