Olasılık Teorisi: Ayrık Olasılık Simülasyonu

Olasılık (Probability)

Bu yazıya sonlu sayıda sonucu olan deneylerdeki şans faktörünü işleyerek başlayacağım. Örneğin bir zar attığımızda sonuç kümemiz sonlu sayıdadır ve şu şekildedir: 1, 2, 3, 4, 5 ve 6. Aynı şekilde yazı tura attığımızda sonuç sonludur: yazı veya tura.

Örneğin bir zarı dört defa atarak gelen sayıların toplamını matematiksel olarak ifade etmeye çalışalım:

X1 + X2 + X3 + X4

Burada X‘lerin her biri birer rassal değişkendir (random variable). Bunlar belirli bir deneyin sonucunu ifade eder. Tıpkı matematikteki diğer değişkenler gibi bu değişkenler de adından anlaşılacağı üzere farklı değerler alabilirler.

Örneğin bir zar attığımızı düşünelim ve sonucu X rassal değişkeniyle gösterelim. Bu deneyin olabilecek altı sonucunun her birine bir olasılık değeri atayabiliriz:

m(w1) + m(w2) + · · · + m(w6) = 1

Burada m(), her bir w için atanan olasılık değerini ifade ediyor ve bu olasılıkların toplamı 1’e eşit olmak zorunda. m()’ X rassal değişkeninin dağılım fonksiyonu (distribution function) olarak adlandırılır. Zar atma örneğinde her bir sonuca eşit olasılık değerini veririz: 1/6. Bu şekilde olasılık ataması yaptığımızda attığımız bir zarın 4’ü aşmama olasılığını şu şekilde ifade edebiliriz:

1

Diyelim ki Y bozuk paranın gelen yüzünü temsil eden bir rassal değişken olsun. Bu durumda Y‘nin alabileceği iki değer vardır: Y(yazı) ve T(tura). Bozuk paranın adilliğinden şüphelenmemizi gerektirecek bir durum olmadığı müddetçe bu iki sonuca eşit olasılıklar olan 1/2‘yi atayabiliriz.

Yukarıdaki hem zar hem de bozuk para örneğinde her bir olası sonuca eşit olasılık değerleri atadık. Fakat genellikle bu tarz eşit olasılık ataması yapacağımız çok az durum vardır. Örneğin bir ilacın kullanıldığı zamanların %30’unda efektif olduğu tespit edilmişse bu ilacın bir sonraki kullanımında efektif olma olasılığına 0.3, efektif olmama olasılığında ise 0.7 değerini atayabiliriz. Bu örnek olasılığın sıklık konseptine (frequency concept of probability)  bir örnek. Yani, bir olayın A ile sonuçlanma olasılığı p ise, bu deneyi çok kere tekrarladığımızda A ile sonuçlanan olayların tüm olaylara oranının yaklaşık olarak p’ye eşit olduğunu görürüz. Bu fikirleri doğrulamak için bu tarz problemlere deneysel olarak yaklaşmamız gerekiyor. Örneğin bozuk para deneyini binlerce kez tekrarladığımızda yazıların oranının 1/2’ye yaklaştığını görebiliriz. Ama neyseki bizi gerçek hayatta böylesine bir deney yapmaktan kurtaracak bir çözüm var: bilgisayar simülasyonu.

Simülasyon

Bu yazının devamında göreceğimiz simülasyonlarda sonucu şansa bağlı olan deneylerin özellikle çok sayıda tekrar edilmesi sonucu neler olacağını göreceğiz. Bilgisayarlar çok kısa bir zamanda milyonlarca kez deneyi tekrar edebildiklerinden bu iş için onları kullanmak gayet mantıklı.

Rassal Sayı (Random Number)

Bir zar atma deneyini bilgisayar dilinde nasıl ifade edebiliriz? Çok basit: rastgele sayı üreteciyle (random number generator). Bir bilgisayara 0 ve 1 arasında rastgele bir sayı ürettirebilir veya 1’den 6’ya kadar olan tam sayılardan bir tanesini rastgele seçmesini söyleyebiliriz.

Simülasyon – 1

n kere bozuk para deneyini gerçekleştiren ve her 100. adımda yazıların oranını hesaplayan bir program yazalım. Bunun için ilk olarak aşağıdaki fonksiyon yazılabilir.

tossCoin <- function(q){
 return(sum(sample(c(0,1), q, replace = TRUE)))
 }

Bu fonksiyon 0 ve 1’den oluşan kümeden parametre olarak gönderilen q sayısı kadar rastgele eleman seçer. Burada 0 ve 1 çekme olasılıkları eşittir ve 0.5’tir. Şimdi de n kez q boyutlu deney gerçekleştirip ortalamalarını veren bir fonksiyon yazalım:

simulateToss <- function(n, q){
 plt <- c()
 plts <- c()
 for(i in 1:n){
 plt <- c(plt, tossCoin(q))
 plts <- c(plts, mean(plt))
 }
 return(plts)
}

Şimdi bu fonksiyonları istediğimiz kadar çağırarak sonuçlarını grafiğe dökelim. İlk olarak 100 kez para atma deneyini 10000 kez tekrarlayalım. Yani toplamda 10000*100=1.000.000 kez para atma işlemini gerçekleştirelim ve 100 ve katlarındaki yazı oranlarını grafikleştirelim:

1

Yukarıdaki grafikte görüldüğü üzere deney sayısı 0’dan 10000’e doğru gittikçe yazı oranları 0.5’e yaklaşıyor.

Simülasyon – 2

Elimizde üç adet zar olsun. Bu zarları aynı anda atıp gelen rakamları topladığımızda sonucun 9 olabileceği kombinasyon sayısıyla 10 olabileceği kombinasyon sayısı birbirine eşittir. Ancak bu tarz oyunları sıklıkla oynayan kumarbazlar toplamın 9 olmasına 10 olmasından biraz daha az rastladıklarını söylüyorlar. Sizce bu doğru olabilir mi? Hemen bir simülasyon yapalım.

Aşağıdaki kodla 1’den 6’ya kadar olan rakamlar kümesinden çekileni bir daha çekebilme şartıyla 3 eleman seçip toplamını döndürüyoruz. Yani 3 zarı aynı anda atıp gelen rakamları topluyoruz.

calculateSum <- function(x){
 return(sum(sample(1:6, 3, replace=TRUE)))
}

Şimdi bunu 100.000 kez gerçekleştirip neler olacağına bakalım:

results <- sapply(1:100000, calculateSum)
> sum(results==9)/length(results)
[1] 0.11652
> sum(results==10)/length(results)
[1] 0.12364
> hist(results, breaks = 50)

Rplot01.jpeg

Burada ilginç yapıyı gözlemleyebildiniz mi? Bu üç zarın toplamının normal dağılıma (normal distribution) çok benzer bir dağılım sergilediğini görüyoruz. Çok benzer dedim çünkü normal dağılım daha sonraki yazılarda ele alacağım sürekli değişkenlere (continuous variable) özgü bir dağılım türüdür. Üç zarın toplamının sonucu minimum 3 ve maksimum 18 olabilir. Kırmızıyla gösterilen 11’in sıklığı, mavi ile gösterilen 10’un ve yeşil ile gösterilen de 9’un sıklığı. Dağılımdan görebileceğiniz üzere 9’un sıklığı 10’un sıklığından biraz daha az. Hemen yukarıdaki koddan görebileceğimiz üzere 100.000’lik denemede 10 gelme olasılığı 0.12364 iken 9 gelme olasılığı 0.11652. Yani aslında kumarbazlar haklıymış!

Simülasyon – 3

Diyelim ki DeMoivre’yle çok yakın bir dostsunuz ve iddiaya girdiniz. 3 tane zarı aynı anda attığında toplamlarının en az bir kere 18 olması için ortalama en az 150 kere atış yapmanız gerektiğini söylüyor. Sizce bu doğru mu?

Aşağıdaki kodu inceleyin:

calculateDieSums <- function(x){
 return(sum(sample(1:6, 3, replace=TRUE)))
}
n = 0
cutoff = 0
while(abs(n-0.5)>0.01){
 alls = 0
 cutoff <- cutoff + 30
 for(i in 1:10000){
 total = 0
 result <- sapply(1:cutoff, calculateDieSums)
 if(sum(result==18)>0)
 total <- total + 1 
 alls <- alls + total
 }
 n <- alls / 10000
print(paste(n,"-",cutoff))
}

Bu kod 3 zar atma olayını cutoff değeri kadar gerçekleştiriyor. Sonuçların içinden en az bir tane 18 varsa ilgili değişkeni bir artırıyor ve bunları toplamda 10.000 kez tekrarlıyor. Sonuçlar şu şekilde:

[1] "0.1307 - 30"
[1] "0.2464 - 60"
[1] "0.3453 - 90"
[1] "0.4204 - 120"
[1] "0.501 - 150"

Program cutoff değeri 150 olduğunda duruyor. Bu demek oluyor ki 150 atış civarlarında zarlarının toplamlarının en az bir kere 18 olması olasılığı 0.501, yani neredeyse yarı yarıya. Yani arkadaşınız haklı! En az bir kere 18 gelme ihtimali 150 ve daha büyük denemeler için yüksek.

Simülasyon – 4

Hepimiz ruleti duymuşuzdur. Rulet oyununda çarkta 38 tane bölüm bulunur: 0, 00, 1, 2, 3, …. ,36. Bunlarda 0 ve 00’ın rengi yeşil, geri kalan 36’sının da yarısı kırmızı yarısı siyah. Diyelim ki kırmızı renkler için bahse girdiniz. Çarkı çevirip topu attığınızda top eğer kırmızı renkli sayılardan birinde durursa 1 TL kazanacaksınız; eğer kırmızı renkte durmazsa 1 TL kaybedeceksiniz. Bu, oyunu oynama yöntemlerinden biri. Bir diğeriyse belirli bir sayıya bahis yapmak. Diyelim ki 17 sayısına bahis yaptınız. Eğer top 17 numarada durursa 1 TL ve buna ek olarak 35TL kazanacaksınız. Eğer 17’de durmazsa 1 TL kaybedeceksiniz. Sizce hangisi daha az riskli?

İki oyun türünü de 500’er kez tekrarlayacak bir simülasyon yazıp kazançlara bakalım.

sets <- c(0, 0, rep(1,times = 18), rep(2, times=18))
betForRed <- function(x){
 balance <- 0
 for(i in 1:500){
 res <- sample(sets,1)
 if(res == 1)
 balance <- balance + 1
 else
 balance <- balance - 1
 }
 return(balance)
}
betFor17 <- function(x){
 balance <- 0
 for(i in 1:500){
 res <- sample(1:38,1)
 if(res == 17)
 balance <- balance + 36
 else
 balance <- balance - 1
 }
 return(balance)
}
a <- sapply(1:1000,betFor17)
b <- sapply(1:1000,betForRed)
sum(a>0)
sum(b>0)

bal

Yukarıdaki grafikte her bir oyun türü için 500’er kez oynamayı 1000 kez tekrar ediyor. Yeşil noktalar 17’ye bahsi, mavi noktalar ise kırmızılara bahsin sonuçlarını gösteriyor. Buradan çıkaracağımız sonuç şu: her bir oyunu 500’er kez oynadığımızda 17’ye bahis yaptığımızda kazancımız kırmızılara bahis yaptığımızdakinden çok daha fazla değişkenlik gösterir ve buna paralel olarak kazancı ya da kaybı daha fazla olabilir. Kırmızılara bahis yaptığımızda kazancımız ya da kaybımız daha az değişkenlik gösteriyor ancak negatif bakiyeyle oyunu bitirmemiz pozitif bir bakiyeyle bitirmemizden daha yüksek bir olasılığa sahip! Seçim sizin.

Simülasyon – 5

Psikoloji dünyasında aşağıdaki soruya her 5 kişiden 4’ünün yanlış cevap verdiği gözlemlenmiş:

Bir köy düşünelim ve bu köyde sadece iki tane hastane olsun. Büyük olan hastanede günde yaklaşık 45 bebek doğarken küçük olan hastanede günde yaklaşık 15 bebek doğuyor olsun. Erkek bebeklerin genel proporsiyonu %50 olsa da bu hastanelerdeki herhangi bir günde doğan bebeklerin erkek oranı %50’den az ya da fazla olabilir. Bir yılın sonunda bir günde doğan bebeklerin %60’dan fazlasının erkek olduğu gün sayısı hangi hastanede daha fazladır ? Büyük olan da mı? Yoksa küçük olan mı acaba?

Bunu anlamanın en iyi yolu simülasyon gerçekleştirmek. Cinsiyetlerin eşit olasılıkta olduğunu var sayarak aşağıdaki gibi bir kod yazabiliriz:

calculateMaleBabyPercent <- function(x,n){
 return(sum(sample(c(0,1), size = n, replace = TRUE))/n)
}
small <- 0
big <- 0
for(i in 1:1000){
 smallHospital <- sapply(1:365, calculateMaleBabyPercent, 15)
 bigHospital <- sapply(1:365, calculateMaleBabyPercent, 45)

 small <- small + sum(smallHospital>0.6)/length(smallHospital)*365
 big <- big + sum(bigHospital>0.6)/length(bigHospital)*365
}
small/1000
[1] 55.284
big/1000
24.706

Yukarıdaki kod söz konusu olayı 1000 kez tekrarlar. Sonuçta küçük hastanede ilgili gün sayısı yaklaşık 55 iken büyük hastanede 25. Peki bunun sebebi ne olabilir? Cevap aslında çok basit: örneklem boyutu arttıkça gözlemlenen olasılık değerleri gerçek olasılık değerlerine yaklaşır ve buna paralel olarak da değişkenlik (standard error) azalır. Yani 45’lik bir örneklemde erkek bebeklerin oranı 15’lik bir örneklemdeki erkek bebeklerinin oranından daha az değişkendir. Eğer en baştan böyle düşündüyseniz, tebrikler!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s