[PYTHON] Schätzen Sie die durchschnittliche Punktzahl der Prüflinge an der Sapporo Medical University

Analyse der Ergebnisse der Aufnahmeprüfung der Sapporo Medical University

In diesem Artikel möchte ich die durchschnittliche Punktzahl und Standardabweichung aller Prüflinge anhand der auf der Website der Sapporo Medical University veröffentlichten Daten des Prüflings grob schätzen.

1. Annahme der Punkteverteilung

Von der Universität veröffentlichte Daten zeigt die durchschnittlichen, höchsten und niedrigsten Werte erfolgreicher Bewerber. Da nur die Anzahl der Prüflinge erfasst werden kann, nahm ich an, dass die Bewertungen der Prüflinge der Normalverteilung folgen, und verwendete die angegebenen Daten, um die Parameter $ \ mu, \ sigma $ der Normalverteilung vorherzusagen. ..

2. Datenerfassung

Zunächst werden die für die Prognose verwendeten Daten in der Tabelle zusammengefasst. Hier liegt der niedrigste Rang bei 75 pro Jahr, da die Kapazität der allgemeinen Aufnahmeprüfung der Sapporo Medical University 75 Personen beträgt. Selbst wenn zusätzliche Passanten auftreten, wird die Punktzahl des 75. Passanten als niedrigste Punktzahl bekannt gegeben. Machen.

入試結果まとめ.png

3. Analysemethode

Die Analysemethode ist sehr einfach. Lösen Sie einfach die folgenden Gleichungen gleichzeitig.

\left\{
\begin{split}
Prozentsatz erfolgreicher Bewerber&= \int_{Tiefster Punkt}^{\infty} \frac{1}{\sqrt{2 \pi} \sigma} \exp (-\frac{(x - \mu)^2}{2 \sigma^2}) dx \\

Durchschnittliche Punktzahl erfolgreicher Bewerber&= \frac{\int_{Tiefster Punkt}^{\infty} \frac{x}{\sqrt{2 \pi} \sigma} \exp (-\frac{(x - \mu)^2}{2 \sigma^2})}{\int_{Tiefster Punkt}^{\infty} \frac{1}{\sqrt{2 \pi} \sigma} \exp (-\frac{(x - \mu)^2}{2 \sigma^2}) dx}
\end{split}
\right.

Lassen Sie mich eine kleine ergänzende Erklärung geben. Die erste Formel lautet

Prozentsatz erfolgreicher Bewerber= \frac{Unterer Rang}{Anzahl der Prüflinge} = \int_{Tiefster Punkt}^{\infty}Normalverteilung dx

ist was es bedeutet. Wenn Sie die Normalverteilung vom niedrigsten Punkt bis unendlich integrieren, können Sie den Prozentsatz der erfolgreichen Bewerber ermitteln.

Die zweite Formel lautet

Durchschnittliche Punktzahl erfolgreicher Bewerber=Erwarteter Wert der erfolgreichen Bewerberbewertung= \int_{Tiefster Punkt}^{\infty}Standardisierungskonstante\times x \mal Normalverteilung dx= \frac{\int_{Tiefster Punkt}^{\infty}x \mal Normalverteilung dx}{\int_{Tiefster Punkt}^{\infty}Normalverteilung dx}

Es bedeutet $$. Die standardisierte Konstante ist die Konstante $ C $ für $ C \ times \ int_ {niedrigster Punkt} ^ {\ infty} Normalverteilung dx = 1 $, dh $ 1 / \ int_ {niedrigster Punkt} ^ {\ infty} Normalverteilung Die Verteilung dx $.

$$ Nun besteht das Problem hier darin, dass die unbekannte Zahl nur berechnet wird, weil zwei gleichzeitige Gleichungen erhalten werden, aber die Integration der ersten Gleichung für $ \ mu, \ sigma $ unbekannt ist. Es kann nicht so berechnet werden, wie es ist. Also gab ich es auf, nach einer mathematisch genauen Lösung zu suchen, und entschied mich, verschiedene $ \ mu, \ sigma $ -Wertpaare zu ersetzen, um dasjenige zu finden, das am besten angenähert werden kann. Ich kann jedoch keine so mühsame Berechnung durchführen, also ist Pyhon hier.

4. Finden Sie mit Pyhon eine ungefähre Lösung

Importieren Sie zunächst die erforderlichen Bibliotheken und Module.

import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
from scipy import integrate
import japanize_matplotlib

Erstellen Sie als Nächstes die für die Vorhersage erforderlichen Daten.

mu_I = [950,1000]
sigma_I = [60,90]
year = [2018,2019,2020]
n = [321,267,281]
pass_n = 75
pass_ratio = [pass_n/i for i in n]
pass_average = [1063,1073,1072]
worst = [1023,1029,1022]
mu_points = np.linspace(mu_I[0],mu_I[1],100)            
sigma_points = np.linspace(sigma_I[0],sigma_I[1],60)    
pass_ratio_err = 0.005
pass_average_err = 1

Definieren Sie außerdem die Funktionen, die zur Berechnung der erwarteten Punktzahl erfolgreicher Bewerber erforderlich sind.

def norm(x,mu, sigma):
    return (x/(np.sqrt(2*np.pi)*sigma))*np.exp(-(x - mu)**2/(2*(sigma**2)))

Zeichnen Sie dann mit dem folgenden Code den Punkt $ (\ mu, \ sigma) $

Es wurde in 3 Arten klassifiziert.

ratio_average = []
ratio_only = []
average_only = []
for i in range(len(year)):
    ratio_average.append([[],[]])
    ratio_only.append([[],[]])
    average_only.append([[],[]])
    for mu_point in mu_points:
        for sigma_point in sigma_points:
            mu = mu_point
            sigma = sigma_point
            cdf = st.norm.cdf(worst[i], mu, sigma)
            int_pdf = integrate.quad(norm,worst[i], np.inf, args = (mu, sigma))[0]
            calculate_pass_ratio = 1 - cdf
            calculate_pass_average = int_pdf / calculate_pass_ratio
            if np.abs(calculate_pass_ratio - pass_ratio[i]) < pass_ratio_err:
                if np.abs(calculate_pass_average - pass_average[i]) < pass_average_err:
                    ratio_average[i][0].append(mu)
                    ratio_average[i][1].append(sigma)
                else:
                    ratio_only[i][0].append(mu)
                    ratio_only[i][1].append(sigma)
            elif np.abs(calculate_pass_average - pass_average[i]) < pass_average_err:
                    average_only[i][0].append(mu)
                    average_only[i][1].append(sigma)
            else:
                pass

Schließlich wurden die klassifizierten Punkte farbcodiert und in der Grafik dargestellt.

fig , axes = plt.subplots(1,3,figsize = (18,5))
for i, ax in zip([0,1,2],axes):
    ax.scatter(ratio_only[i][0],ratio_only[i][1],c = 'y', s = 2, label= 'Der Prozentsatz der erfolgreichen Bewerber{:.3f} $\\pm$ {}%'.format(pass_ratio[i], pass_ratio_err*100))
    ax.scatter(average_only[i][0],average_only[i][1],c = 'b', s = 2,label = 'Die durchschnittliche Anzahl erfolgreicher Bewerber{} $\\pm$ {}Punkt'.format(pass_average[i], pass_average_err))
    ax.scatter(ratio_average[i][0],ratio_average[i][1],c = 'g', s = 2,  label = 'Erfüllen Sie beide oben genannten Bedingungen')
    ax.set_xlim(mu_I[0], mu_I[1])
    ax.set_ylim(sigma_I[0], sigma_I[1])
    ax.set_xlabel('$\\mu$')
    ax.set_ylabel('$\\sigma$')
    ax.legend(loc = 'best')
    ax.set_title('{}Jahr'.format(year[i]))
plt.show()

Das Ausführungsergebnis ist in der folgenden Grafik dargestellt.

予測結果グラフ.png

Die folgende Tabelle zeigt die ungefähren Werte von $ \ mu und \ sigma $, die aus dem grünen Bereich des Diagramms gelesen wurden.

予測結果.png

5. Schlussfolgerung

In diesem Jahr (GJ2020) war die durchschnittliche Punktzahl erfolgreicher Bewerber höher als die des GJ2018, aber die durchschnittliche Punktzahl der Prüflinge war niedriger als die des GJ2018. Darüber hinaus nimmt die Standardabweichung von Jahr zu Jahr zu, und es kann gesagt werden, dass Fragen gestellt werden, um den Punktunterschied zwischen den Prüflingen zu vergrößern.

Recommended Posts

Schätzen Sie die durchschnittliche Punktzahl der Prüflinge an der Sapporo Medical University
Finden Sie die "Mindestpunktzahl" aus der "Durchschnittspunktzahl der Prüflinge", der "Durchschnittspunktzahl der erfolgreichen Bewerber" und der "Vergrößerung" der Aufnahmeprüfung
Ruf Hallo, Reiwa! Am Anfang von Reiwa!
Schätzen Sie die maximale Infektiosität des neuen Coronavirus ab
Python-Grundkurs (Ende 15)