Ana içeriğe geç

Orta12 dk

Ki-kare testi

Önkoşul:Tip 1 / Tip 2 hata ve istatistiksel güç

Kanca

Üç farklı e-posta konu başlığı gönderdin: A %24.0, B %29.0, C %19.0 açılma oranı aldı. z-testi veya t-testi burada işe yaramaz — çünkü ortalama değil, kategoriler arasındaki ilişkiyi test ediyoruz. Başlık ile açma davranışı gerçekten ilişkili mi, yoksa bu farklar şans mı?

Sezgi

Önceki testler (z, t) sayısal ortalamaları karşılaştırıyordu. Ama “başlık A/B/C” ve “açtı/açmadı” gibi kategorik değişkenlerde ortalama diye bir şey yok — bunun yerine her kategori kombinasyonunda kaç kişi olduğunu (frekans) sayarız.

Ki-kare testi, gözlenen frekansların, “hiçbir ilişki yok” (H0) varsayımı altında beklenen frekanslardan ne kadar uzaklaştığını ölçer. H0 doğruysa (başlık açma oranını etkilemiyorsa), her başlığın açılma oranı aynı olurdu — genel ortalamaya eşit. Gözlenen sayılar bu “beklenen” sayılardan ne kadar uzaksa, ki-kare o kadar büyür.

Mekanizma

Verilerle başlayalım:

Üç başlığın açılma oranları

# Üç farklı e-posta konu başlığı gönderildi. Her biri kaç kişiye gitti, kaçı açtı?
# Satırlar: konu başlığı (A, B, C). Sütunlar: [açtı, açmadı].
gozlenen = np.array([
    [120, 380],   # Başlık A: 500 kişiye gitti, 120'si açtı
    [145, 355],   # Başlık B: 500 kişiye gitti, 145'i açtı
    [95, 405],    # Başlık C: 500 kişiye gitti, 95'i açtı
])

etiketler = ["Başlık A", "Başlık B", "Başlık C"]
for etiket, satir in zip(etiketler, gozlenen):
    toplam = satir.sum()
    print(f"{etiket}: {satir[0]}/{toplam} açtı (%{satir[0] / toplam * 100:.1f})")
Başlık A: 120/500 açtı (%24.0)
Başlık B: 145/500 açtı (%29.0)
Başlık C: 95/500 açtı (%19.0)

H0: başlık ile açma davranışı arasında ilişki yok. H1: ilişki var.

Ki-kare testi

# H0: konu başlığı ile açma davranışı arasında ilişki yok (bağımsızlar).
# H1: aralarında ilişki var — başlık, açma oranını etkiliyor.
ki_kare, p_degeri, serbestlik_derecesi, beklenen = stats.chi2_contingency(gozlenen)

print(f"\nKi-kare istatistiği: {ki_kare:.2f}")
print(f"Serbestlik derecesi: {serbestlik_derecesi}")
print(f"p-değeri: {p_degeri:.4f}")
print(f"α=0.05'e göre karar: {'H0 reddedilir — başlık açma oranını etkiliyor' if p_degeri < 0.05 else 'H0 reddedilemez'}")

Ki-kare istatistiği: 13.71
Serbestlik derecesi: 2
p-değeri: 0.0011
α=0.05'e göre karar: H0 reddedilir — başlık açma oranını etkiliyor

p=0.0011, α=0.05’ten çok küçük — H0 reddedilir. Başlık gerçekten açma oranını etkiliyor. Peki bu sayı nereden geliyor? “Beklenen” sayılara bakalım:

Gözlenen vs beklenen

# "Beklenen" sayılar: H0 doğruysa (hiçbir ilişki yoksa) her hücrede olması gereken sayı.
print("\nGözlenen vs beklenen (H0 altında):")
for etiket, g_satir, b_satir in zip(etiketler, gozlenen, beklenen):
    print(f"{etiket}: gözlenen açan={g_satir[0]:>3}   beklenen açan={b_satir[0]:.1f}")

print("\nKi-kare istatistiği, gözlenen ve beklenen arasındaki farkların karesini toplar —")
print("fark ne kadar büyükse, ki-kare o kadar büyür, H0'dan o kadar uzaklaşırız.")

Gözlenen vs beklenen (H0 altında):
Başlık A: gözlenen açan=120   beklenen açan=120.0
Başlık B: gözlenen açan=145   beklenen açan=120.0
Başlık C: gözlenen açan= 95   beklenen açan=120.0

Ki-kare istatistiği, gözlenen ve beklenen arasındaki farkların karesini toplar —
fark ne kadar büyükse, ki-kare o kadar büyür, H0'dan o kadar uzaklaşırız.

H0 doğru olsaydı (başlığın hiçbir etkisi olmasaydı), her başlığın açılma sayısı genel ortalama olan 120 civarında olurdu — üç başlık da toplamda 1500 kişiye gitti, 360 kişi açtı, ortalama oran %24, yani her başlıkta beklenen 120. Ama B’de 145 (25 fazla), C’de 95 (25 az) gözlendi — bu sapmalar toplanıp ki-kare istatistiğini oluşturuyor.

Çoğu kişi ki-kare testinin “hangi başlığın en iyi olduğunu” söylediğini sanır. Değil, çünkü ki-kare sadece “aralarında bir ilişki var mı yok mu” sorusuna cevap verir — hangi başlığın diğerinden anlamlı şekilde farklı olduğunu bulmak için ayrıca ikili karşılaştırmalar (örn. B’ye karşı C için ayrı bir iki-oranlı z-testi) gerekir.

Matematik

Ki-kare istatistiğinin formülü
χ2=(OiEi)2Ei\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i}Ei=satır toplamı×su¨tun toplamıgenel toplamE_i = \frac{\text{satır toplamı} \times \text{sütun toplamı}}{\text{genel toplam}}
SembolAnlamı
OiO_iGözlenen (observed) frekans — her hücrede gerçekte sayılan kişi sayısı
EiE_iBeklenen (expected) frekans — H0 doğruysa (bağımsızlık varsa) o hücrede olması gereken sayı
χ2\chi^2Tüm hücrelerdeki (gözlenen−beklenen)² / beklenen değerlerinin toplamı

Her hücre için fark karesi alınıp beklenen değere bölünür — bu, büyük beklenen sayılarda aynı mutlak farkın orantılı olarak daha az “şaşırtıcı” sayılmasını sağlar. Serbestlik derecesi (satır1)×(su¨tun1)(satır-1)\times(sütun-1) ile hesaplanır; bizim örneğimizde (31)×(21)=2(3-1)\times(2-1)=2.

Kod

Üç başlık için gözlenen açılma sayıları (turuncu) ile H0 altında beklenen açılma sayıları (gri) yan yana çubuklarla karşılaştırılıyor.
B başlığı beklenenden fazla, C başlığı beklenenden az açılmış — bu sapmalar ki-kare istatistiğini oluşturuyor.

Nerede işe yarar

Ki-kare testi, kategorik veride ilişki aramanın standart aracıdır:

  • Pazarlama ve ürün testleri. Birden fazla varyantın (A/B/C testi, sadece iki değil) kategorik bir sonucu (tıkladı/tıklamadı) etkileyip etkilemediği.
  • Anket analizi. “Cinsiyet ile ürün tercihi arasında ilişki var mı?” gibi iki kategorik değişken arasındaki bağımsızlık testleri.
  • Kalite kontrol. Farklı üretim hatlarında hata oranlarının birbirinden farklı olup olmadığı.

Bu 3 hatayı yaparsın:

  1. Beklenen hücre sayısı çok küçükken (genelde < 5 kuralı) ki-kare testini uygulamak — sonuç güvenilmez olur, bu durumda Fisher’ın kesin testi tercih edilir.
  2. Ki-kareyi “hangi kategori daha iyi” sorusuna doğrudan cevap veriyor sanmak — sadece “genel bir ilişki var mı” sorusuna cevap verir.
  3. Aynı veriyle sürekli yeni kategori kombinasyonları deneyip “anlamlı” bir sonuç arayana kadar test tekrarlamak (çoklu karşılaştırma sorunu).

Kendini test et

1. Ki-kare testi hangi tür veriler için kullanılır?
  1. Sadece sürekli sayısal veri
  2. Kategorik veri (frekanslar, sayımlar) (doğru cevap)
  3. Sadece iki grup karşılaştırması
  4. Sadece Normal dağılan veri

Neden: Ki-kare testi, kategorilere ayrılmış verinin frekanslarını karşılaştırır — z ve t testlerinin aksine ortalama değil, sayım (count) verisiyle çalışır.

2. "Beklenen frekans" ne anlama gelir?
  1. Gerçekte gözlenen sayı
  2. H0 (ilişki yok) doğruysa, o hücrede olması matematiksel olarak beklenen sayı (doğru cevap)
  3. Araştırmacının tahmini
  4. Her zaman gözlenenle aynı sayıdır

Neden: Beklenen frekans, satır ve sütun toplamlarından H0 (bağımsızlık) varsayımı altında hesaplanan teorik bir sayıdır — gözlenen ile karşılaştırılarak ki-kare istatistiği oluşturulur.

3. Ki-kare testi p=0.0011 ile "H0 reddedilir" sonucunu verdi. Bu ne anlama gelir?
  1. B başlığı kesinlikle en iyisidir
  2. Başlık ile açma davranışı arasında istatistiksel olarak anlamlı bir ilişki var, ama hangi başlığın nasıl farklı olduğunu tek başına söylemez (doğru cevap)
  3. Test geçersizdir
  4. Tüm başlıklar aynı performansı gösteriyor

Neden: Ki-kare sadece genel bir ilişkinin varlığını test eder; hangi kategorinin diğerlerinden nasıl farklı olduğunu bulmak için ek analiz (ikili karşılaştırmalar) gerekir.

Özet

Özet

  • Ki-kare testi, kategorik değişkenler arasında bir ilişki olup olmadığını test eder.
  • Gözlenen ve beklenen (H0 altında hesaplanan) frekanslar arasındaki fark, ki-kare istatistiğini oluşturur.
  • Fark ne kadar büyükse (ve beklenen sayıya göre orantılı olarak ne kadar önemliyse), ki-kare o kadar büyür.
  • Ki-kare sadece "ilişki var mı" sorusuna cevap verir — hangi kategorinin nasıl farklı olduğunu göstermez.
  • Küçük beklenen frekanslarda (genelde <5) ki-kare güvenilmez olur, alternatif testler gerekir.
Sonraki adım: ANOVA →