[PYTHON] Woran ich in der Aufnahmeprüfungsfrage "Bayes Statistics from the Basics" gedacht habe

Thema "Fragen zur Zulassungsprüfung"

Ich habe darüber nachgedacht, nachdem ich Bayes Statistics from the Basics gelesen hatte. Zitiert ab Seite 59

Fragen zur Aufnahmeprüfung: Bei der Aufnahmeprüfung eines Unternehmens werden jedes Jahr 7 Fragen der gleichen Schwierigkeit gestellt. Herr x von der X University hatte 3 richtige und 4 falsche Antworten. Die richtige Antwortrate sei $ \ theta_x $. Herr y von der Y University hatte 4 richtige und 3 falsche Antworten. Die richtige Antwortrate sei $ \ theta_y $. Es gibt jedes Jahr viele Kandidaten von Universität X und Universität Y. Als ich es nachgeschlagen habe, Die korrekte Antwortrate der Prüflinge der X University wird durch eine Beta-Verteilung mit einem Durchschnitt von 0,8 und einer Varianz von 0,04 angenähert. Es wurde festgestellt, dass die korrekte Antwortrate der Prüflinge der Y University durch eine Beta-Verteilung mit einem Durchschnitt von 0,4 und einer Varianz von 0,04 angenähert wird. Wenn Sie $ \ theta_x $ und $ \ theta_y $ schätzen und nur einen Kandidaten mit einem hohen Bevölkerungswert einstellen möchten, Welches ist Herr x oder Herr y?

** "Wenn Sie nicht nur die Testergebnisse, sondern auch die Fähigkeit der Gruppe, zu der die Person gehört, bewerten, können Sie eine genauere Schätzung vornehmen." ** Es ist eine Überlegung über die Vor- und Nachteile davon.

Anstatt dieses Problem so zu lösen, wie es ist, werden wir hier die Bedingungen wie folgt ändern.

――Die Fähigkeit jedes Schülers wird als ein Wert festgelegt, und der Zweck besteht darin, ob die mit dem höheren Fähigkeitswert ausgewählt werden kann oder nicht.

  • Angenommen, die Fähigkeiten der Kandidaten der Universität X folgen einer Normalverteilung mit einem Durchschnitt von 105 und einer Standardabweichung von 10.
  • Angenommen, die Fähigkeiten der Prüflinge der Y-Universität folgen einer Normalverteilung mit einem Durchschnitt von 100 und einer Standardabweichung von 10. ―― Angenommen, die beobachteten Werte, die das Ergebnis der Aufnahmeprüfung sind, folgen einer Normalverteilung mit einem Durchschnitt Ihres eigenen Fähigkeitswerts und einer Standardabweichung von 10.
  • ** Bei der Testergebnismethode ** basiert die Bewertung nur auf beobachteten Werten.
  • ** Bei der Gruppenkombinationsmethode ** werden wir mit $ Korrekturwert \ equiv \ frac {Gruppenmittelwert + beobachteter Wert} {2} $ auswerten.

Fragen Sie bei Python nach

Berechnen Sie jeden Wert. 63,8% haben ein hohes X im Fähigkeitswert und 59,9% haben ein hohes X im beobachteten Wert.

python3


import numpy as np, pandas as pd
np.random.seed(1)
n = 1000000 #Anzahl der Bewertungen
xave, yave, std = 105, 100, 10 #X-Durchschnitt, Y-Durchschnitt, Standardabweichung
gx = np.random.normal(xave, std, (n)) #Fähigkeitswert der Gruppe X.
gy = np.random.normal(yave, std, (n)) #Fähigkeitswert der Gruppe Y.
ox = np.random.normal(gx, std) #Beobachtungen der Gruppe X.
oy = np.random.normal(gy, std) #Beobachtungen der Gruppe Y.
ax = (xave + ox) / 2 #Korrekturwert der Gruppe X.
ay = (yave + oy) / 2  #Korrekturwert der Gruppe X.

gf = gx > gy #X hat einen hohen Fähigkeitswert
of = ox > oy #X ist im beobachteten Wert hoch
af = ax > ay #X ist im Korrekturwert hoch

print(gf.sum() / n, of.sum() / n)
>>>
0.638318 0.598666

Untersuchungsergebnismethode

Bei der Bewertung anhand des beobachteten Wertes beträgt die korrekte Antwortrate 75,9%.

python3


print(pd.DataFrame([[(gf&of).sum(), ((~gf)&of).sum()],
                    [(gf&(~of)).sum(), ((~gf)&(~of)).sum()]],
                  columns=['Fähigkeit X.', 'Fähigkeit Y.'], index=['Beobachtung X.', 'Beobachtung Y.']) / n)
print('Richtige Antwortrate= ', (gf==of).sum() / n)
>>>
Fähigkeit X Fähigkeit Y.
Beobachtung X 0.498147  0.100519
Beobachtung Y 0.140171  0.261163
Richtige Antwortrate=  0.75931

Gruppenkombinationsmethode

Bei der Bewertung anhand des Korrekturwertes beträgt die korrekte Antwortrate 76,8%.

python3


print(pd.DataFrame([[(gf&af).sum(), ((~gf)&af).sum()],
                    [(gf&(~af)).sum(), ((~gf)&(~af)).sum()]],
                  columns=['Fähigkeit X.', 'Fähigkeit Y.'], index=['Korrektur X.', 'Korrektur Y.']) / n)
print('Richtige Antwortrate= ', (gf==af).sum() / n)
>>>
Fähigkeit X Fähigkeit Y.
Korrektur X 0.549088  0.142374
Korrektur Y 0.089230  0.219308
Richtige Antwortrate=  0.768396

Erwägung

Natürlich konnte ich nicht nur meine eigenen Fähigkeiten, sondern auch die Fähigkeiten meiner Gruppe nutzen, um genau zu bewerten. Aber ist eine solche Methode wirklich gut? Was ist zum Beispiel mit der Verwendung von Geschlecht anstelle von College? Vielleicht ist es problematisch, den Pass je nach Geschlecht zu ändern oder nicht zu bestehen.

Vorschlagsmethode 1

Daher schlagen wir eine neue Methode vor. Die Methode ist wie folgt.

――Sie machen vorab einen separaten Test. Das Ergebnis wird als vorab beobachteter Wert verwendet. ――Wenn Ihnen die Testergebnisse nicht gefallen (wenn der zuvor beobachtete Wert unter Ihrem Fähigkeitswert liegt), tun Sie nichts. ――Wenn es Ihnen gefällt, werden Sie sich registrieren. Wenn registriert, müssen sowohl beobachtete als auch vorher beobachtete Werte in der Aufnahmeprüfung verwendet werden. (Wenn es nicht registriert ist, ist nur der beobachtete Wert ausreichend.) ――Wir haben ein Registrierungssystem eingeführt, um die Möglichkeit zu berücksichtigen, dass nicht jeder den Test separat ablegen kann.

python3


bx = np.random.normal(gx, std) #Vorbeobachtete Werte der Gruppe X.
by = np.random.normal(gy, std) #Vorbeobachtete Werte der Gruppe Y.
#Wenn der vorab beobachtete Wert kleiner oder gleich Ihrem Fähigkeitswert ist, verwenden Sie den ursprünglich beobachteten Wert.
px = ox*(bx < gx) + (ox+bx)/2*(bx >= gx) #Vorgeschlagener Wert für Gruppe X 1
py = oy*(by < gy) + (oy+by)/2*(by >= gy) #Vorgeschlagener Wert für Gruppe Y 1

pf = px > py #Vorgeschlagener Wert 1 und X ist hoch

print(pd.DataFrame([[(gf&pf).sum(), ((~gf)&pf).sum()],
                    [(gf&(~pf)).sum(), ((~gf)&(~pf)).sum()]],
                  columns=['Vorschlag 1X', 'Vorschlag 1J'], index=['Beobachtung X.', 'Beobachtung Y.']) / n)
print('Richtige Antwortrate= ', (gf==pf).sum() / n)
>>>
Vorschlag 1X Vorschlag 1Y
Beobachtung X 0.518089  0.088829
Beobachtung Y 0.120229  0.272853
Richtige Antwortrate=  0.790942

Die richtige Antwortrate beträgt 79,1% und die Genauigkeit hat sich verbessert. Es kostet jedoch Geld, einen separaten Test durchzuführen.

Vorschlagsmethode 2

Stellen Sie sich eine Methode vor, die nicht separat getestet wird.

--Wenn die Testergebnisse über dem Durchschnitt Ihrer Gruppe liegen: Bitten Sie sie, die beobachteten Werte zu verwenden.

  • Wenn das Testergebnis unter dem Durchschnitt Ihrer Gruppe liegt: Bitten Sie sie, den Korrekturwert zu verwenden.

python3


qx = ox*(ox >= xave) + ax*(ox < xave) #Vorgeschlagener Wert 2 für Gruppe X.
qy = oy*(oy >= yave) + ay*(oy < yave) #Vorgeschlagener Wert 2 für Gruppe Y.

qf = qx > qy #Der vorgeschlagene Wert 2 und X ist hoch

print(pd.DataFrame([[(gf&qf).sum(), ((~gf)&qf).sum()],
                    [(gf&(~qf)).sum(), ((~gf)&(~qf)).sum()]],
                  columns=['Vorschlag 2X', 'Vorschlag 2J'], index=['Beobachtung X.', 'Beobachtung Y.']) / n)
print('Richtige Antwortrate= ', (gf==qf).sum() / n)
>>>
Vorschlag 2X Vorschlag 2Y
Beobachtung X 0.521504  0.119074
Beobachtung Y 0.116814  0.242608
Richtige Antwortrate=  0.764112

Es ist ein bisschen besser als nur die Beobachtungen.

Vorschlagsmethode 3

Selbst mit der Vorschlagsmethode 2 können die überlegenen Fähigkeiten der Gruppe, zu der sie gehören, unzufrieden sein. Wie wäre es mit der nächsten Methode?

  • Jeder Benutzer entscheidet, ob er sich zum Zeitpunkt des Tests selbst registriert.
  • Wenn der Fähigkeitswert über dem Durchschnitt der Gruppe liegt, zu der Sie gehören: Registrieren Sie sich nicht. → Bitten Sie sie, die beobachteten Werte zu verwenden. --Wenn der Fähigkeitswert unter dem Durchschnitt der Gruppe liegt, zu der Sie gehören: Registrieren Sie sich. → Bitten Sie sie, den Korrekturwert zu verwenden.

python3


rx = ox*(gx >= xave) + ax*(gx < xave) #Vorgeschlagener Wert 3 für Gruppe X.
ry = oy*(gy >= yave) + ay*(gy < yave) #Vorgeschlagener Wert der Gruppe Y 3

rf = rx > ry #Der vorgeschlagene Wert 3 und X ist hoch

print(pd.DataFrame([[(gf&rf).sum(), ((~gf)&rf).sum()],
                    [(gf&(~rf)).sum(), ((~gf)&(~rf)).sum()]],
                  columns=['Vorschlag 3X', 'Vorschlag 3J'], index=['Beobachtung X.', 'Beobachtung Y.']) / n)
print('Richtige Antwortrate= ', (gf==rf).sum() / n)
>>>
Vorschlag 3X Vorschlag 3Y
Beobachtung X 0.518967  0.119357
Beobachtung Y 0.119351  0.242325
Richtige Antwortrate=  0.761292

――Es ist etwas besser als die Schätzung des beobachteten Wertes allein. ――Da die Prüflinge aktiv beteiligt sind, werden sie nicht diskriminiert.

  • Es gibt fast keine Kosten.

Vorschlag 3 (oder eine Mischung aus Vorschlag 1 und Vorschlag 3) scheint gut zu sein.

das ist alles

Recommended Posts

*