概念
基尼系數是指國際上通用的、用以衡量一個國家或地區居民收入差距的常用指標。基尼系數介於0-1之間,基尼系數越大,表示不平等程度越高。
通用計算方法
赫希曼根據洛倫茨曲線提出的判斷分配平等程度的指標。設實際收入分配曲線和收入分配絕對平等曲線之間的面積為A,實際收入分配曲線右下方的面積為B。並以A除以(A+B)的商表示不平等程度。這個數值被稱為基尼系數或稱洛倫茨系數。如果A為零,基尼系數為零,表示收入分配完全平等;如果B為零則系數為1,收入分配絕對不平等。收入分配越是趨向平等,洛倫茨曲線的弧度越小,基尼系數也越小,反之,收入分配越是趨向不平等,洛倫茨曲線的弧度越大,那么基尼系數也越大。另外,可以參看帕累托指數(是指對收入分布不均衡的程度的度量)。
國內不少學者對基尼系數的具體計算方法作了探索,提出了十多個不同的計算公式。山西農業大學經貿學院張建華先生提出了一個簡便易用的公式:假定一定數量的人口按收入由低到高順序排隊,分為人數相等的n組,從第1組到第i組人口累計收入占全部人口總收入的比重為wi,則說明:該公式是利用定積分的定義將對洛倫茨曲線的積分(面積B)分成n個等高梯形的面積之和得到的。
應用
通過這個指標,我們可以看一項內容的分布是否均衡,或者分布區間的走向。舉個例子,假如我們需要看推薦算法一日推薦出來的商品的類目的分布,我們可以先統計出各個類目的一個數量,然后計算基尼系數,這樣就可以看出來的分布是否均衡。當然在推薦的過程中,也不能完全看這個指標,因為有些場景可能就希望推薦一些頭部商品,所以在使用這個指標的時候需要靈活處理。
代碼
下面是python的一段實現代碼:
#-*- coding:utf-8 -*- #!/usr/bin/python import numpy as np from matplotlib import pyplot as pl # 繪圖用 fig, ax = pl.subplots() # 繪制 def Drawing(xarray, yarray): # 繪制洛倫茲曲線 ax.plot(xarray, yarray) # 繪制均衡直線 ax.plot(xarray, xarray) ax.set_xlabel(u'橫坐標') ax.set_ylabel(u'縱坐標') pl.show() # 計算基尼系數 def Gini(): # 計算數組累計值,從 0 開始 # 原始數據 numlist = [1.5, 2, 3.5, 10, 4.2, 2.1, 1.1, 2.2, 3.1, 5.1, 9.5, 9.7, 1.7, 2.3, 3.8, 1.7, 2.3, 5, 4.7, 2.3, 4.3, 12] # 按照個數累計統計后,分別求總數,得到一個平均分的一列坐標。例如5的話,得到的值是[0,1,2,3,4]/4 # 得到的是洛倫茲曲線上方的均衡直線 xarray = np.array(range(0, len(numlist)+1)) / np.float(len(numlist)) #print "xarray", xarray # 計算基尼系數,第一個數字需要從 0 開始;先排序 numsort = sorted(np.append(numlist, 0)) #print "numsort", numsort # 累加值計算 csum_numlist = np.cumsum(numsort) #print "csum_numlist", csum_numlist # 取最后一個,也就是原數組的和 sum_num = csum_numlist[-1] # 得到洛倫茲曲線 yarray = csum_numlist / sum_num #print "yarray", yarray # 計算曲線下面積的通用方法 B = np.trapz(yarray, x=xarray) # 總面積 0.5 A = 0.5 - B G = A / (A + B) # 繪制圖像 Drawing(xarray, yarray) return G a = Gini() print 'Gini:', a
最終得到 0.37025408173123364
繪制的圖為: