基尼系数

概念

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

  绘制的图为:

 

posted @ 2018-08-10 23:27  胖喵~  Views(4221)  Comments(0Edit  收藏  举报