.. _sec_statistics:
İstatistik
==========
Kuşkusuz, en iyi derin öğrenme uygulayıcılarından biri olmak için son
teknoloji ürünü ve yüksek doğrulukta modelleri eğitme yeteneği çok
önemlidir. Bununla birlikte, iyileştirmelerin ne zaman önemli olduğu
veya yalnızca eğitim sürecindeki rastgele dalgalanmaların sonucu olduğu
genellikle belirsizdir. Tahmini değerlerdeki belirsizliği tartışabilmek
için biraz istatistik öğrenmemiz gerekir.
*İstatistiğin* en eski referansı, şifrelenmiş mesajları deşifre etmek
için istatistiklerin ve sıklık analizinin nasıl kullanılacağına dair
ayrıntılı bir açıklama veren :math:`9.` yüzyıldaki Arap bilim adamı
Al-Kindi'ye kadar uzanabilir. 800 yıl sonra, modern istatistik,
araştırmacıların demografik ve ekonomik veri toplama ve analizine
odaklandığı 1700'lerde Almanya'da ortaya çıktı. Günümüzde istatistik,
verilerin toplanması, işlenmesi, analizi, yorumlanması ve
görselleştirilmesi ile ilgili bilim konusudur. Dahası, temel istatistik
teorisi akademi, endüstri ve hükümet içindeki araştırmalarda yaygın
olarak kullanılmaktadır.
Daha özel olarak, istatistik *tanımlayıcı istatistik* ve *istatistiksel
çıkarım* diye bölünebilir. İlki, *örneklem* olarak adlandırılan
gözlemlenen verilerden bir koleksiyonunun özniteliklerini özetlemeye ve
göstermeye odaklanır. Örneklem bir *popülasyondan* alınmıştır, benzer
bireyler, öğeler veya deneysel ilgi alanlarımıza ait olayların toplam
kümesini belirtir. Tanımlayıcı istatistiğin aksine *istatistiksel
çıkarım*, örneklem dağılımının popülasyon dağılımını bir dereceye kadar
kopyalayabileceği varsayımlarına dayanarak, bir popülasyonun
özelliklerini verilen *örneklemlerden* çıkarsar.
Merak edebilirsiniz: "Makine öğrenmesi ile istatistik arasındaki temel
fark nedir?" Temel olarak, istatistik çıkarım sorununa odaklanır. Bu tür
problemler, nedensel çıkarım gibi değişkenler arasındaki ilişkiyi
modellemeyi ve A/B testi gibi model parametrelerinin istatistiksel
olarak anlamlılığını test etmeyi içerir. Buna karşılık, makine
öğrenmesi, her bir parametrenin işlevselliğini açıkça programlamadan ve
anlamadan doğru tahminler yapmaya vurgu yapar.
Bu bölümde, üç tür istatistik çıkarım yöntemini tanıtacağız: Tahmin
edicileri değerlendirme ve karşılaştırma, hipotez (denence) testleri
yürütme ve güven aralıkları oluşturma. Bu yöntemler, belirli bir
popülasyonun özelliklerini, yani gerçek :math:`\theta` parametresi gibi,
anlamamıza yardımcı olabilir. Kısacası, belirli bir popülasyonun gerçek
parametresinin, :math:`\theta`, skaler bir değer olduğunu varsayıyoruz.
:math:`\theta`'nin bir vektör veya tensör olduğu durumu genişletmek
basittir, bu nedenle tartışmamızda onu es geçiyoruz.
Tahmincileri Değerlendirme ve Karşılaştırma
-------------------------------------------
İstatistikte, bir *tahminci*, gerçek :math:`\theta` parametresini tahmin
etmek için kullanılan belirli örneklemlerin bir fonksiyonudur.
{:math:`x_1, x_2, \ldots, x_n`} örneklerini gözlemledikten sonra
:math:`\theta` tahmini için
:math:`\hat{\theta}_n = \hat{f}(x_1, \ldots, x_n)` yazacağız.
Tahmincilerin basit örneklerini daha önce şu bölümde görmüştük
:numref:`sec_maximum_likelihood`. Bir Bernoulli rastgele değişkeninden
birkaç örneğiniz varsa, rastgele değişkenin olma olasılığı için maksimum
olabilirlik tahmini, gözlemlenenlerin sayısını sayarak ve toplam örnek
sayısına bölerek elde edilebilir. Benzer şekilde, bir alıştırma sizden
bir miktar örnek verilen bir Gauss'un ortalamasının maksimum olabilirlik
tahmininin tüm örneklerin ortalama değeriyle verildiğini göstermenizi
istiyor. Bu tahminciler neredeyse hiçbir zaman parametrenin gerçek
değerini vermezler, ancak ideal olarak çok sayıda örnek için tahmin
yakın olacaktır.
Örnek olarak, ortalama sıfır ve varyans bir olan bir Gauss rasgele
değişkeninin gerçek yoğunluğunu, bu Gauss'tan bir dizi örnek ile aşağıda
gösteriyoruz. Her noktanın :math:`y` koordinatı görünür ve orijinal
yoğunluk ile olan ilişki daha net fark edilecek şekilde oluşturduk.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
import random
from d2l import mxnet as d2l
from mxnet import np, npx
npx.set_np()
# Örnek veri noktaları ve y koordinatı oluştur
epsilon = 0.1
random.seed(8675309)
xs = np.random.normal(loc=0, scale=1, size=(300,))
ys = [np.sum(np.exp(-(xs[:i] - xs[i])**2 / (2 * epsilon**2))
/ np.sqrt(2*np.pi*epsilon**2)) / len(xs) for i in range(len(xs))]
# Gerçek yoğunluğu hesapla
xd = np.arange(np.min(xs), np.max(xs), 0.01)
yd = np.exp(-xd**2/2) / np.sqrt(2 * np.pi)
# Sonuçları çiz
d2l.plot(xd, yd, 'x', 'density')
d2l.plt.scatter(xs, ys)
d2l.plt.axvline(x=0)
d2l.plt.axvline(x=np.mean(xs), linestyle='--', color='purple')
d2l.plt.title(f'sample mean: {float(np.mean(xs)):.2f}')
d2l.plt.show()
.. figure:: output_statistics_bc7dd5_3_0.svg
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
import torch
from d2l import torch as d2l
torch.pi = torch.acos(torch.zeros(1)) * 2 #define pi in torch
# Örnek veri noktaları ve y koordinatı oluşturun
epsilon = 0.1
torch.manual_seed(8675309)
xs = torch.randn(size=(300,))
ys = torch.tensor(
[torch.sum(torch.exp(-(xs[:i] - xs[i])**2 / (2 * epsilon**2))\
/ torch.sqrt(2*torch.pi*epsilon**2)) / len(xs)\
for i in range(len(xs))])
# Gerçek yoğunluğu hesapla
xd = torch.arange(torch.min(xs), torch.max(xs), 0.01)
yd = torch.exp(-xd**2/2) / torch.sqrt(2 * torch.pi)
# Sonuçları çiz
d2l.plot(xd, yd, 'x', 'density')
d2l.plt.scatter(xs, ys)
d2l.plt.axvline(x=0)
d2l.plt.axvline(x=torch.mean(xs), linestyle='--', color='purple')
d2l.plt.title(f'sample mean: {float(torch.mean(xs).item()):.2f}')
d2l.plt.show()
.. figure:: output_statistics_bc7dd5_6_0.svg
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
import tensorflow as tf
from d2l import tensorflow as d2l
tf.pi = tf.acos(tf.zeros(1)) * 2 # define pi in TensorFlow
# Örnek veri noktaları ve y koordinatı oluşturun
epsilon = 0.1
xs = tf.random.normal((300,))
ys = tf.constant(
[(tf.reduce_sum(tf.exp(-(xs[:i] - xs[i])**2 / (2 * epsilon**2)) \
/ tf.sqrt(2*tf.pi*epsilon**2)) / tf.cast(
tf.size(xs), dtype=tf.float32)).numpy() \
for i in range(tf.size(xs))])
# Gerçek yoğunluğu hesapla
xd = tf.range(tf.reduce_min(xs), tf.reduce_max(xs), 0.01)
yd = tf.exp(-xd**2/2) / tf.sqrt(2 * tf.pi)
# Sonuçları çiz
d2l.plot(xd, yd, 'x', 'density')
d2l.plt.scatter(xs, ys)
d2l.plt.axvline(x=0)
d2l.plt.axvline(x=tf.reduce_mean(xs), linestyle='--', color='purple')
d2l.plt.title(f'sample mean: {float(tf.reduce_mean(xs).numpy()):.2f}')
d2l.plt.show()
.. figure:: output_statistics_bc7dd5_9_0.svg
.. raw:: html
.. raw:: html
$:raw-latex:`\hat{\theta}`\_n $ parametresinin bir tahmincisini
hesaplamanın birçok yolu olabilir. Bu bölümde, tahmincileri
değerlendirmek ve karşılaştırmak için üç genel yöntem sunuyoruz:
Ortalama hata karesi, standart sapma ve istatistiksel yanlılık.
Ortalama Hata Karesi
~~~~~~~~~~~~~~~~~~~~
Tahmin edicileri değerlendirmek için kullanılan en basit ölçüt, bir
tahmincinin *ortalama hata karesi (MSE)* (veya :math:`l_2` kaybı) olarak
tanımlanabilir.
.. math:: \mathrm{MSE} (\hat{\theta}_n, \theta) = E[(\hat{\theta}_n - \theta)^2].
:label: eq_mse_est
Bu, gerçek değerden ortalama kare sapmayı ölçümlemizi sağlar. MSE her
zaman negatif değildir. Eğer :numref:`sec_linear_regression` içinde
okuduysanız, bunu en sık kullanılan bağlanım (regresyon) kaybı işlevi
olarak tanıyacaksınız. Bir tahminciyi değerlendirmek için bir ölçü
olarak, değeri sıfıra ne kadar yakınsa, tahminci gerçek :math:`\theta`
parametresine o kadar yakın olur.
İstatistiksel Yanlılık
~~~~~~~~~~~~~~~~~~~~~~
MSE doğal bir ölçü sağlar, ancak onu büyük yapabilecek birden fazla
farklı vakayı kolayca hayal edebiliriz. İki temel önemli olay veri
kümesindeki rastgelelik nedeniyle tahmincideki dalgalanma ve tahmin
prosedürüne bağlı olarak tahmincideki sistematik hatadır.
Öncelikle sistematik hatayı ölçelim. Bir $:raw-latex:`\hat{\theta}`\_n $
tahmincisi için *istatistiksel yanlılığın* matematiksel gösterimi şu
şekilde tanımlanabilir:
.. math:: \mathrm{yanlılık}(\hat{\theta}_n) = E(\hat{\theta}_n - \theta) = E(\hat{\theta}_n) - \theta.
:label: eq_bias
:math:`\mathrm{yanlılık}(\hat{\theta}_n) = 0` olduğunda,
:math:`\hat{\theta}_n` tahmin edicisinin beklentisinin parametrenin
gerçek değerine eşit olduğuna dikkat edin. Bu durumda,
:math:`\hat{\theta}_n`'nin yansız bir tahminci olduğunu söylüyoruz.
Genel olarak, yansız bir tahminci, yanlı bir tahminciden daha iyidir
çünkü beklenen değeri gerçek parametre ile aynıdır.
Bununla birlikte, yanlı tahmin edicilerin pratikte sıklıkla
kullanıldığının farkında olunması gerekir. Yansız tahmin edicilerin
başka varsayımlar olmaksızın var olmadığı veya hesaplamanın zor olduğu
durumlar vardır. Bu, bir tahmincide önemli bir kusur gibi görünebilir,
ancak pratikte karşılaşılan tahmin edicilerin çoğu, mevcut örneklerin
sayısı sonsuza giderken sapmanın sıfır olma eğiliminde olması açısından
en azından asimptotik (kavuşma doğrusu) olarak tarafsızdır:
:math:`\lim_{n \rightarrow \infty} \mathrm{bias}(\hat{\theta}_n) = 0`.
Varyans ve Standart Sapma
~~~~~~~~~~~~~~~~~~~~~~~~~
İkinci olarak tahmincideki rastgeleliği ölçelim. Eğer
:numref:`sec_random_variables` bölümünü anımsarsak, *standart sapma*
(veya *standart hata*), varyansın kare kökü olarak tanımlanır. Bir
tahmincinin dalgalanma derecesini, o tahmincinin standart sapmasını veya
varyansını ölçerek ölçebiliriz.
.. math:: \sigma_{\hat{\theta}_n} = \sqrt{\mathrm{Var} (\hat{\theta}_n )} = \sqrt{E[(\hat{\theta}_n - E(\hat{\theta}_n))^2]}.
:label: eq_var_est
Şunları karşılaştırmak önemlidir :eq:`eq_var_est` ile
:eq:`eq_mse_est`. Bu denklemde gerçek popülasyon değeri
:math:`\theta` ile değil, bunun yerine beklenen örneklem ortalaması
:math:`E(\hat{\theta}_n)` ile karşılaştırıyoruz. Bu nedenle, tahmincinin
gerçek değerden ne kadar uzakta olduğunu ölçmüyoruz, bunun yerine
tahmincinin dalgalanmasını ölçüyoruz.
Yanlılık-Varyans Ödünleşmesi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Bu iki ana bileşenin ortalama hata karesine (MSE) katkıda bulunduğu
sezgisel olarak açıktır. Biraz şok edici olan şey, bunun aslında
ortalama hata karesinin bu iki ve ek üçüncü bir parçaya *ayrıştırılması*
olduğunu gösterebilmemizdir. Yani, ortalama hata karesini yanlılığın (ek
girdi) karesinin, varyansın ve indirgenemeyen hatanın toplamı olarak
yazabiliriz.
.. math::
\begin{aligned}
\mathrm{MSE} (\hat{\theta}_n, \theta) &= E[(\hat{\theta}_n - \theta)^2] \\
&= E[(\hat{\theta}_n)^2] + E[\theta^2] - 2E[\hat{\theta}_n\theta] \\
&= \mathrm{Var} [\hat{\theta}_n] + E[\hat{\theta}_n]^2 + \mathrm{Var} [\theta] + E[\theta]^2 - 2E[\hat{\theta}_n]E[\theta] \\
&= (E[\hat{\theta}_n] - E[\theta])^2 + \mathrm{Var} [\hat{\theta}_n] + \mathrm{Var} [\theta] \\
&= (E[\hat{\theta}_n - \theta])^2 + \mathrm{Var} [\hat{\theta}_n] + \mathrm{Var} [\theta] \\
&= (\mathrm{yanlılık} [\hat{\theta}_n])^2 + \mathrm{Var} (\hat{\theta}_n) + \mathrm{Var} [\theta].\\
\end{aligned}
Yukarıdaki formülü *yanlılık-varyans ödünleşmesi* olarak adlandırıyoruz.
Ortalama hata karesi kesin olarak üç hata kaynağına bölünebilir: Yüksek
yanlılıktan, yüksek varyanstan ve indirgenemez hatadan kaynaklı hata.
Yanlılık hatası genellikle basit bir modelde (doğrusal bağlanım modeli
gibi) görülür, çünkü öznitelikler ve çıktılar arasındaki yüksek boyutsal
ilişkileri çıkaramaz. Bir model yüksek yanlılık hatasından muzdaripse,
(:numref:`sec_model_selection`) bölümünde açıklandığı gibi genellikle
*eksik öğrenme* veya *esneklik* eksikliği olduğunu söylüyoruz. Yüksek
varyans, genellikle eğitim verilerine öğrenen çok karmaşık bir modelden
kaynaklanır. Sonuç olarak, *aşırı öğrenen* bir model, verilerdeki küçük
dalgalanmalara duyarlıdır. Bir modelin varyansı yüksekse, genellikle
(:numref:`sec_model_selection`) içinde tanıtıldığı gibi *aşırı
öğrenme* ve *genelleme* yoksunluğu olduğunu söyleriz. İndirgenemez hata,
:math:`\theta`'nın kendisindeki gürültünün sonucudur.
Kodda Tahmincileri Değerlendirme
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Bir tahmincinin standart sapması, bir tensör ``a`` için basitçe
``a.std()`` çağırarak uygulandığından, onu atlayacağız ancak
istatistiksel yanlılık ve ortalama hata karesini uygulayacağız.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
# İstatistiksel yanlılık
def stat_bias(true_theta, est_theta):
return(np.mean(est_theta) - true_theta)
# Ortalama kare hatası
def mse(data, true_theta):
return(np.mean(np.square(data - true_theta)))
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
# İstatistiksel yanlılık
def stat_bias(true_theta, est_theta):
return(torch.mean(est_theta) - true_theta)
# Ortalama kare hatası
def mse(data, true_theta):
return(torch.mean(torch.square(data - true_theta)))
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
# İstatistiksel yanlılık
def stat_bias(true_theta, est_theta):
return(tf.reduce_mean(est_theta) - true_theta)
# Ortalama kare hatası
def mse(data, true_theta):
return(tf.reduce_mean(tf.square(data - true_theta)))
.. raw:: html
.. raw:: html
Yanlılık-varyans ödünleşmesinin denklemini görsellemek için,
:math:`\mathcal{N}(\theta, \sigma^2)` normal dağılımını :math:`10.000`
örnekle canlandıralım. Burada :math:`\theta = 1` ve :math:`\sigma = 4`
olarak kullanıyoruz. Tahminci verilen örneklerin bir fonksiyonu olduğu
için, burada örneklerin ortalamasını bu normal dağılımdaki,
:math:`\mathcal{N}(\theta, \sigma^2)`, gerçek :math:`\theta` için bir
tahminci olarak kullanıyoruz.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
theta_true = 1
sigma = 4
sample_len = 10000
samples = np.random.normal(theta_true, sigma, sample_len)
theta_est = np.mean(samples)
theta_est
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
array(0.9503336)
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
theta_true = 1
sigma = 4
sample_len = 10000
samples = torch.normal(theta_true, sigma, size=(sample_len, 1))
theta_est = torch.mean(samples)
theta_est
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
tensor(1.0170)
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
theta_true = 1
sigma = 4
sample_len = 10000
samples = tf.random.normal((sample_len, 1), theta_true, sigma)
theta_est = tf.reduce_mean(samples)
theta_est
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
.. raw:: html
.. raw:: html
Tahmincimizin yanlılık karesi ve varyansının toplamını hesaplayarak
ödünleşme denklemini doğrulayalım. İlk önce, tahmincimizin MSE'sini
hesaplayın.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
mse(samples, theta_true)
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
array(15.781996)
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
mse(samples, theta_true)
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
tensor(16.0298)
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
mse(samples, theta_true)
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
.. raw:: html
.. raw:: html
Ardından, aşağıdaki gibi
:math:`\mathrm{Var} (\hat{\theta}_n) + [\mathrm{yanlılık} (\hat{\theta}_n)]^2`'yi
hesaplıyoruz. Gördüğünüz gibi, iki değer, sayısal kesinliğe uyuyor.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
bias = stat_bias(theta_true, theta_est)
np.square(samples.std()) + np.square(bias)
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
array(15.781995)
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
bias = stat_bias(theta_true, theta_est)
torch.square(samples.std(unbiased=False)) + torch.square(bias)
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
tensor(16.0298)
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
bias = stat_bias(theta_true, theta_est)
tf.square(tf.math.reduce_std(samples)) + tf.square(bias)
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
.. raw:: html
.. raw:: html
Hipotez (Denence) Testleri Yürütme
----------------------------------
İstatistiksel çıkarımda en sık karşılaşılan konu hipotez testidir.
Hipotez testi 20. yüzyılın başlarında popüler hale gelirken, ilk
kullanım 1700'lerde John Arbuthnot'a kadar takip edilebilir. John,
Londra'da 80 yıllık doğum kayıtlarını takip etti ve her yıl kadından
daha fazla erkeğin doğduğu sonucuna vardı. Bunu takiben, modern
anlamlılık testi, :math:`p`-değerini ve Pearson'ın ki-kare testini icat
eden Karl Pearson, Student (öğrenci) t dağılımının babası William Gosset
ve sıfır hipotezini ve anlamlılık testini başlatan Ronald Fisher'ın zeka
mirasıdır.
*Hipotez testi*, bir popülasyon hakkındaki varsayılan ifadeye karşı bazı
kanıtları değerlendirmenin bir yoludur. Varsayılan ifadeyi, gözlemlenen
verileri kullanarak reddetmeye çalıştığımız, *sıfır hipotezi*,
:math:`H_0`, olarak adlandırıyoruz. Burada, istatistiksel anlamlılık
testi için başlangıç noktası olarak :math:`H_0`'ı kullanıyoruz.
*Alternatif hipotez* :math:`H_A` (veya :math:`H_1`), sıfır hipotezine
karşıt bir ifadedir. Bir sıfır hipotez, genellikle değişkenler arasında
bir ilişki olduğunu varsayan açıklayıcı bir biçimde ifade edilir.
İçeriğini olabildiğince açık bir şekilde yansıtmalı ve istatistik
teorisi ile test edilebilir olmalıdır.
Kimyager olduğunuzu hayal edin. Laboratuvarda binlerce saat geçirdikten
sonra, kişinin matematiği anlama yeteneğini önemli ölçüde arttırabilecek
yeni bir ilaç geliştiriyorsunuz. Sihirli gücünü göstermek için onu test
etmeniz gerekir. Doğal olarak, ilacı almak ve matematiği daha iyi
öğrenmelerine yardımcı olup olmayacağını görmek için bazı gönüllülere
ihtiyacınız olabilir. Nasıl başlayacaksınız?
İlk olarak, dikkatle rastgele seçilmiş iki grup gönüllüye ihtiyacınız
olacak, böylece bazı ölçütlerle ölçülen matematik anlama yetenekleri
arasında hiçbir fark olmayacak. Bu iki grup genellikle test grubu ve
kontrol grubu olarak adlandırılır. *Test grubu* (veya *tedavi grubu*)
ilacı deneyimleyecek bir grup kişidir, *kontrol grubu* ise bir kıyaslama
olarak bir kenara bırakılan kullanıcı grubunu temsil eder, yani, ilaç
almak dışında aynı ortam şartlarına sahipler. Bu şekilde, bağımsız
değişkenin tedavideki etkisi dışında tüm değişkenlerin etkisi en aza
indirilir.
İkincisi, ilacı bir süre aldıktan sonra, iki grubun matematik
anlayışını, yeni bir matematik formülü öğrendikten sonra gönüllülerin
aynı matematik testlerini yapmasına izin vermek gibi aynı ölçütlerle
ölçmeniz gerekecektir. Ardından, performanslarını toplayabilir ve
sonuçları karşılaştırabilirsiniz. Bu durumda, sıfır hipotezimiz,
muhtemelen iki grup arasında hiçbir fark olmadığı ve alternatifimiz
olduğu şeklinde olacaktır.
Bu hala tam olarak resmi (nizamlara uygun) değil. Dikkatlice düşünmeniz
gereken birçok detay var. Örneğin, matematik anlama yeteneklerini test
etmek için uygun ölçütler nelerdir? İlacınızın etkinliğini iddia
edebileceğinizden emin olabilmeniz için testinizde kaç gönüllü var?
Testi ne kadar süreyle koşturmalısınız? İki grup arasında bir fark olup
olmadığına nasıl karar veriyorsunuz? Yalnızca ortalama performansla mı
ilgileniyorsunuz, yoksa puanların değişim aralığını da mı
önemsiyorsunuz? Ve bunun gibi.
Bu şekilde, hipotez testi, deneysel tasarım ve gözlemlenen sonuçlarda
kesinlik hakkında akıl yürütme için bir çerçeve sağlar. Şimdi sıfır
hipotezinin gerçek olma ihtimalinin çok düşük olduğunu gösterebilirsek,
onu güvenle reddedebiliriz.
Hipotez testiyle nasıl çalışılacağına dair hikayeyi tamamlamak için,
şimdi bazı ek terminolojiyle tanışmamız ve yukarıdaki bazı
kavramlarımızı kurallara uygun halde işlememiz gerekiyor.
İstatistiksel Anlamlılık
~~~~~~~~~~~~~~~~~~~~~~~~
*İstatistiksel anlamlılık*, sıfır hipotezin, :math:`H_0`, reddedilmemesi
gerektiğinde yanlışlıkla reddedilme olasılığını ölçer, yani,
.. math:: \text{istatistiksel anlamlılık }= 1 - \alpha = 1 - P(H_0 \text{ reddet} \mid H_0 \text{ doğru} ).
Aynı zamanda *1. tür hata* veya *yanlış pozitif* olarak da anılır.
:math:`\alpha`, *anlamlılık düzeyi* olarak adlandırılır ve yaygın olarak
kullanılan değeri :math:`\% 5`, yani :math:`1- \alpha = \% 95`
şeklindedir. Anlamlılık düzeyi, gerçek bir sıfır hipotezi
reddettiğimizde almaya istekli olduğumuz risk seviyesi olarak
açıklanabilir.
:numref:`fig_statistical_significance`, iki örneklemli bir hipotez
testinde gözlemlerin değerlerini ve belirli bir normal dağılımın gelme
olasılığını gösterir. Gözlem veri örneği :math:`\% 95` eşiğinin dışında
yer alırsa, sıfır hipotez varsayımı altında çok olası olmayan bir gözlem
olacaktır. Dolayısıyla, sıfır hipotezde yanlış bir şeyler olabilir ve
onu reddedeceğiz.
.. _fig_statistical_significance:
.. figure:: ../img/statistical-significance.svg
İstatistiksel anlamlılık.
İstatistiksel Güç
~~~~~~~~~~~~~~~~~
*İstatistiksel Güç* (veya *duyarlılık*), reddedilmesi gerektiğinde sıfır
hipotezin, :math:`H_0`, reddedilme olasılığını ölçer, yani,
.. math:: \text{istatistiksel güç }= 1 - \beta = 1 - P(H_0 \text{ rededememe } \mid H_0 \text{ yanlış} ).
Bir *1. tür hata*\ nın, doğru olduğunda sıfır hipotezin reddedilmesinden
kaynaklanan bir hata olduğunu hatırlayın, oysa *2. tür hata* yanlış
olduğunda sıfır hipotezin reddedilmemesinden kaynaklanır. 2. tür hata
genellikle :math:`\beta` olarak belirtilir ve bu nedenle ilgili
istatistiksel güç :math:`1-\beta` olur.
Sezgisel olarak, istatistiksel güç, testimizin istenen bir istatistiksel
anlamlılık düzeyindeyken minimum büyüklükte gerçek bir tutarsızlığı ne
kadar olasılıkla tespit edeceği şeklinde yorumlanabilir. :math:`\% 80`,
yaygın olarak kullanılan bir istatistiksel güç eşiğidir. İstatistiksel
güç ne kadar yüksekse, gerçek farklılıkları tespit etme olasılığımız o
kadar yüksektir.
İstatistiksel gücün en yaygın kullanımlarından biri, ihtiyaç duyulan
örnek sayısını belirlemektir. Sıfır hipotezini yanlış olduğunda reddetme
olasılığınız, yanlış olma derecesine (*etki boyutu* olarak bilinir) ve
sahip olduğunuz örneklerin sayısına bağlıdır. Tahmin edebileceğiniz
gibi, küçük etki boyutları, yüksek olasılıkla tespit edilebilmesi için
çok fazla sayıda örnek gerektirir. Ayrıntılı olarak türetmek için bu
kısa ek bölümün kapsamı dışında, örnek olarak, örneğimizin sıfır
ortalama bir varyanslı Gauss'tan geldiğine dair bir sıfır hipotezi
reddedebilmek isterken, örneklemimizin ortalamasının aslında bire yakın
olduğuna inanıyoruz, bunu yalnızca :math:`8`'lik örneklem büyüklüğünde
kabul edilebilir hata oranları ile yapabiliriz. Bununla birlikte, örnek
popülasyonumuzun gerçek ortalamasının :math:`0.01`'e yakın olduğunu
düşünürsek, farkı tespit etmek için yaklaşık :math:`80000`'lik bir
örneklem büyüklüğüne ihtiyacımız olur.
Gücü bir su filtresi olarak hayal edebiliriz. Bu benzetmede, yüksek
güçlü bir hipotez testi, sudaki zararlı maddeleri olabildiğince
azaltacak yüksek kaliteli bir su filtreleme sistemi gibidir. Öte yandan,
daha küçük bir tutarsızlık, bazı nispeten küçük maddelerin boşluklardan
kolayca kaçabildiği düşük kaliteli bir su filtresine benzer. Benzer
şekilde, istatistiksel güç yeterince yüksek güce sahip değilse, bu test
daha küçük tutarsızları yakalayamayabilir.
Test İstatistiği
~~~~~~~~~~~~~~~~
Bir *test istatistiği* :math:`T(x)`, örnek verilerin bazı özelliklerini
özetleyen bir sayıdır. Böyle bir istatistiği tanımlamanın amacı, farklı
dağılımları ayırt etmemize ve hipotez testimizi yürütmemize izin
vermesidir. Kimyager örneğimize geri dönersek, bir popülasyonun
diğerinden daha iyi performans gösterdiğini göstermek istiyorsak,
ortalamayı test istatistiği olarak almak mantıklı olabilir. Farklı test
istatistiği seçenekleri, büyük ölçüde farklı istatistiksel güce sahip
istatistiksel testlere yol açabilir.
Genellikle, :math:`T(X)` (sıfır hipotezimiz altındaki test
istatistiğinin dağılımı), en azından yaklaşık olarak, sıfır hipotezi
kapsamında değerlendirildiğinde normal dağılım gibi genel bir olasılık
dağılımını izleyecektir. Açıkça böyle bir dağılım elde edebilir ve daha
sonra veri kümemizdeki test istatistiğimizi ölçebilirsek, istatistiğimiz
beklediğimiz aralığın çok dışındaysa sıfır hipotezi güvenle
reddedebiliriz. Bunu nicel hale getirmek bizi :math:`p`-değerleri
kavramına götürür.
:math:`p`-Değeri
~~~~~~~~~~~~~~~~
:math:`p`-değeri (veya *olasılık değeri*), sıfır hipotezinin *doğru*
olduğu varsayılarak, :math:`T(X)`'in en az gözlenen test istatistiği
:math:`T(x)` kadar uç olma olasılığıdır, yani
.. math:: p\text{-değeri} = P_{H_0}(T(X) \geq T(x)).
:math:`p`-değeri önceden tanımlanmış ve sabit bir istatistiksel
anlamlılık düzeyi :math:`\alpha` değerinden küçükse veya ona eşitse,
sıfır hipotezini reddedebiliriz. Aksi takdirde, sıfır hipotezi reddetmek
için kanıtımız olmadığı sonucuna varacağız. Belirli bir popülasyon
dağılımı için, *reddetme bölgesi*, istatistiksel anlamlılık düzeyi
:math:`\alpha`'dan daha küçük bir :math:`p` değerine sahip tüm
noktaların içerildiği aralık olacaktır.
Tek Taraflı Test ve İki Taraflı Test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Normalde iki tür anlamlılık testi vardır: Tek taraflı test ve iki
taraflı test. *Tek taraflı test* (veya *tek kuyruklu test*), sıfır
hipotez ve alternatif hipotezin yalnızca bir tarafta olduğunda
geçerlidir. Örneğin, sıfır hipotez :math:`\theta` gerçek parametresinin
:math:`c` değerinden küçük veya ona eşit olduğunu belirtebilir.
Alternatif hipotez, :math:`\theta` nın :math:`c`'den büyük olması
olacaktır. Yani, reddetme bölgesi, örneklem dağılımının sadece bir
tarafındadır. Tek taraflı testin aksine, *iki taraflı test* (veya *iki
kuyruklu test*), reddetme bölgesi örneklem dağılımının her iki tarafında
olduğunda uygulanabilir. Bu durumda bir örnek, :math:`\theta` gerçek
parametresinin :math:`c` değerine eşit olduğunu belirten bir sıfır
hipotez ifadesine sahip olma olabilir. Alternatif hipotez,
:math:`\theta`'nın :math:`c`'ye eşit olmamasıdır.
Hipotez Testinin Genel Adımları
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Yukarıdaki kavramlara aşina olduktan sonra, hipotez testinin genel
adımlarından geçelim.
1. Soruyu belirtin ve sıfır hipotezi, :math:`H_0`, oluşturun.
2. İstatistiksel anlamlılık düzeyini :math:`\alpha`'yı ve bir
istatistiksel güç (:math:`1-\beta`)'yı ayarlayın.
3. Deneyler yoluyla numuneler alın. İhtiyaç duyulan örnek sayısı
istatistiksel güce ve beklenen etki büyüklüğüne bağlı olacaktır.
4. Test istatistiğini ve :math:`p`-değerini hesaplayın.
5. :math:`p`-değeri ve istatistiksel anlamlılık düzeyi :math:`\alpha`
bağlı olarak sıfır hipotezi tutma veya reddetme kararını verin.
Bir hipotez testi yapmak için, bir sıfır hipotez ve almaya istekli
olduğumuz bir risk seviyesi tanımlayarak başlıyoruz. Sonra, sıfır
hipotezine karşı kanıt olarak test istatistiğinin aşırı bir değerini
alarak numunenin (örneklemin) test istatistiğini hesaplıyoruz. Test
istatistiği reddetme bölgesi dahilindeyse, alternatif lehine sıfır
hipotezi reddedebiliriz.
Hipotez testi, klinik araştırmalar ve A/B testi gibi çeşitli
senaryolarda uygulanabilir.
Güven Aralıkları Oluşturma
--------------------------
Bir :math:`\theta` parametresinin değerini tahmin ederken,
:math:`\hat \theta` gibi nokta tahmincileri, belirsizlik kavramı
içermedikleri için sınırlı fayda sağlar. Daha ziyade, yüksek olasılıkla
gerçek :math:`\theta` parametresini içeren bir aralık oluşturabilirsek
çok daha iyi olurdu. Yüzyıl önce bu tür fikirlerle ilgileniyor
olsaydınız, 1937'de güven aralığı kavramını tanıtan Jerzy Neyman'ın
"Klasik Olasılık Teorisine Dayalı İstatistiksel Tahmin Teorisinin Ana
Hatları (Outline of a Theory of Statistical Estimation Based on the
Classical Theory of Probability)"'nı okumaktan heyecan duyardınız
:cite:`Neyman.1937`.
Faydalı olması için, belirli bir kesinlik derecesi için bir güven
aralığı mümkün olduğu kadar küçük olmalıdır. Nasıl türetileceğini
görelim.
Tanım
~~~~~
Matematiksel olarak, :math:`\theta` gerçek parametresi için *güven
aralığı*, örnek verilerden şu şekilde hesaplanan bir :math:`C_n`
aralığıdır.
.. math:: P_{\theta} (C_n \ni \theta) \geq 1 - \alpha, \forall \theta.
:label: eq_confidence
Burada :math:`\alpha \in (0, 1)` ve :math:`1 - \alpha`, aralığın *güven
düzeyi* veya *kapsamı* olarak adlandırılır. Bu, yukarıda tartıştığımız
anlam düzeyiyle aynı :math:`\alpha`'dır.
Unutmayın :eq:`eq_confidence` :math:`C_n` değişkeni hakkındadır,
sabit :math:`\theta` ile ilgili değildir. Bunu vurgulamak için,
:math:`P_{\theta} (\theta \in C_n)` yerine
:math:`P_{\theta} (C_n \ni \theta)` yazıyoruz.
Yorumlama
~~~~~~~~~
:math:`\% 95` güven aralığını, gerçek parametrenin :math:`\% 95`
olduğundan emin olabileceğiniz bir aralık olarak yorumlamak çok
caziptir, ancak bu maalesef doğru değildir. Gerçek parametre sabittir ve
rastgele olan aralıktır. Bu nedenle, bu yordamla çok sayıda güven
aralığı oluşturduysanız, oluşturulan aralıkların :math:`\% 95`'inin
gerçek parametreyi içereceğini söylemek daha iyi bir yorum olacaktır.
Bu bilgiçlik gibi görünebilir, ancak sonuçların yorumlanmasında gerçek
etkileri olabilir. Özellikle, çok nadiren yeterince yaptığımız sürece,
*neredeyse kesin* gerçek değeri içermediğimiz aralıklar oluşturarak
:eq:`eq_confidence`\ i tatmin edebiliriz. Bu bölümü cazip ama
yanlış üç ifade sunarak kapatıyoruz. Bu noktaların derinlemesine bir
tartışması şu adreste bulunabilir
:cite:`Morey.Hoekstra.Rouder.ea.2016`.
- **Yanılgı 1**. Dar güven aralıkları, parametreyi tam olarak tahmin
edebileceğimiz anlamına gelir.
- **Yanılgı 2**. Güven aralığı içindeki değerlerin, aralığın dışındaki
değerlere göre gerçek değer olma olasılığı daha yüksektir.
- **Yanılgı 3**. Gözlemlenen belirli bir :math:`\% 95` güven aralığının
gerçek değeri içerme olasılığı :math:`\% 95`'tir.
Güven aralıklarının narin nesneler olduğunu söylemek yeterli. Ancak
yorumlamasını net tutarsanız, bunlar güçlü araçlar olabilir.
Bir Gauss Örneği
~~~~~~~~~~~~~~~~
En klasik örneği, bilinmeyen ortalama ve varyansa sahip bir Gauss
dağılımının ortalaması için güven aralığını tartışalım. Gauss
dağılımdan, :math:`\mathcal{N}(\mu, \sigma^2)`'dan, :math:`n` örnek,
:math:`\{x_i\}_{i=1}^n`, topladığımızı varsayalım. Ortalama ve standart
sapma için tahmincileri şu şekilde hesaplayabiliriz:
.. math:: \hat\mu_n = \frac{1}{n}\sum_{i=1}^n x_i \;\text{and}\; \hat\sigma^2_n = \frac{1}{n-1}\sum_{i=1}^n (x_i - \hat\mu)^2.
Şimdi rastgele değişkeni düşünürsek
.. math::
T = \frac{\hat\mu_n - \mu}{\hat\sigma_n/\sqrt{n}},
:math:`n-1` *serbestlik derecesinde*, *Student-t (Öğrenci-t) dağılımı*
adı verilen iyi bilinen bir dağılımı izleyen rastgele bir değişken elde
ederiz.
Bu dağılım çok iyi incelenmiştir ve örneğin,
:math:`n \rightarrow \infty` iken, yaklaşık olarak standart bir Gauss
olduğu bilinir ve dolayısıyla bir tabloda Gauss b.y.f'nin değerlerine
bakarak :math:`T` değerinin zamanın en az :math:`\% 95`'inde
:math:`[- 1.96, 1.96]` aralığında olduğu sonucuna varabiliriz. :math:`n`
değerinin sonlu değerleri için, aralığın biraz daha büyük olması
gerekir, ancak bunlar iyi bilinmekte ve tablolarda önceden
hesaplanmaktadır.
Böylece, büyük $ n $ için diyebiliriz ki,
.. math::
P\left(\frac{\hat\mu_n - \mu}{\hat\sigma_n/\sqrt{n}} \in [-1.96, 1.96]\right) \ge 0.95.
Bunu her iki tarafı da :math:`\hat\sigma_n /\sqrt{n}` ile çarpıp
ardından :math:`\hat\mu_n` ekleyerek yeniden düzenleriz,
.. math::
P\left(\mu \in \left[\hat\mu_n - 1.96\frac{\hat\sigma_n}{\sqrt{n}}, \hat\mu_n + 1.96\frac{\hat\sigma_n}{\sqrt{n}}\right]\right) \ge 0.95.
Böylece, :math:`\% 95`'lik güven aralığımızı bulduğumuzu biliyoruz:
.. math:: \left[\hat\mu_n - 1.96\frac{\hat\sigma_n}{\sqrt{n}}, \hat\mu_n + 1.96\frac{\hat\sigma_n}{\sqrt{n}}\right].
:label: eq_gauss_confidence
Şunu söylemek güvenlidir: :eq:`eq_gauss_confidence` istatistikte en
çok kullanılan formüllerden biridir. İstatistik tartışmamızı uygulama
ile kapatalım. Basit olması için, asimptotik (kavuşma doğrusal) rejimde
olduğumuzu varsayıyoruz. Küçük :math:`N` değerleri, programlanarak veya
bir :math:`t`-tablosundan elde edilen ``t_star``'ın doğru değerini
içermelidir.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
# Örnek sayısı
N = 1000
# Örnek veri kümesi
samples = np.random.normal(loc=0, scale=1, size=(N,))
# Öğrenci t-dağılımının c.d.f.'sine bak
t_star = 1.96
# Aralık oluştur
mu_hat = np.mean(samples)
sigma_hat = samples.std(ddof=1)
(mu_hat - t_star*sigma_hat/np.sqrt(N), mu_hat + t_star*sigma_hat/np.sqrt(N))
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
(array(-0.07853346), array(0.04412608))
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
# PyTorch, varsayılan olarak Bessel'in düzeltmesini kullanır;
# bu, numpy'de varsayılan ddof=0 yerine ddof=1 kullanılması anlamına gelir.
# ddof=0'ı taklit etmek için unbiased=False kullanabiliriz.
# Örnek sayısı
N = 1000
# Örnek veri kümesi
samples = torch.normal(0, 1, size=(N,))
# Öğrenci t-dağılımının c.d.f.'sine bak
t_star = 1.96
# Aralık oluştur
mu_hat = torch.mean(samples)
sigma_hat = samples.std(unbiased=True)
(mu_hat - t_star*sigma_hat/torch.sqrt(torch.tensor(N, dtype=torch.float32)),\
mu_hat + t_star*sigma_hat/torch.sqrt(torch.tensor(N, dtype=torch.float32)))
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
(tensor(-0.0568), tensor(0.0704))
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
# Örnek sayısı
N = 1000
# Örnek veri kümesi
samples = tf.random.normal((N,), 0, 1)
# Öğrenci t-dağılımının c.d.f.'sine bak
t_star = 1.96
# Aralık oluştur
mu_hat = tf.reduce_mean(samples)
sigma_hat = tf.math.reduce_std(samples)
(mu_hat - t_star*sigma_hat/tf.sqrt(tf.constant(N, dtype=tf.float32)), \
mu_hat + t_star*sigma_hat/tf.sqrt(tf.constant(N, dtype=tf.float32)))
.. raw:: latex
\diilbookstyleoutputcell
.. parsed-literal::
:class: output
(,
)
.. raw:: html
.. raw:: html
Özet
----
- İstatistik, çıkarım sorunlarına odaklanırken, derin öğrenme, açıkça
programlamadan ve anlamadan doğru tahminler yapmaya vurgu yapar.
- Üç yaygın istatistik çıkarım yöntemi vardır: Tahmincileri
değerlendirme ve karşılaştırma, hipotez testleri yürütme ve güven
aralıkları oluşturma.
- En yaygın üç tahminci vardır: İstatistiksel yanlılık, standart sapma
ve ortalama hata karesi.
- Bir güven aralığı, örneklerle oluşturabileceğimiz gerçek bir
popülasyon parametresinin tahmini aralığıdır.
- Hipotez testi, bir popülasyonla ilgili varsayılan ifadeye karşı bazı
kanıtları değerlendirmenin bir yoludur.
Alıştırmalar
------------
1. :math:`X_1, X_2, \ldots, X_n \overset {\text{iid}}{\sim} \mathrm{Tekdüze} (0, \theta)`
olsun, burada "iid" *bağımsız ve aynı şekilde dağılmış* anlamına
gelir. Aşağıdaki :math:`\theta` tahmincilerini düşünün:
.. math:: \hat{\theta} = \max \{X_1, X_2, \ldots, X_n \};
.. math:: \tilde{\theta} = 2 \bar{X_n} = \frac{2}{n} \sum_{i=1}^n X_i.
- :math:`\hat{\theta}` için istatistiksel yanlılığı, standart
sapmayı ve ortalama hata karesini bulunuz.
- :math:`\tilde{\theta}` için istatistiksel yanlılığı, standart
sapmayı ve ortalama hata karesini bulunuz.
- Hangi tahminci daha iyi?
2. Girişteki kimyager örneğimiz için, iki taraflı bir hipotez testi
yapmak için 5 adımı türetebilir misiniz? İstatistiksel anlamlılık
düzeyini :math:`\alpha = 0.05` ve istatistiksel gücü
:math:`1 - \beta =0.8` alınız.
3. :math:`100` tane bağımsız olarak oluşturulan veri kümesi için güven
aralığı kodunu :math:`N = 2` ve :math:`\alpha = 0.5` ile çalıştırın
ve ortaya çıkan aralıkları çizin (bu durumda ``t_star = 1.0``).
Gerçek ortalama olan :math:`0`'ı içermekten çok uzak olan birkaç çok
kısa aralık göreceksiniz. Bu, güven aralığının yorumlamasıyla
çelişiyor mu? Yüksek hassasiyetli tahminleri belirtmek için kısa
aralıklar kullanmakta kendinizi rahat hissediyor musunuz?
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html