基尼系数计算方法

上图

图片来自维基百科·自由的百科全书

最近在尝试做一些流量调控的事情,流量对于任何商业系统都是宝贵的资源,不能任由他人无限制获取,且需要通过一定手段加以调控,以期用户体验、平台生态、平台利益多方最大化。

这个目标是宏大而美好的,但总要一步步慢慢来。先说如何平衡生态问题(当然指的是B端用户),生态问题就像国民收入均衡问题一样,常用的就是基尼系数,维基百科的中文链接要FQ才能打开,好伤心,英文的我这里能打开。这里我并不要介绍概念和定义,只想把如何计算的方法贴上来。

最直观的计算公式是:

含义就是:把所有人(假设刚好 100 个人)的收入从小到大排序,然后从收入最少的开始累计,每计算一个人,横坐标为人数累计值占总人数比例,纵坐标为收入累计值占总收入比例,直到最后一个收入最大的人。

显然,图中横坐标和纵坐标都是 [ 0 -1 ] 之间。把图左下角和右上角连起来,表示人数累计占比恒等于收入累积占比,意味着收入完全均等。

好了,上面人人收入均等的线与实际收入曲线之间的面积就是 A, 实际收入曲线与 X 轴之间面积是 B

知道怎么算了,于是拿代码试试:

# coding=utf-8
# !/usr/bin/python
from scipy.integrate import odeint
import numpy as np
from matplotlib import pyplot as pl

# 解决matplotlib 中文显示问题
pl.rcParams['font.sans-serif'] = ['SimHei']
pl.rcParams['axes.unicode_minus'] = False

fig, ax = pl.subplots()

# 计算基尼系数的简单方法
def gini():
    # 计算数组累计值,从 0 开始
    wealths = [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]
    cum_wealths = np.cumsum(sorted(np.append(wealths, 0)))
    # 取最后一个,也就是原数组的和
    sum_wealths = cum_wealths[-1]
    # 人数的累积占比
    xarray = np.array(range(0, len(cum_wealths))) / np.float(len(cum_wealths) - 1)
    # 均衡收入曲线
    upper = xarray
    # 收入累积占比
    yarray = cum_wealths / sum_wealths
    # 绘制基尼系数对应的洛伦兹曲线
    ax.plot(xarray, yarray)
    ax.plot(xarray, upper)
    ax.set_xlabel(u'人数累积占比')
    ax.set_ylabel(u'收入累积占比')
    pl.show()
    # 计算曲线下面积的通用方法
    B = np.trapz(yarray, x=xarray)
    # 总面积 0.5
    A = 0.5 - B
    G = A / (A + B)
    print G

得到下图


其他

当然还有很多其他的公式可以计算,比如:

参考

  1. https://en.wikipedia.org/wiki/Gini_coefficient 基尼系数定义
  2. https://www.zhihu.com/question/25404709 matplotlib 绘图中文乱码
  3. http://hyry.dip.jp/tech/book/page/scipynew/scipy-710-integrate.html python 科学计算
时间: 2024-10-18 04:00:11

基尼系数计算方法的相关文章

机器学习相似度计算方法选择理论依据

在分类聚类算法,推荐系统中,常要用到两个输入变量(通常是特征向量的形式)距离的计算,即相似性度量.不同相似性度量对于算法的结果,有些时候,差异很大.因此,有必要根据输入数据的特征,选择一种合适的相似性度量方法. 令X=(x1,x2,..,xn)T,Y=(y1,y2,...yn)T为两个输入向量, 1.欧几里得距离(Euclidean distance)-EuclideanDistanceMeasure. ? 相当于高维空间内向量说表示的点到点之间的距离. 由于特征向量的各分量的量纲不一致,通常需

计算方法 读书笔记

### 写在前面 计算方法课程在第八周就这样匆匆结课了,我还没感觉学会什么东西,可能是去听课太少了吧.每次最后一周或几天预习完一门课程,都觉得有什么东西要留下来,尤其是在去年遇到一些算法的矩阵推到,发现自己已经把大一学的东西都还给老师了.趁刚考完试还有一些印象,我想赶快把一些体会记录一下. 由于本人课没咋听,只能说一些自己认为之后会对自己有帮助的东西,算是这门学科中的一些思想吧,至于对不对,就…… ### 泰勒展开与拉格朗日余项 事实上,计算方法,是一些数值的方法,对于计算机来说就是要解决一些拟

空间三角形重心坐标计算方法

P:三角平面上一点,ABC,三角形3个顶点 重心坐标(u,v)计算方法: 由式P – A = u(C - A) + v(B -A)得: ((C-A,B-A))*((u/v))=P-A (■([email protected]))=■((C-A&B-A))^(-1)*P-A 空间三角形重心坐标计算方法,布布扣,bubuko.com

JavaScript加减计算方法和显示千分位

Math.formatFloat = function (f, digit) { var m = Math.pow(10, digit); return parseInt(f * m, 10) / m; }; 使用:var fee = Math.formatFloat(Number(a) + Number(b), 8).toFixed(2); function formatThousand(num) { num = num + ""; var re = /(-?\d+)(\d{3})/

[转]距离的计算方法

1. 欧氏距离(Euclidean Distance) 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式. (1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离: (2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: 2. 曼哈顿距离(Manhattan Distance) 想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼.实际驾驶距离就是这个“曼哈顿距离”.而这也是曼哈顿

[Android Pro] CPU占用计算方法

1: AVTest  CPU计算方法读取每个进程的 stat 文件 (/proc/<PID>/stat)计算采样间隔10min下utime的差值minusUtime,stime的差值minusUtime,例如: 初始值Proc 1: utime=110 stime=200Proc 2: utime=400 stime=380...Proc X:...1个采样间隔 (10min后)Proc 1: utime=120 stime=220  差值: utime=120-110=10 stime=22

基尼系数

1. 基尼系数,是1943年美国经济学家阿尔伯特·赫希曼,根据劳伦茨曲线所定义的判断收入分配公平程度的指标. 2.基尼系数不能超过0.5的.才是正常的.

以太网 数据包速率计算方法

我们知道1个千兆端口的线速包转发率是1.4881MPPS, 百兆端口的线速包转发率是0.14881MPPS,这是国际标准,但是如何得来的呢? 具体的数据包在传输过程中会在每个包的前面加上64个(前导符)preamble也就是一个64个字节的数据包,原本只有512个bit,但在传输过程中实际上会有512+64+96=672bit,也就是这时一个数据包的长度实际上是有672bit的千兆端口线速包转发率=1000Mbps/672=1.488095Mpps,约等于1.4881Mpps,百兆除于10 为0

汇总从代数角度与几何角度理解相似度计算方法(以机器学习Mahout框架为主线)

相似度的计算是数据挖掘与机器学习中的一个永恒的话题,为了能更好地理解与比较各种相似度计算的方法,能灵活运用到各种计算模型中,自己在研究机器学习之Mahout框架时,源代码中也实现了很多相似度计算方法,本文结合机器学习Mahout框架中各种相似度计算方法的实现,并且从代数角度和几何角度来理解相似度的计算方法.并阐述其优缺点,及自己的适用场景.本文通过总结和归纳,一共总结了9中距离测量方法,方法一到方法七是Mahout中完完本本实现了,其中前面是方面名,破折号后是Mahout中各方法实现的类名,本文