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ı.