Open In Colab

Bayes' Teoremi

Giriş

Bayes teoremi, bilinmeyen olasılıkları tümdengelimsel olarak ölçmenizi sağlayan olasılık yasasıdır. Bayes Teoremi, koşullu olasılık üzerine kuruludur.

Thomas Bayes

Bayes teoremi adını 1700'lü yıllarda doğmuş olan İngiliz olasılıkçı Thomas Bayes'ten almaktadır. Bayes'in ailesi İngiltere'nin önemli Presbiteryen ailelerinden biriydi. 1719 yılında değişim kilisesine mensup olanların gidebildiği, Cambridge ve Oxford o dönemde Presbiteryenlere açık olmadığından, Edinburgh Üniversitesi'nde presbiteryen vaizliği eğitimi almaya başlamıştır. Edinburgh Üniversitesi'nde okumuştur. Hayatta iken yazdığı notlar ölümünden sonra Richard Price tarafından derlenerek yayınlanmıştır.

Amaç

Bu makalenin içerdikleri:

  • Bayes teoremini koşullu olasılıklarla ilişkili olarak tanımı
  • Bayes teoremini uygulamalı örnekleri

Bayes' Formülü

$P(A|B) = \dfrac{P(B|A)P(A)}{P(B)}$

Bayes teoremi oldukça sezgiseldir ve her iki olayın da gerçekleşme olasılığı açısından A'ya bağlı B'nin koşullu olasılığı ayrıştırılarak B'nin doğru olma olasılığına bölünür. Bayes teoremi, bu doğal fikri bir adım ileriye taşıyarak, her iki olayın koşulun kendisiyle çarpımının koşullu bir olasılık olarak doğru olma olasılığını ifade eder.

Özetlemek gerekirse:

Bayes Teoremi, koşullu olasılıktan gelir.

$P(A|B) = \dfrac{P(A \cap B)}{P(B)}$

$P(A \cap B)$ ' yi

$P(B|A)P(A)$,

olarak yazarsak formülümüz şuna dönüşür;

$P(A|B) = \dfrac{P(B|A)P(A)}{P(B)}$

Basit bir örnek

İki tane akvaryum olduğunu varsayalım. Küçük akvaryumda, 10 tane palyaço balığı sahip olsun. Büyük akvaryumda ise 200 japon balığı ve 35 palyaço balığı olsun. Verilen bilgiler dahilinde seçilen bir palyaço balığının küçük akvaryumdan seçilmesi olasılığı nedir?

Aslında büyük akvaryum hem kapasite olarak daha hem de balık sayısı olarak küçük akvaryumdan fazla olduğu için balığın büyük olandan seçilmiş olma olasılığı daha fazladır.

Bayes teoremi kullanıldığında, bir balığın küçük akvaryumdan gelen bir balık olmas olasılığını,

$P(\text{kucuk_akvaryum | palyaco_baligi}) = \dfrac{P(\text{palyaco_baligi | kucuk_akvaryum})P(\text{kucuk_akvaryum})}{P(\text{palyaco_baligi})}$

$P(\text{palyaco_baligi | kucuk_akvaryum}) = 1$
$P(\text{kucuk_akvaryum}) = \dfrac{\text{kucuk akvaryumdaki balik sayisi}}{\text{butun baliklarin sayisi}} = \dfrac{10}{245}$
$P(\text{palyaco_baligi}) = \dfrac{45}{245}$

Bayes Teoremi uygulandığı zaman:

$P(\text{kucuk_akvaryum | palyaco_baligi}) = \dfrac{1 \cdot \dfrac{10}{245}}{\dfrac{45}{245}}$

$ P(\text{kucuk_akvaryum | palyaco_baligi}) = \dfrac{10}{45}$

Bu örnek, tüm temel bilgilere sahip olduğunuzdan Bayes teoremi uygulanmadan da çözülebilir. Küçük tanktaki palyaço balıklarının sayısına karşı genel olarak palyaço balıklarının sayısına bakmak yine aynı sonuca götürecektir:

$\dfrac{10}{45}$

Başka bir örnek: NLP Örneği

Bayes teoremi spam mesajların sınıflandırılmasında doğal bir metod olarak kullanılabilir. Mesela "teklif" kelimesini ele alalım örneğin: (Size özel teklifimiz, Size bir teklifimiz var, Bu teklifi kaçırmayın!). Bu şekilde ulaşmış mesajların %73'ü spam etiketli olsun. %10 'u ise almak istediğimiz türden "teklif" kelimesini içeren mailler olsun. Eğer aldığımız tüm maillerin %20'si spam ise, yeni gelen bir mailin "teklif" kelimesini içerdiğinde spam olma olasılığı nedir?

$P(\text{Spam | Teklif}) = \dfrac{P(\text{Teklif | Spam})P(\text{Spam})}{P(\text{Teklif})}$

$P(\text{Spam | Teklif}) = \dfrac{0.73 \cdot 0.20}{P(\text{Teklif})}$
$P(\text{Teklif}) = P(\text{Spam})\cdot P(\text{Teklif | Spam}) + P(\text{Spam')} \cdot P(\text{Teklif | Spam'})$
$P(\text{Teklif}) = 0.20 \cdot 0.73 + 0.8 \cdot 0.10$
$P(\text{Teklif}) = 0.146 + 0.08$
$P(\text{Teklif}) = 0.226$

Son olarak bulduğumuz değerleri yerine yazarsak;

$P(\text{Spam | Teklif}) = \dfrac{0.73 \cdot 0.20}{0.226}$
$P(\text{Spam | Teklif}) = 0.6460$

Görüldüğü gibi "Teklif" kelimesinin geçtiği bir mailin spam olma olasılığı %64.6 çıkmış olur. Yukarda problemin aksine bu problemin çözümü için Bayes teoremini kullanmak işimizi kolaylaştırmıştır.

Eğer bu problem için Bayes Teoreminin kodunu yazacak olsaydık:

Öncelikle verilen olasılıksal değerlerin ilk değer atamalarını yapacak olursak:

In [0]:
import math
Pteklif_spam = 0.73
Pspam = 0.2
Pteklif_notspam = 0.1
In [0]:
def CalculateBayes(P1,P2,P3):
    return (P1 * P2) / ((P1 * P2) + ((1-P2)* P3))
In [4]:
print(CalculateBayes(Pteklif_spam,Pspam,Pteklif_notspam))
0.6460176991150441