"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

貧富の差があるとか不平等なのが自然だ!?という説をシュミレーションで確認してみた

たまたま読んだ本に「平等さを突き詰めると不平等になるのは、至って当たり前の統計学的事実である」という趣旨の内容がありました。

本当なのかな?と、ちょっとモヤっとしたので、プログラムで確かめてみようかなと思います。

f:id:arakan_no_boku:20190717231548j:plain


池谷裕二さんの本です

 

読んだのはこの本の「不平等な世界の方が安定する」という章です。 

脳はなにげに不公平 パテカトルの万脳薬

脳はなにげに不公平 パテカトルの万脳薬

 

 もともとは。

脳のシナプスには、ごく一握りの強いシナプスとその他大多数の弱いシナプスがある、とても不公平な状態なのですが、その方が動作が安定し、省エネであるという利点があって、長期安定に適しているという話です。

その中に、脳のシナプスの不安定な分布は、ヒト社会の年収の分布とほぼ同じで、一部の大金持ちとその他大勢の貧乏人という不平等の方が、実は自然なのだ・・的な記述がありました。

池谷裕二さんが書いているのだから本当のことなんでしょうが、どうも・・・納得し難いモヤモヤ感が残ります。

ということで、本に書いてあった「実験」を、プログラムでシュミレートして、自分の眼で確かめてみよう・・と考えたというのが、今回の趣旨です。

 

本のルールを少し変えてシュミレートしてみました

 

本に書いてある実験のルールはこうです。

  1. 100人に1万円ずつ配る。
  2. 乱数表で2人をランダムに選び出す。
  3. 1人目に選ばれた人は、2人目の人に1000円を渡す。
  4. 2と3を1000回繰り返す

最初は全員が1万円もっているのだから「平等」

1000円の受け渡しもランダムだから「平等」

なるほど、ルールのどこにも不平等はありません。

これで本当に「貧富の差」が生まれるか・・?

人を100人も集めるなんて無理なので、プログラムでやってみます。

ちょっと思うところがあって、設定は以下のように変えました。

  • 人数を1000人にする
  • 1人目から2人目に渡すのは200円にする。
  • 繰り返す回数を100万回にする

ほんでもってソースはこんな感じです。

py_sim01.py

import matplotlib.pyplot as plt
import random

# 最初に全員が保持する金額
INITIAL_INCOME = 10000
# 一回のトレードで受け渡しをする金額
TRANSACTION_AMOUNT = 200
# トレードを繰り返す回数
REPEAT_COUNT = 1000000
# 処理対象とする人数
NUMBER_OF_PEOPLE = 1000

# 10000円ずつもった1000人を生成
current_income_list = [INITIAL_INCOME for dummy in range(NUMBER_OF_PEOPLE)]
# 乱数であたった一人目から二人目に金額をうつす
for i in range(REPEAT_COUNT):
    provider = random.randrange(0, NUMBER_OF_PEOPLE)
    recipient = random.randrange(0, NUMBER_OF_PEOPLE)
    current_income_list[provider] -= TRANSACTION_AMOUNT
    current_income_list[recipient] += TRANSACTION_AMOUNT

# 1000円レンジでカウントに使う辞書
income_distribution_dic = {
    'MIN': 0,
    '-11': 0,
    '-10': 0,
    '-9': 0,
    '-8': 0,
    '-7': 0,
    '-6': 0,
    '-5': 0,
    '-4': 0,
    '-3': 0,
    '-2': 0,
    '-1': 0,
    'CTR': 0,
    '1': 0,
    '2': 0,
    '3': 0,
    '4': 0,
    '5': 0,
    '6': 0,
    '7': 0,
    '8': 0,
    '9': 0,
    '10': 0,
    '11': 0,
    '12': 0,
    '13': 0,
    '14': 0,
    '15': 0,
    'MAX': 0
}

# カウント時に比較する金額レンジをもつ辞書
income_forwork_dic = {
    'MIN': -2000,
    '-11': -1000,
    '-10': 0,
    '-9': 1000,
    '-8': 2000,
    '-7': 3000,
    '-6': 4000,
    '-5': 5000,
    '-4': 6000,
    '-3': 7000,
    '-2': 8000,
    '-1': 9000,
    'CTR': 10000,
    '1': 11000,
    '2': 12000,
    '3': 13000,
    '4': 14000,
    '5': 15000,
    '6': 16000,
    '7': 17000,
    '8': 18000,
    '9': 19000,
    '10': 20000,
    '11': 21000,
    '12': 22000,
    '13': 23000,
    '14': 24000,
    '15': 25000,
    'MAX': 99999
}
# 辞書にカウントしていく
for r in current_income_list:
    for key_a, val_a in income_forwork_dic.items():
        if r <= val_a:
            income_distribution_dic[key_a] += 1
            break
# 棒グラフの表示
plt.bar(x=income_distribution_dic.keys(),
        height=income_distribution_dic.values())
plt.show()

個別の金額を表示するのではなく、 -2000円未満から25000円超まで1000円きざみの枠を作り、そこに金額比較でカウントしています。

 

結果のグラフを現実と比較してみます

 

上記のプログラムの結果、表示したグラフはこんな感じです。

f:id:arakan_no_boku:20190720000351p:plain

左(MIN)に行くほど貧乏(MINだと-3000円以下)、右(MAX)に行くほど金持ち(MAXだと25000円以上)です。

確かに貧富の差はでますね。

なんで、こうしたかというと、日本の実際の所得分布状況グラフと形を比べたかったからです。 

2018年度の資料(こちらのPDF)の所得の分布状況のグラフはこうです。

f:id:arakan_no_boku:20190720001020p:plain

さすがに形は、ちょっと違います。

でも、よく考えてみると。

シミュレーションの方は、スタートラインで全員が1万円もっているという前提でやってます。

現実所得の単位は100万円単位で、対応するシミュレーションのグラフの単位が1000円なので、単位をあわせると「全員がスタート時点で1000万円ずつ持っているところからスタートしている」ということになります。

こう考えると、とっと現実とかけはなれてますよね。

だから、この形の違いも当然かな・・。

そう思ったので、ためしに、 INITIAL_INCOME = 0.

つまり、最初からみんなが0円からスタートする想定でもやってみました。

ただ、これだとMINの人数が異常に増えてしまって、歪になってしまうので、MINだけグラフに表示させないようにしてグラフにしてみました。

py_sim02.py

f:id:arakan_no_boku:20190720003215p:plain

おーー。

なんか実際の所得分布と形が似てきましたね。

まあ、MIN(-3000以下)をグラフから切り捨ててるので、ノーマルな結果ではありえないのは間違いないです。

ですけど、現実世界でも、極端な低所得者については「生活保護」という形でMINに相当する人達にバイアスがかかっていますし、そのセーフティネットにも拾われない人達はグラフに反映していないかもしれないわけです。

そう考えてみると・・。

形が似ているという事実を完全無視もできないと思うのですよね。

金持ちになるか貧乏になるか。

もちろん個人の能力とかもあるでしょうけど、そのどちらになるかは、目に見えない統計学的事実(これを運とよぶのでしょうか)に支配される部分が多い・・と言われても、納得せざるをえないかもしれないです。

一旦、無理やり平等にして、ルールを平等と思えるものにしても、金銭の授受を含むやりとりを繰り返すうちに貧富の差が生まれて、不平等になっていくのが自然の摂理。

なんですかね?

うーーん。

個人的には、とても嫌だし、認めたくもないんですが(笑)

今回はこんなところで。

ではでは。