olasılık etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
olasılık etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

31 Ocak 2018 Çarşamba

Stochastic Processes - III ( Chapman-Kolmogorov denklemi)

Notların üçüncü bölümünde Stochastic Process'ler konusunda önemli bir denklem olan Chapman-Kolmogorov denklemini ele alacağız. Öncesinde Markov süreçlere dair temel birkaç tanım yaptıktan sonra denklemi ifade edip, çözümüne dair birkaç laf ederek sonunda 'Master Equation' olarak adlandırılan önemli bir denklemi elde edeceğiz.

(NOT: Bu yazıda farklı bir kaynaktan yararlandığım için serinin diğer yazılarından biraz farklı bir notasyon kullandım. Kaynağım V. Balakrishan'ın 'Physical Applications of Stochastic Processes' ders videoları (Lecture 6).)

Elimizde zamanla farklı durumlar arasında 'dolaşan' bir süreç var ve bu süreci gözleyerek zaman serisi şeklinde veriler elde ediyoruz. $\mathbb{X}$ olarak adlandıracağımız bu sürecin durum uzayı ${j_1, j_2, ...}$ (ve kimi zaman da $k$ ve $l$ olarak) ve zaman örnekleri de ${t_1, t_2, ...}$ şeklinde etiketlensin. $\mathbb{X}$ sürecini tanımlayabilmemiz için $j_1$'den başlayıp $n$ adım sonunda $j_n$ durumuna gelen zincir için şu olasılığı yazabilmemiz gerekir:
$$P_n(j_n, t_n; j_{n-1}, t_{-1};...;j_1, t_{-1}) \tag{1}$$ $P_n$ ifadesindeki $n$ kaç adımlık bir olasılık yazdığımızı gösteriyor.

Bu ifadeyi koşullu olasılıklar şeklinde yazarsak şunu elde ederiz:
$$P_n(j_n, t_n; j_{n-1}, t_{-1};...;j_1, t_{-1}) = P_n(j_n, t_n| j_{n-1}, t_{n-1}; ...; j_1, t_1) P_{n-1}(j_{n-1}, t_{n-1}; ... ; j_1, t_1) \tag{2}$$
Üstteki iki olasılık ifadesinden ilki ($P_n$) terimi, fiziksel bir varsayımda bulunursak epey sadeleşiyor; bu da gözlemlediğimiz çoğu sürecin eğer yeteri kadar değişken kullandığımız takdirde bir sonraki adımı, sadece bir önceki adımına bağlı, geçmişteki tüm durumlarından bağımsız olması. Buna Markov özelliği diyoruz. Bu durumda ilk terim şu şekilde sadeleşiyor:
$$P_n(j_n, t_n| j_{n-1}, t_{n-1}; ...; j_1, t_1) = P_2(j_n, t_n|j_{n-1}, t_{n-1}) \tag{3}$$
Markov varsayımını kullandığımızda $(1)$'i aşağıdaki gibi iki adımlık olasılıkların çarpımı şeklinde yazabiliyoruz:
$$P_n(j_n, t_n; j_{n-1}, t_{-1};...;j_1, t_{-1}) = \big(\prod_{r=1}^{n-1}P_2(j_n, t_n|j_{n-1}, t{n-1})\big)P_1(j_1, t_1) \tag{4}$$
Zincirin yapısı gereği, zamanla durumların istatistiklerinin değişmediği yani zincirin evriminin zamana özel olarak bağlı olmadığı süreçleri durağan (stationary) süreçler olarak tanımlıyoruz. Durağanlık, iki durum arası geçiş olasılıklarının her bir durumun ilgili zamanı yerine, iki durumun zaman farklarına bağlı olmasına neden oluyor. Yani hangi zamanlarda değil de aralarında ne kadar zaman farkı ile geçtikleri önem kazanıyor.
$$P_2(k,t|j, t') = f(t-t')$$
Sadece arada geçen zaman önemli olduğuna göre zamanın başlangıç noktasını kaydırarak (bir önceki yazıdaki Markov zincirlerinin zamanda homojen olma özelliğini kullanarak) bu olasılığı şöyle ifade edebiliriz:
$$P_2(k,t|j, t')  = P_2(k, t-t'|j, 0) \equiv P_2(k, t- t'|j) \tag{5}$$
Son adımda başlangıç zamanı $0$'ı notasyondan çıkardık ve bundan sonra verilmediği her durum için $0$'dan başladığını düşünüyoruz. Bu tanımlamalar altında $(1)$ denklemini aşağıdaki gibi ifade ediyoruz: $$P_n(j_n, t_n; j_{n-1}, t_{-1};...;j_1, t_{-1}) = \big(\prod_{r=1}^{n-1}P_2(j_{r+1}, t_{r+1} - t_r|j_r)\big) P_1(j) \tag{6}$$
Son olarak zamanda ilerledikçe ($t \to \infty$) $P(k, t| j)$'nin başlangıç durumu $j$'den bağımsızlaşacağını ve durağan duruma eriştiğinde erişilen durumun durağan olasılığına eşit olacağını varsayıyoruz; kısacası zincir yeteri kadar beklendiğinde geçiş hafızasını tamamen unutuyor. Bu durum Markov zincirlerinde 'mixing' (karışma) şeklinde ifade ediliyor. Kısacası elimizdeki olasılıklar şuna indirgeniyor: $$ P(k, t |j) \longrightarrow P(k)$$
Bu şartlar altında zincirin ilk başta $j$ durumundayken, $t$ kadar süre sonra $k$ konumunda olma olasılığını şu şekilde yazabiliriz:
$$\boxed{ P(k, t|j) = \sum_{l = 1}^N P(k, t - t'| l) P(l, t'|j)}  \tag{7}$$
Bu denklem bize şunu söylüyor: Eğer $j$'den $k$'ya gitme olasılığını hesaplamak istiyorsak, aradaki her bir $l$ durumundan geçme olasılıklarını bulup çarparak sonuca erişiyoruz. Bu denklem 'Chapman-Kolmogorov Denklemi' olarak biliniyor. Denklem iki olasılık çarpımından oluşuyor; olasılıklara göre doğrusal olmayan (nonlinear) bir denklem olduğundan hesaplaması oldukça güç. Bunu doğrusal bir şekilde yazabilsek hayat çok daha kolaylaşacak. Bunun için de durumların birim zamanda birbirine ortalama geçiş sayısını belirten bir parametre olarak 'geçiş oranı' (transition rate) $w(k,j)$ tanımlıyoruz.
$$P(k, \delta t|j) = w(k|j)\delta t\hspace{1.5cm} k \not= j \tag{8}$$
Kolmogorov-Chaapman denklemindeki geçiş olasılıkları yerine $(8)$'deki ifadeyi yerleştirip $t - t' = \delta t$ olarak aldığımızda aşağıdaki diferansiyel denklemi elde ederiz.
$$ \boxed{\frac{d}{dt} P(k, t |j) =  \sum_{l = 1}^N \big[ w(k,l)P(l,t|j) - w(l,k)P(k,t|j)\big]} \tag{9}$$
Bu denklem 'Master Equation' olarak adlandırılıyor. Görüldüğü gibi $(9)$ birinci dereceden bir diferansiyel denklem. $(7)$'deki doğrusal olmayan terim yerine $P$'nin doğrusal terimleri var artık denklemde. Sağdaki toplam, tüm $l$ ara durumları üzerinden yapılıyor. Denklemin sağ tarafında toplam içindeki terim $j$'den önce ara durum olan $l$'ye, ardından nihai durum $k$'ya geçişi yani olasılıktaki artışı(gain term); ikincisi ise önce $j$'den nihai durum $k$'ya, ardından ara durumlardan biri olan $l$'ye geçişi yani olasılıktaki azalmayı (loss term) veren terimler.

Böylece elimizdeki Markov Zinciri'nin başlangıçtaki bir durumdan $t$ kadar süre sonra başka bir duruma geçme olasılığının zamanla değişimini veren bir denklem elde etmiş olduk.

29 Ocak 2018 Pazartesi

Discrete Stochastic Processes - I

Matematik Köyü'nde Kış döneminde takip ettiğim Arif Mardin hocanın 'Discrete Stochastic Processes' dersinin notlarnı gün gün tutmaya çalışıyorum. Elimdeki notlardan kendi anladığım şekliyle burada da bir seri şeklinde kısa kısa yazmayı planlıyorum. İlk yazı ile başlayalım o halde.

İlk derse 'Basit Rastgele Yürüyüş' (Simple Random Walk) ile başladık ve sonrasında onun Markov özelliklerinden yola çıkarak Markov Zincir'lerini inceledik. Rastgele yürüyüşü elindeki bir miktar parası olup, kumar masasında her oyunda $p$ olasılıkla parasını $1$ arttıran, $1-p$ olasılıkla da 1 azaltan bir kumarbazın durumu için değerlendirebiliriz. Bu durumda $n$ oyun/adım sonrasında kumarbazın elindeki parayı şu şekilde yazabiliriz: $$S_n = S_0 + \sum_{i = 1}^n X_i$$ Burada $S_0$ başlangıçtaki para ve $X_i$'ler de her oyunda kazanıp kaybettiğimiz parayı gösteren rassal değişken. $X_i$ rassal değişkeni yalnızca $+1$ ve $-1$ değerleri alabilen bir 'Bernouilli rassal değişkeni'. $X_0, X_1, ... , X_n$ serisi $p$ olasılıkla $+1$, $1-p$ olasılıkla da $-1$ değerleri alabilen Bernoulli rassal değişkenlerinden oluşan bir dizidir.

Bu tip basit bir kurala dayalı olarak kurgulanmış bu oyuna dair birçok ilginç  soru sorulabilir. Örneğin:

- $n$ oyun sonrasında ne kadar kazanmayı bekleriz?
- Kazancımızın ya da kaybımızın yeteri kadar oynadığımızda sonsuz olmasını bekler miyiz? Hangi koşulda böyle bir durum oluşur?
- Herhangi bir zamanda cebimizdeki bir para değerine sonra tekrar dönmeyi bekler miyiz? Kaç kere döneriz? Bu durum tüm para değerleri için gerçekleşir mi?

Rastgele yürüyüş problemi bunlar gibi birbirinden ilginç ve çoğu zaman çözümü epey uğraştırıcı birçok probleme kaynaklık yapıyor. İlerleyen zamanda daha detaylıca inceleyeceğiz. Birkaç özelliğine göz atalım şimdi.

Lemma 1: Basit rastgele yürüyüş uzayda homojendir. Yani: $$\mathbb{P}(S_n = j | S_0 = a) = \mathbb{P}(S_ n = j +b | S_0 = a+b)$$
Kanıt: $ \mathbb{P}(S_n = j  |  S_0 = a) =  \mathbb{P}( \sum_i^n X_i = j - a) = \mathbb{P}(S_n = j +b | S_0 = a + b)$

Lemma 2: Basit rastgele yürüyüş zamanda homojendir. Yani: $$\mathbb{P}(S_n = j | S_0 = a) =  \mathbb{P}(S_{n+m} = j | S_m= a) $$
Kanıt: $ \mathbb{P}(S_n = j | S_0 = a) = \mathbb{P}( \sum_i^n X_i = j - a) =  \mathbb{P}( \sum_{i = m+1}^{m+n} X_i = j - a) = \mathbb{P}(S_{n+m}  = j | S_m = a)$

Lemma 3 (Markov Özelliği): Rastgele yürüyüşün belirli bir andan sonraki adımları sadece bulunduğu adımdan bir önceki adımına bağlıdır, ondan öncekilerden tamamen bağımsızdır. $$\mathbb{P} = (S_{m+n} = j | S_0,S_1, ..., S_m) = \mathbb{P}(S_{m+n} = j | S_m)$$ Yukarıdaki şartlı olasılık ifadesindeki $S_0,S_1, ..., S_m$, 0. adımda $S_0$, 1. adımdaki $S_1$, $...$ m. adımda $S_m$ olayının gerçekleştiğini gösteriyor. Rastgele yürüyüş'ün bu özelliği ona birçok ilginç davranış kazandırıyor. Bunları anlayabilmek için öncelikle Markov Zincir'lerine kısaca bir göz atalım.

MARKOV ZİNCİRLERİ

Belirli bir sayılabilir (countable) durumu barındıran bir 'durum uzayı' $\mathcal{S}$ üzerinde tanımlı, bu durumları $n$ ile gösterilen adımlarda dolaşan bir proses olarak tanımlayabiliriz.

$\mathbb{X} = (X_n, n \in \mathbb{N}$, $\mathcal{S}$'den değerler alan birer rassal değişkenler dizisi olsun.

Tanım: $\mathbb{X}$ dizisi tüm $\forall n \in \mathbb{N}$ ve $\forall i_0, i_1, ..., i_n \in \mathcal{S}$ için Markov özelliği $$ \mathbb{P} (X_{n+1} = i_{n+1} | X_0 = i_0, X_1= i_1, ... , X_n = i_n) = \mathbb{P}(X_{n+1} = i_{n+1} | X_n = i_n)$$ sağlıyorsa Markov Zinciri (Markov Chain - MC) olarak adlandırılır.

Markov Zinciri eğer $\forall i, j \in \mathcal{S}$ için $\mathbb{P} ( X_{n+1} = j|X_n = 1)$ $n$'e bağlı değilse homojen olarak adlandırılır.

Olasılıkları hesaplamak için iki şeyi bilmemiz gerekir:

a) Geçiş matrisi (Transition Matrix) $P = (p_{ij} \hspace{0.5cm} i,j \in \mathcal{S})$ aşağıdaki gibi verilir: $$ P_{ij} = \mathbb{P}(X_1 = j| X_0 = i)$$
b) Başlangıç olasılık dağılımı $\lambda = (\lambda_i, i \in \mathcal{S})$

Homojenlik varsayımı gereği şunu yazabiliriz: $$\mathbb{P} (X_{n+1} = j | X_n  = i) = P_{ij}$$

Önermeler:
a)$\lambda$ vektörü bir olasılık dağılımıdır. $$ \lambda_i \geqslant 0 \hspace{0.5cm} \forall i \in \mathcal{S} \hspace{0.3cm} \text{ve} \sum_{i \in \mathcal{S}}\lambda_i = 1$$
b) $P = (p_{ij}\hspace{0.3cm}; i,j \in \mathcal{S})$ matrisi bir 'stochastic matris'tir.

   i) $P_{ij} \geqslant 0 \forall i,j \in \mathcal{S}$

   ii)$\sum_{j \in \mathcal{S}} P_{ij} = 1 \forall i \in \mathcal{S} $ ($P$'nin  satır toplamları $1$'e eşit.

Önermelerin kanıtları:
a) $\lambda_i$'ler bir olasılık olduğundan sıfırdan büyük eşit olmalılar. $$\sum_{i \in \mathcal{S}} \lambda_i = \sum_{i \in \mathcal{S} } \mathbb{P} (X_0 = i) = 1 \hspace {1.5cm} \square$$
b)$P_{ij}$'ler olasılık değerleri olduğundan dolayı sıfırdan büyük eşit olmalılar. $$ \sum_{j \in \mathcal{S}}P_{i,j} = \sum_{i \in \mathcal{S}}\mathbb{P} (X_1 = j |X_0 = i) = \mathbb{P}(X_1 \in \mathcal{S} | X_0 = i) = 1 \hspace{1.5cm} \square$$

15 Ocak 2018 Pazartesi

Yazı-Tura atmak ne kadar rastlantısaldır?

*Geçmişte GökGünce'de yayınladığım favori yazılarımdan birini buraya aktarmak istedim; öncesinde görmeyenler için iyi okumalar! 
"Bir şeyi dünyadaki en aşikâr şey olarak görmeye başladığımızda, bunu anlamak için sarf edeceğimiz tüm çabayı bir kenara iteriz..." Bertolt Brecht

Matematik ve fizikte bazı şeyleri günlük hesaplamalarda veya daha karmaşık kavramları temellendirmek için kullandığımızda, çoğu zaman ‘aşikarlığını’ sorgulamadan, içgüdüsel olarak belki de ‘daha başka ne olabilirdi ki?’ diyerek yolumuza devam ederiz. Fizikte yüksek lisans/doktora seviyesinde bir takım şeyleri kavramaya çalışma sürecimde nedense bahsettiğim ‘aşikar' şeyleri anlamak için özel bir çaba sarf etmem gerektiğini hissediyorum son zamanlarda. Tıpkı yakın zamanda karşılaştığım ve sonucunu gördüğümde sandalyemden az kalsın düşe yazdığım basit kavram gibi: ‘yazı-tura atmak gibi mekanik bir süreç ne kadar veya neden rastlantısaldır?’.


Fizikte en sevdiğim şey olabildiğince karmaşık görünen olguları çok basit modeller yardımıyla ‘karikatürünü çizmek’, ardından bunu belli varsayımlar altında çözüp gerçek durum hakkında yorumlar yapmak. Yazı-tura atışına baktığımızda bu mekanik süreci etkileyen birçok karmaşık süreçten bahsedebiliriz. Örneğin hava direnci, kütle-çekimi, paranın düştüğü yüzeyin esnekliği, ilk hız (hem yukarı doğru olan doğrusal hız, hem de dönmeyle ilişkili açısal hız), cismin kütle dağılımı vs vs.. Bir takım akla uygun basitleştirmeler ve kontrol edilebildiğini düşündüğümüz bir deney ortamı kullanarak hava direncinin, yüzey esnekliğinin ve kütle dağılımının temel modelimiz için çok da önemli olmadığını söyleyebiliriz. Geriye kalan, yukarı doğru olan doğrusal $v$ hız ve açısal $\omega$ hızının hemen hemen tüm dinamiği belirlediğini göreceğiz.

Modelimizi aşağıdaki gibi kurarsak: parayı, attığımızda doğrusal hızı sayesinde belirli bir yüksekliğe kadar çıkıp, aynı seviyede bekleyen elimize düşeceğini düşünüyoruz. Bunu yaparken bir taraftan da atış sırasında verdiğimiz ilk $\omega$ açısal hızıyla para dönüyor..


Paramızın iki yüzü var: H: Heads (Yazı), T: Tails (Tura). Paranın ilk $v$ hızı etkisiyle yapacağı hareket bariz bir 'dikey atış problemi' ve ilk baştaki yüksekliğini $y(0)$ ve açısal konumu $\theta(0)$'ı sıfır olarak kabul edip, $\tau$ kadar zaman sonra aynı yüksekliğe geri geldiğini, bu süreçte de yatay olarak harekete başlayan $(\theta(0) = 0)$ paranın $\tau$ süre sonra açısal konumu(oryantasyonu) $\theta(\tau)$ olacağını söyleyebiliriz. Buradaki $\theta$ paranın açısal olarak aldığı yola karşılık geliyor ve örneğin bir saniyede 1 dönüş yapan bir para için açısal hız 360°/s veya açıyı radyan cinsinden ölçtüğümüzde $2 \pi$ $  rad/s$ olduğunu söylüyoruz (Fizikte açı hesabında genelde radyan kullanılır). Paranın havada kalma süresinin lise matematiğiyle $$\tau = \frac{2v}{g}$$ olduğunu söyleyebiliriz. Bu sürede paranın ne kadar yol aldığını ise $$\theta(\tau) = \omega \tau = \omega \frac{2v}{g}$$ olarak buluruz. Buradan yola çıkarak ilk baştaki parametrelerimiz olan $v$ ve $\omega$ arasında temel bir ilişki olduğunu kolaylıkla görebiliriz: $$\omega v = \frac{\theta g}{2}$$ Fiziksel bir sistemin dinamiğini anlamak için öncelikle kritik noktalar dediğimiz sistemin davranışının kırıldığı (değiştiği), hassas noktalardaki durumları inceleriz. Bu problemde bu noktalar paranın dik konumda olduğu yani $\theta$ açısının sırasıyla 90°, 270°, 450°, 630°'ye radyan olarak karşılık gelen $$\frac{\pi}{2}, \frac{3 \pi}{2}, \frac{5 \pi}{2}, \frac{7 \pi}{2}... $$ olduğu durumlara bakalım.

Bu durumlar için yukarıda bahsettiğimiz ilk koşullar arasındaki ilişki, yani $\omega$$v$ çarpımı sırasıyla şöyle olacak: $$\frac{\pi g}{4}, \frac{3 \pi g}{4}, \frac{5 \pi g}{4}, \frac{7 \pi g}{4} ... $$Bu değerlere karşılık gelen $\omega$ ve $v$ değerlerini görmek için bir grafik çizersek şöyle bir şey elde ederiz:


Grafiğin yatay ekseni parayı yukarı attığımız doğrusal hız $v$'yi, dikey eksen de açısal hız $\omega$'yı gösteriyor. Attığımız paranın sadece $\frac{\pi}{2}$ kadar yol aldığı durumda yani yalnızca dörtte bir tur atarak elimize düşdüğü durum $\theta (\tau) = \frac{\pi}{2}$ hiperbolik eğrisini tanımlıyor ve tam eğri üzerindeki $\omega$ ve $v$ değerleri bize 'dik düşen' parayı veriyorlar. Parametreleri bu kadar hassas ayarlayarak fiziksel olarak bu eğri üzerine düşmemiz çok çok güç. O yüzden eğrinin dışındaki bölgeye bakalım: eğrinin hemen altındaki doğrusal ve açısal hız değerleri dönüşün $\frac{\pi}{2} $'den (90°) daha az olduğu, (ilk başta sıfır dereceden başladığımızı düşünürsek) başta başladığımız yüz yine üstte kalacak şekilde elimize düşeceğini, yani sonucun Heads - H olacağını; eğrinin üstü ise $\theta$ açısı $\frac{3 \pi}{2}$ (270°) olana dek paranın ters yüzü yani Tails - T'nin elimize düşeceğini söylüyor. Her bir dik gelme durumu olan $\theta(\tau) =  \frac{3 \pi}{2}, \frac{5 \pi}{2}, \frac{7 \pi}{2} ...$ değerlerini de aynı grafiğin üzerine çizersek aşağıdaki gibi bir resim karşımıza çıkıyor.


Pembe renkli bölgelerdeki ilk hızlara karşılık olarak paramız Yazı (Heads), beyaz bölgelerdeki parametrelere karşılık da paramız Tura (Tails) geliyor. O zaman problem çözüldü, dağılabiliriz! Bu sonucu gördüğümde ilk aklıma gelen soru: "Nasıl yani? Madem olayı mekanik olarak bu kadar basit bir şekilde çözebiliyoruz ve başlangıçta verdiğim ilk hız değerlerine göre paranın yazı mı yoksa tura mı geleceğini bilebiliyorum, o zaman 'olasılık' veya 'rastlantısallık' bunun neresinde?" Elde ettiğimiz resim her ne kadar çok temiz ve açıklayıcı görünse de aslında 'şeytan detaylarda saklı'.

Yukarıdaki grafikte yatay eksendeki değerlere baktığımızda 1 m/s'den 15 m/s'ye kadar değişen değerleri görüyoruz. Dikey eksen de 1 radyan/s dönüş hızından, 15 radyan/s dönüşe kadar uzanıyor. Peki tipik bir yazı tura atışında biz paraya ne kadar bir hız veriyoruz? Bu işin üstadı Persi Diaconis'in yaptığı deneyler göstermiş ki verilen doğrusal hız ($v$) tipik olarak 2-3 m/s arasında yani grafikte görebildiğimiz aralıkta. Fakat verdiğimiz açısal hız ise saniyede 36-39 dönüş (radyan olarak 225-250 radyan/s) kadar yüksek bir hız; dolayısıyla fiziksel olarak gerçekleşen parametrelerin değerini yukarıdaki grafikte göremiyoruz. O zaman ölçeği büyütelim, öyle bakalım:


Kırmızı kutuyla gösterilen bölge tipik olarak bir yazı tura atışında elimizle paraya verdiğimiz 2-3 m/s doğrusal hız ile saniyede 225-250 radyan dönüş açısal hız aralığında sistemin nasıl davrandığını gösteren bölge. Gri bölgeler yazı, beyaz alanlar tura gelme durumunu veren parametre bölgeleri. Bu aralığa biraz daha yaklaşalım:


Gördüğünüz gibi yazı ve tura bölgeleri oldukça dar bantlar şeklinde birbirini takip ediyor. Doğrusal hızdaki 0.1 m/s'lik bir değişim dahi parayı gri olan yazı bandından çıkarıp beyaz- tura bandına geçirebiliyor. Sonucun doğrusal hızdaki değişime bağımlılığı açısal hıza bağımlılığından çok daha hassas. Yeşil ok ile gösterilen açısal hassasiyet, yani diğer banda geçmemize neden olan karakteristik değişiklik, kırmızıyla gösterilen doğrusal hassasiyetten daha az etkili. Bu resme bakarak aslında olay açıklığa kavuşuyor: Parayı attığımızda her seferinde elimizle kontrol edemediğimiz başlangıç hızındaki rastlantısal değişiklikler sonunda kendisini tamamen rastlantısal bir sonuç veren bir sürece neden oluyor. İlk hıza bu kadar hassas bir sistemin sonunda yazı mı yoksa tura mı geleceğini kesin olarak söyleyemeyip bunun rastlantısal bir süreç olarak tarif ediyoruz.

Konuyu yukarıda epey kabaca tanımladık aslında. Bunun altında çok derin matematiksel kavramlar yatıyor diyebilirim. Başlangıç koşullarının zamanla ortadan silinip, sistemi 'rastlantısal' bir sisteme dönüştüren bir takım mekanizmalar iş başında aslında, ki bunları ilk olarak 19. yy'ın sonunda ünlü Fransız deha Henri Poincaré incelemiş. Ardından bu süreçlerin altında yatan fiziğe dair 1905'de Einstein'ın 'Brownian Motion' makalesi var. Fakat belki de en ilginci, yazı-tura probleminin bu kadar basi bir mekanik modelinin kurulup incelenmesi için 1986 yılına kadar beklemek gerekmiş... Diğer hepsine tamam da işte buna hayret etmemek elde değil!

Konuyla ilgili ileri okumalar yapmak isteyenlere:

1986'da yayınlanan ilgili makale: J. B. Keller. (1986) The probability of heads, American Mathematical Monthly, 93:191-197

Persi Diaconis'in konuyla ilgili müthiş konuşması: The Search for randomness

Numberphile'da yine P. Diaconis ile yapılan güzel bir video: 'How random is a coin toss?'

*Yazıda kullanılan grafik ve görseller Coursera'daki (artık yayında olmayan) Dr. Santosh S. Venkatesh'in müthiş olasılık dersi Probability'nin ders notlarından alınmıştır. Kitabı için: The Theory of Probability Explorations and Applications (Cambridge Press)

29 Aralık 2017 Cuma

Monty Hall problemi ve Monte Carlo çözümü

Fizik ve matematikte bir problemle karşılaştığımızda problemi kağıt-kalem yardımıyla 'analitik' olarak çözemediğimizde yada bu şekilde çözmeye girişmeden önce çözüme dair bir fikir edinmek adına ufak tefek deneyler yapmak için 'simulasyon' dediğimiz, bilgisayar yardımıyla bir takım sayısal yöntemler kullanırız. Bu yöntemlere dair fikir vermek adına ünlü bir olasılık problemini 'Monte Carlo' yöntemi olarak adlandırılan ve rastgele üretilmiş sayıları kullanan bir simulasyon ile çözmeye çalışacağız. Problemimiz ünlü 'Monty Hall' problemi!

Bir yarışmadasınız ve önünüzde bir tanesinin arkasında ödül, ikisinin ardında 'keçi' olan üç kapı bulunuyor. Kapılardan arkasında ödül olanı seçtiğinizde ödülü alıyor, diğer kapıları seçtiğinizde hiçbir şey kazanamıyorsunuz. Sunucu bir kapıyı seçmenizi istiyor ve siz de seçiyorsunuz. Ardından ödülün hangi kapı ardında olduğunu bilen sunucu kapılardan birini açıyor ve arkasından keçi çıkıyor. Size dönüp açtığı kapının arkasında keçi olduğunu gördüğünüz halde seçtiğiniz kapıyı değiştirip değiştirmeyeceğinizi soruyor. Sizce kazanmak için kapıyı değiştirmeli misiniz?

Problem 70'li yıllarda ortaya atılıyor ve değme matematikçilerin çözüm konusunda birbirine girmesine neden oluyor (hikayesi için tıklayınız). Çözümünün, birçok basit olasılık probleminin çözümünde olduğu gibi, 'sağduyuya karşı' görünen yapısı, problemi epey ilginç ve popüler kılmış durumda. Basit olasılık argümanları ile seçtiğimiz kapıyı değiştirmenin mi yoksa değiştirmemenin mi avantajlı çıkacağı gösterilebilir fakat biz bunu birbirinin aynısı birçok deneme ile benzetim (simulasyon) yaparak bulmaya çalışacağız.

Simulasyon için Python programlama dili ve Numpy kütüphanesini kullanacağız. Öncelikle ilgili kütüphaneleri çağıralım.

In [1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Yapacağımız şey belirli sayıda örnek oyunlar oynayıp, her seferinde rastgele seçimler yaparak seçimimizi değiştirdiğimizde mi yoksa seçimimiz aynı kaldığında mı daha sık kazanıyoruz, bunu gözlemek!

Öncelikle ödülün arkasında olduğu kapıyı simule edelim. nsim tane örnek kapı üreteceğiz. Kapılar $0$,$1$ ve $2$ değerleri alabiliyor. Bunun için numpyın random.randint fonksiyonunu kullanacağız. Bu fonksiyon verdiğiniz bir aralıkta (bizim için $0$ ve $3$) size ile belirleyeceğiniz sayıda düzgün dağılmış (eşit olasılıklı) rastgele tam sayılar üretiyor.

In [2]:
"""
Fonksiyon: simulasyon_odul

Ardında ödül olan kapıyı rastgele belirleyen fonksiyon.

Örnek
-------
>>> print simulasyon_odul(3)
array([0, 0, 2])
"""

def simulasyon_odul(nsim):
    odul = np.random.randint(0,3, size = nsim)
    return odul

Şimdi de tahminlerimizi üreteceğimiz fonksiyonu tanımlayalım. Yine aynı şekilde nsim tane $0$,$1$ ve $2$ olan rastgele kapı numaraları üretiyoruz. Bizim durumumuzda her seferinde başlangıçta 'rastgele'bir kapı seçiyor; fakat tamamen farklı bir yönemle, örneğin hep aynı kapıyı da seçtirebiliriz.

In [3]:
"""
Foksiyon: simulasyon_tahmin

Yarışmacının seçeceği kapıyı rastgele seçen fonksiyon. 

Örnek
-------
>>> print simulasyon_tahmin(5)
array([0, 0, 0, 0, 0])
"""

def simulasyon_tahmin(nsim):
    tahmin = np.random.randint(0,3, size = nsim)
    return tahmin

Sırada sunucunun açacağı ve arkasında 'keçi' olan kapıyı belirlemek var. Bunun için sunucunun her zaman arkasında 'keçi' olan kapıyı açacağını bildiğimizden, bizim seçimimize göre eğer seçtiğimizin arkasında keçi varsa diğer keçili kapıyı, ödül varsa diğer iki keçili kapıdan birini belirliyoruz.

In [4]:
"""
Fonksiyon: keci_kapi

Arkasında ödül olmayan (keçi olan) ve kişinin seçmediği kapılardan birini seçen fonksiyon

Örnek
--------
>>> print keci_kapi(np.array([0, 1, 2]), np.array([1, 1, 1]))
>>> array([2, 2, 0])
"""
def keci_kapi(odul, tahmin):
    acik = []
    for i in range(len(odul)):
        kapilar = [0,1,2]
        if(odul[i] == tahmin[i]):
            kapilar.remove(odul[i])
            acik.append(np.random.choice(kapilar))
        else:
            kapilar.remove(odul[i])
            kapilar.remove(tahmin[i])
            acik.append(kapilar[0])
    return np.array(acik)

Son olarak da tahmin değiştirme fonksiyonumuzu (tahmin_degistir) yazıyoruz. Bu fonksiyon tahminimizi ve sunucunun açtığı, arkasında keçi olan kapıyı girdi olarak alıyor ve tahmini değiştirdiği kapıyı döndürüyor.

In [5]:
"""
Fonksiyon: tahmin_degistir

Arkasında keçi olan kapı açıldığında her zaman seçtiği kapıyı değiştiren strateji

Örnek
--------
>>> print tahmin_degistir(np.array([0, 1, 2]), np.array([1, 2, 1]))
>>> array([2, 0, 0])
"""
def tahmin_degistir(tahmin, kecikapilar):
    degistir = []
    for i in range(len(odul)):
        kapilar = [0,1,2]
        if(kecikapilar[i] == tahmin[i]):
            kapilar.remove(kecikapilar[i])
            degistir.append(np.random.choice(kapilar))
        else:
            kapilar.remove(tahmin[i])
            kapilar.remove(kecikapilar[i])
            degistir.append(kapilar[0])
    return np.array(degistir)

Son olarak oynadığımız oyunlardan kapıyı değiştirdiklerimizin ve değiştirmediklerimizin kaçında kazandığımızı hesaplamak için bir fonksiyon belirliyoruz.

In [6]:
"""
Fonksiyon: kazanma_yuzdesi
Kazanma yüzdesini hesaplayan fonksiyon

Örnek
---------
>>> print kazanma_yuzdesi(np.array([0, 1, 2]), np.array([0, 0, 0]))
33.333
"""
def kazanma_yuzdesi(tahmin, odul):
    return np.sum(tahmin == odul)/float(len(tahmin))

Fonksiyonlarımızı belirledikten sonra şimdi simulasyona başlayalım. nsim$=1000$ tane oyun oynayacağız. Tek tek ardından ödül olan ve tahmin ettiğimiz kapı değerlerini rastgele oluşturuyoruz. Sonrasında sunucunun seçeceği ve arkasında keçi çıkan kapıyı belirliyoruz. Sonrasında kapımızı değiştirip değiştirmeyeceğimize karar veriyoruz. Ardından elde ettiğimiz sonucu yazdırıyoruz.

In [7]:
nsim = 1000
odul = simulasyon_odul(nsim)
tahmin = simulasyon_tahmin(nsim)
kecikapilar = keci_kapi(odul,tahmin)
degistir = tahmin_degistir(tahmin,kecikapilar)

print("Eğer ilk seçtiği kapıyı değiştirmezse ", kazanma_yuzdesi(tahmin, odul))
print("Eğer ilk seçtiği kapıyı değiştirirse: ", kazanma_yuzdesi(degistir, odul))
Eğer ilk seçtiği kapıyı değiştirmezse  0.305
Eğer ilk seçtiği kapıyı değiştirirse:  0.695

Görüldüğü üzere kapıyı değiştirdiğinde %67'e yakın yani $\frac{2}{3}$ oranında kazanırken, değiştirmediğinde $\frac{1}{3}$ yakın bir oranda kazanıyor. Yani seçtiğiniz kapıyı değiştirmek en makul seçenek gibi görünüyor!

Bu oranın oynadığımız oyun sayısına bağlı olup olmadığını görmek için $1$'den başlayıp $10000$'e kadar $20$'şer artan sayılarda oyun oynayıp değiştirip değiştirmediği durumlarda kazanma yüzdesini çizdirelim, bakalım nasıl bir şey çıkacak ortaya.

In [8]:
degistirirse = []
degistirmezse = []
for nsim in range(1,10000,20):
    odul = simulasyon_odul(nsim)
    tahmin = simulasyon_tahmin(nsim)
    kecikapilar = keci_kapi(odul,tahmin)
    degistir = tahmin_degistir(tahmin,kecikapilar)
    degistirirse.append(kazanma_yuzdesi(degistir, odul))
    degistirmezse.append(kazanma_yuzdesi(tahmin, odul))

plt.figure(figsize=(14,10))    
plt.plot(range(1,10000,20),degistirirse, 'r.', label='Degistirirse')
plt.plot(range(1,10000,20),degistirmezse, 'b.', label='Degistirmezse')
plt.xlabel('Simulasyon sayısı')
plt.ylabel('Olasılık')
plt.legend()
plt.show()
    

Gördüğünüz gibi ilk başta düşük sayıda oyun oynadığımızda olasılıklar değişkenlik gösterirken, 10-15 oyundan sonra sabit olasılıklara yani 0.33 ve 0.67 civarında sabitleniyor. Elbette rastgele oyunlar oynadığımız için bu değerler her seferinde tam olarak 0.33 ve 0.66 çıkmıyor ve bu durum Monte Carlo yöntemlerinin genel özelliği. Her ne kadar 'teorik' değerlerle birebir aynı olmasa da ona çok çok yakın olduğunu görüyoruz.

Monte Carlo yöntemleri fizikte analitik çözümünü yapamadığımız birçok sistem hakkında bilgi edinmek ve birçok zor integrali hesaplamak için sık sık kullanılan yöntemlerden biri. Bu dönem bilgisayar mühendisliği bölümünden aldığım yüksek lisans Monte Carlo dersine konuya dair birçok şey öğrenme fırsatım oldu. Bu yazı yeni yılla birlikte bu dersin ardından öğrendiklerim üzerine hazırlayacağım Monte Carlo dizisi için ufak, eğlenceli bir açılış yazısı olsun istedim. İlerleyen günlerdeki yazılarda konuyu derinlemesine inceleyip aşağıdaki konu başlıklarına değinmeyi planlıyorum:

  • Monte Carlo yöntemlerine giriş
  • Markov Zincirleri ve Monte Carlo (MCMC)
  • Önem Örneklemesi ve Metropolis-Hastings Algoritması
  • Gibbs Örneklemesi
  • Hamilton Monte Carlo yöntemi
  • Kesin Örnekleme, Propp-Wilson yöntemi ve Ising Modeli

Yeni yılda görüşmek üzere!

*Yazıda kullanılan kodlar Boğaziçi Ünv. Fizik Bölümünde bu dönem aldığım 'Machine Learning in Physics' dersinde yaptığımız bir ödevden uyarlanmıştır.