Var Mısın Yok Musun: Bilgisayar Bize Nasıl Para Kazandırabilir?

0
FZ
Bu yazıda bilgisayarda simülasyon yaparak gerçek hayata dair kararlar vermenin basit ve güzel bir örneğini göstereceğim. Günümüzde bilgisayarlar çok hızlandığı için bilgisayar modelleri ve simülasyonları ile günlük yaşantımızdaki olaylara dair ne tür seçimlerde ne kadar kârlı çıkabileceğimizi belirlemek kolayca yapılabilir hale gelmiştir ve yine bu tür modelleri kullanarak pek çok konuya dair bilgi aktarmak / edinmek matematik teoremleri geliştirmeye yahut mevcut matematik teoremlerini birine anlatmaya kıyasla daha kolay olabilmektedir.

O halde başlayalım: Daha önce FM'de epey bir tartıştığımız meşhur Monty Hall problemine, nam-ı diğer 'Var mısın, yok musun?' yarışmasının olasılıkla ilişkisine tekrar dönmek istiyorum. Ama bu sefer uzun uzun sözel açıklamalar yahut Bayes teoremi ile matematiksel ispatlar yapmak yerine bu konunun bilgisayarda modelleme ve simülasyon aracılığı ile çok daha kolay anlaşılabileceğini iddia edecek ve bunu göstermeye çalışacağım.

Yarışmanın temel halini ve meseleyi hatırlatalım: 3 kapı var. Birinde 1 milyon YTL ödül var. Yarışmacı olarak nerede ne var bilmiyorsunuz:
Acaba hangi kapıda ödül var?

Bir tahminde bulunup kapılardan birini seçiyorsunuz sunucunun açması için:

Bir seçim yaptınız ve mesela bu kapıyı seçtiniz.

Sunucu, nerede ne olduğu bilgisine sahip olarak, sizin seçtiğiniz kapı dışındaki yani geriye kalan iki kapıdan birini açıyor:

Sunucu geriye kalan iki kapıdan birini açar, açtığı kapıda ödül yoktur!

Görüyorsunuz ki sunucunun açtığı kapı boş. Bunun üzerine sunucu size soruyor: "Bir kapı seçtin ve ben de bir kapı açtım. Seçtiğin kapıyı değiştirmek ister misin? Yoksa kararında ısrarcı mısın, seçtiğin kapıyı mı açalım?":

Acaba ödül için baştaki seçimimizden vazgeçmeli miyiz?

Kritik soru: Ne yapmalısınız? Başka bir deyişle, hangisinin olasılığı daha yüksektir, en başta seçtiğiniz kapıyı açtırmanız durumunda 1 milyon YTL kazanmanız mı yoksa diğer kapıyı seçip 1 milyon YTL kazanmanız mı? Dikkat: Bu soruya pek çok insan yanlış cevabı vermektedir ve bu kişiler arasında olasılık yahut istatistik ile işi icabı haşır neşir olan bilimciler de mevcuttur. Sezgileriniz yerine matematiğe mi güvenmelisiniz? Yahut bir bilgisayar modeline? ;-) Hem de kolayca kurabileceğiniz bir bilgisayar modeline!

Açmalı mı, açmamalı mı, yoksa hiç düşünmemeli mi? Ama biz düşünmezsek, biz olamayız ki!

Gelin şimdi çok basit ve programcı olmayanların dahi kolayca anlayabileceği kısacık bir bilgisayar kodu ile bu probleme açıklık getirelim.

İki stratejimiz olsun, birinci stratejimiz ne olursa olsun ilk seçtiğimiz kapıda ısrarcı olacağız ve onu açtıracağız. İkinci stratejimize göre ise ne olursa olsun seçtiğimiz kapıdan vazgeçip diğer kapıyı seçecek ve sunucuya onu açtıracağız.

Seçtiğimiz strateji hangisi olursa olsun kapıyı açtıktan sonra kazanacağız ya da kaybedeceğiz. Kazanırsak kazanç ile ilgili değişkenimizi 1 artırırız. Kazanmazsak ise artırmayız. Bu işlemi seçtiğimiz stratejilerden biri için mesela 100 kere yaparsak ve kaç kere kazandığımızı ilgili kazanç değişkenimizde depolarsak ve sonra bunu 100'e bölersek o zaman yüzde kaç olasılık ile söz konusu stratejimizin kazandığını hesaplamış oluruz.

1. stratejiyi çok basit bir Python kod parçası olarak yazalım:

    kapilar = [1, 2, 3]
    odullu_kapi = random.choice(kapilar)
    yarismacinin_secimi = random.choice(kapilar)

    if yarismacinin_secimi == odullu_kapi:
        kazanc = kazanc + 1

2. stratejiyi çok basit bir Python kod parçası olarak yazalım:

    kapilar = [1, 2, 3]
    odullu_kapi = random.choice(kapilar)

    yarismacinin_secimi = random.choice(kapilar)

    if yarismacinin_secimi == odullu_kapi:
        kapilar.remove(odullu_kapi)
        kapilar.remove(random.choice(kapilar))
        yarismacinin_yeni_secimi = kapilar[0]        
    else:
        yarismacinin_yeni_secimi = odullu_kapi

    if yarismacinin_yeni_secimi == odullu_kapi:
        kazanc = kazanc + 1

Her iki durumda da kazanç değişkenimizi nasıl hesapladığımızı yukarıda gösterdik. Alışık olmayanlar için çok kısa birkaç açıklama yapmak gerekirse, random.choice(kapilar) ifadesi kapilar dizisindeki elemanlardan birini rastgele seçmektedir (her elemanın seçilme olasılığı eşittir, buna güvenebilirsiniz). random.remove(odullu_kapi) gibi bir ifade ise kapilar dizisi içinden ilgili kapıyı çıkarmakta yani diziyi küçültmektedir.

Şimdi bunca açıklamadan sonra gelelim işin özüne, her iki stratejiyi de 100 kere çalıştırıp çıkan kazanç sayıyı 100'e bölerek her iki stratejinin de kazanma olasılığını hesaplayabileceğimizi söylemiştik. Lakin burada okurun aklına birkaç soru gelebilir:
  • Bu model gerçekçi midir?
  • 100 kere denemek yeterli midir?
Model gerçekçidir çünkü bilgisayar bir kapı seçerken tamamen gelişigüzel bir seçim yapmaktadır. Her iki stratejiyi 100 kere denemek pek gerçekçi gelmedi ise o zaman rahatlıkla bu rakamı 1 milyona çıkarabiliriz, ne de olsa işin ucunda 1 milyon YTL ödül var demiştik, değil mi? ;-) Her iki stratejiyi de bu yarışmaya ayrı ayrı 1 milyon kere sokalım, her ikisinde kaç kere kazandığımızı kazanc değişkenimizde biriktirelim ve çıkan sonucu 1 milyona bölüp 100 ile çarpalım, böylece % cinsinden olasılığı hesaplayalım:

$ python sec-bakalim.py 
1. strateji ile kazanma olasiligi = %33.249
2. strateji ile kazanma olasiligi = %66.958

Görülen o ki ikinci strateji yani kapıyı değiştirmek çok daha anlamlı, 1 milyon kere denedik ve bu denemelerin yaklaşık %67'sinde bu strateji kazandı. Programı bir kez daha çalıştırıp bir kez daha milyonluk bir deneme yapalım bakalım sonuç değişecek mi:

$ python sec-bakalim.py 
1. strateji ile kazanma olasiligi = %33.566
2. strateji ile kazanma olasiligi = %66.752

Hemen hemen aynı! Üstelik bu denemeleri yapmak orta karar bir bilgisayarda her seferinde hemen hemen yaklaşık 1 saniye sürdü yani modelimizi kurduktan sonra çalıştırmamız, bir tür simülasyon yapıp sonuçları öğrenmemiz çok düşük maliyetli.

Modelimiz bize her halükârda başlangıçta seçtiğimiz kapıdan vaz geçip geriye kalan kapıyı seçmemizin daha kârlı olduğunu, başka bir deyişle 2. stratejiyi takip etmemiz halinde 1 milyon YTL'lik ödülü kazanma olasılığımızın %66 küsur olduğunu söylemektedir.

Bu problemin Bayes teoremi kullanarak analiz edilmiş ve benzer sonuca varılmış şeklini çeşitli yerlerde bulup inceleyebilirsiniz. Sembolik matematiksel analiz bu durumda daha güçlü bir araçtır, bunu kabul ediyorum ancak sizce hangisini anlamanın daha kolaydır, buna da siz karar verin.

Külyutmaz Bilgisayarcılar İçin Notlar

1. Programın tüm kaynak kodu aşağıdadır, bunu Ubuntu GNU/Linux üzerinde Python 2.5.2, MS Windows XP üzerinde de Python 2.6 ile denedim, yani komut satırında python sec-bakalim.py diyerek çalıştırdım.

sec-bakalim.py
--------------

import random

###
### "Kapiyi degistirmem stratejisi
###
kazanc = 0

for i in range(100000):
    # 3 kapi var, bunlardan sadece bir tanesinin arkasinda odul var
    # hangi kapinin arkasina yerlestirilecegine gelisiguzel karar veriliyor
    kapilar = [1, 2, 3]
    odullu_kapi = random.choice(kapilar)

    # Yarismaci, odulun nerede oldugunu bilmeden bir kapi seciyor.
    yarismacinin_secimi = random.choice(kapilar)

    # Sunucu yarismacinin sectigi kapi haricindeki iki kapiya bakiyor
    # ve bunlarin icinden odul icermeyen bir tanesini secip aciyor ve
    # yarismaciya fikrini degistirip degistirmeyecegini soruyor
    # Var sayalim ki yaristirmaci fikrini degistirmesin. Bu durumda
    # eger secmis oldugu kapi odullu kapi ise kazanmis olur:

    # Son seciminden sonra yarismaci kazandi mi?
    if yarismacinin_secimi == odullu_kapi:
        kazanc = kazanc + 1

olasilik = kazanc / 100000.0
print '1. strateji ile kazanma olasiligi = %' + str(olasilik * 100)


###
### "Kapiyi degistiririm stratejisi
###
kazanc = 0

for i in range(100000):
    # 3 kapi var, bunlardan sadece bir tanesinin arkasinda odul var
    # hangi kapinin arkasina yerlestirilecegine gelisiguzel karar veriliyor
    kapilar = [1, 2, 3]
    odullu_kapi = random.choice(kapilar)

    # Yarismaci, odulun nerede oldugunu bilmeden bir kapi seciyor.
    yarismacinin_secimi = random.choice(kapilar)

    # Sunucu yarismacinin sectigi kapi haricindeki iki kapiya bakar
    # ve bunlarin icinden odul icermeyen bir tanesini secip acar.
    # Yarismaciya fikrini degistirip degistirmeyecegini sorar.
    # Var sayalim ki yaristirmaci fikrini degistirsin ve geriye kalan
    # kapilardan birini secsin


    # Eger yarismaci odullu kapiyi secti ise sunucu geriye kalan odulsuz iki
    # kapidan birini acar, sectigi stratejiden oturu yarismaci ilk basta sectigi
    # ve az once sunucunun acmis oldugu kapinin disinda kalan yegane kapiyi secmek
    # durumundadir.
    if yarismacinin_secimi == odullu_kapi:
        kapilar.remove(odullu_kapi)
        kapilar.remove(random.choice(kapilar))
        yarismacinin_yeni_secimi = kapilar[0]
        
    # Eger yarismaci odulsuz bir kapi secti ise, sunucu odulsuz diger kapiyi acar
    # ve yarismaci sectigi stratejisinden oturu kapiyi degistirir yani geriye kalan
    # tek kapiyi, odullu kapiyi secer ve kazanir
    else:
        yarismacinin_yeni_secimi = odullu_kapi

    # Son seciminden sonra yarismaci kazandi mi?
    if yarismacinin_yeni_secimi == odullu_kapi:
        kazanc = kazanc + 1

olasilik = kazanc / 100000.0
print '2. strateji ile kazanma olasiligi = %' + str(olasilik * 100)

2. Yazıdaki grafikleri GNU pic programlama dili ile kodlayıp GNU groff aracından faydalanarak oluşturdum ve bunun için "Making Pictures With GNU PIC" başlıklı belgeden faydalandım. Aşağıda son grafiğin kodunu görebilirsiniz (diğerlerinin tahmin edilmesi egzersiz olarak okura bırakılmıştır):

monty-hall-opened-select-which.pic
----------------------------------

.PS
## Some setup before we start drawing
scale = 2.54
golden_ratio = 1.61803399

box_width = 3
box_height = box_width * golden_ratio

box width box_width height box_height;

line < - dashed "Secmeli" above "mi?" below;
box same "X";
move;

box same "Sunucu acti ve bos!";
.PE

Yukarıdaki dosyadan bir .png dosyası elde edebilmek için önce aşağıdaki komutu verdim:

gpic monty-hall-opened-select-which.pic | groff -Tps > monty-hall-opened-select-which.ps


Daha sonra da oluşan .ps uzantılı dosyayı (PostScript dosyasını) GIMP grafik düzenleme programı ile açarak bir PNG dosyası olarak kaydettim.

Görüşler

0
FZ
Not: Bu yazıyı yazmama vesile olan Ridley Scott'a, NUMB3RS isimli şahane dizisinden ötürü teşekkürü bir borç bilirim. Özel olarak bu yazıyı tetikleyen 1. sezonun son bölümü olan 'Man Hunt' bölümüdür: http://numb3rs.wolfram.com/season1.html
0
sami
ilk algorithmada 3 kutu arasından 1 tanesi seçiliyor. Bir kutuyu çıkarsak da çıkarmasak da onda kalınacağı için 1/3
2. algorithmada ise 1 tanesi çıkartıldığı için 2 kutu arasından 1 tanesi seçiliyor. Bunun da şansı 1/2
0
FZ
Sorunun ne kadar yanıltıcı olabileceğini bir kez daha yukarıdaki yorumdan görüyoruz. 1. stratejinin kazanma olasılığı 1/3, ikinci stratejinin kazanma olasılı ise 2/3 yani yukarıdaki yorumda belirtildiği gibi 1/2 değil. Başka bir deyişle programımızın bize söylediği gibi sırası ile yaklaşık olarak %33 ve %66 olasılık söz konusu. Dikkat, bahsettiğim olasılıklar kazanma olasılıkları, herhangi bir kapıyı seçme olasılığı değil.
0
bio
Zaten olasiliklarin toplaminin %100 etmesi gerekiyor. 1/3 + 1/2 = 5/6 olurdu.

Dolayisiyla ilk kapinin olasiliginin 1/3 oldugunu kabul ettikten sonra ikinci durumda diger kapinin 1 - 1/3 = 2/3 oldugu goruluyor.
0
maestro134
Merhaba,
Biz de bir matematikci bir bilgisayar muh ve bir makina muhendisi (fikra gibi) ayni olay ustunde tartismistik. Var misin yok musun da bahsedilen durumun, bu problemden buyuk bir farki var, Daha onceki tartismalari da okudum ve itiraz edildigi gibi acilan kapilarin icinde birsey olup olmadiginin bilinmemesi farkettiriyor.
Bu anlatilanda olasiliklar %66 ve %33
Tv deki durumda sanslar esit.
Buna birkac turlu yaklasabiliriz ama sanirim en anlasilir sekli su:

elimizdeki problemde sunucu buyuk odul olmayanlardan birini eliyor bu kesin. Yani olasilik hesabinda spikerin digerini acma olasiligini gozardi ediyoruz. Digerinde oyle bir olasilik var, onu da isin icine katmamiz gerekiyor.
Var misin yok musun programini 3 kapiya indirgersek eger, 1 tanesini actik, buyuk odul cikma ihtimali var, 1/3 ile, cikmazsa ve kutulari degistirirsek durumu 2/3 ihtimalli bir durum. Sunucunun acmasinda ise kesin bos kutu olacagindan karar asamasina gelindiginde toplam ihtimal 1. Boyle dusundugunuzde sunucu actiginda 1-1/3 yapiyoruz ve 2/3 kaliyor, sunucu acmazsa, biz acmissak ve bos cikmis ise 2/3 -1/3 = 1/3 kaliyor. Yani degistirmek birsey farketmiyor.

24 kutuluya gore yaparsak hesabi son etaba kadar o kutunun (buyuk kalan) acilmama olasiligi 2/24, 2/24-1/24=1/24 de o kutuda buyuk odul olma olasiligi. Yani 1 - 1/24 = 23/24 degil.

0
sami
2/3 olayını anlamış değilim.
toplamda 3 kapı var ama ben hangi kapıyı seçersem seçeyim bir kapı çıkartılacak ve ben kalanlar arasından birini seçeceğim yani 2 kapıdan birini seçeceğim
0
myavuzselim
Ilk sectigin kapida israrci olmayi kafana koydugunu dusunelim. Uc tane kapidan birinde odul olduguna gore kazanma ihtimalin 1/3. Daha sonra sunucunun bos bir kapiyi acacak olmasi hic bir sey ifade etmiyor.

Sectigin kapiyi degistirmeyi kafana koydugunu dusunelim. Eger ilk sectigin kapida odul varsa sunucu kalan iki bos kapidan birini acacak. Sen de secimini degistirip kalan ikinci bos kapiyi actiracaksin. Eger ilk sectigin kapi bos ise sunucu kalan biri dolu biri bos kapidan bos olanini actiracak. Sen de secimini degistirip dolu kapiyi actiracaksin.

Yani degistirme yontemini kullanirsan basta bos kapi secersen kazanacaksin. Basta bos kapi secme ihtimalin 2/3 olduguna gore bu yontemle kazanma ihtimalin 2/3.
0
sami
Eyvallah aga an itibariyle anlamış bulunmaktayım. Sağol ;)
0
hayalci
Daha önceki tartışmadaki yorumlarda da belirtildiği gibi, televizyonda yayınlanan "Var mısın yok musun" yarışması Monty Hall problemindeki durumdan farklı, ve kutuyu değiştirmeniz şansınızı etkilemiyor.
0
FZ
Burada vurgulamaya çalıştığım Monty Hall ile Var Mısın Yok Musun yarışmasının farkı değil. Vurgulamaya çalıştığım şey bilgisayarların gerçek hayata dair modeller kurup olasılık, istatistik, seçim yapma, vb. benzeri konularda bize yardımcı olmaları ve aynı zamanda bu tarzın pedagojik bir araç olarak kullanılıp kullanılamayacağı.
0
hayalci
uzun uzun yazdiginiz ozenli yazida sadece buna takilmis olmami affedin. Ama daha once ayni minvaldeki bir benzetme uzerine saatlerce kafa yorduktan sonra, burada bu cumleyi goren baskalarinin da ayni cefayi cekmelerini engellemek istedigimden yaziverdim.

Onun disinda bu anlamasi biraz zor problemi ayagi yere basan bir ornekle (kod!) aciklamak oldukca isabetli olmus. Kodlayan elleriniz dert gormesin :)
0
muhuk
Eline sağlık, çok güzel bir yazı olmuş. Ben hala bu yöntemleri uygulayarak nasıl para kazanabileceğimizi anlayamadım. Sanıyorum yarışmaya da katılmak gerekiyor :P
0
FZ
Günlük hayatta "şunu mu seçsem yoksa bunu mu seçsem?" sorusunu pek çok şey için sorarız değil mi? Bunların bir kısmı olasılıklar, istatistikler ile ilgilidir, değil mi? Böyle olanların bir kısmı bir şeyler kazanmak yahut kaybetmekle ilgilidir değil mi? Yahut "şöyle yaparsam sonuç ne olur, peki ya diğer yolu seçersem sonuç ne olur?"u cevaplamakla ilgilidir, değil mi?

Şimdi burada borsada hangi hisse gruplarına yatırım yapmalıyım, bunun için filanca sayısal modeli mi kullansam? türünden bir hayli spekülatif ve sonu gelmez (ve kısmen gereksiz) tartışmalara yol açabilecek konulara girmek istemiyorum ve zaten kendi adıma borsayla da ilgilenmiyorum. Sadece olasılığın güçlü bir şey olduğunu kabul ediyorsak o güçten faydalanmanın bir yolunun da elimizin altındaki bilgisayarlar ve kolayca kullanabileceğimizi programlama dilleri olduğunu söylemeye çalışıyorum. "Bu zaten aşikar değil mi?" sorusunu soracak olanlara ise verecek tek bir cevabım var: Etrafımızda olup bitenler 'aşikar' olsa idi, 'bilim' diye bir etkinliğe gerek kalmazdı. Yahut 'veri madenciliğine' yahut 'machine learning'e. Yahut Bayes teoremine. Yahut... adını siz koyun.

Veya ne bileyim, çevrenizde saçma şeyler yapan, sezgilerine güvenen ve bunun saçmalığını bir türlü anlamak isteyen insanlar varsa, o zaman bir de bu basit modelleme yöntemi ile derdinizi anlatmayı deneyin diyorum. Bazen para kaybetmeyi engellemek de bir tür para kazanmak olarak düşünülebilir, değil mi? ;-)

Veya birtakım 'log' bilgilerini inceleyerek olası güvenlik tehditlerini belirleyen bir model kurup bunu milyon kere çalıştırıp doğruyu bulma olasılığını test ettiğinizi ve çıkan sonucu bir ürün haline getirip kullandığınızı düşünün.

Örnekler, uygulamalar çoğaltılabilir. Anahtar sözcükler ise hep aynı: olasılık, istatistik, model kurma, simülasyon ile modeli türlü çeşit testten geçirme ve gerçekliğe dair bir öngörü, bir açıklama sahibi olma. Modern bilimcinin laboratuvarı masasının üstündeki kasada saklı ve hepimiz çok farklı alanlarda keşifler gerçekleştirme potansiyeline sahip bilimcileriz diğer kimliklerimize ek olarak (bunun her zaman farkında olmasak da).
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Euler Projesi: Bilgisayarları Hazırlayın Matematik Sınavı Var

FZ

Euler Projesi bir grup meydan okuyucu problemi çözmek ve bu çözümlerinin puanlandırılması ile ilgili. Problemlerin ortak özelliği ise matematik ile programlamayı birleştirmeleri. Yani tek başına ya matematik ya da tek başına programlama bilmeniz pek yeterli değil. Başka bir deyişle programlama bilgisinin çözümlerde çok kolaylık sağladığı türden problemler.

Matematik Güzeldir!...

vst

Matematik sanattır. İtirazı olan?

1.000.000 € Parayı Reddeden Matematikçi: Perelman

FZ

Koray Bostancı'nın yazısıdan:

Rus matematikçi Grigori Perelman, milenyumun ödüllü problemleri olarak anılan 7 problemden biri olan Poincare önermesine çözüm buldu. Çözüm büyük yankı uyandırdı, çünkü problem 100 yıllık bir problemdi. Bu çözüm ile matematik alanında Nobel ödülüne denk olduğu söylenen Fields madalyasını almasına kesin gözüyle bakılıyordu. Ancak Perelman, önce St.Petersbourg Steklov Enstitüsü’ndeki görevinden istifa etti, sonra ödülü almayacağını, böyle bir ödülün anlamsız olduğunu açıkladı. Akabinde de Clay Matematik Enstitüsü‘ nün problemi çözene vermeyi taahhüt ettiği 1 milyon euro’yu almayacağını açıkladı..

Kaos Kelebeği

cbc

Sevgili editörümüz sundance TV'de konuşurken yaklaşık şöyle bir cümle çıktı ağzından:

"Kaos üzerinde bir kelebek şekli vardi sonsuz sembolü şeklinde büyüyen.. ama şu anda resmi yok yanımda"

Meraklanıp açtım google'ı ve ortalama 30 dk. kendimi eğlendirdim. Hazırladığım şeyi kendisi ile paylaşınca da "e haber yapsana, güzel olur" dedi. Kırmadım.

http://canb.net/index.php/Chaos_Butterfly
(Ed: Kaos teoremi, C kodu, GNUPLOT derken işte bu yüzden seviyoruz bu ortamları dedirten bu makale için Can Burak'a teşekkürler)

Bilgisayar Destekli Matematik Sistemi Maxima 5.17 Çıktı

FZ

Sembolik ve sayısal ifadeleri işleyebilen bir bilgisayarlı matematik sistemi Maxima'nın 5.17 numaralı sürümü duyuruldu. Türev, integral, Taylor serileri, Laplace dönüşümleri, adi diferansiyel denklemler, polinomlar, kümeler, listeler, vektörler, matrisler ve tensörlerle ilgili işlerinizi halletmenizde Maxima işlerinizi kolaylaştırır. Maxima ile yuvarlama hataları olmaksızın kesirli işlemler yapabilir, çok büyük tamsayıları fonksiyonlarınızda kullanabilirsiniz. Maxima matematiksel nesnelerinizi iki boyutlu ve üç boyutlu olarak grafiğe dökmenize de yardımcı olur.