İSTATİSTİK CHEATSHEET

3-4 saatte tüm istatistiği tekrar etmek için kapsamlı rehber

Shapiro-WilkLevene T-TestZ-Score ANOVAKi-Kare A/B TestRegresyon BayesianGüç Analizi

📑 İçindekiler

📐 1. Temel Kavramlar

Merkezi Eğilim Ölçüleri

ÖlçüFormülNe Zaman?
Ortalamax̄ = Σxᵢ / nSimetrik dağılımlarda
MedyanSıralı verinin ortasıÇarpık dağılım, aykırı değer
ModEn sık tekrar edenKategorik veri

Yayılım ve Şekil Ölçüleri

Varyans (örneklem)s² = Σ(xᵢ - x̄)² / (n - 1)
Standart Sapmas = √s²
ÖlçüDeğerYorum
Çarpıklık= 0Simetrik  |  >0 Sağa  |  <0 Sola
Basıklık= 3Normal  |  >3 Sivri  |  <3 Basık
Pythonimport numpy as np
from scipy import stats

veri = [23, 45, 12, 67, 34, 89, 56, 78, 90, 43]
print(f"Ortalama:  {np.mean(veri):.2f}")
print(f"Medyan:    {np.median(veri):.2f}")
print(f"Std Sapma: {np.std(veri, ddof=1):.2f}")
print(f"Çarpıklık: {stats.skew(veri):.4f}")
print(f"Basıklık:  {stats.kurtosis(veri):.4f}")

🔔 2. Olasılık Dağılımları

Normal Dağılım (Gaussian)

Merkezi Limit Teoremi: n≥30 olduğunda örneklem ortalamaları normal dağılır.

68-95-99.7 Kuralı%68 → μ ± 1σ    %95 → μ ± 2σ    %99.7 → μ ± 3σ

Binomial Dağılım

n bağımsız deneme, her birinde başarı olasılığı p

PMFP(X = k) = C(n,k) · p^k · (1-p)^(n-k)

Poisson Dağılım

Birim zamanda/alanda nadir olay sayma (λ = ortalama olay sayısı)

PMFP(X = k) = (λ^k · e^(-λ)) / k!
Pythonfrom scipy.stats import norm, binom, poisson

# Normal: P(Z < 1.96)
print(f"P(Z < 1.96) = {norm.cdf(1.96):.4f}")

# Binomial: 10 atışta 6 başarı (p=0.5)
print(f"P(X=6) = {binom.pmf(6, 10, 0.5):.4f}")

# Poisson: λ=3, P(X=5)
print(f"P(X=5) = {poisson.pmf(5, 3):.4f}")

📊 3. Z-Skoru

Bir değerin ortalamadan kaç standart sapma uzakta olduğunu gösterir.

Tek Değerz = (x - μ) / σ
Örneklem Ortalamasız = (x̄ - μ₀) / (σ / √n)
z değeriTek Taraflı PÇift Taraflı P
1.6450.0500.100
1.9600.0250.050
2.5760.0050.010
Pythonfrom scipy.stats import norm

x, mu, sigma = 85, 70, 10
z = (x - mu) / sigma

print(f"z = {z:.2f}")
print(f"P(Z < {z})  = {norm.cdf(z):.4f}")           # sol kuyruk
print(f"P(Z > {z})  = {1 - norm.cdf(z):.4f}")       # sağ kuyruk
print(f"Çift taraflı = {2*(1 - norm.cdf(abs(z))):.4f}")

# Olasılıktan z bul
z_kritik = norm.ppf(0.975)  # α=0.05 çift taraflı
print(f"Kritik z (α=0.05) = {z_kritik:.4f}")

🎯 4. Güven Aralıkları

σ biliniyor veya n ≥ 30GA = x̄ ± z* · (σ / √n)
σ bilinmiyor ve n < 30GA = x̄ ± t* · (s / √n)
Güven Düzeyiz* değeri
90%1.645
95%1.960
99%2.576
Pythonimport numpy as np
from scipy import stats

veri = np.random.normal(100, 15, size=50)
se = stats.sem(veri)
ci = stats.t.interval(0.95, df=len(veri)-1, loc=np.mean(veri), scale=se)
print(f"Ortalama: {np.mean(veri):.2f}")
print(f"%95 GA: ({ci[0]:.2f}, {ci[1]:.2f})")
Yorum: "%95 güven aralığı" bu yöntemi 100 kez uygulasak 95 tanesinde gerçek parametre aralık içinde olur demektir.

⚖️ 5. Hipotez Testi Temelleri

Adımlar

  1. H₀: Fark yok / etki yok
  2. H₁: Fark var / etki var
  3. α belirle: Genellikle 0.05
  4. Test istatistiği hesapla (z, t, χ², F...)
  5. p-value bul
  6. Karar: p < α → H₀ red  |  p ≥ α → H₀ reddedilemez

Hata Tipleri

H₀ DoğruH₀ Yanlış
H₀ Reddet❌ Tip I (α)✅ Doğru (Güç=1-β)
H₀ Reddetme✅ Doğru❌ Tip II (β)
Test YönüH₁Ne Zaman?
Çift taraflıμ ≠ μ₀Farkın yönü önemsiz
Sağ taraflıμ > μ₀Artış bekleniyor
Sol taraflıμ < μ₀Azalış bekleniyor

📈 6. Normallik Testleri

Shapiro-Wilk Testi

En güvenilir normallik testi (n < 5000).
H₀: Veri normal  |  H₁: Normal değil  |  p > 0.05 → Normal

Pythonfrom scipy.stats import shapiro, normaltest
import numpy as np

normal_veri = np.random.normal(50, 10, 100)
carpik_veri = np.random.exponential(5, 100)

stat, p = shapiro(normal_veri)
print(f"Shapiro → W={stat:.4f}, p={p:.4f}")
print("Normal ✅" if p > 0.05 else "Normal değil ❌")

# D'Agostino K²
stat2, p2 = normaltest(normal_veri)
print(f"D'Agostino → K²={stat2:.4f}, p={p2:.4f}")
Pratik: n > 30 ise CLT gereği parametrik testler çoğunlukla kullanılabilir.

⚖️ 7. Varyans Homojenliği — Levene

Grupların varyanslarının eşit olup olmadığını test eder. T-testi ve ANOVA ön koşuludur.

H₀: σ₁² = σ₂²  |  p > 0.05 → Homojen

TestAvantajDezavantaj
LeveneNormallik varsaymazBiraz daha az güçlü
BartlettNormal dağılımda güçlüNormallik ihlallerine hassas
Pythonfrom scipy.stats import levene
import numpy as np

grup_a = np.random.normal(50, 10, 50)  # std=10
grup_c = np.random.normal(48, 25, 50)  # std=25

stat, p = levene(grup_a, grup_c)
print(f"Levene W={stat:.4f}, p={p:.4f}")
print("Homojen ✅" if p > 0.05 else "Heterojen ❌")
Varyanslar homojen değilse: T-testi için equal_var=False (Welch), ANOVA yerine Kruskal-Wallis kullanın.

🔬 8. T-Testi

Tek Örneklem T-Testi

Formült = (x̄ - μ₀) / (s / √n)     df = n - 1
Pythonfrom scipy.stats import ttest_1samp
notlar = [78, 82, 85, 90, 74, 88, 92, 79, 83, 87]
t, p = ttest_1samp(notlar, popmean=80)
print(f"t={t:.4f}, p={p:.4f} → {'Red' if p<0.05 else 'Reddedilemez'}")

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

Ön koşullar: ① Normallik ② Varyans homojenliği ③ Bağımsızlık

Pythonfrom scipy.stats import ttest_ind, levene, shapiro
import numpy as np

ilac = np.random.normal(120, 15, 30)
plasebo = np.random.normal(130, 15, 30)

# Ön koşullar
_, p_lev = levene(ilac, plasebo)
t, p = ttest_ind(ilac, plasebo, equal_var=(p_lev > 0.05))
print(f"t={t:.4f}, p={p:.4f}")
print("Fark VAR ✅" if p < 0.05 else "Fark YOK ❌")

Eşleştirilmiş (Paired) T-Testi

Pythonfrom scipy.stats import ttest_rel
oncesi  = [120, 135, 128, 140, 132, 145, 138, 130, 142, 136]
sonrasi = [115, 125, 122, 130, 128, 135, 130, 120, 132, 128]
t, p = ttest_rel(oncesi, sonrasi)
print(f"Ort. fark: {sum(a-b for a,b in zip(oncesi,sonrasi))/len(oncesi):.1f}")
print(f"t={t:.4f}, p={p:.4f} → {'Etkili ✅' if p<0.05 else 'Etkisiz ❌'}")

📏 9. Z-Testi

T-testinin büyük örneklem (n≥30) ve σ bilinen versiyonu.

Formülz = (x̄ - μ₀) / (σ / √n)
Pythonimport numpy as np
from scipy.stats import norm

olcumler = np.random.normal(503, 10, 50)
z = (np.mean(olcumler) - 500) / (10 / np.sqrt(50))
p = 2 * (1 - norm.cdf(abs(z)))
print(f"z={z:.4f}, p={p:.4f}")
ÖzellikZ-TestiT-Testi
σ biliniyor mu?EvetHayır
Örneklemn ≥ 30Herhangi
DağılımNormal (CLT)t dağılımı

📊 10. ANOVA

Tek Yönlü ANOVA

3+ grubun ortalamasını karşılaştırır. H₀: μ₁ = μ₂ = ... = μₖ

F İstatistiğiF = MSB / MSW = (Gruplar arası varyans) / (Grup içi varyans)
Pythonfrom scipy.stats import f_oneway
import numpy as np

a = np.random.normal(75, 8, 30)
b = np.random.normal(80, 8, 30)
c = np.random.normal(78, 8, 30)

F, p = f_oneway(a, b, c)
print(f"F={F:.4f}, p={p:.4f}")

# Post-hoc: Tukey HSD
from statsmodels.stats.multicomp import pairwise_tukeyhsd
data = np.concatenate([a, b, c])
groups = ['A']*30 + ['B']*30 + ['C']*30
print(pairwise_tukeyhsd(data, groups, alpha=0.05))

🎲 11. Ki-Kare Testi

Bağımsızlık Testi

İki kategorik değişken arasında ilişki var mı?

Pythonfrom scipy.stats import chi2_contingency, chisquare
import numpy as np

# Bağımsızlık
tablo = np.array([[50, 30], [20, 100]])
chi2, p, df, beklenen = chi2_contingency(tablo)
print(f"χ²={chi2:.4f}, p={p:.6f} → {'İlişki VAR' if p<0.05 else 'İlişki YOK'}")

# Uyum iyiliği (zar adil mi?)
gozlenen = [18, 22, 20, 25, 15]
chi2, p = chisquare(gozlenen, f_exp=[20]*5)
print(f"χ²={chi2:.4f}, p={p:.4f} → {'Hileli' if p<0.05 else 'Adil'}")

📉 12. Korelasyon & Regresyon

|r| değeriYorum
0.00 – 0.29Zayıf
0.30 – 0.69Orta
0.70 – 1.00Güçlü
Basit Doğrusal Regresyonŷ = β₀ + β₁·x     R² = Açıklanan / Toplam varyans
Pythonfrom scipy.stats import pearsonr, spearmanr
from sklearn.linear_model import LinearRegression
import numpy as np

x = np.random.uniform(1, 10, 50)
y = 50 + 4*x + np.random.normal(0, 5, 50)

r, p = pearsonr(x, y)
rho, p2 = spearmanr(x, y)
print(f"Pearson r={r:.4f}, Spearman ρ={rho:.4f}")

model = LinearRegression().fit(x.reshape(-1,1), y)
print(f"ŷ = {model.intercept_:.2f} + {model.coef_[0]:.2f}·x")
print(f"R² = {model.score(x.reshape(-1,1), y):.4f}")

🔄 13. Non-Parametrik Testler

ParametrikNon-ParametrikDurum
Bağımsız t-testiMann-Whitney U2 bağımsız grup
Eşleştirilmiş tWilcoxon2 bağımlı grup
Tek yönlü ANOVAKruskal-Wallis3+ bağımsız grup
Pythonfrom scipy.stats import mannwhitneyu, wilcoxon, kruskal
import numpy as np

g1 = np.random.exponential(5, 30)
g2 = np.random.exponential(8, 30)

U, p = mannwhitneyu(g1, g2, alternative='two-sided')
print(f"Mann-Whitney U={U:.0f}, p={p:.4f}")

oncesi  = [85, 90, 78, 92, 88, 76, 95, 80, 83, 89]
sonrasi = [90, 95, 82, 96, 92, 82, 98, 86, 88, 93]
W, p2 = wilcoxon(oncesi, sonrasi)
print(f"Wilcoxon W={W:.0f}, p={p2:.4f}")

📐 14. Etki Büyüklüğü

p-value "fark var mı?" sorusunu, etki büyüklüğü "fark ne kadar büyük?" sorusunu cevaplar.

Cohen's d (t-testi)d = (x̄₁ - x̄₂) / s_pooled
dYorum
0.2Küçük
0.5Orta
0.8Büyük
Eta-kare (ANOVA)η² = SS_between / SS_total    (0.01 küçük, 0.06 orta, 0.14 büyük)
Pythonimport numpy as np
def cohens_d(g1, g2):
    n1, n2 = len(g1), len(g2)
    pooled = np.sqrt(((n1-1)*np.var(g1,ddof=1)+(n2-1)*np.var(g2,ddof=1))/(n1+n2-2))
    return (np.mean(g1) - np.mean(g2)) / pooled

d = cohens_d(np.random.normal(120,15,30), np.random.normal(130,15,30))
print(f"Cohen's d = {d:.4f}")

15. Güç Analizi

Testten ÖNCE yapılır. 4 bileşen (3'ünü ver, 4.'yü hesapla):

  1. Etki büyüklüğü (d)
  2. α (0.05)
  3. Güç / Power (0.80)
  4. Örneklem (n)
Pythonfrom statsmodels.stats.power import TTestIndPower

analysis = TTestIndPower()
for d in [0.2, 0.5, 0.8]:
    n = analysis.solve_power(effect_size=d, alpha=0.05, power=0.8)
    print(f"d={d} → n={n:.0f} (grup başına)")

🧪 16. A/B Testi

Genel Akış

  1. Hipotez kur
  2. Metrik belirle (conversion, CTR, revenue)
  3. Örneklem büyüklüğü hesapla
  4. Deneyi çalıştır
  5. Sonuçları değerlendir

Oran Karşılaştırma

Pythonfrom statsmodels.stats.proportion import proportions_ztest, proportion_confint
from statsmodels.stats.proportion import proportion_effectsize
from statsmodels.stats.power import NormalIndPower
import numpy as np

# Kontrol: 120/1000, Test: 145/1000
z, p = proportions_ztest([120,145], [1000,1000], alternative='smaller')
print(f"z={z:.4f}, p={p:.4f}")
if p < 0.05:
    lift = (145/1000 - 120/1000) / (120/1000) * 100
    print(f"✅ Lift: +{lift:.1f}%")

# Gerekli örneklem
effect = proportion_effectsize(0.10, 0.12)
n = NormalIndPower().solve_power(effect, alpha=0.05, power=0.80)
print(f"MDE %10→%12 için n = {n:.0f} (grup başına)")

A/B Testi Tuzakları

TuzakÇözüm
Peeking (erken bakma)Önceden n belirle, bekle
Multiple testingBonferroni: α_yeni = α / k
Simpson paradoksuSegmentasyon yap
Novelty effectYeterli süre bekle

🧠 17. Bayesian Temeller

Bayes TeoremiP(A|B) = P(B|A) · P(A) / P(B)   →   Posterior = Likelihood × Prior / Evidence
Python# Hastalık testi: %99 doğruluk, %1 prevalans
p_hasta = 0.01
p_poz = 0.99 * 0.01 + 0.01 * 0.99
posterior = (0.99 * 0.01) / p_poz
print(f"P(Hasta | Pozitif) = {posterior:.2%}")
print("→ %99 doğruluklu test bile nadir hastalıkta yanıltıcı!")

Frequentist

  • Olasılık = uzun vadeli frekans
  • Parametre sabit
  • p-value, güven aralığı

Bayesian

  • Olasılık = inanç derecesi
  • Parametre rastgele değişken
  • Posterior, credible interval

🗺️ 18. Hangi Testi Seçmeli?

VERİ TİPİN NE? │ ├── Sayısal (Sürekli) │ ├── 1 Grup → Tek örneklem t-testi │ ├── 2 Grup │ │ ├── Bağımsız → Normal? → Evet: t-testi | Hayır: Mann-Whitney U │ │ └── Bağımlı → Normal? → Evet: Paired t | Hayır: Wilcoxon │ └── 3+ Grup │ ├── Bağımsız → Normal? → Evet: ANOVA | Hayır: Kruskal-Wallis │ └── Bağımlı → Tekrarlı Ölçümler ANOVA / Friedman │ ├── Kategorik │ ├── Tek değişken → Ki-Kare Uyum İyiliği │ └── İki değişken → Ki-Kare Bağımsızlık │ └── İlişki ├── Doğrusal? → Normal? → Pearson r | Spearman ρ └── Tahmin? → Regresyon (Basit / Çoklu)

Hızlı Kontrol Listesi

#AdımAraç
1Veri tipini belirledf.dtypes
2Dağılımı görHistogram, QQ-plot
3Normallik testishapiro()
4Varyans homojenliğilevene()
5Uygun testi uygulaKarar ağacı
6Etki büyüklüğüCohen's d, η²
7Sonucu yorumlap + etki + GA
Altın Kural: p-value TEK BAŞINA yeterli değildir. Her zaman etki büyüklüğü ve güven aralığı ile birlikte raporlayın!