Bir olasılık yanılsaması

Bu deneyde şu duruma bakacağım:

Elimizde bir yalan makinesi var. Birisi yalan söylediğinde bu yalanı yüzde doksanbeş ihtimalle anlıyor. Birisinin doğru söyledğini de yüzde doksan ihtimalle anlıyor. Yani doğru söyleyen birinde yüzde on ihtimalle yalan söylediğini iddia ediyor. Yüz kişilik bir grubumuz var ve bu grupta bir kişi yalancı, geri kalan herkes doğruyu söylüyor. Gruptan rasgele seçilen birini bu yalan makinesine bağlıyoruz ve kendisine yalan söyleyip söylemediğini soruyoruz. Bu kişi hayır yalan söylemiyorum diyor ve yalan makinesi bu kişinin yalan söylediğini iddia ediyor. Yüzde kaç ihtimalle bu kişi yalancıdır?

Yukarıda da belirttiğim gibi bu soruyu bir deney olarak işleyeceğim. Yani soruyu matematiksel olarak çözmeyi denemeyeceğim. Deneyde 100 kişi alacağım. Rasgele birini yalancı diye işaretleyeceğim, geri kalan hepsi doğrucu olacak. Sonra her kişiyi tek tek yalan makinesine sokacağım ve yalan makinesini sorudaki olasılıklar dahilinde tahminlerde bulunacak. Bu tahminleri de her kişi için işaretleyeceğim. Sonra da gerçek yalancıların sayısının yalancı olarak tahmin edilen kişilerin sayısına oranına bakacağım.

Bu deneyi bir kaç kere yapıp çıkan grafiklere bakalım.

Aşağıdaki grafikler için önce biraz açıklama yapayım. Mavi noktalar, ürettiğim gerçek popülasyon olmaktadır. 1.0 değerine karşılık gelen noktalar, yani kişiler, o kişinin doğruyu söylediğini, 0.0 değerine karşılık gelen noktalar ise o kişinin yalancı olduğunu gösteriyor. Grafikler daha kolay görülsün diye yalan makinesinin çıktılarını kırmızı yaptım 2.0 ve 0.0 değerleriyle eşleştirdim. Yani 2.0 değerine karşılık gelen bireyler yalan makinesinin doğru söylediğine inandığı kişiler ve 0.0 değerine karşılık gelen kişiler ise yalan makinesi tarafından yalancı olduğu tespit edilen kişiler.

Bu deneyde görüldüğü gibi, 100 kişiden sadece 1 tanesi gerçekten yalancı ama yalan makinesi 14 kişiyi daha yalancı olarak tespit etmiş. Bu durumda bir yalancı olduğu tahmin edilen bir kişinin gerçekten yalancı olma ihtimali 1/15 olmakta.

Bu deneyde ise gerçek yalancı dışında 7 tane daha yalancı tespit edilmiş. O zaman yalancı olduğu iddia edilen rasgele birinin gerçekten yalancı olma şansı 1/8 olmakta.

Bu deneyleri yeterince tekrarlayıp ortalamalarını aldığımız zaman teorik sonuçlara oldukça yaklaşabiliriz. İsteyen yazının sonunda vereceğim programı biraz daha geliştirerek bu sonucu da elde edebilir.

Yalan makinesinin tahmin başarısı aslında tek tek bakıldığında yüksek oranlar gibi gözükse de eğer aradığımız özellik popülasyonda çok az bulunan bir özellik ise hiç beklemediğimiz kadar zayıf sonuçlar veriyor. Yani yüzde doksanlarda tahmin başarısı beklediğimiz bir testte başarı yüzde onun altına düşüyor. Bunun nedenlerinden biri tabii ki bir sürü yanlış pozitif tahmin olması. Gerçek pozitif sonuç çok nadir ise bu yalancı pozitifler başarı oranını çok düşürüyor. Popülasyondaki yalancı sayısını artırarak bir iki deney yapayım ve bunun etkilerine bakalım.

Aşağıdaki deneylerde yüz kişilik popülasyonumuzun 10 kişisi yalancıdır.

Yalan makinesi 16 kişinin yalancı olduğunu tespit etmiş. Gerçekte ise 10 yalancı vardı. Demek ki yalancı olduğu iddia edilen birisinin gerçekten yalancı olma şansı 10/16. Başarı oranı birden yüzde onlardan yüzde ellilere geldi.

Bu deneyde de yalan makinesi yanlış saymadıysam 19 kişinin yalancı olduğunu tahmin etmiş. Bu durumda tahminin doğru olma şansı 10/19 yani yine hemen hemen yüzde elli olmakta.

Peki yalancı pozitif ihtimalini düşürürsek nasıl bir başarı oranı bulabiliriz. Yalan makinemiz bu sefer doğrucu bir kişinin doğru söylediğini yüzde doksandokuz oranda tahmin etsin ve popülasyonumuzda yine sadece bir yalancı olsun. Bakalım başarı oranları nasıl değişecek.

Görüldüğü gibi yalancı pozitif sayısı çok daha azaldı ve böylece yalan makinesinin tahmin başarısı arttı ama yine de yüzde doksanlardan çok uzağız. Bu deneydeki başarı oranı 1/2 seviyesinde.

Buna benzer yanılsamalar popülasyonda çok ender görülen hastalıkların yüzde yüz olmayan testlerinde de meydana gelmektedir. Hastalar hastalığın yüzde doksandokuz oranında teşhis edildiğini bilip ve kendi testlerinin de pozitif olduğunu duyunca kesin hasta olduklarını düşünmekte ama gerçek ihtimal bu deneylerde de görüldüğü gibi çok daha düşük olabilmekte. Olasılıklar insan için sezgisel bir alan değil maalesef.

Deneylerde aşağıda verdiğim R kodunu kullandım.

generate_population istenilen popülasyonu yaratan fonksiyon. size parametresi popülasyonun büyüklüğünü, liars ise popülasyon içindeki yalancı bireylerin sayısını belirliyor.

detect_lie fonksiyonu ile yalan makinesini simüle ediyoruz. verilen person kişisi ile iltili tahmini doğru ve yalancı pozitif parametrelerine göre yapıyor.

do_the_experiment fonksiyonu ile bu deney bir popülasyon için yapılmakta ve sonuç grafik olarak gösterilmekte. İstenirse bu deney birçok kere tekrar edilir ve sonuçlar grafikte gösterilmeden sayılarak ortalama bulunabilir. Böylece terorik sonuca yakın bir sonuç elde edilebilir.

generate_population <- function(size, liars) {
  population <- rep(1, size)

  random_indices <- sample(1:size, liars)

  population[random_indices] <- 0

  return (population)
}

detect_lie <- function(person, true_positive, false_positive) {
  estimation <- runif(1)
  if(!is_liar(person) && estimation < false_positive) {
    return (0)
  } else if(is_liar(person) && estimation < true_positive) {
    return (0)
  }
  return (1)
}

is_liar <- function(person) {
  if(person == 1) {
    return (FALSE)
  } else {
    return (TRUE)
  }
}

do_the_experiment <- function() {
  matches <- 0
  detections = c()
  population <- generate_population(100, 1)
  print(population)
  for (person in population) {
    detection <- detect_lie(person, 0.95, 0.01)
    detections <- c(detections, detection)
    if(detection == is_liar(person)) {
      matches <- matches + 1
    }
  }
  x_axis <- 1:length(population)

  processed_detections <- lapply(detections, function(x) {
    # Check if the element is numeric before multiplying
    if (is.numeric(x)) {
      x * 2
    } else {
      # If not numeric, return the element unchanged
      x
    }
  })

  old_par <- par(mar = c(5, 4, 4, 8) + 0.1, xpd = TRUE)
  plot(x_axis, population,
       type = "l",        # Plot as a line
       col = "blue",      # Color the first line blue
       ylim = range(c(population, processed_detections)), # Set y-limits to cover the range of both datasets
       xlab = "Kişi",    # X-axis label
       ylab = "Yalancı / Doğrucu"
  )

  points(x_axis, processed_detections,
        type = "l",        # Add as a line
        col = "red")

  legend("top",       # Position of the legend
         legend = c("Gerçek nüfus (1 doğrucu, 0 yalancı)", "Yalan makinesi tahminleri (2 doğrucu, 0 yalancı)"), # Labels for the legend
         col = c("blue", "red"),    # Colors matching the lines/points
         lty = 1,
         inset = c(0, -0.3))

  par(old_par)
}

Kumarbazlık deneyi (Rasgele yürüyüş)

Stokastik prosesleri öğrenmek için yeni bir kitaba başladım. Bir hafta olmadı daha. Üniversite’de de stokastik dersleri almıştım ama o zamanlarda bilgisayarlarla ilgim yoktu ve sadece teorik kısmını anlamaya çalışmıştım. Bu prosesleri asla somutlaştırmayı, bir şekilde simüle etmeyi denememiştim. Artık matematiksel kısmından çok deneysel kısmına odaklanmak istiyorum. Belki bu konuyu biraz daha sezgisel anlamayı başarabilirim.

İlk deneyde bir kumarbaz var. Bu kumarbazınbaşlangıçta k (bir tamsayı) doları var. Kumarbazımız basit bir yazı tura oyunu oynamayı düşünüyor. Eğer yazı gelirse 1 dolar kazanacak, tura gelirse 1 dolar kaybedecek. Oyun iki şekilde bitebiliyor. Ya kumarbazın hiç parası kalmadığında ya da kumarbazın n doları olduğunda. Burada n de k sayısından daha büyük bir tamsayı.

Bu deneyde bulmak istediğim şey, kumarbazın hangi ihtimalle parasını kaybedeceği. Yazının sonunda simülasyonda kullandığım kodu da (R dilinde) vereceğim.

Bu sorunun cevabının matematiksel olarak nasıl bulunacağını bu yazıda göstermeyeceğim.

Önce, kumarbazımızın olası oyunlarının nasıl görünebileceğini bir iki grafikle görelim. Bütün simülasyonlarda hilesiz para kullandım, yani yazı veya tura gelme ihtimalleri yüzde elli.

Bu grafikte kumarbaz oyunu kazanıyor. Başlangıçta 20 dolar ile başlıyor ve 350 kez civarında yazı tura attıktan sonra 40 dolara ulaşıyor ve oyun bitiyor.

Bu simülasyonda ise kumarbazımız 400 kez yazı tura oynadıktan sonra bütün parasını kaybediyor.

Kumarbazın bu oyunu kazanma ihtimalini deneysel olarak bulmak içinse oyunu birçok defa oynayıp kaçını kazandığını ve kaçını da kaybettiğini saymamız yeterli olacaktır. Aşağıdaki simülasyonları kumarbazın oyunu 1000 kere oynadığı durumlar için yaptım. Paramız hala hilesiz.

Başlangıç parası 20$ ve hedef kazanç 40$ olduğunda yukarıdaki histogramı elde ettim. Soldaki mavi sütun kumarbazın kaç oyunu kaybettiğini, sağdaki mavi sütun da kaç oyunu kazandığını gösteriyor. Kırmızı çizgi de kayıpların toplam oyun sayısına oranını veriyor. Yani kumarbazımız bu oyunun sadece yüzde ellisine yakınını kaybetmiş.

Bu simülasyonda başlangıç parası 20 dolar ama hedef para 60 dolar. Kumarbaz bu oyunların yüzde 64’ünü kaybetmiş.

Başlangıç parasını 20$, hedefi de 80$ yaptığımda da yukarıdaki histogramı elde ettim. Kaybetme oranı bu sefer yüzde 74 oldu.

Bu üç simülasyona bakınca kaybetme oranı sanki (hedef parası – başlangıç parası) / hedef parası gibi gözüküyor. O zaman hedef parasını 100 $’a çıkarırsak kaybetme oranı da yüzde seksene yaklaşmalı. Bunu da denedim.

Sonuç gerçekten beklediğimiz sonuçla uyum içinde. Problemin matematiksel çözümü de aynı sonucu vermekte.

Simülasyonlar ve grafikler için kullandığım R kodu aşağıdadır.

gamble fonksiyonu, kumarbazın bir oyunu için kullanılmaktadır.

k = kumarbazın başlangıçtaki parası

n = kumarbazın ulaşmak istediği para miktarı

p = yazı gelme olasılığı

simulate_gamble fonksiyonu bir oyun sırasında her adımdaki para miktarını simüle edip sonuçları bir grafik olarak gösterir.

do_the_experiment fonksiyonu da bu oyunu bin kere oynatıp sonuçları bir histogram şeklinde gösterir.

gamble <- function(k, n, p) {

  coin_sides <- c("Heads", "Tails")
  probabilities_heads_bias <- c(p, 1 - p)
  state <- k

  while (state > 0 && state < n) {
    single_toss <- sample(x = coin_sides, size = 1, replace = TRUE, prob = probabilities_heads_bias)
    if (single_toss == "Heads") {
      state <- state + 1
    } else {
      state <- state - 1
    }
  }
  if (state == 0) {
    return (1)
  }
  return (0)
}

simulate_gamble <- function(k, n, p) {
  if (k <= 0 || k >= n || p < 0 || p > 1) {
    stop("Invalid input: Ensure 0 < k < n and 0 <= p <= 1")
  }

  coin_sides <- c("Heads", "Tails")
  probabilities_heads_bias <- c(p, 1 - p)
  state <- k

  random_walk <- c(k)

  while (state > 0 && state < n) {
    single_toss <- sample(x = coin_sides, size = 1, replace = TRUE, prob = probabilities_heads_bias)
    if (single_toss == "Heads") {
      state <- state + 1
    } else {
      state <- state - 1
    }
    random_walk <- c(random_walk, state)


  }
  plot(random_walk,
       type = "l",         # "l" for lines is often better for walks, or "b" for both
       lwd = 1.5,          # Line width
       col = "blue",       # Line color
       main = "Kumarbazın rasgele yürüyüşü", # Corrected title
       xlab = "Adım sayısı",                    # Corrected label
       ylab = "Kazanç durumu",               # Corrected label
       ylim = c(0, n)
  )
  # Add horizontal lines for boundaries (optional)
  abline(h = 0, col = "red", lty = 2)
  abline(h = n, col = "red", lty = 2)
}

do_the_experiment <- function(k, n, p) {
  if (k <= 0 || k >= n || p < 0 || p > 1) {
    stop("Invalid input: Ensure 0 < k < n and 0 <= p <= 1")
  }

  trials <- 1000
  simlist <- replicate(trials, gamble(k,n,p))
  mean_value <- mean(simlist)

  hist(simlist,
       main = paste("Kazançların ve kayıpların histogramı"),
       xlab = "Kazançlar/Kayıplar",
       col = "lightblue")

  abline(v = mean_value,
         col = "red",
         lwd = 3)

  legend("topright", legend = paste("Ortalama =", round(mean_value, 2)),
         col = "red", lty = 1, lwd = 3)
}

Technoseum (Mannheim)

Yakınlarda bulunan çok sevdiğim bir müzedir Technoseum. Sevdiğim özelliklerinden birisi sadece teknik müzel değil, aynı zamanda bilimsel bir müze olmasıdır. Yani fizik alanında bazı temel deneyler de yapılabilir burada. Deneyleri çok sevdiğimden birkaç yılda bir bu müzeye giderim.

Geçen hafta sonu müzeye Ümit’le beraber gittim. Mannheim istasyonundan yürüme 25 dakika kadar mesafede ama 6A tramvay hattı müzenin çok yakınından geçiyor. Müzeye gitme amacım bir iki deney, oyun fikri elde etmek ve birkaç film çekmekti.

Müze turu en üst kattan başlıyor. Noel öncesi olduğundan çok kalabalık değildi müze ve şansa en üst katta yine karton modelcilerin sergisi vardı.

Sergideki bir kadından bu hobi üzerine bilgiler aldım. O gün sergilenen eserleri bu forum linkinde görebilirsiniz:

https://www.kartonbau.de/forum/thema/46925-kmb-2023-im-technoseum-mannheim/

Tarım araçlarının sergilendiği koridordan sonra ilk büyük salona geldik. Burada mekanik, optik ve astronomi alanlarında eserler ve deneyler sergileniyordu. Çektiğim bazı deney filmlerinin youtube linklerini buraya koydum. Girişteki ilk deney palanga ve makaralar üzerineydi. Bu deneyde gösterilen şey makara ve palanga sistemiyle bir ağırlığı daha az kuvvet uygulayarak hareket ettirmenin mümkün olması ama tabii ki hedef çocukların bunu ölçmesi değil sezmesi. Eğer ölçmeye kalkışılırsa yapılan işin değişmediği de (çünkü yükü aynı miktarda yukarı kaldırmak için daha çok ipin daha az kuvvetle çekilmesi gerekmekte) görülecek ama bu fikir çocuklar için hiç de ilginç bir şey değil. Zaten orada yük olarak kullanılan 20 kiloluk çuvallar da çocukların ilgisini kaçırmaya en baştan yetiyor. Buna karşın bu deneyin hemen yanıbaşındaki başka bir deneyde yük olarak çocuklar kullanılabiliyor ve çocuklar bunu çok seviyor.

Bir başka mekanik deneyi de sarkaçlardı. Bu deney düzeneğinde çocuklara sarkacın periyodunun neye bağlı olduğu soruluyordu. Seçenekler de sarkacı oluşturan ağırlık ve sarkacın uzunluğu. Deney masasında bir adet kronometre olmasına rağmen bozuk olduğundan bununla geçerli bir ölçüm yapmam kolay değildi. Ölçüm yapmak çocuklar için zaten eğlenceli olmadığından kimse bu kronometrenin eksikliğini de hissetmedi. Aşağıda dört kat yavaşlatılmış videoda sarkacın periyodunun ağırlığa değil de uzunluğa bağlı olduğunu görebiliriz.

İki adet optik deney istasyonu vardı. Birinde içbükey ve dışbükey merceklerle prizma, diğerinde de küçük aynalarla kompleks aynalar sistemi yapma imkanı vardı. Merceklerle normal ışık kullanılırken, aynalarla lazer kullanıldığından ayna deneylerinin sonuçları daha net görülüyordu. Çocuklar bu istasyonlarla da pek ilgilenmediler. Belki de bu istasyonlarda çok temel ve soyut özelliklerin gözlemlenmesinden ötürü ilgi daha azdı. Işığın izlediği yolu görmek güzel ama oluşan görüntünün daha küçük mü büyük mü olacağı hakkında bir fikir üretmeye yetmeyen bir görsellikti bu. Aynı salonda tarihi mikroskoplar, teleskoplar sergilenirken merceklerin bu özelliklerinin gösterilememesi bence büyük bir eksiklikti.

Dönen cisimlerle ilgili deneyler de benim hep ilgimi çekmiştir ama çocuklar bu alanda da çok seçici. Deney eğlenceli olmalı, yani çocukça bir şaşırtıcılığı olmalı. Aşağıda dönen cisimlerle ilgili çektiğim bazı videolar var. Benim ilgimi çekenler çocukları hiç ilgilendirmedi ve benim daha anlamsız bulduklarım (anlaşılması daha zor olanlar) çocukları kendilerine mıknatıs gibi çekebildi.

Bu konudaki ilk deney merkezkaç kuvvetinin dönen bir sıvıdaki gözlemiydi. Tahmin edersiniz ki bu çocukların çok hoşuna giden bir deneydi.

Bu da deneyden çok çocukları eğlendirmek için koyulmuş bir oyuncak. Burada olan şeyi çocuklara anlatmak hem mümkün değil hem de gereksiz. Çocukları tek rahatsız eden şey bence topların deliğe düşmek için çok uzun zamana ihtiyaç duyması. Çocuklar beklemeyi sevmiyor.

Çocukların çok beğendiği bir başka deney de doğrusal hareket eden cisimlerin döner bir tabla üzerinden geçerken gösterdiği davranışlardı. Çocuklar bu olayların ne demek olduklarıyla ilgilenmiyordu, sadece eğlenceli olup olmadığına bakıyorlardı.

Bir sonraki deney de aynı kütledeki ve benzer şekildeki iki cismin aynı yolu farklı zamanlarda alabilmesi üzerineydi. Kütlenin cisimlerdeki dağılımı cisimlerin hareketlerini etkileyebiliyor ama bu hiçbir çocuğun umrunda değildi.

Çocuklardan daha çok benim ilgimi çeken deneylerden birisi de açısal momentumun korunmasıyla ilgiliydi. Deneyin ana kahramanı dönen bir tekerlek. Tek başına hiç ilginç değil ama bu tekeri dönebilen bir tablanın üzerine koyduğumuzda ilginç şeyler olmaya başlıyor. Teker dönmeye başladıktan sonra tekerin yönünü değiştirdikçe üzerinde bulunduğu tabla da dönmeye başlıyor ve tekerin dönüş yönüne göre kendi dönüş yönünü de değiştiriyor. Bence bu çocuklar için büyük bir deney, yani çocuğa göre çok büyük bir aparat. Büyük ihtimalle çocuk o mesafede neler olduğunu doğru göremiyor.

En alt katta da elektrik ve manyetizma üzerine deneyler vardı. Burada sadece elektrikle lamba yakma deneyleri çocukların dikkatini çekti. Deney düzeneklerinde lambalar üzerinde düşen voltaj ve lambalardan geçen akımlar da gösteriliyordu ama bunlar çocuklar için hiçbir anlama gelmiyordu. Benim bu katta en çok ilgimi çeken deney düzeneği ise manyetik alan çizgilerini göstermek için kullanılan bir sürü mini pusuladan meydana gelen aparattı. Yalnız bu sefer fark ettim ki bu aparat da yeterli değildi. Manyetik alan çizgileri değiştiğinde insan tek tek pusulalara konsantre olabiliyor ama büyük resim o kadar çabuk görünmüyor maalesef. Bu deneyin daha etkili olması için görsel etkinin insan beyninde daha hızlı oluşturulması gerekecek gibi.

Müzenin en altında küçük bir odada herkesten saklı bu istasyon ise benim buraya asıl gelme nedenimdi. Bu bir sis odasıydı. Belli alkol ve hava dolu bir kapta yüklü taneciklerden oluşan radyasyonu izlemek için kullanılan bir aparat. Videodaki birkaç santimetre uzunluğundaki kısa kalın izler büyük ihtimalle alfa bozunumlarına işaret. Daha uzun ve ince izler de beta ışınımları (elektron ya da pozitron) olmalı.

Bunların dışında çocukların ilgilendiği deneylerden bazı fotoğraflar da çektim. Şimdi de biraz bunlardan bahsedeyim.

Bu statik deneyinde, küçük parçaları masa üzerinde işaretli yerlere yerleştirdikten sonra masanın arka tarafını yukarı kaldırınca bir köprü kurmaya çalışılıyor. Bu köprü yıkılmazsa problem çözülmüş oluyor.

Bu deneyde nehrin iki kenarını birleştiren bir köprü yapılmakta. Deneyin yanında bunun çözümünün matematiksel açıklaması da verilmiş ama çocuklar bununla hiç ilgilenmediler ve doğrudan deneysel bir çözüm arayışına girdiler.

Yine nehir üzerinde başka bir köprü kurma deneyi.

Basit elektrik deneyleri de çok ziyaretçi çekti.

Müzede sadece fizik deneyleri yoktu tabii ki ama bu yazı epey uzun olduğundan kalan kısmı başka yazılarda anlatmayı düşünüyorum.

Martingale (Olasılık deneyi)

Bu oyunda kumarbaz yazı tura oynamakta. Bilemediği zaman ortaya bir önceki turda koyduğu paranın iki katını koymakta. Böylece daha önceki turlarda kaybettiği parayı da kazanıp kara geçecek. Eninde sonunda kazanacağından kesin kazançlı bir sistem gibi görünüyor.

Bu deneyde problemi matematiksel analiz etmeyeceğim. Sadece programla oyunu oynayıp sonuçları sayacağım. Matematiksel analizleri ders kitaplarında ya da internette bulmak mümkündür.

experiment <- function() {
  number_of_experiments <- 1000;
  #counters <- c(constants_H = 0, constants_T = 0, gambler = 0, gambler_with_offset_1 = 0, gambler_with_offset_2 = 0,
  #              gambler_with_offset_3 = 0, random = 0);
  #scores <- c(constants_H = 0, constants_T = 0, gambler = 0, gambler_with_offset_1 = 0, gambler_with_offset_2 = 0,
  #            gambler_with_offset_3 = 0, random = 0);

  counters <- vector(length = number_of_experiments);
  for(i in 1:number_of_experiments) {

    number_of_trials <- 1;
    coin <- c('T', 'H')
    toss <- sample(coin, size = 1);
    while(toss != 'T') {
      number_of_trials <- number_of_trials + 1;
      toss <- sample(coin, size = 1);
    }
    counters[i] = number_of_trials;

  }
  print(sum(counters));
  print(max(counters));
}

Yukarıdaki R programıyla bu oyunu kısmen denemeye çalıştım. Kumarbaz her oyunda yazı gelene kadar oynuyor. Yani paranın her tura geldiğinde önceki turda koyduğu paranın iki katını koyuyor. Yazı geldiğinde kazanıyor. Bin kere oynandığında yazı gelene kadar kaç kere yazı tura atıldığını bir diziye koydum ve sonunda toplam yazı tura atışını ve arka arkaya en fazla kaç kere tura geldiğini ekrana yazdırdım. Sonuçlar şuna benzer çıktı.

Yazı gelene kadar gereken ortalama para atışı: 2
Yazı gelene kadar gereken maksimum para atışı: 11 

Bu sistemde ortalama para atışının çok düşük olması bu stratejiyi çok cazip yapsa da maksimum para atışı durumlarında kumarbaz başlangıçta koyduğu baranın en az bin katını oynamak zorunda kalacak ve bu bazen pek de mümkün olmayabilir. Özellikle bahisler için üst sınır koyulan yerlerde bu yöntem hiç işe yaramayabilir.

Monte Carlo yanılgısı (Kumarbaz yanılgısı)

Üniversitede elektronik okumak istiyordum, çünkü aklıma gelen her şey için elektronik devre yapabileceğimi hayal ediyordum. İlk yıllarda bölümün düşündüğüm gibi olmadığını anlayınca bir boşluğa düşmüş oldum. Ne yapabilirim diye düşünürken dördüncü sınıfta aldığım bir dersten sonra istediğim devrelerin çoğunu yazılımla yapabileceğimi farkettim. O andan itibaren tamamen yazılıma kaydım.

Zaman geçtikçe deneyler de ilgimi çekmeye başladı. İlginç bir şekilde okulda deneylere yatkındım ama tembeldim. Deney yapmayı okul hayatım bittikten sonra daha çok sevmeye başladım. Kimya, elektronik deneyleri için bodrumda laboratuvar bile kurdum.

Çok daha sonraları deneylere bilgisayarı da ekledim. Genelde veri toplama ve işleme için kullandım. Son zamanlarda simülasyonlar ve olasılık deneyleri için de programlar yazmaya başladım.

Bugün kumarbaz yanılgısını denemek istedim. Simülasyonda bir kumarbazımız var. Bu kumarbaz yazı tura oyunu oynuyor. Parayı attıktan sonra tahminde bulunuyor ve eski tahminleri de not alıyor. Merak ettiğim şey şuydu: Eğer kumarbaz kararını eski sonuçlara göre verirse rastgele bir karara göre nasıl bir ortalama tutturabilir? Daha iyi mi daha kötü mü?

Bunun için çeşitli stratejileri karşılaştırdım:

  1. Kumarbaz daha önce gelen sonuçları not alır ve eğer daha fazla tura gelmişse yazı, daha fazla yazı gelmişse tura der. Eğer eşit sayıda yazı ve tura gelmişse rastgele karar verir. Bunun da değişik türleri olabilir. Örneğin toplamlar arasındaki fark belli bir sayıdan büyükse bu şekilde davranır, fark küçükse rastgele cevap verebilir.
  2. Kumarbaz her yazı tura atışı için aynı cevabı verir. Hep yazı ya da hep tura.
  3. Kumarbaz her yazı tura atışı için rastgele bir cevap verir (Örneğin başka bir parayla yazı tura atar ve onun sonucunu söyler).

Çok daha farklı stratejiler de bulunabilir elbette ama hedeflerim sadece basit durumları denemek ve kolayca deney tasarlayabileceğim bir sistem kurmak olduğundan burada bıraktım. Şimdi kısaca deneyden ve sonuçlarından bahsedeyim.

Deney programını R dilinde yazdım. Her deney adımında 10000 yazı tura atıldı ve stratejiler doğru tahmin sayılarına göre birbirleriyle karşılaştırıldı. Kazanan strateji o tur için bir puan aldı, diğerleri ise sıfır. Eşitlik durumunda eşit skor alan stratejiler birer puan aldı. 1000 deney sonucunda her stratejinin puanı listelendi.

convert <- function(v) {
  if(v == 'T') {
    1
  } else {
    -1
  }
}

call <- function(v, offset) {
  if(v < -offset) {
    'T'
  } else if(v > offset) {
    'H'
  } else {
    if(sample(c(1, -1), size=1) == 1) {
      'T'
    } else {
      'H'
    }
  }
}

filter_max <- function(l) {
  which(sapply(l, function(x) l[1] %in% x));
}

experiment <- function() {
  number_of_experiments <- 1000;
  constants_H <- "constants_H";
  constants_T <- "constants_T";
  gambler <- "gambler";
  gambler_with_offset_1 <- "gambler_with_offset_1";
  gambler_with_offset_2 <- "gambler_with_offset_2";
  gambler_with_offset_3 <- "gambler_with_offset_3";
  random <- "random";
  counter_gambler <- 0;
  counter_random <- 0;
  counter_constant <- 0;
  counters <- c(constants_H = 0, constants_T = 0, gambler = 0, gambler_with_offset_1 = 0, gambler_with_offset_2 = 0,
                gambler_with_offset_3 = 0, random = 0);
  scores <- c(constants_H = 0, constants_T = 0, gambler = 0, gambler_with_offset_1 = 0, gambler_with_offset_2 = 0,
              gambler_with_offset_3 = 0, random = 0);
  for(i in 1:number_of_experiments) {
    number_of_trials <- 10000;
    coin <- c('T', 'H')
    coins <- sample(coin, size = number_of_trials, replace = TRUE);
    converted_coins = lapply(coins, convert);
    sums = cumsum(converted_coins);

    gambler_guesses = lapply(sums, call, offset = 0);
    gambler_guesses_1 = lapply(sums, call, offset = 1);
    gambler_guesses_2 = lapply(sums, call, offset = 2);
    gambler_guesses_3 = lapply(sums, call, offset = 3);
    random_guesses <- sample(coin, size = number_of_trials, replace = TRUE);
    constant_guesses_H <-sample(c('H'), size = number_of_trials, replace = TRUE)
    constant_guesses_T <-sample(c('T'), size = number_of_trials, replace = TRUE)

    scores[constants_T] = sum(constant_guesses_T == coins);
    scores[constants_H] = sum(constant_guesses_H == coins);
    scores[gambler] = sum(gambler_guesses == coins);
    scores[random] = sum(random_guesses == coins);
    scores[gambler_with_offset_1] = sum(gambler_guesses_1 == coins);
    scores[gambler_with_offset_2] = sum(gambler_guesses_2 == coins);
    scores[gambler_with_offset_3] = sum(gambler_guesses_3 == coins);
    sorted <- scores[order(unlist(scores), decreasing = TRUE)];
    maximum_values <- filter_max(sorted);
    for(x in maximum_values) {
      counters[names(maximum_values[x])] = counters[names(maximum_values[x])] + 1;
    }
  }
  print(counters);
}


Programın son hali bu ama ilk denememde sadece kumarbazın en basit stratejisiyle (daha fazla tura gelmişse yazı, daha fazla yazı gelmişse tura demek) rastgele karar verme stratejisini karşılaştırmıştım. Onun sonuçları ilk bakışta bir sürpriz olmuştu.

1000 deney sonucunda
Kumarbaz = 85
Rastgele = 916

Toplam 1000 deney yaptım ve kazanma toplamları 1000’den fazla olduğuna göre bir deneyde ikisi de eşit skor tutturmuş olmalı. Kumarbaz yanılgısı durumu bildiğim bir olaydı ama durumun ciddiyetinin bu derece olduğunu beklemiyordum. Bu arada küçük bir not da ekleyeyim, bu kavramı biliyordum dedim ama bunun hesaplarını daha önce hiç yapmadım. Bu deneylerin amacı da hesap yapmak değil sadece bu konu hakkında basitçe fikir sahibi olmaktı.

Sonra deneye bir de kumarbazın her zaman yazı dediği stratejiyi ekleyeyim dedim. Beklentim bu stratejini en az rastgele karar verme kadar iyi olması yönündeydi.

1000 deney sonucunda
Kumarbaz = 0
Rastgele = 504
Hep yazı= 502

Üç stratejinin yarıştığı durumda rastgele karar stratejisi kendisine gerçek bir rakip bulmuş gibiydi. Bu ortamda kumarbazın basit stratejisinin artık bir şansı yok gibi görünüyordu.

Sonra programda da yaptığım gibi bütün stratejilerin aynı anda yarıştığı bir deneme yaptım. Bu da sonuçları:

1000 deney sonucunda
Kumarbaz türevleri = 0
Rastgele = 271
Hep yazı = 385
Hep tura = 351

Görüldüğü gibi hep yazı ve hep tura oyunu eşit derecede domine etmeye başladılar. İkisinin de tek başına yaklaşık yüzde elli doğru tahminde bulunacağını beklemek normal bir durum. Diğer stratejiler bundan daha iyi skorlar elde edemeyecektir. Peki kumarbazın stratejisine yardım edilebilir mi? Eğer kumarbazın verdiği kararları biraz daha rastgeleleştirirsek daha iyi sonuçlar almasını beklemek çok da yanlış olmaz. Eğer hep rastgele karar verirse rastgele stratejiye yaklaşacaktır. O zaman rastgele karar verdiği aralığı (toplamlar arasındaki fark) büyüttüm ve bir iyileşme gördüm ama beklediğim hızda bir iyileşme olmadı bu.

1000 deney sonucunda
Kumarbaz (toplamlar arasındaki fark 50 ise rastgele) = 99
Rastgele = 223
Hep yazı = 351
Hep tura = 339

Bu kadar basit bir problem üzerine bu kadar çok deney tasarlanabilmesi hoşuma gitti. Bence deneyler de teoriler kadar önemli bir alan, bence deneyin sonucu teorinin sonucundan daha etkileyici ve şaşırtıcı.

Karton deyip geçmemeli

Şu sıralar grup teorisi üzerine bir matematik kitabı okuyorum. Daha en başlardayım. İlk örnekler geometrik şekillerin simetrileri ile ilgili. Yani kısaca, bir geometrik şekli bozmadan onu nasıl dönüştürebiliriz ki aynı başlangıçtaki pozisyonu alsın? Evet biliyorum, anlatmayı beceremedim. Şöyle bir örnekle tekrar deneyeyim.

Mesela elimizde bir kare var. Bu kareyi merkezi etrafında doksan derece döndürürsek yine aynı pozisyondaki bir kare elde ederiz, çünkü köşeler yine köşelerin üzerine gelir. Evet, her bir köşe bir sonrakinin üzerine gelir ama bu bizi rahatsız etmesin. Bu harekete döndürme diyelim. Peki bundan başka hangi simetrilerimiz var?

Bir kare köşegenleri çevresinde de simetrik gözükür değil mi? Yani köşegen üzerindeki köşeleri sabit tutup diğer iki köşeyi yer değiştirirsek yine bütün köşeler üstüste gelir. Bu harekete de çevirmek diyelim, yani şekli o köşegen etrafında çevirmek. Buna benzer iki simetri eksenimiz daha var ama. Onlar da karşılıklı kenarların orta noktalarını birleştiren doğrular oluyor. Karemizi bu eksenler etrafında çevirdiğimizde yine aynı kareyi elde ediyoruz.

O zaman bu iki temel işlemi yukarıdaki gibi genelce kullanabiliriz artık. Döndürme şekli bir nokta etrafında belli bir derece döndürme olsun. Çevirme de bu şekli bir doğru etrafında köşeler yine üstüste gelecek şekilde döndürmek olsun. Evet, hala aynı kelimeleri değişik şeylerde kullandığımın farkındayım ama artık nokta etrafında döndürmeye kısaca döndürme, doğru etrafında döndürmeye de çevirme diyeceğim.

Dün kitapta birkaç tane soruyla karşılaştım:

Düzgün bir çokgende (yani her kenarı aynı uzunlukta olan) arka arkaya iki kere çevirmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Düzgün bir çokgende arka arkaya iki kere döndürmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Düzgün bir çokgende önce döndürme ve ardından çevirmenin ya da önce çevirme ve ardından döndürmenin neden bir çevirme olduğunu geometrik olarak açıklayınız.

Geometrik şeyleri kafamda canlandırmayı pek beceremem. Kağıt kalemle de aklıma hemen bir şey gelmedi. Sonra zaten canım sıkkın, bari evde bir yerlere tıkıştırdığım malzemeleri kullanayım dedim. Kartonlardan düzgün çokgenler kesmeye başladım. Sonra bu kestiğim şekillerin köşelerini fotoğraftaki gibi numaralandırmaya başladığımda birden soruların çözümü kucağıma düştü.

Eşkenar üçgen, kare, eşkenar beşgen ve eşkenar altıgen

Fotoğrafta da görüldüğü gibi kartonların A yüzünde köşeleri saat yönünün tersinde artacak şekilde işaretlerim. Kartonun diğer yüzüne B dedim ve aynı köşeleri aynı sayılarla işaretledim. Bu durumda B yüzünde köşelerin numaraları saat yönünde artmakta.

Şimdi herhangi bir kartonu alalım ve döndürme işlemine bakalım. Örneğin B yüzü yukarıda olan eşkenar üçgen şeklini alalım. Eşkenar üçgende her bir döndürme altmış derecedir. Bu şekli hangi yönde altmış derece döndürürsek döndürelim köşe numaraları saat yönünde artıyor olacak. Aynı özellik diğer şekillerde de korunur sadece döndürme açısı farklı olacak. Karede doksan derece, eşkenar beşgende yüzsekiz derece ve düzgün altıgende de yüzyirmi derece döndürmek gerekecek.

Bir eksen etrafında çevirme işleminde ise kartonların yüzleri değişeceğinden köşelerin dizilimi de değişecek, yani çevirmeden önce saat yönünde artıyorduysalar çevirdikten sonra saat yönünün tersinde artacaklar. Aynı şekilde çevirmeden önce köşe numaraları saat yönünün tersi yönünde artıyorduysalar çevirdikten sonra saat yönünde artacaklar.

Bu bilgiler eşliğinde kitaptakı sorulara bakıncakitaptaki soruları çok kolay çözebildim ve de nedenini de anladım.

Düzgün bir çokgende (yani her kenarı aynı uzunlukta olan) arka arkaya iki kere çevirmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Varsayalım çevirmeden önce A yüzü yukarıda olsun. Demek ki çevirmeden önce köşe numaraları saat yönünün tersi yönünde artmaktaymış. Bir kere çevirdikten sonra köşeler saat yönünde artıyor olacak ve bir daha çevirince yine A yüzü yukarı gelecek ve köşe numaraları eskisi gibi saat yönünün tersi yönünde artıyor olacak. Köşelerin hangi konuma geldiklerinin bir önemi yok, bildiğimiz şey bu son şekil her durumda köşeler birbirlerine göre aynı dizilimi koruyacaklar. Sadece köşelerin ilk konuma göre bulundukları yerler farklı olabilir ama dizilimleri aynı olacak ve bu dizilim de başlangıçtaki konumdan bir döndürmeyle elde edilebilir.

Düzgün bir çokgende arka arkaya iki kere döndürmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Döndürme işlemleri köşe numaralarının artış yönlerini değiştirmemekte. Şekil de ayrıca deforme olmadığından her köşenin komşu köşeleri de aynı kalır. Dolayısıyla bir köşe döndürme yönünde başlangıçtan ne kadar uzaklaşmışsa diğer bütün köşeler de aynı yönde o kadar uzaklaşmış olur. Bu da toplamda başka bir döndürmeye eşdeğerdir.

Düzgün bir çokgende önce döndürme ve ardından çevirmenin ya da önce çevirme ve ardından döndürmenin neden bir çevirme olduğunu geometrik olarak açıklayınız.

Bu işlemlerde sadece bir çevirme olduğuna göre köşelerin numaralarının artış yönü tersine dönecek. Bu da ancak çevirme işlemi ile sağlanabilir. Peki bu iki işlem sonucunda oluşan her dizilim için bir çevirme var mı? Yukarıda da gördüğümüz gibi döndürme ve çevirme işlemleri köşelerin birbirlerine göre konumlarını hiç değiştirmiyor, yani şekilde bir deformasyon olmuyor. Köşelerin birbirlerine göre konumlarında bir değişiklik olmuyorsa toplamda köşe sayısı kadar olası dizilim vardır. Düzgün çokgenlerde de köşe sayısı kadar çevirme için simetri ekseni vardır. Her eksen farklı bir dizilim yaratıyorsa sorunumuz çözülmüş olur. Örneğin 1 numaralı köşeyi alalım ve sırayla bu çevirmelerin bu köşeyi farklı köşelere gönderdiğini görelim. Elimde kartonlar varken bunu görmek benim için daha da kolay. Eğer seçilen bir köşeyi herhangi bir köşeye gönderebiliyorsam, sıralamalar da korunduğuna göre her dizilim için bir çevirmek bulabiliriz demektir.

Üçgenin açıortayları (Geogebra)

Bu animasyonda geogebrada bir ABC üçgeni tanımladım ve her köşedeki iç açıortayları çizdirdim. Bu açıortaylar bir D noktasında kesiştiler. Üçgenin köşelerini hareket ettirip yeni üçgenler oluşturduğumda da açılar ve açıortayla değişse de her seferinde üçü de aynı noktada kesişmeye devam etti. İki doğrunun bir noktada kesişmesi çok normal ama belli bir özellikteki üç doğrunun her zaman aynı noktada kesişmesi bence ilginç bir durum. Bu noktanın başka bir özelliği var mı acaba?

Animasyon

Thales (Geogebra)

Çocuklar Thales teoremini öğrenirken bana nasıl oluyor diye sormuşlardı. Ben de lisede öğrendiğim gibi paralel doğrular, üçgenler beklerken birden karşıma çember çıkarmışlardı. Meğer Thales teoremi dedikleri bir çember üzerinde çizilen bir üçgenin bir kenarı çemberin bir çapıysa o üçgen diküçgendir teoremiymiş. Tabii ki ben bununla aynı anlama gelen bir çemberinin üzerinde çemberin bir çapını gören açı dikaçıdır teoremi biliyordum ama bunu Thales adıyla hatırlamıyordum.

Bu sefer de geogebrada bu teoremin animasyonunu yapmaya çalıştım. Kaydırma bileşeniyle çember üzerindeki C noktası kaydırılabiliyor ve her pozisyonda C açısının değeri ölçülüyor. Bu açının her zaman 90 derece olması teoremin de söylediği şeyin gözlemi oluyor.

Açıortay (Geogebra)

Bu animasyonda açıortaylarla oynamaya karar verdim. Yani verilen bir EAF açısını iki eşit açıya bölen AD doğrusunu çizdirdim. Daha sonra bu açıortay üzerinde bir D noktası aldım ve bu noktadan açının kolları üzerine düşen dikey DF ve DE doğrularını çizdirdim. Ardından geogebra’ya DE ve DF doğru parçalarının uzunluğunu ölçtürdüm. Ardından da bu D noktasını bir kaydırma bileşeniyle hareket ettirdim. Her yeni D noktası için geogebra DE ve DF uzunluklarını ölçüyor ve bu uzunluklar hep birbirine eşit oluyor. Bu deneyin hedefi de bunu göstermekti.

Bunu geometrik olarak görmek de kolay. ADE ve ADF diküçgenleri birbirine eşit olduklarından bu diker doğru parçalarının da uzunlukları birbirine eşit olmalıdır.

Komşu bütünler açılar

Noel tatilinde Geogebra ile oynamaya devam ettim. Bir şeyi öğrenirken görsel ya da deneysel yaklaşım benim sıkça kullandığım bir yöntemdir. Bana uygun olması başkasına da uygun olacak demek değil ama. Bazı insanlar soyut kavramlarla çok rahat çalışırken de deneyler de çok başarısız olabiliyor. Bu yazıdaki animasyonda geometrideki çok temel bir konuyu görsel bir hale getirip bu görselliğin gerçekten işe yarayıp yaramadığına da bu deneyle bir bakmak istiyorum.

Bu basit animasyonda bütünler açılara bakacağım. Aslında geometrik bir konuyu görsel hale getirmek ne kadar gerekli ya da avantaj sağlar sorusu da sorulabilir öncelikle. Geometri zaten oldukça görsel bir alan değil mi? Elbette öyle ama geogebra ile çok kısa sürede çok fazla deney yapmak mümkün. Bu deneylerde belki dikkatimizi çekecek sonuçlar ya da davranışlar görebiliriz.

Animasyonda açı isimli kaydırma bileşenini kaydırdığımızda doğru C noktası etrafında o açı kadar döndürülüyor ve C noktası etrafında \(\alpha \) ve \(\beta \) açıları oluşuyor. Bu açıların büyüklükleri geogebra tarafından “ölçülüyor”. Aslında hesaplanıyor tabii ki ama bu animasyonda geogebranın rolü bu deneyde bizim iletki ile yapacağımız ölçüm işini yapmak olacak. Bu sayede deneyler hızlanacak.

Animasyona bir de \(\delta = \alpha + \beta \) hesaplamasini ekledim. Bu da bu deneyde aslında dikkatimizi çekmesi gereken özellik. Açı değerini değiştirdikçe bu toplamın değişmediğini görmemiz lazım. Bu özellik ayrıca bütünler açı kavramının da kendisi oluyor.

“Eğer birbirinin bütünleri olan iki açı komşu ise (yani köşeleri ve bir kolları ortak) ortak olmayan kolları bir doğrudur” (wikipedia)

Buraya kadar her şey normal gözüküyor ama ufak bir iki nokta daha var. Örneğin geogebra’nın bu açıları ölçmesine güvenebilir miyiz? Tabii ki yukarıda da dediğim gibi geogebra bu açıları ölçmüyor, hesaplıyor. Öğrenme aşamasındaki bir kişi için bu yeterince güvenilir olacak mı acaba? Peki aynı şekilde bu deneyleri kağıt, kalem ve iletkiyle yapsaydık bu sefer iletkiye güvenecek miydik? O da çok duyarlı ölçümler yapamıyor. Zaten çizdiğimiz doğrular da matematikteki doğru tanımına uyan nesneler değil.

Aslında bu soruyu soyut bir şekilde işlemek büyük ihtimalle çok daha basit bir öğrenme yöntemi ama yine de herkes aynı şekilde aynı kolaylıkla öğrenecek diye bir şart yok. Belki de bu durumda deneysel ve güven tabanlı öğrenmeyi yeğleyecek insanlar vardır. Geogebra bu tür insanlar için oldukça iyi bir araç.