0Pricing
Pandas & NumPy Academy · Ders

Ortalamaları Karşılaştırmak için t Testleri

scipy.stats ile tek örneklemli, bağımsız iki örneklemli ve eşleştirilmiş t testlerini uygulayın ve güven aralıklarını yorumlayın.

Ortalamaları Karşılaştırmak için t Testleri, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

T-Testi Nedir

t-testi, gruplar arasındaki mean farkının istatistiksel olarak anlamlı olup olmadığını veya büyük olasılıkla rastlantısal şanstan kaynaklanıp kaynaklanmadığını belirleyen bir hipotez testidir. Gözlenen farkı verilerdeki değişkenlikle karşılaştırarak bir t-istatistiği ve p-değeri üretir. p ≤ 0.05 ise (geleneksel eşik), mean değerlerinin eşit olduğu sıfır hipotezini reddederiz. Üç yaygın türü vardır: tek örneklemli, bağımsız iki örneklemli ve eşleştirilmiş t-testi; her biri farklı deney tasarımları için kullanılır.

Tek Örneklemli T-Testi

Tek örneklemli t-testi, bir örneklemin mean değerinin bilinen veya varsayılan bir kitle mean değerinden anlamlı ölçüde farklı olup olmadığını test eder. Örneğin: 'Ortalama teslimat süremiz, sektördeki 3 günlük standarttan anlamlı ölçüde farklı mı?' scipy.stats.ttest_1samp(data, popmean) kullanın. Sıfır hipotezi H₀: mean = popmean şeklindedir. Küçük bir p-değeri, H₀'ı reddetmenize ve örneklem mean değerinin hedeften farklı olduğu sonucuna varmanıza yol açar.

import numpy as np
from scipy import stats

np.random.seed(42)
# Delivery times in days (true mean is ~3.5, not 3)
delivery_times = np.random.normal(loc=3.5, scale=0.8, size=50)

# Test: is our mean significantly different from 3 days?
stat, p = stats.ttest_1samp(delivery_times, popmean=3.0)
print(f'Sample mean: {delivery_times.mean():.3f}')
print(f't-statistic: {stat:.3f}')
print(f'p-value: {p:.4f}')
print('Differs from 3?', 'Yes' if p < 0.05 else 'No')

Bağımsız İki Örneklemli T-Testi

Bağımsız iki örneklemli t-testi, iki bağımsız grubun mean değerlerini karşılaştırır. Örneğin: 'A/B testi varyantı, kontrol grubundan daha yüksek ortalama gelir sağlıyor mu?' scipy.stats.ttest_ind(group_a, group_b) kullanın. equal_var parametresi önemlidir: İki grubun varyansları farklı olabileceğinde equal_var=False (Welch t-testi) ayarlayın; bu, gerçek verilerin çoğu için güvenli varsayılandır.

import numpy as np
from scipy import stats

np.random.seed(0)
# A/B test revenue per session
control = np.random.normal(loc=25.0, scale=8.0, size=80)
variant = np.random.normal(loc=28.0, scale=9.0, size=80)

# Welch's t-test (does not assume equal variances)
stat, p = stats.ttest_ind(control, variant, equal_var=False)
print(f'Control mean: {control.mean():.2f}')
print(f'Variant mean: {variant.mean():.2f}')
print(f't-statistic: {stat:.3f}')
print(f'p-value: {p:.4f}')
print('Significant difference?', 'Yes' if p < 0.05 else 'No')

Tek Kuyruklu ve Çift Kuyruklu Testler

Varsayılan olarak t-testleri çift kuyrukludur: mean değerlerinin her iki yönde de farklı olup olmadığını (büyük VEYA küçük) test eder. Yönlü bir hipoteziniz varsa ('varyant geliri artırır'), alternative parametresiyle tek kuyruklu test kullanın: 'greater' veya 'less'. Tek kuyruklu test, belirli yönde daha yüksek güce sahiptir; ancak diğer yön hakkında kanıt sağlamaz. HARKing'den (Sonuçlar Bilindikten Sonra Hipotez Kurma) kaçınmak için yönü verileri incelemeden önce belirleyin.

import numpy as np
from scipy import stats

np.random.seed(1)
control = np.random.normal(25, 8, 100)
variant = np.random.normal(27, 8, 100)

# Two-tailed (default): does mean differ at all?
stat, p_two = stats.ttest_ind(control, variant, equal_var=False,
                              alternative='two-sided')
# One-tailed: is variant > control?
stat, p_one = stats.ttest_ind(control, variant, equal_var=False,
                              alternative='less')

print(f'Two-tailed p: {p_two:.4f}')
print(f'One-tailed p (variant greater): {p_one:.4f}')

Eşleştirilmiş T-Testi

Eşleştirilmiş t-testi, A grubundaki her gözlemin B grubunda doğal bir eşinin bulunduğu durumlarda kullanılır — örneğin aynı denekler üzerinde bir uygulama öncesinde ve sonrasında yapılan ölçümler veya iki farklı aydaki aynı mağazalar. Eşleştirme, denekler arasındaki değişkenliği kontrol ederek aynı veriler için testi bağımsız t-testinden daha güçlü hâle getirir. scipy.stats.ttest_rel(before, after) kullanın. Öğelerin sırası eşleşmelidir: before[i] ve after[i] aynı denekten gelmelidir.

import numpy as np
from scipy import stats

np.random.seed(5)
# Blood pressure before and after medication (paired)
before = np.random.normal(130, 10, 30)
after = before - np.random.normal(5, 3, 30)  # Treatment reduces BP by ~5

stat, p = stats.ttest_rel(before, after)
print(f'Mean before: {before.mean():.2f}')
print(f'Mean after: {after.mean():.2f}')
print(f't-statistic: {stat:.3f}')
print(f'p-value: {p:.4f}')
print('Treatment effective?', 'Yes' if p < 0.05 else 'No')

T-İstatistiğini Yorumlama

t-istatistiği, gözlenen farkın sıfırdan kaç standart hata uzakta olduğunu ölçer. 2 değerindeki bir t-istatistiği, gözlenen farkın sıfır hipotezi altında beklenenden 2 standart hata daha yüksek olduğu anlamına gelir. Büyük bir örneklemle α=0.05 düzeyindeki çift kuyruklu bir test için kritik değer yaklaşık ±1.96'dır; bu nedenle |t| > 1.96, p < 0.05 sonucunu verir. p-değeri, t-istatistiğini bir olasılığa dönüştürerek t-dağılımı tablolarına başvurmadan yorumlamayı kolaylaştırır.

import numpy as np
from scipy import stats

# Demonstrate relationship between t-statistic and p-value
for t_val in [1.0, 1.96, 2.5, 3.0, 4.0]:
    # degrees of freedom = large sample -> t ~ normal
    p = 2 * stats.t.sf(abs(t_val), df=100)  # two-tailed
    print(f't = {t_val:4.2f} -> p = {p:.4f} '
          f'({'significant' if p < 0.05 else 'not significant'})')

Mean Farkı İçin Güven Aralıkları

Tek başına bir p-değeri, etkinin büyüklüğünü göstermez. Mean farkı için her zaman bir güven aralığı hesaplayın. Sıfırı içeren %95 GA, p > 0.05 ile tutarlıdır (anlamlı değildir); sıfırı içermeyen bir aralık, farkın anlamlı olduğu anlamına gelir. GA ayrıca etki büyüklüğünün pratik açıdan anlamlı olup olmadığını da gösterir — gelirde 0,01 dolarlık istatistiksel olarak anlamlı bir fark önemsiz olabilirken, p=0.06 olan 50 dolarlık bir fark işletme için yine de önemli olabilir.

import numpy as np
from scipy import stats

np.random.seed(0)
control = np.random.normal(25, 8, 80)
variant = np.random.normal(28, 8, 80)

diff = variant.mean() - control.mean()
se = np.sqrt(control.var()/len(control) + variant.var()/len(variant))
df = len(control) + len(variant) - 2
t_crit = stats.t.ppf(0.975, df=df)
ci_low = diff - t_crit * se
ci_high = diff + t_crit * se

print(f'Mean difference: {diff:.2f}')
print(f'95% CI: [{ci_low:.2f}, {ci_high:.2f}]')
print('CI excludes zero:', ci_low > 0 or ci_high < 0)

Etki Büyüklüğü: Cohen'in d'si

İstatistiksel anlamlılık örneklem büyüklüğüne bağlıdır — örneklem yeterince büyük olduğunda, önemsiz farklar bile anlamlı hale gelir. Cohen's d, pratik anlamlılığı (etki büyüklüğünü) ölçer: ortalamalar arasındaki farkın birleştirilmiş standart sapmaya bölünmesiyle hesaplanır. Genel ölçütler şöyledir: d < 0.2 ihmal edilebilir, 0.2–0.5 küçük, 0.5–0.8 orta, > 0.8 büyüktür. Etki büyüklüğünü her zaman p-değerleriyle birlikte raporlayın — d = 0.05 olan anlamlı bir p-değeri, farkın gerçek olduğunu ancak pratikte muhtemelen anlamlı olmadığını gösterir.

import numpy as np
from scipy import stats

np.random.seed(0)
g1 = np.random.normal(25, 8, 200)
g2 = np.random.normal(28, 8, 200)

stat, p = stats.ttest_ind(g1, g2)

# Cohen's d
pooled_std = np.sqrt((g1.var() + g2.var()) / 2)
cohens_d = (g2.mean() - g1.mean()) / pooled_std

print(f'p-value: {p:.4f}')
print(f'Cohen\'s d: {cohens_d:.3f}')

if cohens_d < 0.2: print('Effect: negligible')
elif cohens_d < 0.5: print('Effect: small')
elif cohens_d < 0.8: print('Effect: medium')
else: print('Effect: large')

T-Testinin Varsayımları

Bağımsız t-testi şu varsayımlara dayanır: (1) Bağımsızlık — her gruptaki gözlemler birbirinden bağımsızdır; (2) Normallik — her gruptaki veriler yaklaşık olarak normal dağılır (CLT sayesinde n > 30 için dayanıklıdır); (3) Student t-testi için (equal_var=True), varyansların eşitliği. Welch t-testi (equal_var=False), 3. varsayımı gevşetir ve tercih edilir. Normallik küçük örneklemlerde (< 30) ciddi biçimde ihlal edildiğinde bunun yerine Mann-Whitney U testi kullanın.

import numpy as np
from scipy import stats

np.random.seed(0)
g1 = np.random.normal(10, 2, 30)
g2 = np.random.normal(11, 5, 30)  # Very different variance!

# Levene test for equal variances
stat_l, p_l = stats.levene(g1, g2)
print(f'Levene test p: {p_l:.4f}')
if p_l < 0.05:
    print('Unequal variances -> use Welch\'s (equal_var=False)')
    stat, p = stats.ttest_ind(g1, g2, equal_var=False)
else:
    print('Equal variances OK -> Student\'s t-test')
    stat, p = stats.ttest_ind(g1, g2, equal_var=True)
print(f'Result: t={stat:.3f}, p={p:.4f}')

Pandas Series Üzerinde T-Testleri

Uygulamada test etmek istediğiniz veriler bir Pandas DataFrame sütununda bulunur. Bir Pandas Series nesnesini doğrudan scipy.stats işlevlerine aktarabilirsiniz — bu işlevler Series nesneleriyle de NumPy dizileriyle olduğu gibi sorunsuz çalışır. Yaygın iş akışı şöyledir: her grubun Series nesnesini elde etmek için DataFrame'i filtreleyin, t-testini çalıştırın ve sonuçları bir özet DataFrame'inde saklayın. Bu yaklaşım, bir döngü içinde çok sayıda sütun veya grup çiftini test etmeye kolayca uyarlanabilir.

import pandas as pd
import numpy as np
from scipy import stats

np.random.seed(0)
df = pd.DataFrame({
    'group': ['A']*60 + ['B']*60,
    'revenue': np.concatenate([
        np.random.normal(100, 20, 60),
        np.random.normal(110, 22, 60)
    ])
})

grp_a = df.loc[df['group'] == 'A', 'revenue']
grp_b = df.loc[df['group'] == 'B', 'revenue']

stat, p = stats.ttest_ind(grp_a, grp_b, equal_var=False)
print(f'A mean: {grp_a.mean():.2f}, B mean: {grp_b.mean():.2f}')
print(f'p-value: {p:.4f}')

Çoklu Karşılaştırma Sorunu

Aynı anda çok sayıda t-testi çalıştırmak, yanlış pozitif sonuç olasılığını artırır. 20 t-testini α=0.05 düzeyinde çalıştırırsanız, yalnızca rastlantı nedeniyle 1 yanlış pozitif sonuç beklenir. Buna çoklu karşılaştırma sorunu denir. Bonferroni düzeltmesini uygulayın: α değerini test sayısına bölün (p_threshold = 0.05 / n_tests). Daha az muhafazakâr olup daha yüksek güç elde etmek için statsmodels içinde bulunan Benjamini-Hochberg Yanlış Keşif Oranı (FDR) düzeltmesini kullanın. Çok sayıda metriğin bulunduğu A/B testlerinde çoklu karşılaştırmalar için her zaman düzeltme yapın.

import numpy as np
from scipy import stats

np.random.seed(0)
n_tests = 10
results = []
for i in range(n_tests):
    g1 = np.random.normal(0, 1, 50)
    g2 = np.random.normal(0.1, 1, 50)  # Tiny true effect
    _, p = stats.ttest_ind(g1, g2)
    results.append(p)

print('p-values:', [round(p, 3) for p in results])
bonferroni_thresh = 0.05 / n_tests
print(f'Bonferroni threshold: {bonferroni_thresh}')
print('Significant after Bonferroni:', sum(p < bonferroni_thresh for p in results))

Hızlı Kontrol

Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: ttest_1samp, bir örneklem ortalamasını referans bir değerle karşılaştırır; ttest_ind (equal_var=False ile Welch testi), iki bağımsız grubu karşılaştırır; ttest_rel ise eşleştirilmiş ölçümleri ele alır. İstatistiksel anlamlılığı pratik anlamlılıktan ayırt etmek için Cohen's d değerini her zaman p-değeriyle birlikte raporlayın. Sırada, kategorik değişkenler arasındaki ilişkileri ki-kare testiyle test edeceğiz.

Sıkça Sorulan Sorular

“Ortalamaları Karşılaştırmak için t Testleri” dersi ücretsiz mi?

Evet — “Ortalamaları Karşılaştırmak için t Testleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

“Ortalamaları Karşılaştırmak için t Testleri” dersinde ne öğreneceğim?

scipy.stats ile tek örneklemli, bağımsız iki örneklemli ve eşleştirilmiş t testlerini uygulayın ve güven aralıklarını yorumlayın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Ortalamaları Karşılaştırmak için t Testleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Betimsel İstatistikler ve Normallik Testi
  2. Ortalamaları Karşılaştırmak için t Testleri
  3. Bağımsızlık için Ki-Kare Testi
  4. ANOVA ve Sonraki Testler
← Pandas & NumPy Academy Sayfasına Dön