U分布という考え方：貧富の差も、ゴールデンウィークの過ごし方も説明できるんじゃないだろうか？

# U分布という考え方

矢野和男 著「**データの見えざる手: ウエアラブルセンサが明かす人間・組織・社会の法則**」
という本を読みました。

人の動きをウェアラブルセンサでモニタリングすることで、
**時間の使い方**や、**今まで知られていなかった効率的な仕事のやり方**、**幸せ（ハピネス）までデータとしてとらえることができるようになる！**
という内容です。

詳しい内容は本著に譲るとして、「**U分布**」（Uはユニバーサル、普遍的）という考え方が根底にあります。
熱エネルギーを軸として考えたとき、空気中の分子の動きはボルツマン分布に従い、全エネルギーは保存されることと同様に、
人の時間の使い方（動きなども含め）もエネルギー保存則が成り立つため、U分布が現れるということが示されています。

![df2029e2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/225fe376-9167-d311-cae9-b981490de795.png)
（出典：データの見えざる手、第１章）

上図のように、横軸に身体運動の回数（N回/分）を、
縦軸に累積確率を対数で取ると、右肩下がりの結果が得られることがわかったそうです。

これは、1日のある一定の時間に、決まった動きをしているとかではなく、トータルとして動きの回数が保存されており、
1分という小さな単位の箱の中でエネルギーをやりとりがあることを示しています。
感覚的には、1日の中で、激しく体を動かすような時間は長い間続かず、
デスクワークのような体を動かさないような時間が多くを占めていると言えます。

「トータルのエネルギーが保存」されていて、その中で「細かいエネルギーのやりとりがある」場合には、このようなU分布、ボルツマン分布、もっと一般的に言えば**指数分布**が存在するだろうと考え、[^1]
U分布という考え方を色々なところで使えるんじゃないかを検証してみる企画です。
気楽に読んでみてください。

# U分布のシミュレーション

本著の中で、以下のような図が出てきます。
箱の中にボールを入れて、1個選んでどこかの箱の中に入れることを繰り返すと、まだらな分布（U分布）になるということが示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/0ac9714c-ac32-455f-bc3d-1f141565b334.png)  →　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/c4294218-6506-85c2-6c6c-aad54a29332a.png)
（出典：データの見えざる手、第１章）

本文中では30×30=900の箱の中に、ボールを72,000個入れて、1個取り出してどこかに入れることをやっていますが、
この図のように、20×20=400の箱の中にボールを32,000個（ボールの平均を80個に一致させるため）入れてシュミレーションしてみたいと思います。


```python:U分布のシミュレーション
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['figure.figsize'] = [5, 5]
plt.rcParams['xtick.direction'] = 'in' #x軸の目盛線が内向き('in')か外向き('out')か双方向か('inout')
plt.rcParams['ytick.direction'] = 'in' #y軸の目盛線が内向き('in')か外向き('out')か双方向か('inout')
plt.rcParams['xtick.major.width'] = 1.0 #x軸主目盛り線の線幅
plt.rcParams['ytick.major.width'] = 1.0 #y軸主目盛り線の線幅
plt.rcParams['font.size'] = 16 #フォントの大きさ
plt.rcParams['axes.linewidth'] = 1.0 # 軸の線幅edge linewidth。囲みの太さ
plt.rcParams['font.family'] =  'Times New Roman' #使用するフォント名

#初期値を決める
N = 400
balls = 32000
np.random.seed(0)

map = np.zeros(N)
for i in range(balls):
    x = np.random.randint(N) #N番目の箱を決める
    map[x] += 1 #その場所にボールを入れる

plt.rcParams['figure.figsize'] = [5, 5]
plt.hist(map, color='blue', ec='black')
plt.savefig('0Uhist.png' )
plt.show()
plt.rcParams['figure.figsize'] = [10, 5]
plt.bar(np.arange(N), map, color='blue')
plt.savefig('0Ubar.png' )
plt.show()

plt.rcParams['figure.figsize'] = [5, 5]
a = map.reshape(20,20)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
map2 = ax.imshow(a, cmap="Blues", vmin=0, vmax=170)
fig.colorbar(map2)
plt.savefig('0Umap.png' )
plt.show()
```
```ruby:
def exchange():
    x_from = np.random.randint(N)
    x_to = np.random.randint(N)
    if map[x_from] != 0:
        map[x_from] -= 1
        map[x_to] += 1

times = 10000000
for i in range(times):
    exchange()

plt.rcParams['figure.figsize'] = [5, 5]
plt.hist(map, color='blue', ec='black')
plt.savefig(str(times)+'Uhist.png' )
plt.show()
plt.yscale('log')
plt.hist(map, color='blue', ec='black')
plt.savefig(str(times)+'Uloghist.png' )
plt.show()
plt.rcParams['figure.figsize'] = [10, 5]
plt.bar(np.arange(N), map, color='blue')
plt.savefig(str(times)+'Ubar.png' )
plt.show()

plt.rcParams['figure.figsize'] = [5, 5]
a = map.reshape(20,20)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
map2 = ax.imshow(a, cmap="Blues", vmin=0, vmax=170)
fig.colorbar(map2)
plt.savefig(str(times)+'Umap.png' )
plt.show()
```
（注：[こちらのブログ](https://kiito.hatenablog.com/entry/2014/10/22/221742)のコードを大いに参考にしています）

分布の変化。ボールの出し入れを繰り返すだけで、ポアソン分布からまばらな分布（U分布）が見られるようになりました。
![0Umap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/b00fe471-1f67-0680-b8bb-0493d67d2bdd.png)　→　![10000000Umap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/ccd73c05-e5ad-3a49-b0fb-b24bd9426a6a.png)

このときのヒストグラムの変化は、以下のようになっています。
明らかにボールの量に格差が見られますね。
![0Uhist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/8b390072-4e5d-d94b-c5be-db788ad3ee02.png)　→　![10000000Uhist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/057a9cf6-9316-db72-a778-ba1fdfb255e3.png)

念のため、ログスケールでも確認してみます。かなりキレイに直線に乗りそうな結果が得られました。
最初は約80個だったのに、多いところでは400個を超えるボールがあることがわかります。
![10000000Uloghist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/6e55dfb7-6511-d705-1e3e-5898167af04d.png)


このように、ただランダムにボールを選んでどこかの箱に入れるという、
一見ランダムに見える行動も、大きな差が生まれた方が安定的な状態になるということが不思議ですね。


[こちら](https://qiita.com/yama89/items/8658ec7229c0fa259f02)の方もU分布のシミュレーションをやっていますので参考になれば。


# お金のやりとり

以下は総務省が発表したデータですが、世帯に**貯蓄**がどれくらいあるかを示しています。
横軸がお金の等級、縦軸が占める比率です。


![kakeichosa.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/62d53afe-c52a-3d09-1bb3-c2df9d86e513.jpeg)
（出典：Money LifeHack）


平均値が約1800万円というのも驚きですが、キレイに右肩下がりのグラフになっています。

これも一種のU分布だとすると、
「トータルのお金というエネルギーは保存」されていて、「個別にお金をやりとり」していけば、確認できるはず…。

以下では、参加者20人、トータル2000万円（平均100万円）からスタートし、
選ばれた人から他の人へ1万円を渡すという動作を繰り返した結果です。

```python:お金のやりとり
N = 20 #人数
total_money = 2000
np.random.seed(0)

map = np.zeros(N)
for i in range(total_money):
    x = np.random.randint(N) #N番目の箱を決める
    map[x] += 1 #その場所にボールを入れる

def exchange():
    x_from = np.random.randint(N)
    x_to = np.random.randint(N)
    if map[x_from] != 0:
        map[x_from] -= 1
        map[x_to] += 1

times = 30000000
for i in range(times):
    exchange()

plt.rcParams['figure.figsize'] = [5, 5]
plt.hist(map, color='blue', ec='black')
plt.title(str(times)+" times")
plt.savefig(str(times)+'hist.png' )
plt.show()
```

まずはお金をテキトーに分配する。平均の100万円中心に分布していることがわかります。
大きな差は確認されず。
![0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/25fefbc1-47f1-8ade-6b94-176aadcf7201.png)

U分布には見えない。
![0hist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/a36913fc-7c0a-8578-7d47-cd4a874a35c0.png)


10,000回お金を交換すると、一部格差が生じていますが、まだまだ大きな格差ではないです。
![10000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/4f670471-f479-63bb-851a-e2ec9dd8038c.png)


10,000,000回もお金を交換すると、完全に格差が生じてきます。

![10000000-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/f10094f9-e541-dc24-4d92-fa0509806c50.png)

分布もキレイではないですが、指数分布っぽくなってきました。
![10000000hist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/08a34e14-f59d-b62d-e985-d909b9f5b590.png)

そのまま継続して20,000,000回目までいくと、同じ16番が資産を伸ばすこともなく、むしろ一番貧乏になってしまいました。
![20000000-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/b1f66a4a-cb0a-a967-9125-92d81e84de55.png)

最後に30,000,000回。トータルのお金は2000万、平均は100万とは思えないほどの格差が生じることがわかります。
![30000000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/db73e8e4-3773-fd6c-0bf1-269942243f00.png)
明らかに総資産100万円以下に偏っています。
![30000000hist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/e2f30af8-4326-475b-ad2d-8b2d602da4df.png)
ランクにして並び替えるとこんな感じ。
![30000000Rank.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/3bf6ef2d-b626-14cc-9436-1d5a393c198e.png)


**非常に興味深いのは、ただランダムにお金のやりとりをしているだけでも貧富の差が生まれること。**
**また、同じ人が勝ち続けることはなく、持たざる者がさらに持たざるようになるわけではないということ。**
10,000,000回で、たくさんのお金を持っていた人でも、長い時間（さらに10,000,000回）の後では、お金（エネルギー）が失われていくことがわかりました。
まさに盛者必衰の理という感じです。
（※ただし、このシュミレーションの条件では、という前提ではあるが）

今回は簡単のため20人でやってみましたが、
非常に多い人数で、めちゃくちゃ大きな額をやりとりさせると、まさに現実の貯蓄のような分布が現れることでしょう。


また、このお金のやりとりについては、[こちらのブログ](https://rikunora.hatenablog.com/entry/20170321/p1)の方も詳しく解説しているので、参考にされると良いです。


# スケジュールを当ててみせましょう

**GWはみなさんは、どのように過ごしましたか？**
U分布の考え方に基づけば、どのようなスケジュールを過ごしたかもわかるのではないでしょうか？
人それぞれのエネルギーは保存されており、GWを通してみればアクティブだったりそうでなかったりするという、エネルギーのやりとりがあったと思います。

もし、みなさんにウェアラブルセンサがついていたとしたら、このような動きをしていたんじゃないでしょうか。
私にはわかります。
色が濃いところが激しく動いていたところです。
（本来は同じ時間間隔の箱にエネルギーを出し入れするべきなのでしょうが、わかりやすいように朝~夜としています）

**１．渋滞のなか帰省パターン**
4/28（日）に、渋滞のなか、夜遅くまでかけて帰省。
4/29-30には、実家で手伝いやら何やら。
5/01には、次の日に備えて実家で休息。
5/02に、まだ混んでない朝の時間を利用して帰宅しました。

…とか。
![kisei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/65596bf8-01b3-09dc-992b-82cc30703297.png)


**２．頭でっかちパターン**
4/28（日）に、GWを満喫しちゃうぞ！って登山やら激しいスポーツやら。
結局残りのGWは、体が痛いのでずーっとダラダラ。
無理のない計画を立てないとダメだったなぁ…と反省。

…とか。
![saisyo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/6bee2e77-ca82-9e55-181f-9e5917625f70.png)


**３．大型連休？なにそれおいしいの？パターン**
世間はGWだけど、私は4/29-5/03ずっと仕事だった！！
特に午後が忙しかったのよねー。

…とか。
![sigoto.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192073/27336f17-7507-549a-e923-99a603c68f77.png)





# まとめ

U分布（指数分布）の考え方を紹介しました。
お金のやりとりをシミュレーションしてみたり、GWの過ごし方を予測してみたりしました。

[こちらの記事](https://qiita.com/kaityo256/items/7520893a982255ee6a84)は、「コーヒー豆をひいたとき、豆のサイズが指数分布になる」という結果が得られており、興味深かったので紹介しておきます。
指数分布は身近なものではないかなと思っていますので、これってU分布かも？と思ったら検証してみるとよいかもしれません。

改めて「**データの見えざる手**」は非常に面白い本でしたので、みなさんにもオススメしたいと思います。
本の中では、「普段よく会う人には次に会うまでの時間は短い（確率は高い）けど、しばらく会ってない人と会う確率は低い」というのがU分布になっているとか、
「メールを受け取ってから経過した時間と返信する確率」もU分布だったとか、いろいろ興味深いことが書かれています。

記事は以上となります。ありがとうございました。



#参考
なぜ統計学では釣り鐘型の分布が使われ、物理現象では右肩下がりの分布が使われるのか
https://rikunora.hatenablog.com/entry/20170321/p1

コーヒー豆の数理
https://qiita.com/kaityo256/items/7520893a982255ee6a84

【Python】『データの見えざる手』第一章にあったU分布（指数分布）のシミュレーション
https://kiito.hatenablog.com/entry/2014/10/22/221742

PythonでU分布を生成する
https://qiita.com/yama89/items/8658ec7229c0fa259f02

matplotlibのヒストグラムで分割線を表示
https://qiita.com/KYhei/items/cde00bf31bb0c9c18260

[Python]Matplotlibでヒストグラムを描画する方法
https://qiita.com/supersaiakujin/items/be4a78809e7278c065e6

平均貯金額の「平均」を信用してはいけない。平均値の罠を知ろう。貯金はいくらあればいいのか？
https://money-lifehack.com/diary/2955


[^1]: 統計学的にざっくりいえば、ある事象が発生する確率が一様ならば指数分布になるはずです。人間の生活の色々なところに指数分布が出てくるかもしれない、ということを温かい目で楽しんでいただければ。