IRT Kalibrasyon Notları 1: Düşük Ayırt Edicilik Puanı Bir Boru Hattı Sorunu Olduğunda

IRT Kalibrasyon Notları 1: Düşük Ayırt Edicilik Puanı Bir Boru Hattı Sorunu Olduğunda

Bu yılın üç sınavı, her alandan bir tane, kalibrasyondan döndüğünde en yüksek kestirilmiş ayırt edicilik değerleri aynı alanların arşivdeki sınavlarına göre belirgin biçimde düşük çıktı. Veriler, analitiği üzerinde çalıştığım bir çevrim içi sınav platformuna aitti ve bana gelen soru kısaydı: Yeni sorular daha mı kötü? Sonuç tablosunu olduğu gibi okursanız cevap evetti. Yeni formlar güçlü ve zayıf öğrencileri, iki yıl önceki formlar kadar keskin ayırmıyor gibi görünüyordu.

İlk dikkatimi çeken katılım oldu. Karşılaştırdığım arşiv sınavlarına çok daha fazla kişi girmişti:

AlanGüncel sınav (1405), resmî katılımArşiv sınavı (1403), resmî katılım
Matematik4346,342
Deneysel Bilimler5219,222
Beşerî Bilimler1,1348,648

Katılımda kabaca 8 ila 18 katlık bir farkın hemen yanında ayırt edicilikte bir düşüş vardı ve bu rastlantıyı bakmadan ne kabul etmek ne de geçiştirmek istedim. Özete birkaç açıklama uyuyordu. Yeni sorular daha zayıf olabilirdi, yeni öğrenci grupları birbirinden daha az farklı olabilirdi, örneklemler fazla küçük olabilirdi ya da kestirici örneklem büyüklüğüne kendi başına tepki veriyor olabilirdi. Ortalıkta bilinen bir pratik kural da dolaşıyordu: Kalibrasyon için 200'den fazla öğrenci yeterlidir. Bu kural geçerliyse örneklem büyüklüğü üç sınavın hiçbiri için şüpheliler listesinde yer almıyordu. Her açıklama kontrol edilebilir bir sonuç öngörüyor. Bunları kontrol etmek beklediğimden uzun sürdü ve asıl metriği nasıl okuduğumu değiştirdi.

Bu seri neleri kapsıyor

Bu seri, o incelemenin kaydı. Backend ve veri mühendisleri, ölçme-değerlendirme sistemleri işletenler ve psikometriyi merak eden geliştiriciler için yazdım. Her bölüm sorunun bir katmanını ele alıyor:

  1. Bölüm 1, yani bu yazı: bilmecenin kendisi, 2PL modeline kısa bir dönüş, kodda yanlış yönü gösteren iki ad ve kodu okumanın neyi kanıtlayıp neyi kanıtlamadığı.
  2. Bölüm 2: kalibrasyona kim girdi. Resmî katılım, kullanılabilir yanıtlar ve saklanan yetenekler ayrı sayımlardır ve bir sıfırın ne anlama geldiğine yanıt kodlaması karar verir.
  3. Bölüm 3: "vague" (belirsiz) diye etiketlenmiş ama epey dar olan bir önsel, soruların sabit kalıp yalnızca N'nin değiştiği bir deney ve 434 öğrencinin yüksek ayırt ediciliği taşıyıp taşıyamayacağını soran bir simülasyon.
  4. Bölüm 4: iki başka kestirici, yani hiyerarşik bir önsel ve GIRTH kütüphanesiyle marjinal en çok olabilirlik; ikisinin de kendine özgü aksama biçimleri var.
  5. Bölüm 5: dokuz sınav üzerinde, her büyüklük için yirmi örneklemle yapılan bir tekrarlı örnekleme çalışması ve onu yeniden başlatılabilir ve tekrarlanabilir kılan mühendislik.
  6. Bölüm 6: yıllar arasında eşit N'li karşılaştırmalar, sonuçların nasıl raporlandığı ve eşit N'nin neden eşitleme olmadığı.

Seri boyunca gözlemleri, yorumları ve önerileri birbirinden ayrı tutuyor, bir sonucun nerede geçerliliğini yitirdiğini de söylüyorum. Sayılar çalışmanın farklı aşamalarından geliyor; veri çekimleri de popülasyonlar da farklı. İkisi daha derli toplu bir hikâye anlatacak kadar yakın görünse bile onları birleştirmeyeceğim.

Birkaç satırda model

Bu katsayıların arkasındaki kestirici, iki parametreli lojistik modelin, yani 2PL'nin parametrelerini kestiriyor. s öğrencisi ve i sorusu için:

P(correct response by student s to item i) = sigmoid(a_i * (theta_s - b_i))

sigmoid(x) = 1 / (1 + exp(-x))

θ öğrencinin gizil yeteneği. Kimse onu doğrudan gözlemlemez; model onu madde parametreleriyle birlikte kestirir. b güçlüktür ve bu parametreleştirmede modelin doğru cevap şansını 0,5 olarak verdiği yetenek düzeyidir. a ayırt ediciliktir, yani eğrinin b çevresindeki dikliği. a değeri büyük ve pozitif olan bir soru, yetenekleri kendi güçlüğüne yakın öğrencileri epey keskin ayırır; a değeri küçük bir soru ise birbirinden uzak öğrencilere benzer şanslar verir.

Baştan geçerli iki uyarı var. Zor bir soru kendiliğinden kötü bir soru olmaz, ayırt ediciliği yüksek bir soru da kendiliğinden her popülasyona ya da her içerik hedefine uygun olmaz. Şüphe altındaki metrik, yani bir sınavdaki en yüksek a değeri, iki uyarıyı da beraberinde taşır. Aynı parametrelerin madde seçimini nasıl yönlendirdiğini IRT ile uyarlamalı test üzerine yazdığım Backend Notları 2 yazısında anlatmıştım. Bu seri ise parametrelerin nereden geldiğiyle ilgili.

Yanlış yönü gösteren iki ad

Sonuç tablolarında Lambda adlı bir sütun var ve baktığım her satırda değeri 0,25'ti. Kestirimi çalıştıran servis fonksiyonunun adında "3pl" geçiyor. Bu iki olgu yan yana gelince akla, şans başarısı için kestirilmiş bir tabanı olan üç parametreli bir model geliyor. Fonksiyonu okuduğumda kütüphanenin 2PL sınıfını çağırdığını gördüm. Lambda, kestirilen tepki fonksiyonunun hiçbir yerinde geçmiyor; çıktı boru hatları onu sabit bir değer olarak yazıyor. Şans başarısını gerçekten kestiren bir model bir alt asimptot c'yi de kestirirdi:

P = c + (1 - c) * sigmoid(a * (theta - b))

Bu, burada kestirilenden farklı bir tepki fonksiyonu. Bunu en başa koyuyorum, çünkü bütün hikâyedeki en ucuz hata ve yayımlanması en utandırıcı olanı. Platformun 3PL kestirdiğini söyleyen bir rapor, burada geçerli olmayan 3PL kılavuzlarıyla karşılaştırmalara kapı açar. Serinin geri kalanında her katsayı bir 2PL katsayısıdır ve Lambda saklanmış bir sabittir.

Öğrenciler daha mı az farklılaşıyordu?

Ortaya atılan açıklamalardan biri, yeni grupların birbirine daha çok benzediğiydi. Argümana göre ayırt edicilik öğrenciler arasında bir karşıtlık ister, dolayısıyla homojen bir grup düz eğriler üretir. Resmî ders istatistikleri ilk bir kontrole imkân veriyordu. Her alanın ana matematik dersinde ham yüzde puanları ve saklanan en yüksek ayırt edicilik şöyleydi:

AlanGüncel ham yüzde puanın ortalaması / standart sapmasıArşiv ortalaması / standart sapmasıSaklanan en yüksek matematik a değeri, güncel / arşiv
Matematik22.10 / 16.6215.80 / 15.56yaklaşık 0,90 / 1,54
Deneysel Bilimler8.60 / 14.475.10 / 11.13yaklaşık 0,96 / 1,73
Beşerî Bilimler9.40 / 14.025.20 / 11.70yaklaşık 1,22 / 1,72

Üç alanın üçünde de yeni sınavın ham puan yayılımı daha büyüktü ve üçünde de saklanan en yüksek ayırt edicilik daha düşüktü. Homojenlik hikâyesinin basit hâli bunun tersini öngörür. Yine de tablonun sınırları var ve bunları kayda geçirmek istiyorum. Bunlar derse özgü saklanmış istatistikler, yani buradaki en yüksek değerler bütün ders ve alt ders satırları üzerinden alınmış en yüksek değerler değil. Ham puanın standart sapması gözlenen puanları betimler; gizil yeteneğin standart sapması başka bir niceliktir. Eski ve yeni sınavların soruları da farklıydı. Tablo kolay bir açıklamayı eliyor. Nedeni ise belirsiz bırakıyor.

Üç tür değişkenlik

Devam etmeden önce, konuşurken hepsine "değişkenlik" dediğimiz üç niceliği ayırmak işe yarıyor. Farklı soruları yanıtlıyorlar ve sonraki bölümler onları farklı araçlarla ölçüyor.

NicelikNe değişiyorNeyi yanıtlıyor
Maddeler arası dağılımAynı ders ve yıldaki farklı sorularSoruların kestirilen katsayıları birbirinden ne kadar farklı?
Örnekleme değişkenliğiAynı dondurulmuş yanıt havuzundan seçilen öğrencilerKalibrasyon örneklemi değişince cevap ne kadar değişiyor?
Eğitim rastgeleliğiYanıt alt kümesi tamamen aynı kalırken eğitim seed'i (tohum)Stokastik kestirim cevabı ne kadar değiştiriyor?

Bir sınavın soruları arasında katsayıların geniş bir aralığa yayılması, tek bir katsayının ne kadar kararlı olduğu hakkında hiçbir şey söylemez. Yeniden örneklemede neredeyse kımıldamayan bir katsayı da optimize edicinin seed'i değişince kayabilir. 5. bölüm ikinci ve üçüncü niceliği ölçüyor. 6. bölümdeki histogramlar ve kutu grafikleri birinciyi gösteriyor; oradaki dar bir kutu, herhangi bir soru için dar bir güven aralığı anlamına gelmez.

Kodu okumak

İlk pratik soru, platformdaki iki kod tabanının aynı parametreleri aynı mantık ve ayarlarla hesaplayıp hesaplamadığıydı. Bunlardan biri uyarlamalı testlere hizmet veriyordu. İncelediğim özellikte mevcut madde parametrelerini kendi madde tablolarından okuyordu ve orada uçtan uca eşdeğer bir kalibrasyon giriş noktası bulamadım. Kontrol etmem için başka bir giriş noktası gösteren de olmadı. İkinci kod tabanı kalibrasyonu yapan taraftı.

İkisinde de Pyro üzerine kurulu açık kaynak IRT kütüphanesi py-irt'nin projeye gömülü (vendored) bir kopyası vardı. Bu kopyanın dört dosyasını SHA-256 ile karşılaştırdım: 2PL modeli, veri kümesi sınıfı, eğitim döngüsü ve yapılandırma. Dördü de iki depoda bayt bayt aynıydı.

Eşleşen hash'ler tam olarak tek bir şeyi kanıtlar: O dört dosya aynıdır. Her servisin hangi yanıtları seçtiği, onları nasıl grupladığı, hangi çalışma zamanı ayarlarını kullandığı ya da kalibrasyon yapıp yapmadığı hakkında hiçbir şey söylemezler. Burada iki servisten birinin incelenen kodunda kalibrasyon giriş noktası bulamadım; yani eşleşme doğruydu ve konuyla neredeyse ilgisizdi. Hash'ler, iki uygulamanın aynı biçimde kalibrasyon yaptığı iddiasını taşıyamaz.

Kalibrasyon yapan kod tabanının içinde aynı kestiriciye giden iki kod yolu vardı. Birincisi soru başına yanıt kayıtlarını analitik veri ambarının yanıt olgu tablosundan (fact table) okuyor, onları aktif analiz isteği ve soru boyutları üzerinden ilişkilendiriyor, yanıt durumu 5 (görülmeyen) olan yanıtları dışarıda bırakıyor, değerlendirme dersine göre grupluyor ve kestiriciyi çağırıyordu. İkincisi değerlendirme çalıştırmalarının sonuçları etrafında kurulmuştu. Yanıtları ve sıkıştırılmış cevap kâğıtlarını saklı yordamlarla (stored procedure) getiriyor, sınav, kullanıcı ve içerik bazında birleştiriyor, cevap kâğıdındaki yanıtlara öncelik veriyor, seçilen her şıkkı önbelleğe alınmış bir cevap anahtarıyla eşliyor, değerlendirme dersi ve derse göre grupluyor, aynı 2PL sınıflarını çağırıyor ve kendi sonuç modellerini yazıyordu. Genel biçimiyle kestirici çağrısı şöyleydi:

trainer = TwoParamLog.train(data, device="cpu", epochs=2000)
params = trainer.best_params

Yani model sınıfı ve eğitim çağrısı ortaktı, girdiler ise farklı hazırlanıyordu. Cevap kâğıdı yolu, bilinen bir soru için boş bir girdiyi açık bir yanıt satırı olarak üretebiliyor ve böyle bir satır, olgu tablosundaki görülmeyen durumuyla kendiliğinden eşdeğer sayılmaz. Çıktısındaki sayımlardan birinin adı "cevap veren öğrenciler" anlamını çağrıştırıyor. Bu sayım birleştirilmiş girdide bulunan kullanıcıları sayıyor ve yalnızca adına bakarak her birinin anlamlı bir cevap seçtiği söylenemez.

İki yol farklı sonuç tablolarını besliyordu. İnsanların endişelendiği katsayılar değerlendirme çalıştırmalarının sonuç tablosundaydı; ayrı bir içerik bankası tablosu ise başka bir kalibrasyonu tutuyordu. Bu iki kolu tek bir şeymiş gibi ele almak işin başında yaptığım yanlış bir dönüştü. Çalıştırma düzeyindeki tabloyu ve onun çalıştırma ve ders anahtarlarını izleyerek bunu düzelttim. Daha sonra araştırma işlerini kurduğumda bu işler kestirici sınıflarını doğrudan içe aktardı ve yazma yetkisi olan HTTP endpoint'ini hiç çağırmadı.

Bu karşılaştırmanın kesin bir sınırı var. Güncel kaynak kodu karşılaştırdım; bu, geçmişe dönük bir dağıtım denetiminden farklı bir şey. Kaydedilmiş araştırma sonuçları saklı yordamların gerçeklemelerini, dağıtılmış sürümleri, üretimdeki girdilerin tam anlık görüntülerini ya da geçmişteki yapılandırma durumlarını ortaya koymaz. Bu yüzden saklanan her çalıştırmanın, sonradan araştırmada kullandığım yolun girdi kurallarını izlediğini söyleyemem ve söylemiyorum.

Katsayı bir boru hattının çıktısıdır

Bu noktada asıl sorunun biçimi değişmişti. "Yeni sorular daha mı kötü?" sorusu saklanan bir a değerini sorunun bir özelliği gibi ele alır. Pratikte bu değer bir karar zincirinin sonudur: kim seçildi, cevapları nasıl kodlandı, hangi model ve önselle kestirim yapıldı, optimize edici nasıl çalıştı ve ne zaman durdu, sayılar bir rapor için nasıl toplulaştırıldı. Zincirin her halkası incelenmeden çıktıdaki bir fark soru kalitesine bağlanamaz.

Meseleye böyle bakmak bana bir iş planı da verdi. Her aşama kendi ölçütleriyle kontrol edilebilirdi: popülasyon veritabanına, model kaynak koduna, kestirici de ne olması gerektiğini bildiğim kontrollü deneylere karşı. Bu kontrollerin bazıları apaçık görünen açıklamaları eledi, birkaçı da daha iyi bir modelin düzeltemeyeceği veri sorunlarını ortaya çıkardı. Serinin geri kalanı bu sırayı izliyor.

2. bölüm popülasyonla başlıyor: tek bir ders için "öğrenci" sayısının altı meşru karşılığı ve cevapsız bir sorunun ne anlama geldiğine karar veren kodlama kuralı.

Bu not İngilizce ve Farsça olarak da yayımlandı: İngilizce · Farsça.

Tüm notlara dön