Die Lorenzkurve und der Gini-Koeffizient des Gesamtproblems der letzten Nacht scheinen tief zu sein, wenn ich sie untersuche, daher werde ich zusammenfassen, was ich untersucht habe.
・ Lorenzkurve · Gini-Koeffizient ・ Numerische Integration mit Scipy ・ Ableitung
Was ist die Lorenzkurve? "Wenn Sie beispielsweise die Einkommensverteilung untersuchen, kategorisieren Sie das Einkommen. Ordnen Sie das kategorisierte Einkommen in aufsteigender Reihenfolge. Parallel zur Anzahl der Personen, die zu dieser Kategorie gehören. Berechnen Sie den kumulativen Wert jeder Person. Standardisieren Sie jeden kumulativen Maximalwert auf 1. Und die vertikale Achse ist der standardisierte kumulative Einkommenswert, und die horizontale Achse ist die Kurve, die angezeigt wird, wenn die standardisierten numerischen Werte in der geordneten Reihenfolge gezeichnet werden. " Dieses Mal werde ich eine Lorenzkurve mit der Punkteverteilung der Schüler letzte Nacht zeichnen. Da die Anzahl der Personen gering ist, werden wir hier nur ohne Kategorisierung rangieren und akkumulieren. Aus den Daten der letzten Nacht kann die G1-Punkteverteilung wie folgt gezogen werden.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#Datenerfassung
student_data_math = pd.read_csv('./chap3/student-mat.csv', sep =';')
#'M'Daten abrufen für
df0 = student_data_math[student_data_math['sex'].isin(['M'])]
#'G1'In aufsteigender Reihenfolge bestellt
df = df0.sort_values(by=['G1'])
#'Ct'Fügen Sie eine numerische Spalte mit dem Namen hinzu
df['Ct']=np.arange(1,len(df)+1)
#Ersetzen Sie x durch eine numerische Zeichenfolge
x = df['Ct']
#Ersetzen Sie y durch den kumulativen Wert der G1-Daten
y = df['G1'].cumsum()
#Diagrammzeichnung
fig, (ax1,ax2) = plt.subplots(2, 1, figsize=(8,2*5))
#x,Standardisieren Sie mit dem Maximalwert von y und zeichnen Sie mit der blauen Linie
ax1.plot(x/max(x),y/max(y),'blue', label='M')
#Als gleichmäßige Verteilung gilt y=Diagrammzeichnung von x
ax1.plot(x/max(x),x/max(x),'black', label = 'y = x')
#Zeichnen Sie die Häufigkeitsverteilung auf ax2 (Da die Note 20 Stufen beträgt, binz=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()
Und als ich es wiederholte, wurde es wie folgt. Mit anderen Worten, wir können sehen, dass es fast keinen Unterschied zwischen Männern und Frauen gibt.
Als Referenz ist der Gini-Koeffizient als die doppelte Fläche definiert, die in der obigen Abbildung von dem y = x-Diagramm und der Lorenz-Kurve umgeben ist. 【Referenz】 ・ Gini-Koeffizient @ Wikipedia Unten werde ich aus der Referenz zitieren. 「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).」
Beispiel Verwendung von 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()
Ähnlich wie oben kann der Gini-Koeffizient auch unten gezeichnet werden.
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 ist der kumulative Wert von Punkten
y2 = df['G1'].cumsum()
#y_int1 ist y=Integrierter Wert von x
y_int1 = integrate.cumtrapz(y1/max(y1), x/max(x), initial=0)
#y_int2 ist der integrierte Wert des kumulativen Wertes von G1
y_int2 = integrate.cumtrapz(y2/max(y2), x/max(x), initial=0)
#Plotten Sie jeweils
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()
Der Unterschied zwischen den beiden, wenn Peaples = 1 ist, ist der Gini-Koeffizient. Die Zahlen betrachten
print(1-2*y_int2[len(df)-1])
#0.17198115609880305 M
#0.17238700073127444 F
print(2*y_int1[len(df)-1])
#0.999971403242873
ist. Mit anderen Worten, es scheint einen Fehler um die 5. Ziffer zu geben, aber der Unterschied zwischen Männern und Frauen liegt wahrscheinlich in der 4. Ziffer. Die Frau scheint etwas größer zu sein.
\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}
Abgesehen von der Ableitung der ersten Gleichung kann die Berechnung mit dem folgenden Code durchgeführt werden.
xbar = df['G1'].mean() #Finden Sie den Durchschnittswert
s = []
s = df['G1'].loc[:].values #Extrahieren Sie nur den Wert von G1
n = len(df) #Fragen Sie nach der Anzahl der Personen
GI = 0
#Der Durchschnitt scheint zwischen Männern und Frauen etwas unterschiedlich zu sein
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
Die erhaltenen Zahlen sind in der Regel relativ gleich, unterscheiden sich jedoch geringfügig von denen, die aus dem oben genannten sogenannten Gebiet erhalten wurden.
Ich denke, wir müssen die Formel für diese Methode ernsthaft ableiten. Suchen Sie zuerst den Bereich des blauen Teils A in der folgenden Abbildung. In der obigen Abbildung ist die vertikale Achse standardisiert, daher sollten x1 und x2 als $ x1⇒ \ frac {x1} {x1 + x2} $, $ x2⇒ \ frac {x2} {x1 + x2} $ gelesen werden. Wenn Sie dann die folgende erzwungene Transformation der Formel durchführen, können Sie sehen, dass die obige Formel des Gini-Koeffizienten für diese beiden Punkte gilt. Es scheint, dass dies durch Verallgemeinerung bewiesen werden kann, aber ich bin nicht motiviert, also werde ich eine andere Gelegenheit nutzen.
\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}
・ Ich habe versucht, die Lorenzkurve und den Gini-Koeffizienten zu finden. ・ Der Gini-Koeffizient, der die Notenverteilung des Schülers widerspiegelt, wurde berechnet. ・ Der Unterschied in der Punkteverteilung zwischen Männern und Frauen ist gering
・ Ich möchte die allgemeine Formel des Gini-Koeffizienten beweisen ・ Ich möchte es auf die Investitionseffizienz (Portfolio) wie Aktien, Börsen sowie Einlagen und Ersparnisse anwenden.
Recommended Posts