IRT Kalibrasyon Notları 2: Kalibrasyona Gerçekte Kim Girdi

IRT Kalibrasyon Notları 2: Kalibrasyona Gerçekte Kim Girdi

Güncel Deneysel Bilimler sınavını ve onun matematik dersini ele alalım. İlk altı sınavlık incelemede bu ders için elimde dört öğrenci sayısı vardı: 521, 530, 522 ve 523. Hepsi doğruydu. Farklı şeyleri sayıyorlardı ve 1. bölümdeki resmî katılıma dayanan karşılaştırma, kestiricinin hiç görmediği bir sayıya yaslanıyordu.

Bu bölüm popülasyonla ilgili: hangi öğrenciler ve hangi yanıtlar kalibrasyona girdi ve her yanıtın ne anlama gelmesine izin verildi. Büyük kısmı veri mühendisliği, içinde IRT yok. Yine de katsayıların anlamını o belirledi.

Altı sayım, hepsi meşru

Tek bir sınav ve ders için en az altı niceliğe "öğrenci sayısı" denebilir:

  1. Sınavın resmî katılımı.
  2. Genel öğrenci istatistiği kaydı olan öğrenciler.
  3. O derste geçerli bir puanı olan öğrenciler.
  4. O derste en az bir kullanılabilir yanıtı olan öğrenciler.
  5. Daha önceki bir kalibrasyonun saklamış olduğu bir yetenek değeri bulunan öğrenciler.
  6. Belirli bir soruya verilmiş gözlenen yanıtların etkin sayısı.

O Deneysel Bilimler sınavı için elimdeki dört sayı şunlardı: 521 resmî katılımcı, 530 genel öğrenci istatistiği kaydı, daha önce saklanmış matematik IRT çıktısında 522 öğrenci ve kullanılabilir matematik yanıtlarının yeni bir çekiminde 523 öğrenci. Bunların hiçbiri bir diğerinin yerine geçemez. Katılım sınav düzeyindeki bir özet tablodan, ders rakamları ise ders düzeyindeki bir özetten geliyordu; ikisi de ilgili aktif analiz isteğine aitti. Bu toplamlar raporlama için kullanışlı, yine de tek tek yanıtlar düzeyindeki uygunluk kontrollerinin yerine geçmelerine izin vermedim.

Kestirici açısından en önemlisi listedeki son sayım. Bir sorunun katsayısı, o sorunun gösterildiği öğrencilerden kestirilir; 3. bölüm "200 öğrenci yeterlidir" kuralını ele alırken bu konuya geri dönüyor. Resmî katılım yalnızca bulunması en kolay sayı.

Tek bir tanım bile anlık görüntüler arasında oynayabilir. Erken bir anlık görüntü Beşerî Bilimler için 1.132 katılımcı bildiriyordu, sonraki bir yeniden kontrol 1.134 verdi. Dokuz sınavlık nihai çalışma sonraki değeri dondurdu. Bunu bir sürüm ve köken (provenance) meselesi olarak görüyorum; sayıları harmanlamak yerine her sayının hangi anlık görüntüden geldiğini kaydettim.

İstekler ve kimlik

Bu platformda analitik veri ambarındaki her yanıt satırı bir analiz isteğine aittir. Araştırmanın seçim yolu tabloları şu sırayla ilişkilendiriyordu (burada tabloları rollerine göre anıyorum):

per-question response fact rows
    -> analysis request (active requests only)
    -> assessment question
    -> question
    -> content item id

Yalnızca tamamlanmış analiz isteklerini kabul ettim. İstek kimliği her veri çekimiyle birlikte kaydedildi ve sonradan yeniden kontrol edildi; böylece bir yeniden çalıştırma aynı analizi okuduğunu, araya daha yeni bir analizin girmediğini doğrulayabiliyordu. Kulağa defter tutmak gibi geliyor ve gerçekten öyle. Daha sonra belirli bir sayının hangi yanıtlardan geldiğini söyleyebilmemi sağlayan da buydu.

Hangi dersler uygundu

Bir yanıt satırının var olması, dersin o öğrenci için uygun olduğunu kanıtlamıyordu. Bir öğrenciyi bir derste saymak için aynı istek, aynı öğrenci ve uygun ders için ders istatistiklerinde boş olmayan (non-null) bir ham puan şartı koydum.

Bunun nedenini Beşerî Bilimler gösteriyor. Standart Beşerî Bilimler derslerinin yanında, kendi konuları olan ayrı bir müfredat kolu var. Daha önceki bir arşiv çekiminde bu kolun tarih ve coğrafya dersinde, uygunluk filtresinden önce görülmüş satırı olan 8.148 kullanıcı vardı, filtreden sonra 328 kaldı. Arapça dersi 8.335'ten 275'e indi. O dersin dışında kalan binlerce öğrenci için yanıt satırları mevcuttu. Uygun olmayan bu girdiyle kestirim yapıldığında aşırı ayırt edicilik kestirimleri üretti ve bu kestirimler, 4. bölümdeki bağımsız kestiricinin düzeltilmiş sonuçlarında yer almadı.

Ham puanın bu boru hattında tek bir işi vardı: uygunluğa karar vermek, bir de biraz raporlama. Hiçbir zaman bir IRT gözlemi olmadı. Kestirime giren gözlemler, aşağıdaki kısımda anlatılan ikili yanıt durumlarıydı. Bunu belirtiyorum, çünkü yanıt verilerinin yanında duran ham puan adlı bir sütun birilerini onu girdi olarak kullanmaya davet eder ve bu başka bir model olurdu.

Sıfır ne anlama geliyor

Yanıt olgu tablosu her öğrenci ve soru için bir yanıt durumu saklar. Araştırmada bu durumlar şöyle ele alındı:

Kaynaktaki yanıtAraştırmadaki işlem
Durum 1Gözlenen doğru yanıt, Y = 1
Durum 2, 3 veya 4Gözlenen doğru olmayan yanıt, Y = 0
Durum 4: görülüp boş bırakılanSıfır olarak dâhil edildi
Durum 5: görülmeyenOlabilirliğin dışında bırakıldı
Yanıt kaydı yokYoktan üretilmedi, gözlenmiş bir sıfır olarak da doldurulmadı

Bu kurala çoğu zaman kısaca "yalnızca öğrencinin cevapladığı sorular" deniyor ve bu kısaltma yanlış. Görülüp boş bırakılan sorular veride sıfır olarak kalır: Öğrenci soruyu gördü ve doğru bir cevap vermedi. Görülmeyen sorular dışarıda bırakılır, çünkü öğrencinin hiç görmediği bir soru onun yeteneği hakkında hiçbir kanıt taşımaz. Kayıt olmayan yerde de hiçbir şey eklenmez. Her eksik hücreyi sıfıra çeviren bir boru hattı yokluğu başarısızlık sayar; kestirilen güçlük ve ayırt edicilik de bu tercihi görünür hiçbir iz bırakmadan içine çeker.

Hayalî bir öğrenci bu tercihin ne kadar büyük olduğunu gösteriyor. Bir formda 30 soru olduğunu ve öğrenciye bunların 20'sinin gösterildiğini düşünün; öğrenci 8'ini doğru, 8'ini yanlış cevaplıyor, 4'ünü boş bırakıyor. Araştırma kodlamasında bu öğrenci olabilirliğe 20 gözlem katar, 8 bir ve 12 sıfır; görülmeyen 10 soru hiçbir şey katmaz. Görülmeyen soruları yanlış diye kodlarsanız aynı öğrenci, 22'si sıfır olmak üzere 30 gözlem katar. Kestirilen yeteneği düşer ve o 10 sorunun her biri artık bir öğrencinin bilemediği bir soru gibi görünür. Bunu bütün bir öğrenci grubuyla çarpın, madde parametreleri de onunla birlikte kayar.

Bu kurallar araştırma çekimini anlatıyor. 1. bölümde gördüğümüz gibi çalıştırma tabanlı yol yanıtları cevap kâğıtlarından yeniden kuruyor ve bilinen sorular için açık boş satırlar oluşturabiliyordu. Onun boşluklarının bu tabloyla örtüştüğünü varsaymadım.

Sizin yerinize karar veren yardımcı fonksiyon

Gömülü kütüphane veri kümesini yanıt satırlarından, 1 dışındaki her durumu sıfıra çeviren bir yardımcı fonksiyonla kurar. Ona görülmeyen satırları verirseniz bunlar yanlış cevaba dönüşür. Aynı yardımcı, yinelenen öğrenci-madde çiftlerini de atar. Bir çiftin iki kopyası birbiriyle çelişiyorsa biri sessizce hayatta kalır ve hangisinin kalacağına yardımcının iç işleyişi karar verir.

İki davranış da bir kütüphane için makul varsayılanlar, ama kendi kararlarını önceden vermemiş bir boru hattı için tehlikeli. Bu yüzden araştırma işlerinde sıra sabitti: Görülmeyen yanıtlar yardımcı çağrılmadan önce filtrelenir, yinelenenler de yine çağrıdan önce kontrol edilir ki tekilleştirme hiçbir zaman kazara olmasın. Sütun adları hayalî olmak üzere, bu sıranın bir taslağı şöyle:

# The library helper maps every status except 1 to 0,
# and keeps one row per (student, item) without telling you which.
rows = rows[rows["status"] != 5]            # unseen: not an observation

dupes = rows.duplicated(["student", "item"], keep=False)
if dupes.any():
    raise ValueError("duplicate student/item pairs; resolve them before fitting")

rows["y"] = (rows["status"] == 1).astype(int)   # 2, 3, 4 (incl. seen blank) -> 0

6. bölüm bu hikâyenin daha uzun bir hâlini anlatıyor. Güncel yılın formları değiştirildiğinde yanıtların yinelenen kopyaları çok sayıda ortaya çıktı ve kural sıkılaştı: Tutarlı kopyalar kanonik bir eşlemeden sonra tek satıra indirilebiliyor, çelişen kopyalar ise çalıştırmayı durduruyordu.

Gizlilik ve anlık görüntüler

Bütün bu çalışma gerçek öğrenci yanıtlarıyla yapıldı, bu yüzden baştan sona birkaç kural geçerliydi. Herhangi bir araştırma girdisinin anlık görüntüsü saklanmadan önce öğrenci kimlikleri, ders başına atanan anonim indekslerle değiştirildi. Dışa aktarılan CSV raporlarında gerçek öğrenci kimlikleri yoktu. Herkese açık sonuç paketlerine yanıt satırları ve bireysel yetenek vektörleri konmadı. 3. bölümdeki simülasyonda kullanılan yetenekler üretilmiş değerlerdi ve öğrenci kayıtlarıyla hiçbir ilgileri yoktu.

Her sorgu salt okunurdu. Kaynak uygulamanın yazma fonksiyonlarını ne yaptıklarını anlamak için okudum; araştırma boru hattı onları hiç çağırmadı. Sorgular, canlı sistemle çekişmeyi azaltmak için READ UNCOMMITTED altında çalıştı. Bu yalıtım düzeyi paylaşımlı kilit almaz ve yoğun bir veritabanını az yormasının nedeni de bu. Öte yandan uzun bir çekimin commit edilmemiş satırları ve farklı anlara ait satırları okuyabileceği anlamına da gelir; dolayısıyla sonuç, geçmişin işlem açısından tutarlı bir anlık görüntüsü değildir.

Dondurulmuş girdilerin önemi buradan geliyordu. Her çekim, istek kimlikleri ve bir hash ile birlikte yerel olarak kaydedildi ve her birebir yeniden çalıştırma, veritabanını yeniden sorgulamak yerine dondurulmuş dosyayı okudu. Yeni bir canlı çekim eskisinden pekâlâ farklı çıkabilir, çünkü istekler, yanıtlar ve uygunluk meta verileri zamanla değişir. Saklanan üretim katsayıları, tam girdilerini yeniden kurmaya yetecek istek kökeni bilgisini her zaman taşımıyordu. Bu yüzden onları yeniden yapılan güncel kestirimlerden ayrı tutuyorum ve ikisi arasındaki her tutarsızlığa bir neden yakıştırmıyorum.

Bu neyi değiştirdi

Popülasyon çalışması bir grup katsayıyı doğrudan değiştirdi: ayrı müfredat kolundan gelen aşırı kestirimleri. Daha büyük etkisi, "N"yi tek bir sayı olmaktan çıkarıp yazıya dökebildiğim bir tanıma dönüştürmesi oldu: tamamlanmış ve aktif analiz isteği, geçerli puanı olan uygun ders, en az bir kullanılabilir yanıt, görülüp boş bırakılanlar sıfır olarak, görülmeyenler dışarıda, yinelenenler kütüphane onları görmeden çözülmüş. Bu tanım yerindeyken iki sınav arasındaki bir karşılaştırma en azından aynı türden şeyleri karşılaştırır. Tanım olmadan 1. bölümdeki katılım tablosu bana sorular hakkında hiçbir şey söyleyemezdi.

Popülasyon netleştikten sonra kestiricinin kendisine döndüm. 3. bölüm, kodun "vague" dediği önsele ve yalnızca öğrenci sayısı değiştiğinde aynı otuz soruya ne olduğuna bakıyor.

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

Tüm notlara dön