La courbe de Lorenz et le coefficient de Gini du problème global d'hier soir semblent être profonds lorsque je les examine, donc je vais résumer ce que j'ai étudié.
・ Courbe de Lorenz · Coefficient de Gini ・ Intégration numérique avec Scipy ・ Dérivation
Quelle est la courbe de Lorenz? "Par exemple, lorsque vous examinez la répartition des revenus, catégorisez le revenu. Classez le revenu catégorisé par ordre croissant. Mettez en parallèle le nombre de personnes appartenant à cette catégorie. Calculez la valeur cumulée de chacun. Standardisez chaque valeur maximale cumulée à 1. Et l'axe vertical représente la valeur du revenu cumulatif normalisé et l'axe horizontal est la courbe qui apparaît lorsque les valeurs numériques normalisées dans l'ordre ordonné sont tracées. " Cette fois, je dessinerai une courbe de Lorenz avec la distribution des scores des élèves hier soir. Ici, comme le nombre de personnes est petit, nous ne ferons que classer et accumuler sans catégoriser. À partir des données d'hier soir, la distribution des scores G1 peut être établie comme suit.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#Capture de données
student_data_math = pd.read_csv('./chap3/student-mat.csv', sep =';')
#'M'Obtenez des données pour
df0 = student_data_math[student_data_math['sex'].isin(['M'])]
#'G1'Ordonné par ordre croissant
df = df0.sort_values(by=['G1'])
#'Ct'Ajoutez une colonne numérique appelée
df['Ct']=np.arange(1,len(df)+1)
#Remplacez x par une chaîne numérique
x = df['Ct']
#Remplacer la valeur cumulée des données G1 par y
y = df['G1'].cumsum()
#Dessin graphique
fig, (ax1,ax2) = plt.subplots(2, 1, figsize=(8,2*5))
#x,Normaliser avec la valeur maximale de y et dessiner avec une ligne bleue
ax1.plot(x/max(x),y/max(y),'blue', label='M')
#En tant que distribution uniforme, y=Dessin graphique de x
ax1.plot(x/max(x),x/max(x),'black', label = 'y = x')
#Dessinez la distribution de fréquence sur ax2 (Puisque la note est de 20 niveaux,=20)
ax2.hist(y/max(y), bins = 20, range =(0,1),label ='M')
ax1.set_xlabel('peoples')
ax1.set_ylabel('G1_Grade.cumsum')
ax2.set_ylabel('freq.')
ax2.set_xlabel('G1_Grade.cumsum')
ax1.legend()
ax1.grid(True)
plt.show()
Et quand je l'ai répété, c'est devenu comme suit. En d'autres termes, nous pouvons voir qu'il n'y a presque aucune différence entre les hommes et les femmes.
Pour référence, le coefficient de Gini est défini comme le double de la zone délimitée par le graphique y = x et la courbe de Lorenz dans la figure ci-dessus. 【référence】 ・ Coefficient de Gini @ wikipedia Ci-dessous, je citerai la référence. 「G = A/(A + B). It is also equal to 2A and to 1 − 2B due to the fact that A + B = 0.5 (since the axes scale from 0 to 1).」
Exemple Comment utiliser integr.cumtrapz
from scipy import integrate
x = np.linspace(0, 2, num=2**4+1)
y = x**4
y_int = integrate.cumtrapz(y, x, initial=0)
plt.plot(x, y_int, 'ro', x, y[0] + 0.2 * x**5, 'b-')
plt.show()
Similaire à ce qui précède, le coefficient de Gini peut également être dessiné ci-dessous.
df0 = student_data_math[student_data_math['sex'].isin(['M'])] #F
df = df0.sort_values(by=['G1'])
df['Ct']=np.arange(1,len(df)+1)
x = df['Ct']
y1 = df['Ct']
#y2 est la valeur cumulée des points
y2 = df['G1'].cumsum()
#y_int1 est y=Valeur intégrée de x
y_int1 = integrate.cumtrapz(y1/max(y1), x/max(x), initial=0)
#y_int2 est la valeur intégrée de la valeur cumulée de G1
y_int2 = integrate.cumtrapz(y2/max(y2), x/max(x), initial=0)
#Tracer chacun
plt.plot(x/max(x), 2*y_int1,'black', label = 'y=x')
plt.plot(x/max(x), 2*y_int2, 'blue',label = 'M_A')
plt.plot(x/max(x), 1-2*y_int1,'black',label ='1-2*(y=x)')
plt.plot(x/max(x), 1-2*y_int2,'blue', label ='M_1-2*A')
plt.xlabel('peoples')
plt.ylabel('integrate')
plt.legend()
plt.show()
La différence entre les deux lorsque peaples = 1 est le coefficient de Gini. En regardant les chiffres
print(1-2*y_int2[len(df)-1])
#0.17198115609880305 M
#0.17238700073127444 F
print(2*y_int1[len(df)-1])
#0.999971403242873
est. En d'autres termes, il semble y avoir une erreur autour du 5e chiffre, mais la différence entre les hommes et les femmes se situe probablement au 4e chiffre. La femme semble être un peu plus grande.
\begin{align}
GI &=& \frac{\Sigma_{i=1}^{n}\Sigma_{j=1}^{n}|x_i-x_j|}{2\Sigma_{i=1}^{n}\Sigma_{j=1}^{n}x_j}\\
&=& \frac{\Sigma_{i=1}^{n}\Sigma_{j=1}^{n}|x_i-x_j|}{2n\Sigma_{i=1}^{n}x_i}\\
&=& \frac{\Sigma_{i=1}^{n}\Sigma_{j=1}^{n}|x_i-x_j|}{2n^2\bar x}\\
\end{align}
En plus de dériver la première équation, le calcul peut être effectué avec le code suivant.
xbar = df['G1'].mean() #Trouvez la valeur moyenne
s = []
s = df['G1'].loc[:].values #Extraire uniquement la valeur de G1
n = len(df) #Demandez le nombre de personnes
GI = 0
#La moyenne semble être un peu différente entre les hommes et les femmes
print(xbar) #10.620192307692308 F 11.229946524064172 M
for i in range(1,len(df),1):
a = s[i]
for j in range(1,len(df),1):
b = s[j]
GI += np.abs(a-b)
GI = GI/(2*n*n*xbar)
print(GI) #0.16938137688477206 F 0.16805449452508275 M
Les nombres obtenus ont tendance à être relativement les mêmes, mais légèrement différents de ceux obtenus à partir de la zone dite ci-dessus.
Après tout, je pense que nous devons sérieusement dériver la formule de cette méthode. Tout d'abord, trouvez la zone de la partie bleue A dans la figure ci-dessous. Dans la figure ci-dessus, l'axe vertical est normalisé, donc x1 et x2 doivent être lus comme $ x1⇒ \ frac {x1} {x1 + x2} $, $ x2⇒ \ frac {x2} {x1 + x2} $. Ensuite, si vous effectuez la transformation forcée suivante de la formule, vous pouvez voir que la formule ci-dessus du coefficient de Gini est valable dans le cas de ces deux points. Il semble que cela puisse être prouvé en généralisant cela, mais je ne suis pas motivé, je vais donc saisir une autre occasion.
\begin{align}
2*A&=2(1*1*1/2-1/2*\frac{x1}{x1+x2}*1/2-\frac{x1}{x1+x2}*1/2-1/2*\frac{x2}{x1+x2}*1/2)\\
&=\frac{2(x1+x2)}{2(x1+x2)}-\frac{x1}{2(x1+x2)}-\frac{2x1}{2(x1+x2)}-\frac{x2}{2(x1+x2)}\\
&=\frac{2(x1+x2)-x1-2x1-x2}{2(x1+x2)}\\
&=\frac{x2-x1}{2(x1+x2)}\\
&=\frac{|x2-x1|+|x1-x2|}{2*2^2\bar x}
\end{align}
・ J'ai essayé de trouver la courbe de Lorenz et le coefficient de Gini. ・ Le coefficient de Gini qui reflète la distribution des notes de l'élève a été calculé. ・ La différence de distribution des scores entre les hommes et les femmes est faible
・ Je veux prouver la formule générale du coefficient de Gini ・ Je voudrais l'appliquer à l'efficacité des investissements (portefeuille) tels que les actions, les échanges, les dépôts et l'épargne.