Normalization
Detail modul normalization.py - statistik Rataan & SB, mode static/dynamic/hybrid, threshold.
Modul: Normalization
Source:
backend/app/services/normalization.pyLihat juga: Alur Dynamic Normalization, Konsep → Mode Tryout
Tanggung Jawab
Hitung Rataan (mean) dan SB (standard deviation) dari distribusi NM siswa untuk dipakai di rumus NN:
Tiga mode operasi: static (manual), dynamic (real-time), hybrid (auto-switch).
Fungsi Inti
apply_normalization — Hitung NN
Skala output: mean = 500, SD = 100. Siswa dengan NM tepat di Rataan → NN = 500.
calculate_dynamic_stats — Baca Rataan & SB Saat Ini
update_dynamic_normalization — Update Inkremental
Rumus Statistik
Mean (Rataan)
Standard Deviation (SB)
Pakai population SD (bukan sample SD):
Kenapa population SD? Karena data adalah seluruh populasi peserta tryout (bukan sample dari populasi lebih besar).
Stabilitas Numerik
Floating-point arithmetic bisa menghasilkan variance negatif yang sangat kecil (mis. -1e-15) ketika semua skor identik. Clamp ke 0 mencegah sqrt(-x) crash.
Mode Operasi
static (default)
Rataan & SB ditentukan manual admin via static_rataan (default 500.0) dan static_sb (default 100.0).
Use case: Tryout baru, peserta < min_sample_for_dynamic (default 100), belum ada cukup data.
dynamic
Rataan & SB dihitung real-time dari TryoutStats (semua NM peserta yang sudah selesai).
Use case: Peserta ≥ min_sample_for_dynamic, ingin distribusi aktual.
hybrid (auto-switch)
Fungsi Pendukung
Skewness (untuk Laporan)
Dipakai admin untuk evaluasi kualitas soal: kalau skewness ekstrem, mungkin distribusi kesulitan soal tidak seimbang.
Model: TryoutStats
Tabel yang menyimpan running sums (lihat Data → Data Models):
Edge Cases
Migrasi Static → Dynamic
sequenceDiagram
autonumber
participant Admin
participant API
participant DB
Admin->>API: PUT /tryout/id/normalization
Note over Admin,API: body: { normalization_mode: dynamic }
API->>DB: UPDATE tryouts SET normalization_mode=dynamic
API->>API: Baca TryoutStats, cek threshold
alt participant_count >= min_sample_for_dynamic
API-->>Admin: Mode aktif, pakai stats.rataan/sb
else belum cukup data
API-->>Admin: Mode disimpan, fallback ke static sementara
Note over API: Tampilkan readiness: 67/100 peserta
end
Penting: Sesi yang sedang berjalan tidak terpengaruh perubahan mode (snapshot saat mulai sesi).
Dependency
math(sqrt)sqlalchemyasync session- Model:
Tryout,TryoutStats
Bacaan Lanjutan
- Konsep → Mode Tryout — kapan pakai mode mana
- Konsep → Alur Dynamic Normalization — diagram alur
- Modul → CTT Scoring — modul yang konsumsi Rataan & SB
- Data → Data Models — struktur TryoutStats
Last updated Jul 25, 2026