{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Monte Carlo Integration with Python\n", "\n", "## Dr. Tirthajyoti Sarkar ([LinkedIn](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/), [Github](https://github.com/tirthajyoti)), Fremont, CA, July 2020\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Disclaimer\n", "\n", "The inspiration for this demo/notebook stemmed from [Georgia Tech's Online Masters in Analytics (OMSA) program](https://www.gatech.edu/academics/degrees/masters/analytics-online-degree-oms-analytics) study material. I am proud to pursue this excellent Online MS program. You can also check the details [here](http://catalog.gatech.edu/programs/analytics-ms/#onlinetext)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What is Monte Carlo integration?\n", "\n", "### A casino trick for mathematics\n", "\n", "![mc-1](https://silversea-h.assetsadobe2.com/is/image/content/dam/silversea-com/ports/m/monte-carlo/silversea-luxury-cruises-monte-carlo.jpg?hei=390&wid=930&fit=crop)\n", "\n", "Monte Carlo, is in fact, the name of the world-famous casino located in the eponymous district of the city-state (also called a Principality) of Monaco, on the world-famous French Riviera.\n", "\n", "It turns out that the casino inspired the minds of famous scientists to devise an intriguing mathematical technique for solving complex problems in statistics, numerical computing, system simulation.\n", "\n", "### Modern origin (to make 'The Bomb')\n", "\n", "![trinity](https://www.nps.gov/whsa/learn/historyculture/images/WHSA_trinity_cloud.jpg?maxwidth=1200&maxheight=1200&autorotate=false)\n", "\n", "One of the first and most famous uses of this technique was during the Manhattan Project when the chain-reaction dynamics in highly enriched uranium presented an unimaginably complex theoretical calculation to the scientists. Even the genius minds like John Von Neumann, Stanislaw Ulam, Nicholas Metropolis could not tackle it in the traditional way. They, therefore, turned to the wonderful world of random numbers and let these probabilistic quantities tame the originally intractable calculations.\n", "\n", "Amazingly, these random variables could solve the computing problem, which stymied the sure-footed deterministic approach. The elements of uncertainty actually won.\n", "\n", "Just like uncertainty and randomness rule in the world of Monte Carlo games. That was the inspiration for this particular moniker.\n", "\n", "### Today\n", "\n", "Today, it is a technique used in a wide swath of fields,\n", "- risk analysis, financial engineering, \n", "- supply chain logistics, \n", "- statistical learning and modeling,\n", "- computer graphics, image processing, game design,\n", "- large system simulations, \n", "- computational physics, astronomy, etc.\n", "\n", "For all its successes and fame, the basic idea is deceptively simple and easy to demonstrate. We demonstrate it in this article with a simple set of Python code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The code and the demo" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.integrate import quad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A simple function which is difficult to integrate analytically\n", "\n", "While the general Monte Carlo simulation technique is much broader in scope, we focus particularly on the Monte Carlo integration technique here.\n", "\n", "It is nothing but a numerical method for computing complex definite integrals, which lack closed-form analytical solutions.\n", "\n", "Say, we want to calculate,\n", "\n", "$$\\int_{0}^{4}\\sqrt[4]{15x^3+21x^2+41x+3}.e^{-0.5x} dx$$" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [], "source": [ "def f1(x):\n", " return (15*x**3+21*x**2+41*x+3)**(1/4) * (np.exp(-0.5*x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [], "source": [ "x = np.arange(0,4.1,0.1)\n", "y = f1(x)" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [ { "data": { "image/png": "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AL179yYpKYmRI0fSsmVL9uzZY3d4SikvpsU7G6l73Q8//DDFihWzORrljW666SaWL1/O559/TuXKldm+fTthYWE8++yz/PXXX3aHp5TyQlq8s3D27FmWLFkCcO0XxJTKqR49ehAfH8+wYcO4evUqL730EvXr1ycyMtLu0JRSXkaLdxYWLVrExYsX6dixI7Vq1bI7HOUDSpQowcyZM9m8eTO33347hw8fpn379jz66KP6hDallNO0eGciJSXlugvVlHKnli1bsnPnTl544QUKFSrEO++8Q506dVi+fLk+oU0plS0t3plYt24dhw8fpnLlyvTo0cPucJQPKly4MM899xyxsbG0atWKX3/9lT59+tCrVy9+/vlnu8NTSnkwp4q3iLQVkc9F5GcRMSIS7sQ8IiIjReSAiFwSkV9E5OVcR5xPUve6//Wvf1GwYEGbo1G+rE6dOmzatInZs2dTvHhxPv/8c+rWrcv8+fN1L1wplSFn97yDgThgBHDRyXleA4YCzwB1gK7AJlcDtENCQgKff/45gYGBPPLII3aHo/xAQEAAjz32GPv376dbt26cO3eOQYMG0blzZ3744Qe7w1NKeRinircxJsIYM94Y8zGQkl17EakFPA70NMZ8Zow5aozZZYyJyGW8+eLtt98mJSWF++67jwoVKtgdjvIjN910E1988QXvv/8+pUqV4uuvv6ZevXrMnj2blJRsv3pKKT+RV+e8ewJHgc4iclREjovIIhEpl0fv5zaXL19m3rx5gF6opuwhIjz44IPEx8fzf//3fyQmJjJ06FA6dOjA999/b3d4SikPkFfF+xbgZuAfQDjQH6gNfCEiHn2R3IoVKzh16hT16tWjdevWdoej/FiFChX45JNPWLZsGWXLliUyMpL69evrI1aVUoirF8SISCIw3BizMIs2bwOPArWMMYcc424DDgLNjTFR6doPBgYDlC9fPmzp0qUuxZSdxMREgoODnWr7xBNPsHfvXkaOHEnPnj3dGkduuZKHp9NcXHPu3DneeOMN1q9fD0DdunUZM2YMVatWdev7+Eq/+EoeoLl4Knfn0r59+xhjTGOnZzDGuDQAiUB4Nm1eAJLTjRMgGbg/q3nDwsKMu23YsMGpdrt37zaAKV68uPnzzz/dHkduOZuHN9BccubTTz81FStWNIApXLiwmTZtmrly5Yrblu8r/eIreRij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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(8,4))\n", "plt.title(\"Plot of the function: $\\sqrt[4]{15x^3+21x^2+41x+3}.e^{-0.5x}$\",\n", " fontsize=18)\n", "plt.plot(x,y,'-',c='k',lw=2)\n", "plt.grid(True)\n", "plt.xticks(fontsize=14)\n", "plt.yticks(fontsize=14)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Riemann sums?\n", "\n", "There are many such techniques under the general category of [Riemann sum](https://medium.com/r/?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRiemann_sum). The idea is just to divide the area under the curve into small rectangular or trapezoidal pieces, approximate them by the simple geometrical calculations, and sum those components up.\n", "\n", "For a simple illustration, I show such a scheme with only 5 equispaced intervals.\n", "\n", "For the programmer friends, in fact, there is a [ready-made function in the Scipy package](https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.quad.html#scipy.integrate.quad) which can do this computation fast and accurately." ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "rect = np.linspace(0,4,5)\n", "\n", "plt.figure(figsize=(8,4))\n", "plt.title(\"Area under the curve: With Riemann sum\",\n", " fontsize=18)\n", "plt.plot(x,y,'-',c='k',lw=2)\n", "plt.fill_between(x,y1=y,y2=0,color='orange',alpha=0.6)\n", "for i in range(5):\n", " plt.vlines(x=rect[i],ymin=0,ymax=2,color='blue')\n", "plt.grid(True)\n", "plt.xticks(fontsize=14)\n", "plt.yticks(fontsize=14)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What if I go random?\n", "\n", "What if I told you that I do not need to pick the intervals so uniformly, and, in fact, I can go completely probabilistic, and pick 100% random intervals to compute the same integral?\n", "\n", "Crazy talk? My choice of samples could look like this…" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "rand_lines = 4*np.random.uniform(size=5)\n", "\n", "plt.figure(figsize=(8,4))\n", "plt.title(\"With 5 random sampling intervals\",\n", " fontsize=18)\n", "plt.plot(x,y,'-',c='k',lw=2)\n", "plt.fill_between(x,y1=y,y2=0,color='orange',alpha=0.6)\n", "for i in range(5):\n", " plt.vlines(x=rand_lines[i],ymin=0,ymax=2,color='blue')\n", "plt.grid(True)\n", "plt.xticks(fontsize=14)\n", "plt.yticks(fontsize=14)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or, this?" ] }, { "cell_type": "code", "execution_count": 166, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "rand_lines = 4*np.random.uniform(size=5)\n", "\n", "plt.figure(figsize=(8,4))\n", "plt.title(\"With 5 random sampling intervals\",\n", " fontsize=18)\n", "plt.plot(x,y,'-',c='k',lw=2)\n", "plt.fill_between(x,y1=y,y2=0,color='orange',alpha=0.6)\n", "for i in range(5):\n", " plt.vlines(x=rand_lines[i],ymin=0,ymax=2,color='blue')\n", "plt.grid(True)\n", "plt.xticks(fontsize=14)\n", "plt.yticks(fontsize=14)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### It just works!\n", "\n", "We don't have the time or scope to prove the theory behind it, but it can be shown that with a reasonably high number of random sampling, we can, in fact, compute the integral with sufficiently high accuracy!\n", "\n", "We just choose random numbers (between the limits), evaluate the function at those points, add them up, and scale it by a known factor. We are done.\n", "\n", "OK. What are we waiting for? Let's demonstrate this claim with some simple Python code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A simple version" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [], "source": [ "def monte_carlo(func,\n", " a=0,\n", " b=1,\n", " n=1000):\n", " \"\"\"\n", " Monte Carlo integration\n", " \"\"\"\n", " \n", " u = np.random.uniform(size=n)\n", " #plt.hist(u)\n", " u_func = func(a+(b-a)*u)\n", " s = ((b-a)/n)*u_func.sum()\n", " \n", " return s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Another version with 10-spaced sampling" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [], "source": [ "def monte_carlo_uniform(func,\n", " a=0,\n", " b=1,\n", " n=1000):\n", " \"\"\"\n", " Monte Carlo integration with more uniform spread (forced)\n", " \"\"\"\n", " subsets = np.arange(0,n+1,n/10)\n", " steps = n/10\n", " u = np.zeros(n)\n", " for i in range(10):\n", " start = int(subsets[i])\n", " end = int(subsets[i+1])\n", " u[start:end] = np.random.uniform(low=i/10,high=(i+1)/10,size=end-start)\n", " np.random.shuffle(u)\n", " #plt.hist(u)\n", " #u = np.random.uniform(size=n)\n", " u_func = func(a+(b-a)*u)\n", " s = ((b-a)/n)*u_func.sum()\n", " \n", " return s" ] }, { "cell_type": "code", "execution_count": 139, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.73321706375046\n" ] } ], "source": [ "inte = monte_carlo_uniform(f1,a=0,b=4,n=100)\n", "print(inte)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How good is the calculation anyway?\n", "This integral cannot be calculated analytically. So, we need to benchmark the accuracy of the Monte Carlo method against another numerical integration technique anyway. We chose the Scipy `integrate.quad()` function for that.\n", "\n", "Now, you may also be thinking - **what happens to the accuracy as the sampling density changes**. This choice clearly impacts the computation speed - we need to add less number of quantities if we choose a reduced sampling density.\n", "\n", "Therefore, we simulated the same integral for a range of sampling density and plotted the result on top of the gold standard - the Scipy function represented as the horizontal line in the plot below," ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [ { "data": { "image/png": "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adx6660+nfPx48cZOXIk48aNY/78+URFRXHNNddw/Hixbfqzzz7LuHHjuPDCC1m4cCEzZswgPj6e3NxcJk6cSP/+/enWrRtpaWle57Bp0yYuu+wyGjRowPz583nqqad499133dpBjB07lq5du7JgwQL69evHHXfcwcqVxr49LLiLCmW2Myty5MCBIikpvrd76ikRpURyc31v++yzOvqkL4HT9u7VbaZP9308VyLtHvjC88/r67B4cbhn4h1PUekmTZok6CiwZW5jx44t1X7s2LG220+aNKlc5/DTTz9Jq1atBBCllHTs2FEmTpwohw8fLqrzxRdfCCCLFi3y2E+LFi3k/vvvL9ofOXKkALJ8+fKish07dkjVqlVlxowZIiJSWFgoZ511ljz55JNFdb755hsBZMOGDR7H2r59uwCy2OkL4q7syJEjMnLkSHH+fbPuzTfffFNUtm7dOgHk888/FxGRP//8U2JiYuRvf/ubxzkMHTpULrzwwlLlF154oQwdOrRo//rrr5e2bdtKQUFBUdkHH3wggKxYsUJE9P8qIBMnTiyqc+rUKWnQoIE8/PDDHudQETCRIw0VFl+CPzmTlKTV5Zs3+942IwPatNHBpOxiNA6arCz9uXNneOdxJtClSxc2b97MJ598woQJExARnnnmGVJSUorU6UuXLqVevXoMGjTIp74TEhLo27dv0X6LFi3o0aNH0Vt0lSpVGDVqFG+//bYVKp85c+aQkpJCkmWdHASqV69Ov379ivYtu4RshzFUWloaeXl53HLLLeUea+XKlVxzzTVUrVq1qGzo0KFUq1aNH374oUTdSy+9tMQczz777KI5GUKLERwMZGf7LziAf8sVGRm+LVMA1KgB0dFGcDCCQ2iJiori6quv5rXXXmPTpk28+eabbNu2jf/85z8AHDhwgMaNG/vcb0JCgtuyXbuKA9recsstZGZmsmzZMo4ePcr8+fMZPXq0/ydjg7i4OKo4ZbqrUaMGQNESirVk4885u7Jr1y4SExNLlFWtWpX69etz8ODBEuV16tQpsV+jRo2iORlCiy3BQSl1gVKqlodjtZRSFwR2WoZQcewYHDrkWwwHizZttJGkr4LD0aPw66++Cw5gwk5DxRccJk+ejIhw5MiRMpcJZ82aVar9rFmzbC8zWkZ5gWTMmDHUq1ePLVu2AFC/fv0SD3u77N27122Z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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "inte_lst = []\n", "for i in range(100,2100,50):\n", " inte = monte_carlo_uniform(f1,a=0,b=4,n=i)\n", " inte_lst.append(inte)\n", "\n", "result,_ = quad(f1,a=0,b=4)\n", "\n", "plt.figure(figsize=(8,4))\n", "plt.plot([i for i in range(100,2100,50)],inte_lst,color='blue')\n", "plt.hlines(y=result,xmin=0,xmax=2100,linestyle='--',lw=3)\n", "plt.xticks(fontsize=14)\n", "plt.yticks(fontsize=14)\n", "plt.xlabel(\"Sample density for Monte Carlo\",fontsize=15)\n", "plt.ylabel(\"Integration result\",fontsize=15)\n", "plt.grid(True)\n", "plt.legend(['Monte Carlo integration','Scipy function'],fontsize=15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Not bad at all...\n", "Therefore, we observe some small perturbations in the low sample density phase, but they smooth out nicely as the sample density increases. In any case, the absolute error is extremely small compared to the value returned by the Scipy function - on the order of 0.02%.\n", "\n", "The Monte Carlo trick works fantastically!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Speed of the Monte Carlo method\n", "\n", "In this particular example, the Monte Carlo calculations are running twice as fast as the Scipy integration method!\n", "\n", "While this kind of speed advantage depends on many factors, we can be assured that the Monte Carlo technique is not a slouch when it comes to the matter of computation efficiency." ] }, { "cell_type": "code", "execution_count": 157, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "107 µs ± 6.57 µs per loop (mean ± std. dev. of 100 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit -n100 -r100\n", "inte = monte_carlo_uniform(f1,a=0,b=4,n=500)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Speed of the Scipy function" ] }, { "cell_type": "code", "execution_count": 158, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "216 µs ± 5.31 µs per loop (mean ± std. dev. of 100 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit -n100 -r100\n", "quad(f1,a=0,b=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Repeat\n", "\n", "For a probabilistic technique like Monte Carlo integration, it goes without saying that mathematicians and scientists almost never stop at just one run but repeat the calculations for a number of times and take the average.\n", "\n", "Here is a distribution plot from a 10,000 run experiment. As you can see, the plot almost resembles a Gaussian Normal distribution and this fact can be utilized to not only get the average value but also construct confidence intervals around that result." ] }, { "cell_type": "code", "execution_count": 165, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "inte_lst = []\n", "for i in range(10000):\n", " inte = monte_carlo_uniform(f1,a=0,b=4,n=500)\n", " inte_lst.append(inte)\n", "\n", "plt.figure(figsize=(8,4))\n", "plt.title(\"Distribution of the Monte Carlo runs\",\n", " fontsize=18)\n", "plt.hist(inte_lst,bins=50,color='orange',edgecolor='k')\n", "plt.xticks(fontsize=14)\n", "plt.yticks(fontsize=14)\n", "plt.xlabel(\"Integration result\",fontsize=15)\n", "plt.ylabel(\"Density\",fontsize=15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Particularly suitable for high-dimensional integrals\n", "\n", "Although for our simple illustration (and for pedagogical purpose), we stick to a single-variable integral, the same idea can easily be extended to high-dimensional integrals with multiple variables.\n", "\n", "And it is in this higher dimension that the Monte Carlo method particularly shines as compared to Riemann sum based approaches. The sample density can be optimized in a much more favorable manner for the Monte Carlo method to make it much faster without compromising the accuracy.\n", "\n", "In mathematical terms, the convergence rate of the method is independent of the number of dimensions. In machine learning speak, the Monte Carlo method is the best friend you have to beat the curse of dimensionality when it comes to complex integral calculations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## Summary\n", "We introduced the concept of Monte Carlo integration and illustrated how it differs from the conventional numerical integration methods. We also showed a simple set of Python codes to evaluate a one-dimensional function and assess the accuracy and speed of the techniques.\n", "\n", "The broader class of Monte Carlo simulation techniques is more exciting and is used in a ubiquitous manner in fields related to artificial intelligence, data science, and statistical modeling.\n", "\n", "For example, the famous Alpha Go program from DeepMind used a Monte Carlo search technique to be computationally efficient in the high-dimensional space of the game Go. Numerous such examples can be found in practice." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" } }, "nbformat": 4, "nbformat_minor": 4 }