Merkezi limit teoremi (MLT) der ki; bağımsız ve aynı dağılım gösteren rassal değişkenlerin toplamları yaklaşık olarak normal dağılım gösterir. Ne kadar çok değişken toplanırsa, normal dağılıma o kadar çok yaklaşılır. Yazıda örnek Python kodu ile konuşacağım, matematiksel tanım ve ispat için vikipedi makalesine bakabilirsiniz.

Alttaki kodda başta verilen dağılımlardan birini seçerek MLT'nin illüstrasyonunu görebilirsiniz. Seçilen dağılımdan bağımsız olarak toplamlar hep normal dağılıma yakınsamakta.

# -*- coding: utf-8 -*-
"""
Merkezi limit teoreminin illüstrasyonu

@author: İsmail Arı, http://ismailari.com
@date: 31.03.2011
"""

import scipy, scipy.stats
import numpy as np
import pylab

#===============================================================
# Alttaki dağılımlardan birini açıp gözlem yapabilirsiniz
#===============================================================
x = scipy.linspace(0,10,11)
#y = scipy.stats.binom.pmf(x,10,0.2) # binom
#y = scipy.stats.expon.pdf(x,scale=4) # üssel
#y = scipy.stats.gamma.pdf(x,2) # gamma
#y = np.ones(np.size(x)) # birörnek
y = scipy.random.random(np.size(x)) # rassal olasılık dağ. fonk.

#===============================================================
# Dağılım fonksiyonu olacağı için integrali 1 olmalı
#===============================================================
y = y / sum(y);

#===============================================================
# İlk figürde eldeki dağılımı çizelim
#===============================================================
N = 3 # Çizim sayısı, veya en fazla kaç değişkenin toplanacağı
ax = pylab.subplot(N+1,1,1)
pylab.plot(x,y)
# Alttakiler çizimin sade olması ile ilgili detaylar
ax.set_xticks([10])
ax.axis([0, 2**N * 10, 0, np.max(y)*1.1])
ax.set_yticks([round(np.max(y),2)])

#===============================================================
# Sırasıyla toplamları çizelim
# Örneğin 2. sırada iki rassal değişkenin toplamı çizilecek,
#  sonra üç tane diye devam edecek.
#===============================================================
for i in np.arange(N)+1:
    # Rassal iki değişkenlerin toplamlarının dağılımı, iki
    #  dağılımın evrişimine (konvolusyon) eşittir.
    y = np.convolve(y,y)
    y = y / sum(y);    

    x = np.linspace(2*np.min(x), 2*np.max(x), len(y))
    ax = pylab.subplot(N+1,1,i+1)
    pylab.plot(x,y)
    ax.axis([0, 2**N * 10, 0, np.max(y)*1.1])
    ax.set_xticks([2**i * 10])
    ax.set_yticks([round(np.max(y),3)])

pylab.show()

Örneğin birörnek (uniform) dağılım için rassal değişkenlerin toplamlarının dağılımları şöyle seyrediyor.

Toplamlara baktığımız için değişintiyi (varyans) 1 yapmadım, yani normalize etmedim, o sebeple aşağıya doğru aralık (tanım kümesi) genişliyor. Ortalamaya baksaydık normalize etmek gerekecekti, fakat sonuç yine normal dağılıma yakınsayacaktı. Eğer üssel dağılımı kullansaydık, sonuç şöyle olacaktı:

Dediğim gibi, dağılımdan farklı olarak sonuç hep normale yakınsıyor. Hatta ilk dağılım tamamen rastgele olsa bile:

MLT'nin pratikteki yansıması ise hataların modellenmesinde kendini gösteriyor. Hatanın tam olarak neden kaynaklandığını çoğunlukla bilemediğimiz için ve birçok farklı etkenin olabileceğini hesaba kattığımız için hataların normal dağılımda olduğunu varsayıyoruz. Somut bir örnek vermek gerekirse; Eskişehir'deki evlerin büyüklüklerine (metrekare) göre fiyatlarını tahmin etmeye çalıştığımızı düşünün ve ilk akla gelen yöntem olan en küçük kareler yöntemini kullandığımızı düşünelim. Bu yöntemi kullanıyorsak, zaten hatanın normal dağılımda olduğunu varsayıyoruz demektir, çünkü model bu varsayım üstüne kurulu. Varsayım da pek yanlış sayılmaz, çünkü hatayı (tahmin edemediğimiz kısmı) etkileyen başka bir sürü etken var. Örneğin, ev kaçıncı katta, hangi semtte, kaç odası var, ısınması nasıl, temiz mi, bahçesi var mı, vd. Bunca özellik fiyat üstünde etkili, yani hatanın içinde bunlardan gelen değerler mevcut. Bu toplamın da normal dağıldığını düşünmek MLT sayesinde matematiksel olarak destekleniyor.

Küçük bir not eklemek gerekirse, hata hakkında net bir bilgimiz olmadığı zaman bilinemezci kalmak, yani entropinin en yüksek olacağı durumu seçmek en akıllıca iş. Çünkü normal dağılım, ortalama ve varyans değerleri sonlu olan dağılımlar arasında en yüksek entropiye sahip olan dağılım.

MLT'nin kullanıldığı bir diğer güzel konu ise bağımsız bileşenler analizi (BBA). Bağımsız rassal değişkenlerin toplamının normal dağılıma yakınsayacağı bilgisini kullanarak eldeki veriyi birbirinden bağımsız bileşenlere ayırmaya çalışan BBA bulmaya çalıştığı bileşenlerin normal dağılımdan oldukça uzak kalmasını hedefliyor. BBA'yı sözel anlatım ile anlatmak zor olduğu için burada bırakmak en iyisi.