सिमुलेशन का उपयोग कब करें?


40

तो यह एक बहुत ही सरल और बेवकूफ सवाल है। हालाँकि, जब मैं स्कूल में था, तब मैंने कक्षा में सिमुलेशन की पूरी अवधारणा पर बहुत कम ध्यान दिया और इससे मुझे उस प्रक्रिया से थोड़ा डर लगा।

  1. क्या आप आम शब्दों में सिमुलेशन प्रक्रिया की व्याख्या कर सकते हैं? (डेटा उत्पन्न करने के लिए हो सकता है, प्रतिगमन गुणांक, आदि)

  2. जब कोई सिमुलेशन का उपयोग करेगा तो कुछ व्यावहारिक स्थितियां / समस्याएं क्या होंगी?

मैं आर में होने वाले किसी भी उदाहरण को प्राथमिकता दूंगा।


10
(2) पहले से ही इस साइट पर एक हजार से अधिक उत्तर हैं: अनुकरण की खोज करें ।
whuber

@ केवल मेरी टिप्पणी से असहमत होने की बात यह है कि हमारी साइट में सिमुलेशन के एक हजार से अधिक उत्तर हैं, लेकिन यह एक वस्तुनिष्ठ तथ्य है जिसकी सच्चाई आप स्वयं सत्यापित कर सकते हैं। मैंने कोई दावा, स्पष्ट या निहित नहीं किया, कि यह किसी भी चीज़ की पूरी या प्रतिनिधि सूची का प्रतिनिधित्व करता है। हालांकि, वास्तविक उदाहरणों के एक सेट के रूप में, यह कहीं अधिक समृद्ध है और किसी भी व्यक्तिगत उत्तर की तुलना में अधिक विस्तृत है जो कभी भी पूरा होने की उम्मीद कर सकता है और इस तरह किसी के लिए एक मूल्यवान संसाधन है जो आगे प्रश्न (2) का पीछा करना चाह सकता है।
whuber

@ शुभ, ठीक है।
टिम

जवाबों:


42

एक मात्रात्मक मॉडल दुनिया के कुछ व्यवहार का अनुकरण करता है (ए) उनके संख्यात्मक गुणों में से कुछ का प्रतिनिधित्व करता है और (बी) उन संख्याओं को एक निश्चित तरीके से जोड़कर संख्यात्मक आउटपुट उत्पन्न करता है जो ब्याज के गुणों का प्रतिनिधित्व करते हैं।

चित्र 1: एक निर्धारक मॉडल

इस योजनाबद्ध में, बाईं ओर तीन संख्यात्मक इनपुट को दाईं ओर एक संख्यात्मक आउटपुट का उत्पादन करने के लिए संयुक्त किया जाता है। संख्या रेखाएं इनपुट और आउटपुट के संभावित मूल्यों को दर्शाती हैं; डॉट्स उपयोग में विशिष्ट मूल्य दर्शाते हैं। आजकल डिजिटल कंप्यूटर आमतौर पर गणना करते हैं, लेकिन वे आवश्यक नहीं हैं: मॉडल की गणना पेंसिल-एंड-पेपर के साथ या लकड़ी, धातु और इलेक्ट्रॉनिक सर्किट में "एनालॉग" उपकरणों के निर्माण से की गई है।

एक उदाहरण के रूप में, शायद पूर्ववर्ती मॉडल ने अपने तीन आदानों को गाया है। Rइस मॉडल के लिए कोड जैसा दिख सकता है

inputs <- c(-1.3, 1.2, 0) # Specify inputs (three numbers)
output <- sum(inputs)     # Run the model
print(output)             # Display the output (a number)

इसका आउटपुट बस एक नंबर है,

-0.1

हम दुनिया को पूरी तरह से नहीं जान सकते हैं: यहां तक ​​कि अगर मॉडल दुनिया के काम करने के तरीके से होता है, तो हमारी जानकारी अपूर्ण है और दुनिया में चीजें बदलती हैं। (स्टोचस्टिक) सिमुलेशन हमें यह समझने में मदद करते हैं कि मॉडल इनपुट्स में इस तरह की अनिश्चितता और भिन्नता कैसे अनिश्चितता और आउटपुट में भिन्नता का अनुवाद करना चाहिए। वे इनपुट को यादृच्छिक रूप से अलग-अलग करके, प्रत्येक भिन्नता के लिए मॉडल को चलाते हुए, और सामूहिक आउटपुट को सारांशित करके ऐसा करते हैं।

"बेतरतीब ढंग से" का मतलब मनमानी नहीं है। मॉडलर को निर्दिष्ट करना चाहिए (चाहे जानबूझकर या नहीं, चाहे स्पष्ट रूप से या अंतर्निहित रूप से) सभी निविष्टियों की इच्छित आवृत्तियों। आउटपुट की आवृत्तियाँ परिणामों का सबसे विस्तृत सारांश प्रदान करती हैं।

चित्रा: यादृच्छिक आदानों

एक ही मॉडल, यादृच्छिक इनपुट और परिणामी (गणना) यादृच्छिक आउटपुट के साथ दिखाया गया है।

संख्या के वितरण को दर्शाने के लिए चित्र हिस्टोग्राम के साथ आवृत्तियों को प्रदर्शित करता है। इरादा इनपुट आवृत्तियों, छोड़ दिया पर इनपुट के लिए दिखाए जाते हैं, जबकि गणना उत्पादन आवृत्ति, मॉडल कई बार चलाकर प्राप्त है, सही में दिखाया गया है।

नियतात्मक मॉडल के लिए इनपुट का प्रत्येक सेट एक अनुमानित संख्यात्मक आउटपुट का उत्पादन करता है। जब मॉडल का उपयोग स्टोचस्टिक सिमुलेशन में किया जाता है, हालांकि, आउटपुट एक वितरण है (जैसे कि सही पर दिखाए गए लंबे ग्रे एक)। आउटपुट वितरण का प्रसार हमें बताता है कि जब इसके इनपुट अलग-अलग होते हैं तो मॉडल आउटपुट अलग-अलग कैसे हो सकते हैं।

पूर्ववर्ती कोड उदाहरण को एक सिमुलेशन में बदलने के लिए इस तरह संशोधित किया जा सकता है:

n <- 1e5 # Number of iterations
inputs <- rbind(rgamma(n, 3, 3) - 2,
                runif(n, -2, 2),
                rnorm(n, 0, 1/2))
output <- apply(inputs, 2, sum)
hist(output, freq=FALSE, col="Gray")

इसका उत्पादन इन यादृच्छिक आदानों के साथ मॉडल को पुनरावृत्त करके उत्पन्न सभी संख्याओं के हिस्टोग्राम के साथ संक्षेपित किया गया है:

हिस्टोग्राम

पर्दे के पीछे से, हम इस मॉडल में पारित किए गए कई यादृच्छिक आदानों का निरीक्षण कर सकते हैं:

rownames(inputs) <- c("First", "Second", "Third")
print(inputs[, 1:5], digits=2)

आउटपुट पुनरावृत्तियों में से पहले पांच को दिखाता है , प्रति स्तंभ एक स्तंभ के साथ:100,000

        [,1]  [,2]  [,3]  [,4]  [,5]
First  -1.62 -0.72 -1.11 -1.57 -1.25
Second  0.52  0.67  0.92  1.54  0.24
Third  -0.39  1.45  0.74 -0.48  0.33

तर्क से, दूसरे प्रश्न का उत्तर यह है कि सिमुलेशन का उपयोग हर जगह किया जा सकता है। एक व्यावहारिक मामले के रूप में, सिमुलेशन को चलाने की अपेक्षित लागत संभावित लाभ से कम होनी चाहिए। परिवर्तनशीलता को समझने और बढ़ाने में क्या लाभ हैं? दो प्राथमिक क्षेत्र हैं जहां यह महत्वपूर्ण है:

  • सत्य की तलाश करना , जैसा कि विज्ञान और कानून में है। एक संख्या अपने आप में उपयोगी है, लेकिन यह जानना अधिक उपयोगी है कि यह संख्या कितनी सही या निश्चित है।

  • व्यवसाय और दैनिक जीवन में निर्णय लेना । निर्णय जोखिम और लाभों को संतुलित करते हैं। जोखिम खराब परिणामों की संभावना पर निर्भर करते हैं। स्टोचस्टिक सिमुलेशन उस संभावना का आकलन करने में मदद करते हैं।

कम्प्यूटिंग सिस्टम वास्तविक, जटिल मॉडल को बार-बार निष्पादित करने के लिए पर्याप्त शक्तिशाली बन गए हैं। सॉफ्टवेयर तेजी से और आसानी से यादृच्छिक मूल्यों को उत्पन्न करने और सारांशित करने के लिए विकसित हुआ है (जैसा कि दूसरा Rउदाहरण दिखाता है)। इन दोनों कारकों ने पिछले 20 वर्षों (और अधिक) को उस बिंदु पर संयोजित किया है जहां अनुकरण नियमित है। लोगों को (1) इनपुट के उचित वितरण को निर्दिष्ट करने में मदद करने के लिए क्या अवशेष है और (2) आउटपुट के वितरण को समझते हैं। यह मानव विचार का क्षेत्र है, जहाँ अब तक कंप्यूटरों को बहुत कम मदद मिली है।


1
क्या शानदार जवाब है! मुझे विशेष रूप से पसंद है "" बेतरतीब ढंग से "का मतलब मनमाना नहीं है।"
हायताओ डु

29

पहले, मैं यह कहूं कि आपके प्रश्न का एक भी उत्तर नहीं है। जब आप अनुकरण कर सकते हैं (या करना है) के कई उदाहरण हैं। मैं आपको नीचे कुछ उदाहरण देने की कोशिश करूंगा। दूसरा, ध्यान दें कि "सिमुलेशन" को परिभाषित करने के कई तरीके हैं , इसलिए उत्तर कम से कम आंशिक रूप से आपके द्वारा चुनी गई परिभाषा पर निर्भर करता है।

उदाहरण:

1. आप एक बायेसियन सांख्यिकीविद् हैं , इसलिए सिमुलेशन आंकड़े करने के लिए आपकी पसंद का तरीका है। हालांकि आप अनुकरण के उपयोग के अधिकांश मामलों में बेसेन सांख्यिकी के गैर-सिमुलेशन-आधारित तरीके हैं। गेलमैन (या अन्य संभावित संसाधनों) द्वारा अधिक चेक "बायेसियन डेटा विश्लेषण" पुस्तक सीखने के लिए ।

2. आप सांख्यिकीय पद्धति के प्रदर्शन का आकलन करना चाहते हैं। मान लें कि आपने कुछ सांख्यिकीय परीक्षण डिज़ाइन किया है जो कि कुछ प्रायोगिक डेटा को दिए गए कुछ पैरामीटर आकलन के लिए डिज़ाइन किया गया था । अब आप जांचना चाहते हैं कि क्या यह वास्तव में वही करता है जो आप इसे करना चाहते हैं। आप कुछ डेटा सैंपल ले सकते हैं और इस डेटा पर अपने परीक्षण का उपयोग कर सकते हैं - हालाँकि अगर आपको the को जानने के लिए एक सांख्यिकीय परीक्षण की आवश्यकता है , तो आपको कैसे पता चलेगा कि आपका परीक्षण केवल डेटा होने पर ठीक काम करता है ..? बेशक आप अन्य सांख्यिकीय परीक्षण के अनुमान के साथ परिणामों की तुलना कर सकते हैं, लेकिन अन्य परीक्षण का अनुमान नहीं लगाता है, तो क्या सही ढंग से ..? इस मामले में आप सिमुलेशन का उपयोग कर सकते हैं। आप जो कर सकते हैं वह आप उत्पन्न करते हैंθ θ θ θ θTθθθकुछ नकली डेटा ने आपके पैरामीटर और फिर जांच लें कि क्या आपका अनुमानित मूल्य ( ) का सही मूल्य है (जिसे आप पहले से जानते हैं क्योंकि आपने इसे चुना है)। सिमुलेशन का उपयोग करने से आप विभिन्न परिदृश्यों की जांच कर सकते हैं (नमूना आकार, डेटा के विभिन्न वितरण, आपके डेटा में विभिन्न मात्रा में शोर आदि)।θθ

3. आपके पास डेटा नहीं है या यह बहुत सीमित है। कहते हैं कि आप जानना चाहते हैं कि परमाणु युद्ध के संभावित परिणाम क्या होंगे। दुर्भाग्य से (उम्मीद है) पहले कोई परमाणु युद्ध नहीं हुआ था, इसलिए आपके पास कोई डेटा नहीं है। इस मामले में आप कंप्यूटर सिमुलेशन का उपयोग कर सकते हैं जहां आप वास्तविकता के बारे में कुछ धारणाएं बनाते हैं और फिर कंप्यूटर को समानांतर आभासी वास्तविकताएं बनाते हैं जहां परमाणु युद्ध होता है, इसलिए आपके पास संभावित परिणामों के कुछ नमूने हैं।

4. आपका सांख्यिकीय मॉडल सॉफ्टवेयर के अनुकूल नहीं है या जटिल नहीं है। इस दृष्टिकोण की वकालत की जाती है, उदाहरण के लिए, गेलमैन और हिल द्वारा "डेटा विश्लेषण का उपयोग करके प्रतिगमन और बहुस्तरीय / पदानुक्रमित मॉडल" , जहां वे प्रतिगमन मॉडलिंग में "अगला चरण" के रूप में सिमुलेशन-आधारित बेसेसियन अनुमान का वर्णन करते हैं।

5. आप एक जटिल प्रक्रिया के संभावित परिणामों के बारे में सीखना चाहते हैं। कल्पना करें कि आप कुछ जटिल प्रक्रिया के भविष्य के परिणाम का पूर्वानुमान करना चाहते हैं, समस्या यह है कि आपकी प्रक्रिया का व्यवहार अराजक है और आपको अलग-अलग आउटपुट प्राप्त करने वाले अलग-अलग इनपुट दिए गए हैं, जबकि संभावित इनपुट की संख्या बहुत बड़ी है। आम तौर पर, यह मामला था क्योंकि द्वितीय विश्व युद्ध के दौरान परमाणु बम पर काम करने वाले भौतिकविदों और गणितज्ञों द्वारा मोंटे कार्लो सिमुलेशन विधियों का आविष्कार किया गया था। सिमुलेशन के साथ आप अलग-अलग इनपुट की कोशिश करते हैं और संभावित परिणामों के बारे में एक सामान्य विचार प्राप्त करने के लिए नमूने इकट्ठा करते हैं।

6. आपका डेटा कुछ सांख्यिकीय पद्धति के मानदंडों को पूरा नहीं करता है , उदाहरण के लिए इसका वितरण तिरछा है जबकि इसे सामान्य होना चाहिए। कुछ मामलों में यह वास्तव में कोई समस्या नहीं है , हालांकि कभी-कभी ऐसा होता है, इसलिए बूटस्ट्रैप जैसे सिमुलेशन-आधारित तरीकों का आविष्कार किया गया था।

7. वास्तविकता के खिलाफ एक सैद्धांतिक मॉडल का परीक्षण करना। आपके पास एक सैद्धांतिक मॉडल है जो कुछ प्रक्रिया का वर्णन करता है, जैसे कि एक सामाजिक नेटवर्क के माध्यम से महामारी का प्रसार। आप कुछ डेटा उत्पन्न करने के लिए मॉडल का उपयोग कर सकते हैं ताकि आप तुलना कर सकें कि क्या नकली वास्तविक डेटा के समान है। लाडा एडमिक अपने कसेरा वर्ग पर सामाजिक नेटवर्क विश्लेषण के लिए इस तरह के उपयोग के कई उदाहरण देता है ( यहां कुछ डेमो देखें )।

8. "परिकल्पना 0" डेटा उत्पन्न करने के लिए। आप असली डेटा की तुलना करने के लिए एक नकली (यादृच्छिक) डेटा उत्पन्न करते हैं। यदि आपके डेटा में कोई महत्वपूर्ण प्रभाव या रुझान थे, तो यह यादृच्छिक पर उत्पन्न डेटा से अलग होना चाहिए। यह दृष्टिकोण बुजा एट अल द्वारा वकालत की जाती है। (2009) अपने पेपर में "खोजपूर्ण डेटा विश्लेषण और मॉडल डायग्नोस्टिक्स के लिए सांख्यिकीय निष्कर्ष" जहां उन्होंने प्रस्ताव दिया कि प्लॉट का उपयोग कैसे एक खोजपूर्ण डेटा विश्लेषण और परिकल्पना परीक्षण की सुविधा दे सकता है ( उन विचारों को लागू करने वाले nullabor R पैकेज के प्रलेखन को भी देखें )।


22

मुझे लगता है कि TrynnaDoStat के उत्तर की चर्चा इस बिंदु को अच्छी तरह से दर्शाती है: हम सिमुलेशन का उपयोग करते हैं जब भी समस्या को हल करना असंभव होता है (उदाहरण के लिए एक पदानुक्रमित मॉडल में मापदंडों का वितरण), या जब हम समय लगाने के लिए बहुत परेशान होते हैं। समाधान के लिए विश्लेषणात्मक रूप से काम कर रहे हैं।

इस वेबसाइट पर मैंने जो देखा है, उसके आधार पर "परेशान करने के लिए पर्याप्त कष्टप्रद" की दहलीज सांख्यिकीविद् के बीच व्यापक रूप से भिन्न होती है। @ वाउबर जैसे लोग, जाहिरा तौर पर, एक समस्या को देख सकते हैं और तुरंत समाधान देख सकते हैं, जबकि मेरे जैसे केवल नश्वर लोगों को समस्या पर ध्यान से विचार करना होगा और शायद कड़ी मेहनत करने के लिए सिमुलेशन दिनचर्या लिखने से पहले कुछ पढ़ना होगा।

ध्यान रखें कि बड़े डेटा सेट, या जटिल मॉडल के साथ सिमुलेशन आवश्यक रूप से रामबाण नहीं है, या दोनों आप (कंप्यूटर) समय का भारी मात्रा में आकलन और आपके सिमुलेशन की जांच करेंगे। यह निश्चित रूप से प्रयास के लायक नहीं है यदि आप एक ही लक्ष्य को एक घंटे के सावधान विचार के साथ पूरा कर सकते हैं।


14

सिमुलेशन अक्सर तब किया जाता है जब आप किसी चीज़ के लिए एक बंद फॉर्म नहीं प्राप्त कर सकते हैं (जैसे कि वितरण) या आप कुछ पाने के लिए एक मजाकिया और तेज़ तरीका चाहते हैं।

XYβXf(β)=P(Y=1|X=1)P(Y=1|X=0)ββf(β)


मैं सिमुलेशन को "तेज" नहीं कहूंगा, वे कम्प्यूटेशनल रूप से संपूर्ण तरीके हैं और अक्सर बहुत अधिक समय लेते हैं, फिर एमएल दृष्टिकोण का उपयोग करते हुए।
टिम

2
यह वितरण को प्राप्त करने की तुलना में बहुत तेज़ है।
कोशिशनाड

3
एक सप्ताह से अधिक नॉन-स्टॉप के लिए आप कितनी बार एमएल एल्गोरिथ्म चलाते हैं ..?
टिम

स्पर्शरेखा पुनः: "X के लिए गुणांक ent का वितरण सामान्य है" - मैंने इस बारे में ज्यादा नहीं सोचा था, लेकिन कुछ अनुकरण के बाद, मुझे लगता है कि यह अक्सर लगभग 500 से कम उपसमूह के साथ सच नहीं है और / या गुणांक के साथ जिसका औसत परे है एक निश्चित शक्ति, कहते हैं, +/- 3। सही लग रहा है?
rolando2

MLE सिद्धांत हमें बताता है कि, कुछ नियमितता स्थितियों के तहत, MLE विषम रूप से सामान्य है। बीमार मेरे जवाब में यह जोड़ें।
TrynnaDoStat

11

सिमुलेशन यह जांचने का एक शानदार तरीका है कि क्या आप किसी मॉडल से उपयोगी अनुमान प्राप्त कर सकते हैं।

आप नकली डेटा उत्पन्न / अनुकरण करके ऐसा करेंगे जो आपके मॉडल द्वारा निहित वितरण का अनुसरण करता है। फिर आगे बढ़ें और अपने मॉडल को उस डेटा पर फिट करें। यह एक आदर्श मामला है: आपका मॉडल वास्तव में, सच है। इसलिए यदि फिट शोर या गलत है, तो आप जानते हैं कि समस्या या तो अनुमान प्रक्रिया या मॉडल के साथ एक समस्या है।

इसी तरह, आप "गलत" डेटा जनरेट करने की प्रक्रिया का उपयोग करके डेटा का अनुकरण कर सकते हैं और उस नकली डेटा का उपयोग करके यह आकलन कर सकते हैं कि आपके अनुमानों का उल्लंघन करने से आपके अनुमान कैसे प्रभावित होते हैं। इसे अक्सर संवेदनशीलता विश्लेषण कहा जाता है ।

ये अंक टिम के उत्तर में आइटम 2 और 8 के समान हैं, और व्हिबर के उत्तर में प्रक्रिया का कुछ हद तक अधिक तदर्थ संस्करण भी है।


एंड्रयू जेलमैन और अन्य लोगों द्वारा वकालत करने के साथ-साथ भविष्य कहनेवाला मॉडल जाँच करने के लिए सिमुलेशन का उपयोग किया जाता है । यह आपके पूर्वानुमानक डेटा को मॉडल में वापस प्लग करने और फिर निहित वितरण से नकली प्रतिक्रिया डेटा का अनुकरण करने के लिए है, यह देखने के लिए कि क्या आपका सिम्युलेटेड डेटा वास्तविक चीज़ के लिए पर्याप्त (जो भी मानदंड आप उपयोग कर रहे हैं) के करीब है।

ध्यान दें कि यह केवल फिट किए गए मानों की गणना करने के समान नहीं है। एक प्रतिगमन मॉडल में, उदाहरण के लिए, फिट किए गए मान सशर्त औसत हैं; प्रतिगमन मॉडल पर भविष्य कहनेवाला जांच चलाने के लिए, आपको प्रत्येक फिट किए गए मूल्य पर केंद्रित गौसियन वितरण से एक बार आकर्षित करना होगा।


6

अनुकरण के लिए सबसे सरल मामला। मान लें कि आपके पास ऋण चूक की संख्या के लिए एक पूर्वानुमान मॉडल है, आपके पास डिफ़ॉल्ट ऋण पर नुकसान के लिए भी एक मॉडल है। अब आपको कुल नुकसान का अनुमान लगाने की आवश्यकता है जो डिफ़ॉल्ट रूप से दिए गए चूक और नुकसान के उत्पाद है। आप कुल चूक के विश्वास अंतराल प्राप्त करने के लिए चूक पर चूक और नुकसान को गुणा नहीं कर सकते।

xix1x2

इस पेपर में ऑपरेशन जोखिम आकलन के लिए इस उपयोग के मामले का एमबीए-स्तर का विवरण है, जहां आपके पास हानि आवृत्ति और मात्रा के वितरण हैं, और उन्हें कुल हानि वितरण प्राप्त करने के लिए संयोजित करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.