J'y ai pensé en lisant Bayes Statistics from the Basics. Cité à partir de la page 59
Questions d'examen d'entrée: Lors de l'examen d'entrée d'une entreprise, 7 questions de même difficulté sont posées chaque année. M. x de l'Université X avait 3 bonnes réponses et 4 réponses incorrectes. Soit le taux de réponse correct $ \ theta_x $. M. y de l'Université Y avait 4 bonnes réponses et 3 réponses incorrectes. Soit le taux de réponse correct $ \ theta_y $. Il y a de nombreux candidats de l'Université X et de l'Université Y chaque année. Quand je l'ai recherché, Le taux de réponse correcte des X candidats universitaires est approximé par une distribution bêta avec une moyenne de 0,8 et une variance de 0,04. Il a été constaté que le taux de réponse correcte des candidats de l'Université Y est approximé par une distribution bêta avec une moyenne de 0,4 et une variance de 0,04. Si vous estimez $ \ theta_x $ et $ \ theta_y $ et que vous souhaitez embaucher un seul candidat avec une grande valeur de population, Quel est M. x ou M. y?
** "Si vous évaluez non seulement le résultat du test, mais aussi la capacité du groupe auquel appartient la personne, vous pouvez faire une estimation plus précise." ** Il s'agit d'une considération sur les avantages et les inconvénients de cela.
Ici, au lieu de résoudre ce problème tel quel, nous envisagerons de changer les conditions comme suit.
―― La capacité de chaque élève est définie comme une valeur, et le but est de savoir si celui avec la valeur de capacité la plus élevée peut être sélectionné ou non.
Calculez chaque valeur. 63,8% ont une valeur de capacité X élevée et 59,9% une valeur observée élevée de X.
python3
import numpy as np, pandas as pd
np.random.seed(1)
n = 1000000 #Nombre d'évaluations
xave, yave, std = 105, 100, 10 #Moyenne X, moyenne Y, écart type
gx = np.random.normal(xave, std, (n)) #Valeur de la capacité du groupe X
gy = np.random.normal(yave, std, (n)) #Valeur de la capacité du groupe Y
ox = np.random.normal(gx, std) #Observations du groupe X
oy = np.random.normal(gy, std) #Observations du groupe Y
ax = (xave + ox) / 2 #Valeur de correction du groupe X
ay = (yave + oy) / 2 #Valeur de correction du groupe X
gf = gx > gy #X a une valeur de capacité élevée
of = ox > oy #X est élevé dans la valeur observée
af = ax > ay #X est élevé dans la valeur de correction
print(gf.sum() / n, of.sum() / n)
>>>
0.638318 0.598666
Dans l'évaluation par la valeur observée, le taux de réponse correcte est de 75,9%.
python3
print(pd.DataFrame([[(gf&of).sum(), ((~gf)&of).sum()],
[(gf&(~of)).sum(), ((~gf)&(~of)).sum()]],
columns=['Capacité X', 'Capacité Y'], index=['Observation X', 'Observation Y']) / n)
print('Taux de réponse correct= ', (gf==of).sum() / n)
>>>
Capacité X Capacité Y
Observation X 0.498147 0.100519
Observation Y 0.140171 0.261163
Taux de réponse correct= 0.75931
Dans l'évaluation par la valeur de correction, le taux de réponse correcte est de 76,8%.
python3
print(pd.DataFrame([[(gf&af).sum(), ((~gf)&af).sum()],
[(gf&(~af)).sum(), ((~gf)&(~af)).sum()]],
columns=['Capacité X', 'Capacité Y'], index=['Correction X', 'Correction Y']) / n)
print('Taux de réponse correct= ', (gf==af).sum() / n)
>>>
Capacité X Capacité Y
Correction X 0.549088 0.142374
Correction Y 0.089230 0.219308
Taux de réponse correct= 0.768396
Certes, en utilisant non seulement mes propres capacités mais aussi les capacités de mon groupe, j'ai pu évaluer avec précision. Mais une telle méthode est-elle vraiment bonne? Par exemple, qu'en est-il du genre au lieu du collège? Il est peut-être problématique de changer de réussite ou d'échouer selon le sexe.
Par conséquent, nous proposons une nouvelle méthode. La méthode est la suivante.
――Vous passerez un test séparé à l'avance. Le résultat est utilisé comme valeur pré-observée. ――Si vous n'aimez pas les résultats du test (si la valeur pré-observée est inférieure à la valeur de votre capacité), ne faites rien. ――Si vous l'aimez, vous vous enregistrerez vous-même. Si elles sont enregistrées, les valeurs observées et pré-observées doivent être utilisées lors de l'examen d'entrée. (Si elle n'est pas enregistrée, seule la valeur observée est suffisante.) «Nous avons adopté un système d'enregistrement en tenant compte de la possibilité que tout le monde ne puisse pas passer le test séparément.
python3
bx = np.random.normal(gx, std) #Valeurs pré-observées du groupe X
by = np.random.normal(gy, std) #Valeurs pré-observées du groupe Y
#Si la valeur pré-observée est inférieure ou égale à la valeur de votre capacité, utilisez la valeur observée d'origine.
px = ox*(bx < gx) + (ox+bx)/2*(bx >= gx) #Valeur suggérée pour le groupe X 1
py = oy*(by < gy) + (oy+by)/2*(by >= gy) #Valeur suggérée pour le groupe Y 1
pf = px > py #La valeur proposée 1 et X est élevée
print(pd.DataFrame([[(gf&pf).sum(), ((~gf)&pf).sum()],
[(gf&(~pf)).sum(), ((~gf)&(~pf)).sum()]],
columns=['Proposition 1X', 'Proposition 1Y'], index=['Observation X', 'Observation Y']) / n)
print('Taux de réponse correct= ', (gf==pf).sum() / n)
>>>
Proposition 1X Proposition 1Y
Observation X 0.518089 0.088829
Observation Y 0.120229 0.272853
Taux de réponse correct= 0.790942
Le taux de réponse correcte est de 79,1% et la précision s'est améliorée. Cependant, passer un test séparé coûte de l'argent.
Considérez une méthode qui ne teste pas séparément.
python3
qx = ox*(ox >= xave) + ax*(ox < xave) #Valeur suggérée 2 pour le groupe X
qy = oy*(oy >= yave) + ay*(oy < yave) #Valeur suggérée 2 pour le groupe Y
qf = qx > qy #La valeur proposée 2 et X est élevée
print(pd.DataFrame([[(gf&qf).sum(), ((~gf)&qf).sum()],
[(gf&(~qf)).sum(), ((~gf)&(~qf)).sum()]],
columns=['Proposition 2X', 'Proposition 2Y'], index=['Observation X', 'Observation Y']) / n)
print('Taux de réponse correct= ', (gf==qf).sum() / n)
>>>
Proposition 2X Proposition 2Y
Observation X 0.521504 0.119074
Observation Y 0.116814 0.242608
Taux de réponse correct= 0.764112
C'est un peu mieux que juste les observations.
Même avec la méthode de proposition 2, les capacités supérieures du groupe auquel ils appartiennent peuvent être insatisfaites. Et la méthode suivante?
--Chaque utilisateur décide s'il doit s'inscrire par lui-même au moment du test.
python3
rx = ox*(gx >= xave) + ax*(gx < xave) #Valeur suggérée pour le groupe X 3
ry = oy*(gy >= yave) + ay*(gy < yave) #Valeur proposée du groupe Y 3
rf = rx > ry #La valeur proposée 3 et X est élevée
print(pd.DataFrame([[(gf&rf).sum(), ((~gf)&rf).sum()],
[(gf&(~rf)).sum(), ((~gf)&(~rf)).sum()]],
columns=['Proposition 3X', 'Proposition 3Y'], index=['Observation X', 'Observation Y']) / n)
print('Taux de réponse correct= ', (gf==rf).sum() / n)
>>>
Proposition 3X Proposition 3Y
Observation X 0.518967 0.119357
Observation Y 0.119351 0.242325
Taux de réponse correct= 0.761292
――C'est un peu mieux que l'estimation de la valeur observée seule. «Parce que les candidats sont activement impliqués, ils ne sont pas victimes de discrimination.
La proposition 3 (ou un hybride de la proposition 1 et de la proposition 3) semble bonne.
c'est tout
Recommended Posts