Simülasyon ne zaman kullanılır?


40

Yani bu çok basit ve aptal bir soru. Ancak, okuldayken sınıftaki tüm simülasyon kavramına çok az dikkat ettim ve bu da beni bu süreçten biraz korkuttu.

  1. Simülasyon sürecini laymen cinsinden açıklayabilir misiniz? (veri üretmek için olabilir, regresyon katsayıları, vb.)

  2. Biri simülasyonları kullandığında bazı pratik durumlar / problemler nelerdir?

R de olmak üzere verilen örnekleri tercih ederim.


10
(2) bu sitede zaten binin üzerinde cevabı var: benzetme arayın .
whuber

@Tim Benim yorumuma katılmaması gereken tek şey sitemizin simülasyonlar içeren binin üzerinde cevabı olduğu, ancak bunun gerçekliğini kendiniz doğrulayabileceğiniz objektif bir gerçek. Bunun hiçbir şeyin eksiksiz veya temsili bir listesini temsil ettiği iddiasında bulunmadım. Ancak, bir dizi gerçek örnek olarak, her bir cevabın gerçekleştirmeyi umabileceğinden çok daha zengin ve daha ayrıntılı ve bu nedenle soruyu devam ettirmek isteyebilecek herkes için değerli bir kaynaktır (2).
whuber

@whuber tamam, iyi nokta.
Tim

Yanıtlar:


42

Bir niceliksel model, aynı zamanda ilgi özelliklerini temsil eden sayısal çıkış üretmek için kesin bir şekilde bu numaraları birleştirerek sayısal bazı özellikleri ve (b) ile nesneleri temsil dünyanın bazı davranış (a) taklit eder.

Şekil 1: deterministik bir model

Bu şematikte, solda üç sayısal giriş, sağda bir sayısal çıktı üretmek için birleştirilir. Sayı satırları giriş ve çıkışların olası değerlerini gösterir; noktalar kullanımdaki belirli değerleri gösterir. Günümüzde dijital bilgisayarlar genellikle hesaplamaları yaparlar, ancak bunlar zorunlu değildir: modeller kalem ve kâğıtla veya ahşap, metal ve elektronik devrelerde "analog" cihazlar üretilerek hesaplanmıştır.

Örnek olarak, belki de önceki model üç girdisini toplamıştır. RBu model için kod benziyor olabilir

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

Çıkışı sadece bir sayıdır,

-0.1

Dünyayı tam olarak bilemiyoruz: Model tam olarak dünyanın yaptığı gibi işe yarasa bile, bilgilerimiz kusurlu ve dünyadaki şeyler değişiyor. (Stokastik) simülasyonları, model girdilerindeki bu gibi belirsizlik ve değişkenliğin çıktılardaki belirsizlik ve değişkenliğe nasıl dönmesi gerektiğini anlamamıza yardımcı olur. Bunu, girişleri rastgele değiştirerek, her bir varyasyon için modeli çalıştırarak ve kolektif çıktısını özetleyerek yaparlar.

"Rastgele", keyfi olarak demek değildir. Modelleyici, tüm girişlerin amaçlanan frekanslarını (bilerek veya bilmeyerek, açıkça veya dolaylı olarak olsun olmasın) belirlemelidir. Çıktıların frekansları, sonuçların en ayrıntılı özetini sağlar.

Şekil: Rastgele girişler

Aynı model, rastgele girdiler ve elde edilen (hesaplanan) rastgele çıktı ile gösterilmiştir.

Şekil, sayı dağılımlarını temsil etmek için histogramlarla frekansları görüntüler. Amaçlanan süre giriş frekansları, sol girişler için gösterilmiştir hesaplanmış modeli birçok kez çalıştırarak elde çıkış frekansı, doğru gösterilir.

Deterministik bir modele girilen her girdi seti tahmin edilebilir bir sayısal çıktı üretir. Model stokastik bir simülasyonda kullanıldığında , çıktı bir dağıtımdır (sağda gösterilen uzun gri olan gibi). Çıktı dağılımının yayılması bize model çıktılarının girdileri değiştiğinde nasıl değişmesi beklenebileceğini söyler.

Yukarıdaki kod örneği, simülasyona dönüştürmek için bu şekilde değiştirilebilir:

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")

Çıkışı, modeli bu rasgele girdilerle yineleyerek oluşturulan tüm sayıların bir histogramı ile özetlenmiştir:

Histogram

Sahnelerin arkasına baktığımızda, bu modele aktarılan birçok rastgele girdiden bazılarını inceleyebiliriz:

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

Çıktı, her yineleme için bir sütunla birlikte yinelemenin ilk beşini gösterir :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

Muhtemelen, ikinci sorunun cevabı simülasyonların her yerde kullanılabileceğidir . Pratik bir mesele olarak, simülasyonu çalıştırmanın beklenen maliyeti, muhtemel faydadan daha az olmalıdır. Değişkenliği anlama ve ölçmenin faydaları nelerdir? Bunun önemli olduğu iki ana alan vardır:

  • Bilim ve hukukta olduğu gibi gerçeği aramak. Bir sayı kendi başına yararlıdır, ancak bu sayının ne kadar kesin veya kesin olduğunu bilmek çok daha yararlıdır.

  • İş ve günlük yaşamda olduğu gibi kararlar vermek . Kararlar riskleri ve faydaları dengeler. Riskler, kötü sonuçların olasılığına bağlıdır. Stokastik simülasyonlar bu olasılığın değerlendirilmesine yardımcı olur.

Bilgi işlem sistemleri, gerçekçi ve karmaşık modelleri tekrar tekrar yürütecek kadar güçlü hale geldi. Yazılım, rastgele değerlerin hızlı ve kolay bir şekilde oluşturulmasını ve özetlenmesini desteklemek için geliştirilmiştir (ikinci Rörnekte gösterildiği gibi). Bu iki faktör, simülasyonun rutin olduğu noktaya son 20 yılda (ve daha fazlası) bir araya geldi. Geriye kalan, insanlara (1) girdilerin uygun dağılımlarını belirlemelerinde ve (2) çıktıların dağılımını anlamalarında yardımcı olmaktır. Bu, şu ana kadar bilgisayarların çok az yardım edildiği insan düşüncesinin alanı.


1
Ne güzel bir cevap! Ben özellikle "Rastgele" nin keyfi bir şekilde ifade ettiği anlamına gelmiyor.
Haitao Du

29

İlk önce, sorunuza tek bir cevap olmadığını söyleyeyim. Simülasyonu ne zaman (veya ne zaman kullanmanız) kullanabileceğinizi gösteren birçok örnek vardır. Size birkaç örnek vermeye çalışacağım. İkincisi, bir "simülasyon" tanımlayabileceğiniz birden fazla yol bulunduğuna dikkat edin , bu nedenle cevap en azından kısmen seçtiğiniz tanıma bağlıdır.

Örnekler:

1. Siz bir Bayes istatistikçisisiniz , öyleyse simülasyon istatistik yapmak için tercih ettiğiniz yöntemdir. Simülasyon temelli olmayan yöntemler Bayesian istatistiklerine yaklaşmaktadır, ancak çoğu durumda simülasyon kullanırsınız. Daha fazla bilgi edinmek için Gelman (veya diğer olası kaynaklar) tarafından "Bayesian veri analizi" kitabını kontrol ediniz .

2. İstatistiksel yöntemin performansını değerlendirmek istersiniz. Diyelim ki ampirik verilere göre bazı parametrelerin tahmin etmek için tasarlanmış bir istatistiksel test tasarladınız . Şimdi yapmak istediğini gerçekten yapıp yapmadığını kontrol etmek istiyorsun. Bazı veri örneklerini alabilir ve testinizi bu veriler üzerinde kullanabilirsiniz - ancak bilmek için istatistiksel bir teste ihtiyacınız varsa , o zaman testinizin yalnızca veriye sahip olup olmadığını kontrol edersiniz? Elbette, sonuçları diğer istatistiksel testlerin tahminleriyle karşılaştırabilirsiniz, ancak diğer test doğru olarak tahmin etmiyorsa ..? Bu durumda simülasyon kullanabilirsiniz. Yapabileceğin şey üretmek.TθθθParametrelerinize verilen bazı sahte veriler ve sonra tahmini değerinizin gerçek değeri ile aynı olup olmadığını kontrol edin (bunu seçtiğinizden beri önceden biliyorsunuz). Simülasyon kullanmak, farklı senaryoları da kontrol etmenizi sağlar (örneklem büyüklüğü, farklı veri dağılımları, verilerinizde farklı gürültü miktarları vb.).θθ

3. Verileriniz yok veya çok sınırlı. Nükleer savaşın olası sonucunun ne olacağını bilmek istediğinizi söyleyin. Ne yazık ki (umarım) daha önce nükleer bir savaş yoktu, bu yüzden herhangi bir bilginiz yok. Bu durumda, gerçeklikle ilgili bazı varsayımlarda bulunduğunuz bilgisayar simülasyonunu kullanabilir ve ardından bilgisayarların nükleer savaşın gerçekleştiği yerde paralel sanal gerçeklik oluşturmasına izin verebilir, böylece bazı muhtemel sonuçlara sahip olabilirsiniz.

4. İstatistiksel modeliniz yazılıma uymuyor veya karmaşık. Bu yaklaşım, örneğin, Gelman ve Hill tarafından "Regresyon ve Çok Düzeyli / Hiyerarşik Modellerin Kullanıldığı Veri Analizi" nde savunulmakta ve burada simülasyon tabanlı Bayesian tahminini regresyon modellemesinde "sonraki adım" olarak tanımlamaktadır.

5. Karmaşık bir sürecin olası sonuçlarını öğrenmek istersiniz. Bazı karmaşık işlemlerin gelecekteki sonuçlarını tahmin etmek istediğinizi düşünün, sorun ancak işleminizin davranışının kaotik olması ve olası farklı girdilerin elde edilebildiği farklı girdiler verildiğinde olası girdilerin sayısı çok büyük olmasıdır. Genel olarak, durum buydu çünkü Monte Carlo simülasyon yöntemleri II. Dünya Savaşı sırasında nükleer bomba üzerinde çalışan fizikçiler ve matematikçiler tarafından icat edildi. Simülasyon ile, olası sonuçlar hakkında genel bir fikir edinmek için farklı girdiler deneyip örnekler toplarsınız.

6. Verileriniz bazı istatistiksel yöntemlerin ölçütlerini karşılamıyor , örneğin normal olması gerekirken dağınıklığı bükülmüş. Bazı durumlarda bu gerçekten bir sorun değildir , ancak bazen öyledir, bu yüzden bootstrap gibi simülasyon temelli yöntemler icat edilmiştir.

7. Kuramsal bir modeli gerçeğe karşı test etmek. Bazı süreçleri tanımlayan teorik bir modeliniz var, örneğin salgın hastalığın sosyal bir ağ üzerinden yayılması. Modeli, bazı verileri üretmek için kullanabilirsiniz, böylece benzetimin gerçek verilere benzeyip benzemediğini karşılaştırabilirsiniz. Lada Adamiç , Coursera sınıfında Sosyal Ağ Analizi için bu tür bir kullanım örneği sunmaktadır ( burada bazı demolara bakınız ).

8. "Hipotez 0" verisi oluşturmak. Gerçek verileri karşılaştırmak için sahte (rastgele) bir veri üretirsiniz. Verilerinizde önemli bir etki veya eğilim varsa, rastgele oluşturulan verilerden farklı olmalıdır. Bu yaklaşım Buja ve diğ. (2009) makalelerinde, arazilerin kullanılmasının keşifsel veri analizi ve hipotez testini nasıl kolaylaştıracağını önerdikleri “keşifsel veri analizi ve model teşhisi için istatistiksel çıkarım” başlıklı makalesinde (ayrıca bu fikirleri uygulayan nullabor R paketinin dokümantasyonuna bakınız ).


22

TrynnaDoStat'ın cevabının tartışmasının konuyu iyi açıkladığını düşünüyorum: analitik olarak problemin çözülmesinin mümkün olmadığı durumlarda (örneğin hiyerarşik bir modelde parametrelerin arka dağılımları) veya zaman ayırmayacak kadar sinirlendiğimizde simülasyonları kullanıyoruz. çözümün analitik olarak incelenmesi.

Bu web sitesinde gözlemlediklerime dayanarak, "taklit edecek kadar can sıkıcı" eşiği istatistikçiler arasında büyük farklılıklar göstermektedir. @Whuber gibi insanlar, görünüşe göre, bir probleme göz atabilir ve hemen çözüme ulaşabilirler; benim gibi ölümlüler sorunu dikkatlice değerlendirmek zorunda kalabilirler ve belki de zor işi yapmak için bir simülasyon rutini yazmadan önce biraz okuma yapabilirler.

Simülasyonların büyük çapta veri kümeleri veya karmaşık modellerle veya her ikisi de simülasyonunuzu tahmin etmek ve kontrol etmek için muazzam miktarda (bilgisayar) zaman harcayacağınız için simülasyonların zorunlu olmadığını unutmayın. Aynı hedefi bir saatlik dikkatli bir değerlendirme ile gerçekleştirebiliyorsanız, kesinlikle çabaya değmez.


14

Simülasyonlar genellikle bir şey için kapalı bir form elde edemediğinizde (örneğin dağıtım gibi) veya bir şeyi elde etmek için nitty-gritty ve hızlı bir yol almak istediğinizde yapılır.

Örneğin, açıklamak için bir değişkenini kullanarak bir lojistik regresyon çalıştırdığımı söyleyin . için katsayısının dağılımının MLE teorisinden asimptotik olarak Normal olduğunu biliyorum . Fakat diyelim ki tahmini iki olasılık farkı ile ilgileniyorum . Bu işlevin tam dağılımını türetmek çok zor olabilir (veya imkansız), ancak, dağılımını bildiğim için ampirik bir dağılım elde etmek için beta'dan değerleri simüle edebilir ve ya bağlayabilirim.XYβXf(β)=P(Y=1|X=1)P(Y=1|X=0)ββf(β)


Simülasyonları "hızlı" olarak adlandırmazdım, bunlar hesaplama açısından ayrıntılı yöntemler ve ML yaklaşımı kullanılarak yapılan işlemlerden çok daha fazla zaman alıyor.
Tim

2
Dağıtımı türetmekten çok daha hızlı.
TrynnaDoStat

3
ML algoritmasını bir haftadan daha uzun bir süre kesintisiz olarak çalıştırıyorsunuz ..?
Tim

Teğet yeniden: "X için eff katsayısının dağılımı Normal" - Bu konuda çok fazla düşünmedim, ancak bazı simülasyonlardan sonra, bunun 500'den az olan alt örneklemlerde ve / veya ortalamanın ötesinde katsayılarla genellikle doğru olmadığını buldum Belli bir kuvvet, +/- 3. Doğru ses mi?
rolando2

MLE teorisi bize belli düzenlilik koşulları altında MLE'nin asimptotik olarak normal olduğunu söylemektedir. Bunu cevabımı ekleyeceğim.
TrynnaDoStat 13:15

11

Simülasyonlar, bir modelden faydalı tahminler alıp alamayacağınızı kontrol etmenin mükemmel bir yoludur.

Bunu, modelinizin ima ettiği dağılımı izleyen sahte verileri üreterek / simüle ederek yaparsınız. Sonra devam edin ve modelinizi bu verilere uygun hale getirin. Bu ideal bir durumdur: modeliniz aslında doğrudur. Bu nedenle, uyum gürültülü veya yanlış ise, tahmin prosedüründe veya modelin kendisinde bir sorun olduğunu bilirsiniz.

Benzer şekilde, "yanlış" veri üretme işlemini kullanarak verileri taklit edebilir ve tahminlerin model varsayımlarını ihlal etmekten nasıl etkilendiğini değerlendirmek için bu sahte verileri kullanabilirsiniz. Buna genellikle duyarlılık analizi denir .

Bu noktalar Tim'in cevabındaki 2. ve 8. maddelere benzer ve aynı zamanda whuber'in cevabındaki prosedürün biraz daha özel bir versiyonudur.


Simülasyonlar, Andrew Gelman ve diğerleri tarafından savunulan öngörücü model kontrolünü yapmak için de kullanılır . Bu, öngörücü verilerinizi tekrar modele sokmaya ve daha sonra, taklit edilen verilerden sahte cevap verilerini taklit etmeyi gerektirir.

Bunun sadece takılan değerleri hesaplamakla aynı şey olmadığını unutmayın . Bir regresyon modelinde, örneğin, takılan değerler koşullu ortalamalardır; Bir regresyon modelinde kestirimci bir kontrol yapmak için, her takılan değerde ortalanmış olan Gauss dağılımından bir kez çizim yapmanız gerekir.


6

Simülasyon için en basit durum. Diyelim ki kredi temerrütlerinin sayısı için bir tahmin modeliniz var, ayrıca temerrüde düşülmüş kredilerdeki zararlar için bir modeliniz de var. Şimdi temerrüde düşülen ürünün temerrüdü ve temerrüde düşülen zararları tahmin etmeniz gerekir. Toplam zararın güven aralıklarını bulmak için sadece varsayılanları ve kayıpları varsayılanlarla çarpamazsınız.

Bunun nedeni, yoğunluklarını bildiğiniz rastgele bir değişkeniniz varsa, ürününün yoğunluğunu kolayca alabileceğiniz anlamına gelmez . Öte yandan, sayılar arasındaki korelasyonu biliyorsanız, korelasyonlu sayıları simüle etmek ve kayıpların simülasyon dağılımını elde etmek kolaydır.xix1x2

Bu yazıda , zarar sıklığı ve miktarlarının dağılımına sahip olduğunuz ve toplam zarar dağılımını elde etmek için bunları birleştirdiğiniz işlem riski tahmini için bu kullanım durumunun MBA düzeyinde bir açıklaması vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.