如何用蒙特卡洛模擬社會(huì)財(cái)富分配 2019-05-29

image.png

首先杨蛋,介紹下什么是蒙特卡洛模擬(let's go)
蒙特卡羅(Monte Carlo)方法吆视,又稱隨機(jī)抽樣或統(tǒng)計(jì)試驗(yàn)方法念脯,當(dāng)所要求解的問(wèn)題是某種事件出現(xiàn)的概率,或者是某個(gè)隨機(jī)變量的期望值時(shí)窖维,它們可以通過(guò)某種“試驗(yàn)”的方法榆综,得到這種事件出現(xiàn)的頻率,或者這個(gè)隨機(jī)變數(shù)的平均值铸史,并用它們作為問(wèn)題的解鼻疮。這就是蒙特卡羅方法的基本思想。蒙特卡羅方法通過(guò)抓住事物運(yùn)動(dòng)的幾何數(shù)量和幾何特征琳轿,利用數(shù)學(xué)方法來(lái)加以模擬判沟,即進(jìn)行一種數(shù)字模擬實(shí)驗(yàn)。它是以一個(gè)概率模型為基礎(chǔ)崭篡,按照這個(gè)模型所描繪的過(guò)程挪哄,通過(guò)模擬實(shí)驗(yàn)的結(jié)果,作為問(wèn)題的近似解琉闪〖A叮可以把蒙特卡羅解題歸結(jié)為三個(gè)主要步驟:構(gòu)造或描述概率過(guò)程;實(shí)現(xiàn)從已知概率分布抽樣颠毙;建立各種估計(jì)量斯入。
簡(jiǎn)單來(lái)說(shuō),就是通過(guò)隨機(jī)數(shù)蛀蜜,對(duì)策略進(jìn)行模擬和評(píng)估
那么刻两,如何通過(guò)蒙特卡洛模擬對(duì)社會(huì)財(cái)富分配進(jìn)行預(yù)估呢,此處有個(gè)不成熟的小案例滴某,即:假設(shè)有100個(gè)人磅摹,每人的初始財(cái)富是100元,當(dāng)財(cái)富值大于0時(shí)壮池,需要隨機(jī)向其他一人支付1元偏瓤,當(dāng)財(cái)富值為0時(shí),無(wú)需支付椰憋,但仍有可能獲得其他人支付的金額,基于以上假設(shè)進(jìn)行需進(jìn)行如下四步操作:
1赔退、構(gòu)建函數(shù)模型

#注意:當(dāng)某人財(cái)富值為0時(shí)橙依,該輪無(wú)需拿錢出來(lái)证舟,但仍有機(jī)會(huì)獲得別人的財(cái)富
def game1(data,roundi):
    if len(data[data[roundi-1]==0])>0:
        round_i=pd.DataFrame({'pre_round':data[roundi-1],'lost':0})
        con=round_i['pre_round']>0
        round_i['lost'][con]=1
        round_players_i=round_i[con]
        choice_i=pd.Series(np.random.choice(person_n,len(round_players_i)))
        gain_i=pd.DataFrame({'gain':choice_i.value_counts()})
        round_i = round_i.join(gain_i)
        round_i.fillna(0,inplace=True)
        return round_i['pre_round']-round_i['lost']+round_i['gain']
    else:
        round_i=pd.DataFrame({'pre_round':data[roundi-1],'lost':1})
        choice_i=pd.Series(np.random.choice(person_n,100))
        gain_i=pd.DataFrame({'gain':choice_i.value_counts()})
        round_i=round_i.join(gain_i)
        round_i.fillna(0,inplace=True)
        return round_i['pre_round']-round_i['lost']+round_i['gain']

運(yùn)行模型,模擬財(cái)富分配

import time
person_n=[x for x in range(1,101)]
fortune=pd.DataFrame([100 for i in range(100)],index=person_n)
fortune.index.name='id'
#設(shè)定初始參數(shù),游戲玩家100人窗骑,初始資金100元
starttime=time.time()
for round in range(1,17001)[:3000]:
    print('正在進(jìn)行第%i次模擬'% round)
    fortune[round] = game1(fortune,round)
    #fortune[round] = game1(fortune,round)
game1_result=fortune.T
endtime=time.time()
print('模型總共用時(shí)%i秒' % (endtime - starttime))
game1_result

繪制柱狀圖
前100輪女责,按每10輪繪制一次,第100-1000輪创译,按照每100輪繪制1次抵知,第1000-17000輪,按每400輪繪制一次
查看財(cái)富變化狀況

def graph2(data,start,end,length):
    for n in list(range(start,end,length)):
        datai=data.iloc[n].sort_values().reset_index()[n]
        plt.figure(figsize=(10,3))
        plt.title('第%i輪'%n)
        plt.bar(datai.index,datai.values,color='gray',alpha=0.8,width=0.5)
        plt.xlabel('PlayerID')
        plt.ylabel('Fortune')
        plt.xlim(-10,110)
        plt.ylim(0,400)
        plt.grid(alpha=0.5,linestyle='--')
        
graph2(game1_result,0,100,10)
graph2(game1_result,100,1000,100)
graph2(game1_result,1000,17000,400)

得出結(jié)論
最后一輪中软族,最富有的人財(cái)富值為365元刷喜,相比于初始財(cái)富,翻了3.65倍
10%的人掌握著28%的財(cái)富立砸,20%的人掌握著51%的財(cái)富掖疮?
60%的人財(cái)富縮水至100元以下了

round_17000_1 = pd.DataFrame({'money':game1_result.iloc[-1]}).
sort_values(by = 'money',ascending = False).reset_index()
# 最后一輪數(shù)據(jù)匯總,并排序
round_17000_1['fortune_pre'] = round_17000_1['money'] / round_17000_1['money'].sum()
# 計(jì)算每個(gè)人的財(cái)富占比
round_17000_1['fortune_cumsum'] = round_17000_1['fortune_pre'].cumsum()
# 計(jì)算積累財(cái)富占比
round_17000_1.head()

fortune_sum = round_17000_1['money'].sum()
top10 = round_17000_1[round_17000_1['fortune_cumsum']<0.1]
top20 = round_17000_1[round_17000_1['fortune_cumsum']<0.2]
# 匯總出掌握前10%/20%財(cái)富的人群

lessthan100_num = len(round_17000_1[round_17000_1['money']<100])/100

print('最后一輪中颗祝,最富有的人財(cái)富值為%.1f元浊闪,相比于初始財(cái)富,翻了%.2f倍'
% (round_17000_1.iloc[0]['money'],round_17000_1.iloc[0]['money']/100))
print('10%%的人掌握著%.2f%%的財(cái)富螺戳,20%%的人掌握著%.2f%%的財(cái)富'
% (top10['money'].sum()/10000*100,top20['money'].sum()/10000*100))
print('%.2f%%的人財(cái)富縮水至100元以下了' % (lessthan100_num*100))

注意:用蒙特卡洛模擬需要滿足樣本可用隨機(jī)數(shù)試驗(yàn)的原則搁宾,樣本分布必須是隨機(jī)的,不能有偏好倔幼!
以上便是此次模擬過(guò)程~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猛铅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凤藏,更是在濱河造成了極大的恐慌奸忽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揖庄,死亡現(xiàn)場(chǎng)離奇詭異栗菜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蹄梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門疙筹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人禁炒,你說(shuō)我怎么就攤上這事而咆。” “怎么了幕袱?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵暴备,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我们豌,道長(zhǎng)涯捻,這世上最難降的妖魔是什么浅妆? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮障癌,結(jié)果婚禮上凌外,老公的妹妹穿的比我還像新娘。我一直安慰自己涛浙,他們只是感情好康辑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轿亮,像睡著了一般疮薇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哀托,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天惦辛,我揣著相機(jī)與錄音,去河邊找鬼仓手。 笑死胖齐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗽冒。 我是一名探鬼主播呀伙,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼添坊!你這毒婦竟也來(lái)了剿另?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贬蛙,失蹤者是張志新(化名)和其女友劉穎雨女,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳准,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氛堕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了野蝇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讼稚。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绕沈,靈堂內(nèi)的尸體忽然破棺而出锐想,到底是詐尸還是另有隱情,我是刑警寧澤乍狐,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布赠摇,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝉稳。R本人自食惡果不足惜抒蚜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一掘鄙、第九天 我趴在偏房一處隱蔽的房頂上張望耘戚。 院中可真熱鬧,春花似錦操漠、人聲如沸收津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撞秋。三九已至,卻和暖如春嚣鄙,著一層夾襖步出監(jiān)牢的瞬間吻贿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工哑子, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舅列,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓卧蜓,卻偏偏與公主長(zhǎng)得像帐要,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弥奸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容