基尼係數

概念python

  基尼係數是指國際上通用的、用以衡量一個國家或地區居民收入差距的經常使用指標。基尼係數介於0-1之間,基尼係數越大,表示不平等程度越高。算法

 

通用計算方法數組

  赫希曼根據洛倫茨曲線提出的判斷分配平等程度的指標。設實際收入分配曲線和收入分配絕對平等曲線之間的面積爲A,實際收入分配曲線右下方的面積爲B。並以A除以(A+B)的商表示不平等程度。這個數值被稱爲基尼係數或稱洛倫茨係數。若是A爲零,基尼係數爲零,表示收入分配徹底平等;若是B爲零則係數爲1,收入分配絕對不平等。收入分配越是趨向平等,洛倫茨曲線的弧度越小,基尼係數也越小,反之,收入分配越是趨向不平等,洛倫茨曲線的弧度越大,那麼基尼係數也越大。另外,能夠參看帕累託指數(是指對收入分佈不均衡的程度的度量)。
  國內很多學者對基尼係數的具體計算方法做了探索,提出了十多個不一樣的計算公式。山西農業大學經貿學院張建華先生提出了一個簡便易用的公式:假定必定數量的人口按收入由低到高順序排隊,分爲人數相等的n組,從第1組到第i組人口累計收入佔所有人口總收入的比重爲wi,則說明:該公式是利用定積分的定義將對洛倫茨曲線的積分(面積B)分紅n個等高梯形的面積之和獲得的。app

 

 

應用spa

  經過這個指標,咱們能夠看一項內容的分佈是否均衡,或者分佈區間的走向。舉個例子,假如咱們須要看推薦算法一日推薦出來的商品的類目的分佈,咱們能夠先統計出各個類目的一個數量,而後計算基尼係數,這樣就能夠看出來的分佈是否均衡。固然在推薦的過程當中,也不能徹底看這個指標,由於有些場景可能就但願推薦一些頭部商品,因此在使用這個指標的時候須要靈活處理。code

 

代碼blog

  下面是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.37025408173123364utf-8

  繪製的圖爲:class

相關文章
相關標籤/搜索