概念
基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标。基尼系数介于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
绘制的图为: