[PYTHON] Examen de mathématiques, partie 1 (définition des questions et génération de données)

Je vais suivre la théorie de la réaction des items, qui est célèbre comme test mathématique, théoriquement et gratter dans une certaine mesure l'estimation des paramètres.

Comme il est long de faire un article, je vais l'écrire sur plusieurs articles. La table des matières est la suivante.

Cette fois, c'est la partie 1 "Définition des problèmes et génération de données".

Problème de réglage

Par exemple, considérez les examens tels que TOEIC et les examens centraux. Supposons que plusieurs candidats résolvent plusieurs questions et obtiennent les résultats suivants:

Candidat 1 Candidat 2 Candidat 3 Candidat 4 Candidat 5 Candidat 6 Candidat 7 Nombre de bonnes réponses
question 1 Positif Positif Positif Positif Positif Faux Positif 6
question 2 Faux Faux Faux Positif Faux Faux Faux 1
question 3 Positif Positif Positif Positif Positif Positif Faux 6
Question 4 Faux Faux Faux Positif Faux Positif Positif 3
Question 5 Faux Faux Faux Positif Faux Faux Positif 2
Question 6 Positif Positif Positif Positif Faux Positif Positif 6
Question 7 Positif Faux Positif Positif Positif Positif Positif 6
Question 8 Faux Positif Faux Faux Positif Faux Positif 3
Question 9 Positif Positif Faux Positif Positif Positif Positif 6
Question 10 Positif Positif Positif Faux Faux Positif Positif 5
Score brut 6 6 5 8 5 6 8

Le point de vue du tableau est que l'intersection du candidat et de la question est l'exactitude du candidat dans la question. Par exemple, «Le candidat 1 a répondu correctement à la Q3» et «Le candidat 6 a répondu de manière incorrecte à la Q5». ** Le nombre de réponses correctes ** est le nombre de réponses correctes pour tous les candidats à la question et est le nombre de réponses positives par ligne. ** Score brut ** est le score total lorsque les bonnes réponses sont égales à 1 point, et est le nombre positif pour chaque colonne.

Maintenant, dans cette situation, disons que vous voulez ** estimer la capacité du candidat et la difficulté du problème **. Les capacités des candidats peuvent être utilisées pour classer et réussir ou échouer aux examens, etc., et la difficulté des questions peut être utilisée pour ajuster la difficulté de l'ensemble de l'examen lorsque vous souhaitez réutiliser les questions. C'est vrai.

Que penser

La capacité du candidat au test devrait-elle utiliser le score brut tel quel? Si vous le faites, les scores des questions difficiles et faciles seront les mêmes. Je ne peux pas gérer la situation où je commets une erreur dans un problème facile, même si je peux résoudre un problème difficile.

Alors, que diriez-vous de marquer l'inverse du nombre de bonnes réponses? Cela semble bien, mais à quel point cette différence de scores est-elle légitime? Par exemple, dans la situation du tableau ci-dessus, le score de Q2 est 6 fois le score de Q1, est-ce bien?

Théorie de la réaction d'article

La théorie qui a été développée dans le but d'estimer la capacité du candidat et la difficulté du problème est la ** théorie de la réponse aux items (IRT). L'IRT est un modèle mathématique très utile pour créer, diriger et évaluer des examens, et il semble qu'il soit effectivement utilisé pour le TOEFL (examen d'anglais pour étudier à l'étranger) et l'examen de passeport informatique [^ 1].

Les données

Dans les articles suivants, je décrirai la théorie de la réaction des items afin de pouvoir l'implémenter dans une certaine mesure, y compris le contexte théorique, mais je vais d'abord présenter les données réelles et l'endroit où générer les données. Ne serait-il pas agréable d'essayer à quel point cette théorie peut être utilisée avec des données réelles et des données générées?

Données réelles

Les données réelles semblent se trouver dans KDDCUP [^ 2], par exemple. Ces données ne sont pas simplement les données correctes ou incorrectes avec le candidat, elles doivent donc être traitées. Il semble que ces données soient introduites dans l'article Estimation de la valeur d'aptitude à l'aide de pyirt.

Données générées

Il utilise un peu de connaissance de l'IRT, mais vous pouvez obtenir les données en procédant comme suit, par exemple. L'environnement est

est.

import numpy as np
from functools import partial
#3 Définition du modèle logistique des paramètres
def L3P(a, b, c, x):
    return c + (1 - c) / (1 + np.exp(-  a * (x - b)))

#Définition du paramètre du modèle
#a est un nombre réel positif,b est un nombre réel,c doit être supérieur à 0 et inférieur à 1

a_min = 0.3
a_max = 1

b_min = -2
b_max = 2

c_min = 0
c_max = .4

#Combien de questions, combien de personnes, 10 questions 7 personnes ci-dessous
num_items = 10
num_users = 7

#Générer un paramètre de problème
item_params = np.array(
    [np.random.uniform(a_min, a_max, num_items),
     np.random.uniform(b_min, b_max, num_items),
     np.random.uniform(c_min, c_max, num_items)]
).T

#Génération de paramètres candidats
user_params = np.random.normal(size=num_users)

#Créer une matrice de réaction d'élément, élément 1(Bonne réponse)Ou 0(Mauvaise réponse)
#Dans la ligne i et la colonne j, comment le candidat j a-t-il réagi à la question i?
ir_matrix_ij = np.vectorize(int)(
    np.array(
        [partial(L3P, *ip)(user_params) > np.random.uniform(0, 1, num_users) for ip in item_params]
    )
)

Si vous le générez avec cela, vous devriez obtenir une matrice de 1,0 comme le tableau ci-dessus. La ligne $ i $ et la colonne $ j $ montrent comment le candidat $ j $ a répondu à Q $ i $. 0 est une mauvaise réponse 1 est la bonne réponse. Comme je l'écrirai dans les articles suivants, j'utiliserai l'indice $ i $ pour représenter le problème et l'indice $ j $ pour représenter le candidat.

Le score brut est

raw_score_j = ir_matrix_ij.sum(axis=0)

Le nombre de bonnes réponses est

num_correct_i = ir_matrix_ij.sum(axis=1)

Vous pouvez l'obtenir à.

la prochaine fois

Présentation des modèles logistiques à 1, 2 et 3 paramètres souvent utilisés dans la théorie de la réaction des items. Test de mathématiques, partie 2 (modèle mathématique de la théorie de la réaction aux éléments)

Les références

Recommended Posts

Examen de mathématiques, partie 1 (définition des questions et génération de données)
Traitement et jugement de la collecte du plan d'analyse des données (partie 1)
Traitement et jugement de la collecte du plan d'analyse des données (partie 2)
Ensemble de données "Moving MNIST"
Génération artificielle de données avec numpy
Ensemble de données artificielles (fonction sinus)
Génération de données factices Python (édition d'adresse)
Définir la notation d'inclusion
Génération de données factices en forme de vent dans le processus de Markov
Le traitement des données
Analyse des données avant la génération de fonctionnalités titanesques de Kaggle
Examen de mathématiques, partie 1 (définition des questions et génération de données)