zoukankan      html  css  js  c++  java
  • 基尼系数

    概念

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

      绘制的图为:

  • 相关阅读:
    禁用网络连接后无法访问本机数据库的问题
    DevExpress使用笔记
    DEV控件 皮肤问题
    SQLServer2008导入Excel遇到的问题
    InnoSetup使用笔记
    SQLServer清空数据库中所有表的数据
    MS SQL Server2000转换成MySQL
    由MySQL登录不了引发的一些问题
    onerror事件
    DIV+CSS一些小小的技巧
  • 原文地址:https://www.cnblogs.com/by-dream/p/9457933.html
Copyright © 2011-2022 走看看