[PYTHON] Fähigkeitswertschätzung mit Pyirt

Dieser Artikel ist der 20. Tagesartikel des Classi Adventskalenders 2019.

Hallo. Mein Name ist @yosuke_ohara und ich gehöre zur Abteilung Daten-KI und bin Datenwissenschaftler. Classi ist ein Unternehmen, das Cloud-Dienste anbietet, die den Einsatz von IKT in der Schulbildung unterstützen. Im Bereich der Datenwissenschaft im Bildungsbereich ist jedoch häufig der Fähigkeitswert der Lernenden von Interesse (angemessen, wenn der Zustand des Lernenden nicht verstanden wird). Es ist natürlich, weil es nicht zum Lernen führt. Daher möchte ich eine Methode namens ** Item Response Theory ** einführen, die häufig bei der Schätzung von Fähigkeitswerten verwendet wird.

Inhaltsverzeichnis

  1. Was ist Item Response Theory? (# Anchor1) 1-1. [Was ist der Grad der Diskriminierung](# anchor2) 1-2. [Was ist der Schwierigkeitsgrad](# anchor3)
  2. [Parameterschätzungsmethode](# anchor4)
  3. [Parameterschätzung durch periphere wahrscheinlichste Methode](# anchor5)
  4. [IRT Challenge](# anchor6)
  5. [Endlich](# anchor7)

Was ist die Item-Response-Theorie?

Die Item-Response-Theorie (IRT) ist eine Methode, die hauptsächlich zur Schätzung von Fähigkeitswerten aus Testergebnissen verwendet wird und von TOEIC als Test mit IRT bekannt ist. Der größte Vorteil von IRT besteht darin, dass Sie Fähigkeitswerte über Tests hinweg schätzen können. Die meisten Tests, wie z. B. der Zentraltest, bieten nur begrenzte Möglichkeiten zur Durchführung des Tests. Durch die Verwendung von IRT können Testteilnehmer, die verschiedene Tests durchgeführt haben, jedoch auch eine gemeinsame Bewertung vornehmen. .. Daher ist es für Kandidaten ein guter Punkt, den Test zum richtigen Zeitpunkt ablegen zu können. Ein Prozess namens Entzerrung ist jedoch erforderlich, um Schätzungen über Tests hinweg vorzunehmen. Der Ausgleich bezieht sich auf den Prozess der Ausrichtung der Ergebnisse verschiedener Tests auf einen gemeinsamen Ursprung und eine gemeinsame Einheit. Um einen Ausgleich durchzuführen, ist es notwendig, ein allgemeines Problem (als "Ankerproblem" bezeichnet) in den Vergleichstest aufzunehmen, und das Design einschließlich der Durchführung des Ausgleichs wird als Testdesign bezeichnet. Ich werde.

Darüber hinaus zeichnet es sich durch die Definition und Schätzung von Parametern nicht nur für Fähigkeitswerte, sondern auch für Elemente aus (Probleme bei Tests). Insbesondere wird ein logistisches Modell zwischen dem Fähigkeitswert und der richtigen Antwortwahrscheinlichkeit angenommen, und die Form der Logistik ändert sich in Abhängigkeit vom Parameter des Elements, um den Unterschied in der richtigen Antwortwahrscheinlichkeit für jede Frage auszudrücken. Es gibt 1-Parameter-Modelle bis 4-Parameter-Modelle, aber dieses Mal nehmen wir das am häufigsten verwendete 2-Parameter-Logistikmodell als Beispiel.

p(θ) = \ \frac{1}{1+e^{-Da(θ-β)}}…(1)\\    

θ ist der Fähigkeitswert und p (θ) ist die richtige Antwortwahrscheinlichkeit. D ist eine Konstante für die Integration in 1, und die wichtigsten Elementparameter sind α (Unterscheidung) und β (Schwierigkeit). Lassen Sie uns einen konkreten Blick darauf werfen, wie sich die richtige Antwortwahrscheinlichkeit in Abhängigkeit von α und β ändert.

1-1. Wie hoch ist der Grad der Diskriminierung?

スクリーンショット 2019-12-20 18.38.21.png

Der Grad der Diskriminierung ist ein Parameter, der angibt, "wie viel die Fähigkeit des Prüflings identifiziert werden kann". Mit anderen Worten, es ist ein Wert, der darstellt, "wie viel Fähigkeit an der Richtigkeit des Problems gemessen werden kann". In der obigen Grafik sehen Sie, dass die richtige Antwortwahrscheinlichkeit nahe der Mitte der Kurve (grün) mit einem großen α stark ansteigt. Mit anderen Worten, der Bereich der Fähigkeitswerte, in dem die richtige Antwortwahrscheinlichkeit bei etwa 50% liegt, ist eng und es ist leicht zu beurteilen, dass "wenn Sie diese Frage richtig beantworten, der Fähigkeitswert hoch ist". Andererseits ist die Kurve mit einem kleinen α (blau) eine sanfte Kurve, und der Bereich der Fähigkeitswerte mit einer korrekten Antwortwahrscheinlichkeit von etwa 50% ist groß. Mit anderen Worten, es kann nicht gesagt werden, dass "selbst wenn Sie diese Frage richtig beantworten, der Fähigkeitswert hoch ist".

1-2. Was ist der Schwierigkeitsgrad?

スクリーンショット 2019-12-20 18.37.44.png Schwierigkeit, wie das Wort impliziert, repräsentiert die Schwierigkeit eines Gegenstandes. Es ist ersichtlich, dass sich die Kurve in positiver Richtung der x-Achse parallel umso mehr parallel bewegt, je größer β ist. Mit anderen Worten, wenn die richtige Antwortwahrscheinlichkeit für jede Kurve mit derselben Fähigkeit verglichen wird, ist ersichtlich, dass die richtige Antwortwahrscheinlichkeit umso geringer ist, je größer der Schwierigkeitsparameter ist.

2. Methode zur Parameterschätzung

Ich habe versucht, die wichtigsten Schätzmethoden zu organisieren (da es keine Schärfe gibt, wenn Sie detailliert schreiben, wie z. B. die basianische Erweiterung, ist es eine große Korngröße).

Schätzmethode           Überblick
Höchstwahrscheinlich Schätzmethode Methode, die verwendet wird, um einen der Fähigkeitswerte und Gegenstandsparameter und den anderen zu schätzen
Simultane Methode zur Schätzung der maximalen Wahrscheinlichkeit Eine Methode zum gleichzeitigen Schätzen von Fähigkeitswerten und Elementparametern. Schätzen Sie durch Wiederholen von "(1) partielle Differenzierung und Lösung nach Fähigkeitswert" und "(2) partielle Differenzierung und Lösung nach Elementparameter" für die Wahrscheinlichkeitsfunktion.
Periphere wahrscheinlichste Schätzmethode Ein Verfahren zum Schätzen durch Peripherisieren mit dem Fähigkeitswertparameter und Integrieren und Eliminieren beim Schätzen des Elementparameters in die gleichzeitige Schätzung. Berechnen Sie mit dem EM-Algorithmus

Die wahrscheinlichste Schätzung ist eine einfache Methode zum Definieren der richtigen Antwortwahrscheinlichkeit durch Gleichung (1) und zum Erstellen einer Wahrscheinlichkeitsfunktion, es wird jedoch vorausgesetzt, dass einer der Parameter erforderlich ist. Die gleichzeitige Schätzung ist eine Methode, mit der jeder Parameter auf einmal abgerufen werden kann. Es besteht jedoch das Problem, dass die geschätzte Anzahl der Elementparameter die Konsistenz nicht erfüllt. Daher gibt es einen Nachteil, dass sich die Genauigkeit nicht erhöht, selbst wenn die Anzahl der Proben erhöht wird, um die Schätzgenauigkeit zu verbessern. Um dieses Problem zu lösen, ist das Verfahren zum Marginalisieren des Fähigkeitswertparameters beim Schätzen des Elementparameters das periphere Schätzverfahren, und es scheint, dass dieses Verfahren derzeit die bevorzugte Schätzung ist. Da die Wahrscheinlichkeitsfunktion bei Marginalisierung jedoch nicht explizit gelöst werden kann, wird sie durch numerische Berechnung unter Verwendung des EM-Algorithmus geschätzt.

Parameterschätzung durch periphere wahrscheinlichste Methode

Als ich die Pakete untersuchte, die mit IRT analysiert werden können, war es pyirt für Python und [ltm](https: //cran.r-project) für R. .org / web / packages / ltm / ltm.pdf) und lazy.irtx scheinen verwendbar zu sein. Dieses Mal möchte ich das Pyirt-Paket verwenden, um die Parameter nach der peripheren Maximum-Likelihood-Methode zu schätzen. Der Datensatz verwendet algebra_2005_2006, das von KDDCUP verwendet wird. DataShop @ CMU enthält verschiedene public_data in Bezug auf Bildung und wird empfohlen. Da die erforderlichen Daten in BigQuery hochgeladen werden, werden sie auch mit read_gbq von Pandas gelesen.

%reload_ext autoreload
%autoreload 2
import itertools
import numpy as np
import pandas  as pd
from pandas.io import gbq
from pyirt import irt
#Modul, das Abfragen verwaltet, die Daten aus BigQuery extrahieren
import queries
from tqdm import tqdm

_train = pd.read_gbq(queries.train_agg(), PROJECT_ID, dialect='standard', location="asia-northeast1")
#Im Fall von Pyirt vereinheitlichen Sie sich mit den folgenden Spaltennamen[(user_id, item_id, ans_boolean)]Struktur(Liste der Taples)Muss sein
train = _train.rename(columns={
    "anon_student_id": "user_id",
    "question_unique_key": "item_id",
    "is_correct": "ans_boolean"
})

item_param, user_param = {}, {}
problem_hierarchies = train["problem_hierarchy"].unique()
#problem_Teilen Sie die Daten für jede Hierarchie und schätzen Sie sie nach der peripheren Maximum-Likelihood-Methode
for _problem_hierarchy in tqdm(problem_hierarchies, position=0):
    train_by_problem_hierarchy = train.query("problem_hierarchy == @_problem_hierarchy").drop("problem_hierarchy", axis=1)
    train_by_problem_hierarchy = train_by_problem_hierarchy[["user_id", "item_id", "ans_boolean"]].values
    #irt ist eine Funktion zur Schätzung
    _item_param, _user_param = irt(train_by_problem_hierarchy)
    item_param.update(_item_param)
    user_param.update(_user_param)

Der Fähigkeitswert (user_param) und der Elementwert (item_param) werden in diesem Wörterbuchformat zurückgegeben. スクリーンショット 2019-12-20 19.16.46.png スクリーンショット 2019-12-20 19.16.34.png

Ich möchte die Ergebnisse in BigQuery speichern, also konvertiere ich sie in einen Datenrahmen und sende sie mit gbq.to_gbq.

user_param_df = pd.DataFrame(user_param.items(), columns=["anon_student_id", "theta"])
item_param_dict = []
for tmp_question_unique_key, param_dict in item_param.items():
    item_param_dict.append({
        "question_unique_key": tmp_question_unique_key,
        "alpha": param_dict["alpha"],
        "beta": param_dict["beta"],
        "c": param_dict["c"]
    })
item_param_df = pd.io.json.json_normalize(item_param_dict)

#Senden Sie das Schätzergebnis an BigQuery
gbq.to_gbq(item_param_df,'{}.item_param'.format(DATASET), project_id=PROJECT_ID, if_exists='append', location="asia-northeast1")
gbq.to_gbq(user_param_df,'{}.user_param'.format(DATASET), project_id=PROJECT_ID, if_exists='append', location="asia-northeast1")
スクリーンショット 2019-12-20 18.03.16.png

Wenn Sie für jedes Problem ein Streudiagramm mit dem Identifikationsgrad x Schwierigkeitsgrad erstellen, können Sie sehen, dass der Identifikationsgrad im Bereich von 0 bis 3 und der Schwierigkeitsgrad im Bereich von -3 bis 3 geschätzt wird.

IRT-Herausforderungen

Das IRT eignet sich zur Schätzung in Situationen, in denen sich der Fähigkeitswert nicht ändert, z. B. in einem Test, sondern zur Schätzung in Zeitreihensituationen (z. B. wenn sich der Fähigkeitswert aufgrund des Lernens nacheinander ändert, z. B. beim Selbststudium). Es gibt ein Problem, dass es nicht geeignet ist. Daher wurden Zeitreihenerweiterungen vorgenommen, wie beispielsweise die Einführung von Zeitparametern zum Grad der Diskriminierung und das Verfahren zur Beschreibung von Änderungen der Fähigkeitswerte in einem Zustandsraummodell. Darüber hinaus wird häufig eine Methode namens Knowledge Tracing als Methode zur Schätzung von Fähigkeitswerten verwendet. Knowledge Tracing ist ein Modell, das beim Übergang von Fähigkeitswerten ein verstecktes Markov-Modell annimmt und dadurch gekennzeichnet ist, dass die Wahrscheinlichkeit zwischen Übergängen als bedingte Wahrscheinlichkeit definiert und der Fähigkeitswert aus der bedingten Wahrscheinlichkeit geschätzt wird. Ich konnte auf pypi kein Paket für Knowledge Tracing finden, aber ein Paket namens pyBKT (BKT… Bayesian Knowledge Tracing) ist auf Git verfügbar. Probieren Sie es aus. Ich werde es versuchen.

Schließlich

Dieses Mal habe ich hauptsächlich über IRT gesprochen, aber ich denke, dass das Gebiet der Fähigkeitswertschätzung eine kurze Geschichte hat und in anderen Bereichen Raum für Umkippmethoden besteht. Ich halte es für notwendig, die Methode zur Formulierung des Problems zu ändern und einen flexiblen Ansatz zu wählen, ohne an die bestehende Methode gebunden zu sein. Wenn Sie mehr über die Schätzung von Fähigkeitswerten erfahren möchten, lesen Sie bitte den einleitenden Teil des Dokuments hier, das 2019 bei EDM (Educational Data Mining) ausgezeichnet wurde. Bitte schauen Sie sich das an.

Morgen ist @kitaharamikiya !!

Recommended Posts

Fähigkeitswertschätzung mit Pyirt
Simulation der Flugbahnschätzung mit graphbasiertem SLAM
Extrahieren Sie Informationen mit File :: Stat in Ruby
Kategorieschätzung mit der Bilderkennungs-API von docomo