بررسی اجمالی بر شیوه منت کارلو (Monte Carlo) - قسمت ۱/۲

روش های مونت کارلو (MC) زیرمجموعه ای از الگوریتم های محاسباتی است که از فرایند نمونه گیری تصادفی مکرر برای تخمین عددی پارامترهای ناشناخته استفاده می کند. آنها برای ما مدلسازی موقعیتهای پیچیده که بسیاری از متغیرهای تصادفی در آن دخیل هستند، و همچنین ارزیابی تأثیر ریسک را میسر می سازند. کاربرد های منت کارلو (MC) به طرز باورنکردنی گسترده است و منجر به تعدادی از کشفیات پیشگامانه در زمینه های فیزیک، نظریه بازی ها (Game Theory) و امور مالی شده است. طیف گسترده ای از روشهای منت کارلو (MC) وجود دارد، اما همه آنها برای حل مسائل قطعی (Deterministic Problems) به تولید اعداد تصادفی متکی هستند. امیدوارم در قسمت اول از سری مقاله‌های منت کارلو (MC) برخی از اصول اساسی MC آن را بیان کنم و شاید کمی شما را در مورد کاربردهای احتمالی آنها مشتاق کنم.



این مفهوم توسط ریاضیدان استانیسلاو اولام (Stanislaw Ulam)، که این روش ها را به عنوان بخشی از همکاری و کمک خود در پروژه منهتن (Manhattan Project) ارائه داده بود، ابداع شد. او از ابزارهای نمونه گیری تصادفی و آمار استنباطی (Inferential Statistics) برای مدل سازی احتمالات نتایج استفاده کرد، که در اصل برای یک بازی با کارت (Monte Carlo Solitaire) اعمال شد بود. بعد ها اولام (Ulam) با همكار جان فون نویمان (John von Neumann)، با استفاده از فن آوری های رایانه ای تازه توسعه یافته در زمینه شبیه سازی برای شناخت بهتر خطرات مرتبط با پروژه هسته ای ، كار كرد. همانطور که می توانید تصور کنید، فناوری مدرن محاسباتی به ما امکان می دهد تا بتوانیم سیستم های بسیار پیچیده تری را با تعداد بیشتری از پارامتر تصادفی همانند بسیاری از سناریوها و رخدادهای روزمره زندگی که با آنها روبرو می شویم، مدل کنیم. قبل از اینکه سیستم های پیچیده را در نظر بگیریم، اجازه دهید درباره ای استفاده از مونت کارلو (MC) یک مورد ساده صحبت کنیم؛ بازی BlackJack.

اگر می خواستیم احتمال گرفتن BlackJack (یک کارت ACE به همراه یک کارت شماره ۱۰) را پیدا کنیم، می توانیم به راحتی نسبت تعداد عقربه های ممکن را که این ترتیب از کارت‌ها در آن اتفاق می‌‌افتد، بر تعداد کل ترکیبات ممکن کارت بدست آوریم. احتمال (اگر کنجکاو هستید حدود ۱/۲۱ است). اما اکنون تصور کنید محاسبه فضای نمونه ما بسیار دشوارتر است. به عنوان مثال دسته کارتهای ما در عوض فقط ۵۲ کارت، دارای هزاران مورد است. یا حتی بهتر است بگوییم ما حتی نمی دانیم چند کارت در دسته موجود است. روش دیگری برای یافتن این احتمال وجود دارد.


می توانیم پشت میز بنشینیم و صد بازی انجام دهیم و نتایج را هنگام بازی ثبت کنیم. ممکن است ما ۱۹، ۲۰ یا حتی ۲۸ بار برنده شویم. با استفاده از هر یک از این نتایج می توانیم مقداری به احتمال برنده شدن اختصاص دهیم. به نظر می رسد یک روش کاملاً بد برای ارزیابی شانس ما در بازی است، اما امیدوارم که ما فقط برای سرگرمی بازی می کنیم. حالا اگر دوباره برویم و هزار، ده هزار، میلیون ها بار بازی کنیم، قانون اعداد بزرگ به ما اظهار دارد:

"همانطور که تعداد یکسان توزیع شده (Identically Distributed) متغیرهایی که به طور تصادفی (Randomly Generated) ایجاد شده ا‌ند افزایش می‌‌یابد، میانگین نمونه آنها به میانگین نظری (Theoretical Mean) آنها نزدیک می شود."


این علاوه بر اینکه به راحتی یکی از مهمترین قوانین آماری است، اساس شبیه سازی مونت کارلو
(Monte Carlo Simulation) می‌ باشد و به ما امکان آن را می دهد که با استفاده از آزمایشات آماری، یک مدل تصادفی بسازیم. حالا به نمونه مورد علاقه من (و احتمالاً ساده ترین) برآورد MC نگاه کنیم.


برآورد مونت کارلو از عدد Pi

همانطور که همه ما در دوره متوسطه آموزش دیدیم، عدد Pi یک ثابت است که نسبت محیط به قطر یک دایره را نشان می دهد. این غیر منطقی است، به این معنی که عدد Pi دارای ارقام بی نهایت است که از هیچ الگویی پیروی نمی کنند. آیا برای شما باور کردنی است اگر به شما بگویم می توانیم به سادگی و با انجام یک بازی دارت رقم Pi را به همان تعداد ارقام اعشار که تمایل داریم تخمین بزنید؟ البته تا حدودی از عدم اطمینان را باید در نظر گرفت، چون ما در حال انجام یک بازی کاملا بر پای شانس هستیم! بیایید یک اسکریپت کوتاه پایتون بنویسیم تا ببینیم چگونه می‌ توان این تخمین را پیدا کرد.



همانطور که مشاهده می کنید، ما در حال تولید نقاط تصادفی در یک جعبه و تعداد نقاطی که در یک دایره تعبیه شده قرار می گیرند را می شماریم. برای سادگی، ما فقط ربع بالایی تخته دارت خود را نگاه می کنیم که دارای شعاع R است و روی یک قطعه چوب مربع با همان عرض نصب شده است. اگر ۱۰۰ دارت پرتاب کنیم، و تعداد دارت هایی را که با موفقیت به تخته دارت اصابت کرده ا‌ند بشماریم، ممکن است طرح زیر را بدست آوریم.


اگر فکر می کنید: "چرا ما به این مقدار بد پرتاب کرده ایم؟" شما سوال درستی مطرح کرده اید. برای این مثال، مکان دارت ما باید به طور یکنواخت در سراسر منطقه توزیع شود، بنابراین قطعاً در اینجا بازی های زیادی برنده نخواهیم شد. از از شروع بازی ما، احتمال برخورد دارت به صفحه π / ۴ خواهد بود. همانطور که بازی را ادامه می دهیم، ∞ <- n به این مقدار واقعی نزدیک می شویم (با تشکر از برنولی!). با افزایش n با ترتیب ده ، میبینیم که تخمین ما دقیق تر می شود.

ممکن است بگویید: این ها اطلاعات مفیدی هستند، اما من از قبل می دانم که مقدار عدد پای ...۳.۱۴۱۵۹ است و چه چیزی در دنیای واقعی به طور یکنواخت توزیع می شود؟ نترسید، زیرا هنگام استفاده از روشهای MC برای مدل سازی سیستم های با ابعاد بالاتر، ما باید انواع متغیرهای تصادفی را با توزیع احتمالات مختلف که با دقت بیشتری اثر پارامترهای آنها در مدل ما تاثیر دارند، را نمونه برداری کنیم. چه کارهایی‌ در دنیای واقعیی‌ با این ابزار می توانیم انجام دهیم؟


سرمایه گذاری (Finance)

تجزیه و تحلیل مونت کارلو (Monte Carlo Analysis) به طور گسترده ای در مهندسی مالی (Financial Engineering) برای پیش بینی بازار سهام استفاده می شود. این یک حس شهودی برای تحلیلگر بازار ایجاد می ‌کند، زیرا مدل سازی بازار غیرممکن است، و از ابعادی باور نکردنی بالایی برخوردار است و داده های زیادی برای نمونه برداری دارد. اهمیت ریسک عامل موثر دیگری بر دلیل استفاده تحلیل گران مالی از روش های MC است. یکی از کاربردهای نسبتاً ساده مونت کارلو در این زمینه بهینه سازی اوراق بهادار است. من این پست وبلاگ را در مورد این موضوع بسیار توصیه می کنم، که به طور کامل اما خلاصه جزئیات نحوه نوشتن کد برای این نوع تجزیه و تحلیل را توضیح می دهد:

هنگام انتخاب سبد سهام، ممکن است تمایل داشته باشید که بسته به اهداف خود، سطوح مختلف ریسک را بپذیرید. اما صرف نظر از تمایل به پذیرش ریسک، می توانید بازده خود را در هر نوسانی از پرتفلیو با استفاده از مونت کارلو به حداکثر برسانید تا ترکیبات مناسب و سوده ترین نسبت سهام را پیدا کنید. با استفاده از داده‌های تاریخ گذاری شده در گذشته (Historical Data) می توان صدها هزار ترکیب مختلف سهام را در نسبت های مختلف ایجاد کرد، تا ببینیم عملکرد هر یک از آنها در آن دوره زمانی نسبت به یکدیگر چگونه است. سپس می توان پیکربندی بهینه را با استفاده از معیاری به نام نسبت شارپ - Sharpe Ratio (معیاری از عملکرد بازده سرمایه گذاری با توجه به ریسک آن) انتخاب کرد.

اگر وعده های افزایش ثروت و دانش برای جلب توجه شما کافی نبودند، روش های Markov Chain Monte Carlo ابزاری قدرتمند را برای آموزش الگوریتم های یادگیری عمیق (Deep Learning) ارائه می دهند. دانشمندان داده (Data Scientist) و مهندسان یادگیری ماشین (Machine Learning Engineers) می توانند با استفاده از این روش ها انواع کارهای عجیب و خارق العاده ای را انجام دهند. اگر شما علاقه مند به مطالعه بیشتر در مورد مونت کارلو هستید ، من منابع زیر را به شما توصیه می کنم:


مبتدی: http://www.statisticshowto.com/monte-carlo-simulation

متوسط: http://mathforum.org/library/drmath/view/51909.html

پیشرفته:

لینک - https://www.youtube.com/watch?v=OgO1gpXSUzU

لینک - http://farside.ph.utexas.edu/teaching/329/lectures/node109.html

لینک - https://www.coursera.org/lecture/bayesian-methods-in-machine-learning/bayesian-neural-networks-HI8ta



لینک مقاله: An Overview Of Monte Carlo Methods

مترجم: حسن رضوانی - گروه مالی صدر