Dans cet article, je voudrais estimer grossièrement le score moyen et l'écart type de tous les candidats sur la base des données du candidat publiées sur le site Web de l'Université médicale de Sapporo.
Données publiées par l'université montre les scores moyens, les plus élevés et les plus bas des candidats retenus. Puisque seul le nombre de candidats peut être saisi, j'ai supposé que les scores des candidats suivaient la distribution normale, et j'ai utilisé les données données pour prédire les paramètres $ \ mu, \ sigma $ de la distribution normale. ..
Premièrement, les données utilisées pour la prévision sont résumées dans le tableau. Ici, le classement le plus bas est de 75 chaque année car la capacité de l'examen général d'entrée de l'Université de médecine de Sapporo est de 75 personnes, et même si des passants supplémentaires se produisent, le score du 75e passeur sera annoncé comme le score le plus bas. Faire.
La méthode d'analyse est très simple. Résolvez simplement les équations simultanées suivantes.
\left\{
\begin{split}
Pourcentage de candidats retenus&= \int_{Le point le plus bas}^{\infty} \frac{1}{\sqrt{2 \pi} \sigma} \exp (-\frac{(x - \mu)^2}{2 \sigma^2}) dx \\
Note moyenne des candidats retenus&= \frac{\int_{Le point le plus bas}^{\infty} \frac{x}{\sqrt{2 \pi} \sigma} \exp (-\frac{(x - \mu)^2}{2 \sigma^2})}{\int_{Le point le plus bas}^{\infty} \frac{1}{\sqrt{2 \pi} \sigma} \exp (-\frac{(x - \mu)^2}{2 \sigma^2}) dx}
\end{split}
\right.
Permettez-moi de vous donner une petite explication supplémentaire. La première formule est
Pourcentage de candidats retenus= \frac{Rang inférieur}{Nombre de candidats} = \int_{Le point le plus bas}^{\infty}Distribution normale dx
est ce que cela signifie. Si vous intégrez la distribution normale du point le plus bas à l'infini, vous pouvez obtenir le pourcentage de candidats retenus.
La deuxième formule est
Note moyenne des candidats retenus=Valeur attendue du score du candidat retenu= \int_{Le point le plus bas}^{\infty}Constante de normalisation\times x \fois la distribution normale dx= \frac{\int_{Le point le plus bas}^{\infty}x \fois la distribution normale dx}{\int_{Le point le plus bas}^{\infty}Distribution normale dx}
Cela signifie $$. La constante standardisée est la constante $ C $ pour $ C \ times \ int_ {point le plus bas} ^ {\ infty} distribution normale dx = 1 $, c'est-à-dire $ 1 / \ int_ {point le plus bas} ^ {\ infty} normal La distribution dx $.
$$ Maintenant, le problème ici est que le nombre inconnu n'est calculé que parce que deux équations simultanées sont obtenues, mais l'intégration de la première équation est inconnue pour $ \ mu, \ sigma $. Il ne peut pas être calculé tel quel. J'ai donc renoncé à essayer de trouver une solution mathématiquement exacte et j'ai décidé de substituer diverses paires de valeurs $ \ mu, \ sigma $ pour trouver celle qui pourrait être mieux approchée. Cependant, je ne peux pas faire un calcul aussi gênant, donc pyhon est ici.
Tout d'abord, importez les bibliothèques et modules requis.
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
from scipy import integrate
import japanize_matplotlib
Ensuite, créez les données requises pour la prédiction.
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
De plus, définissez les fonctions requises pour calculer le score attendu des candidats retenus.
def norm(x,mu, sigma):
return (x/(np.sqrt(2*np.pi)*sigma))*np.exp(-(x - mu)**2/(2*(sigma**2)))
Ensuite, avec le code suivant, tracez le point $ (\ mu, \ sigma) $
Il a été classé de 3 manières.
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
Enfin, les points classés ont été codés par couleur et tracés sur le graphique.
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= 'Le pourcentage de candidats retenus{:.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 = 'Le nombre moyen de candidats retenus{} $\\pm$ {}point'.format(pass_average[i], pass_average_err))
ax.scatter(ratio_average[i][0],ratio_average[i][1],c = 'g', s = 2, label = 'Remplissez les deux conditions ci-dessus')
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('{}Année'.format(year[i]))
plt.show()
Le résultat de l'exécution est comme indiqué dans le graphique ci-dessous.
Le tableau ci-dessous montre les valeurs approximatives de $ \ mu et \ sigma $ lues dans la zone verte du graphique.
Cette année (exercice 2020), le score moyen des candidats retenus était supérieur à celui de l'exercice 2018, mais le score moyen des candidats était inférieur à celui de l'exercice 2018. De plus, l'écart-type augmente d'année en année et on peut dire que des questions sont posées pour élargir l'écart de points parmi les candidats.
Recommended Posts