ジニ係数とは?

ニュースや経済記事でよく聞く「ジニ係数」。これは「格差」や「不平等」の度合いを客観的に示すための重要な指標です。

1. ジニ係数とは?その定義と基本的な見方

ジニ係数は、イタリアの統計学者コッラド・ジニが考案した、社会の富の分配の偏りを示すための単一の数字です。

指標意味
0完全な平等
1完全な不平等

ジニ係数は常に 0から1 の間の値を取り、1に近づくほど格差が大きいことを意味します。


2. 📐 ローレンツ曲線との関係

ジニ係数は、前のページで解説したローレンツ曲線から計算されます。ローレンツ曲線が格差を「図(グラフ)」で表すのに対し、ジニ係数はそれを「数字」で表したものです。

計算の仕組み

ジニ係数 \(\text{G}\) は、ローレンツ曲線と完全平等線に囲まれた面積の比率で定義されます。

$$G = \frac{A}{A + B}$$

  • \(\text{A}\) (三日月型の面積): 完全平等線ローレンツ曲線の間の面積。この面積こそが「格差」の大きさを示しています。
  • \(\text{A + B}\) (三角形の面積): 完全平等線の下側の三角形の面積。この面積は常に \(0.5(横軸1 \times 縦軸1 \times 1/2)\)で一定です。

つまり、ローレンツ曲線が右下に大きくたるんで面積 \(\text{A}\) が広がるほど、ジニ係数 \(\text{G}\) は1に近づき、格差が大きいと判断されます。


3. 🔍 ジニ係数の一般的な目安

ジニ係数は、その数字が何を意味するのかを判断するための目安(ベンチマーク)があります。

国際的に、所得格差を示すジニ係数においては、0.4を超えると「危険水域」あるいは「格差が大きい」と見なされることが一般的です。

ただし、ジニ係数は計測方法や対象(所得、資産、消費など)によって値が大きく異なるため、あくまで参考値として捉える必要があります。


4. ジニ係数の計算方法

個々のデータ(離散データ)からジニ係数を計算するには、

$$G = \frac{A}{A + B}$$を用いて計算します。

実際には、ローレンツ曲線の下側の面積 \(\text{B}\) を求めるための台形公式を用いた近似計算が最も一般的です。

$$G = 1 – 2 \times B$$

💡 \( G = 1 – 2 \times B の変換 \)

\( G = \frac{A}{A + B} \) という定義式は、以下の簡単な代数操作により、「ローレンツ曲線の下側の面積 \(\text{B}\)」だけを使った計算式に変換できます。

ステップ 1: \(\text{A}\) を \(\text{B}\) で表す

三角形全体の面積は \(A + B = 0.5\) なので、不平等な面積 \(\text{A}\) は次のように表せます。

$$\text{面積 } A = 0.5 – \text{面積 } B$$

ステップ 2: ジニ係数の式に代入する

この関係を、ジニ係数の定義 $$G = \frac{A}{A+B}$$

に \(A + B = 0.5\) を代入します。 $$G = \frac{A}{0.5}$$

次に\(\text{面積 } A = 0.5 – \text{面積 } B\)を代入します

$$G = \frac{0.5 – B}{0.5}$$

分数を分けて計算すると、

$$G = \frac{0.5}{0.5} – \frac{B}{0.5}$$

ジニ係数は、「1」から、「ローレンツ曲線の下側の面積 B を2倍したもの」を引くことで求められます。

$$\mathbf{G = 1 – 2B}$$

離散データにおけるB面積の計算式

ジニ係数 \(\text{G}\) は、以下の台形公式の総和を用いてローレンツ曲線の下側の面積 \(\text{B }\) を計算し、そこから導かれます。

$$B = \sum_{i=1}^{n} \frac{1}{2} (Y_i + Y_{i-1}) (X_i – X_{i-1})$$

  • \(n\): 総数
  • \(X_i\): Xの累積比率(横軸)
  • \(Y_i\): Yの累積比率(縦軸)

ローレンツ曲線

ローレンツ曲線の下側のイメージ

ローレンツ曲線の下側の面積を求めるには、上記の図のように、各エリアが台形になっている点を利用して計算します

5. ⚾ 実践:プロ野球データから見る計算例

実際のデータでジニ係数を計算してみたいと思います。以下は2025年の読売ジャイアンツの選手別の打点の一覧です。※実際には1打点もあげていない選手も多数いますが、今回は1打点をあげている選手のみを対象として計算してみたいと思います。

もしも全選手が均等に打点をあげているのであればジニ係数は0に近づき、特定の先週に集中しているのであれば1に近づきます。

選手打点
キャベッジ51
岡本 和真49
泉口 友汰39
岸田 行倫39
リチャード39
吉川 尚輝32
中山 礼都32
丸 佳浩26
坂本 勇人22
選手打点
増田 陸21
甲斐 拓也20
若林 楽人16
佐々木 俊輔10
大城 卓三10
ヘルナンデス8
浅野 翔吾8
オコエ 瑠偉5
門脇 誠4
選手打点
浦田 俊輔4
山﨑 伊織3
赤星 優志2
岡田 悠希2
山瀬 慎之助2
荒巻 悠1
井上 温大1
小林 誠司1
石川 達也1

計算結果

このデータに基づき、打点の少ない選手から順に累積比率を計算し、面積 \(\text{B}\) を求めると以下のようになります。

  1. ローレンツ曲線の下側の面積 \(\text{B}\)を計算:$$B \approx 0.23835$$
  2. ジニ係数 \(\text{G}\) を算出:$$G = 1 – 2 \times 0.23835 \approx 0.5233$$

この \(\text{G} = 0.523\) という値は、一般的な経済指標の「格差大」とされる 0.4 を大きく超えており、チーム打点が少数の主力選手に大きく偏っている(依存度が高い)ことを、客観的な数値で示しています。


面積 \(\text{B}\)の内訳

選手名 台形面積
小林 誠司 0.00004
井上 温大 0.00012
石川 達也 0.00021
荒巻 悠 0.00029
山瀬 慎之助 0.00041
赤星 優志 0.00058
岡田 悠希 0.00074
山﨑 伊織 0.00095
門脇 誠 0.00124
浦田 俊輔 0.00157
オコエ 瑠偉 0.00194
浅野 翔吾 0.00248
ヘルナンデス 0.00314
大城 卓三 0.00389
佐々木 俊輔 0.00471
若林 楽人 0.00579
甲斐 拓也 0.00728
増田 陸 0.00897
坂本 勇人 0.01075
丸 佳浩 0.01273
吉川 尚輝 0.01513
中山 礼都 0.01777
泉口 友汰 0.02071
岸田 行倫 0.02393
リチャード 0.02716
岡本 和真 0.03080
キャベッジ 0.03493

R言語でジニ係数を計算する

R言語でジニ係数を計算するプログラムです

# データの準備
players_data <- data.frame(
  選手名 = c("キャベッジ", "岡本 和真", "泉口 友汰", "岸田 行倫", "リチャード",
             "吉川 尚輝", "中山 礼都", "丸 佳浩", "坂本 勇人", "増田 陸",
             "甲斐 拓也", "若林 楽人", "大城 卓三", "佐々木 俊輔", "浅野 翔吾",
             "ヘルナンデス", "オコエ 瑠偉", "門脇 誠", "浦田 俊輔", "山﨑 伊織",
             "山瀬 慎之助", "赤星 優志", "岡田 悠希", "小林 誠司", "井上 温大",
             "石川 達也", "荒巻 悠"),
  打点 = c(51, 49, 39, 39, 39, 32, 32, 26, 22, 21, 20, 16, 10, 10, 8, 8, 5, 4, 4, 3, 2, 2, 2, 1, 1, 1, 1)
)

# 打点で降順にソート
players_data <- players_data[order(players_data$打点), ]

# 累積打点の計算
players_data$打点累計 <- cumsum(players_data$打点)

# 総打点と総選手数
total_rbi <- sum(players_data$打点)
total_players <- nrow(players_data)

# ローレンツ曲線に必要な累積比率の計算
x<-(1:total_players) / total_players
y<-players_data$打点累計 / total_rbi


# 曲線下の面積(Area B)を計算
# 台形の面積 = (上底 + 下底) * 高さ / 2
# ここでは 幅(diff(x)) * 平均の高さ((y[i] + y[i+1]) / 2) を足し合わせます
area_under_curve <- sum(diff(x) * (head(y, -1) + tail(y, -1)) / 2)
# ジニ係数 = 1 - (2 * 曲線下の面積)
gini_index <- 1 - (2 * area_under_curve)

# 計算結果をコンソールに表示
print(paste("ジニ係数:", round(gini_index, 4)))