IRT Calibration
Detail modul irt_calibration.py - model Rasch 1PL, MLE, Fisher information, kalibrasi b.
Modul: IRT Calibration
Source:
backend/app/services/irt_calibration.pyLihat juga: Variabel & Rumus, Alur IRT, Alur Kalibrasi IRT
Tanggung Jawab
Implementasi Item Response Theory model Rasch 1PL (1 Parameter Logistik):
- Estimasi theta siswa via Maximum Likelihood Estimation (MLE)
- Kalibrasi parameter
bsoal dari matriks respon - Hitung Fisher information & Standard Error (SE)
- Konversi silang theta ↔ NN
Konstanta Internal
Dari irt_calibration.py:
Rumus Inti
1. Probabilitas Jawaban Benar (Rasch 1PL)
Interpretasi:
- θ > b → P > 0.5 (siswa mampu → kemungkinan benar tinggi)
- θ = b → P = 0.5 (siswa tepat di batas kemampuan soal)
- θ < b → P < 0.5 (soal terlalu sulit untuk siswa)
2. Fisher Information
Sifat penting: Information maksimal saat θ = b (P = 0.5 → I = 0.25). Inilah dasar CAT: soal paling informatif adalah yang kesulitan-nya setara dengan kemampuan siswa.
3. Standard Error
Interpretasi: SE rendah = estimasi theta presisi. SE tinggi = butuh lebih banyak soal informatif.
Estimasi Theta (MLE)
Penting: Optimizer pakai scipy.optimize.minimize_scalar dengan method bounded di range [-3, +3].
Kalibrasi Parameter b
Fungsi estimate_b(responses_matrix, max_iterations=20, convergence_threshold=0.001) mengestimasi b untuk semua soal sekaligus lewat algoritma EM-style iterative:
- Inisialisasi:
theta = 0untuk semua siswa,b = 0untuk semua soal - Iterasi (max 20):
- E-step: Estimasi theta tiap siswa dengan b saat ini
- M-step: Update b tiap soal dengan theta saat ini
- Berhenti saat konvergen (delta < 0.001) atau max iterasi
- Handle edge case: siswa dengan semua benar/salah → theta = ±4.0
Minimum data: min_calibration_sample (default 100) respon per soal agar kalibrasi reliable.
Fungsi Async (Database)
Konversi θ ↔ NN
Untuk perbandingan skor IRT dengan CTT:
Edge Cases
Numerical Stability
Beberapa praktik penting yang dipakai:
- Exponent clipping:
exp(-x)di-clip ke[-30, +30]untuk hindari overflow/underflow - Probability clipping:
pdi-clip ke[1e-10, 1 - 1e-10]sebelumlog(p)— hindarilog(0) - SE cap: SE di-cap ke
3.0maksimal (tidakinf) - Variance clamp: Variance di-
max(0, ...)untuk hindari negatif akibat floating point
Dependency
numpy(operasi vektor untuk batch kalibrasi)scipy.optimize.minimize_scalar(MLE)sqlalchemyasync session- Model:
Item,Session,UserAnswer
Bacaan Lanjutan
- Konsep → Variabel & Rumus — definisi theta, b, SE, I(θ)
- Konsep → Alur IRT — diagram estimasi theta
- Konsep → Alur Kalibrasi IRT — diagram joint MLE
- Modul → CAT Selection — pakai theta untuk pemilihan soal adaptif
- Modul → CTT Scoring — modul pasangan untuk skor klasik
Last updated Jul 25, 2026