理解蒙特卡洛模擬

從頭開始實施功能強大的統計工具

蒙特卡洛模擬是一個強大的工具,可以在難以推導精確分佈時對其進行近似估算。 當將複雜的變換應用於隨機變量(RV)(我們知道其分佈)時,就會出現這種情況。 它具有多種應用。 從期權定價到縮小海岸警衛隊搜救工作的地理範圍。 但是它是如何工作的呢?

概率分佈

每個RV的獨特之處在於其分佈。 對於連續RV,概率密度函數(PDF)顯示給定值下連續RV的密度。 任何給定值出現的概率為零,因此您必須對一系列值進行積分才能找到RV落在指定範圍內的概率。 對於離散的RV,此函數稱為概率質量函數(PMF),它返回出現特定值的概率。 他們描述了觀察隨機變量的模式和頻率。

理解蒙特卡洛模擬

理解蒙特卡洛模擬

CDF只是PDF或PMF的累積值。 隨機變量取小於或等於曲線/階躍函數正下方的值的概率。 概率必須在0到1之間,因此CDF的範圍在0到1之間。用F表示。

理解蒙特卡洛模擬

理解蒙特卡洛模擬

逆變換採樣

除了是概率論的基礎知識以外,它們還與蒙特卡洛模擬有什麼關係? 通過以下命題(注意:大寫字母表示RV,小寫字母表示RV的實現)。

理解蒙特卡洛模擬

這意味著我們可以將均勻分佈的最小值為0和最大值為1的隨機變量饋入X的逆CDF中,以生成X的隨機值。

讓我們以指數分佈的CDF為例。 在下面。

理解蒙特卡洛模擬

CDF of an Exponential(lambda) Distribution

通過將U定義為F(X)並求解X,我們可以找到逆CDF。

理解蒙特卡洛模擬

Inverse CDF of an Exponential(lambda) Distribution

現在,我們可以將U〜Uniform(0,1)RV饋入此逆CDF,以根據指數分佈生成隨機抽取。 我選擇1作為我的lambda參數。 我使用的代碼如下。 (注意:它效率低下,可以通過矢量化加快速度,甚至可以使用scipy.stats模塊更快。我這樣做是為了清楚地展示逆變換採樣工作原理的基礎。)

理解蒙特卡洛模擬

The code used to generate Exponential(lambda) RVs

在10,000個模擬隨機變量下,該模擬非常接近理論分佈。

理解蒙特卡洛模擬

現在,讓我們嘗試一下轉換。

近似於RV的變換

現在,我們生成平方標準普通隨機變量。 這實際上是一個Chi-Square(1)RV,它使我們可以通過檢查精確分佈來輕鬆地檢查近似值的好壞。

理解蒙特卡洛模擬

如您所見,該近似值相當合理。

理解蒙特卡洛模擬

在繪製了這些RV之後,我計算出低於1的比例(近似概率)為0.6857。 然後,我通過使用評估為1的Chi-Square(1)CDF將其與確切概率進行比較。確切概率為0.6826894921370859。 在10,000次模擬中,這種近似效果非常好

現在,我們用它來近似估算RV的分佈,而其確切分佈將需要一些求解。

近似我的任意RV

我定義了一些任意的RV。 讓我們將其稱為A並在下面進行定義。

理解蒙特卡洛模擬

找到確切的發行版本需要一些工作,而我不喜歡工作。 幸運的是,我可以編寫一個函數來近似A的分佈。

理解蒙特卡洛模擬

現在我們有了A的分佈的近似值,並且可以找到用於推斷目的的近似概率。

理解蒙特卡洛模擬

現在,我們已經完成了對任意RV的近似處理,讓我們看一個假設的用例。

正回報的可能性

假設我們知道某些證券的收益是分佈(0.05,0.07),而下一個週期的收益並不取決於該週期的收益(這是一個隨機遊動的例子)。 在第5期,我們的投資回報率是正的概率是多少?

理解蒙特卡洛模擬

理解蒙特卡洛模擬

理解蒙特卡洛模擬

5000 Random Walks of our hypothetical security and the distribution of final returns

通過計算最終收益大於0的比例併除以模擬次數,我們發現在5個週期結束時證券價值增加的可能性約為0.85。 在構建投資組合時,這是有用的信息(儘管在現實生活中我們從來沒有像這樣乾淨的案例)。

獎金申請:蒙特卡洛積分

除了近似分佈外,還可以使用蒙特卡洛模擬法對難以解析或無法解析的定積分進行數值近似。 這稱為蒙特卡洛積分。 它是通過評估從(,)生成的隨機變量實現時的函數來執行的,其中a是定積分的下限,b是上限。 然後將這些結果取平均值,然後乘以-即可得到從到的積分的近似值。

使用以下功能:

理解蒙特卡洛模擬

它的積分無法通過分析得出,因此讓我們在0到1的區間內對其進行近似。

理解蒙特卡洛模擬

運行10,000次仿真得出的近似值約為0.244,這與Wolfram給出的近似值0.244十分接近,因此該函數按預期工作。

結論

如果您堅持了這麼長時間,謝謝閱讀。 我希望您能學到一些有關蒙特卡洛模擬如何在後臺進行的知識。 希望這些知識將在您繼續學習蒙特卡洛模擬的應用程序(例如Markov Chain Monte Carlo)時為您提供幫助。 再次提醒您使用scipy.stats中優化的.rvs()方法進行採樣,以獲取感興趣的分佈。 它比重複追加到列表要快一個數量級。

(本文翻譯自John Clements的文章《Understanding Monte Carlo Simulation》,參考:https://towardsdatascience.com/understanding-monte-carlo-simulation-eceb4c9cad4)


分享到:


相關文章: