blog posts

Python’da veri biliminde önyükleme pratik rehber

Modellerin ve istatistiksel tahmincilerin hatasını tahmin etmek için önemli ve parametrik olmayan tekniklerden biri, yeniden örneklemenin kullanılması ve tahmin edicinin farklı örneklemler altında hesaplanmasıdır. Bu durumda tahmin edicilerin değerlerinin farklı örneklemlerden varyansı veya standart sapması tahmin edicinin hatası olarak kabul edilir. Aslında, tahmin edicinin hatasını bulmanın böyle bir yöntemine “Önyükleme” denir. Önyükleme, veri biliminde bir bilgisayar yöntemi ve tekniği olduğu için, bu yazıda Python programlama dilinin yardımıyla gerçekleştirdik.

 

Tabii ki, bootstrap teriminin ayakkabıya dikilen ve botların veya ağır ayakkabıların giyildiği kayış veya kayış ile ilgili olduğunu unutmayın, “Bradley Efron” adlı istatistikçiler bu yenilikçi yönteme bootstrap adını verdiler. dağılımını bilmeden zor olan tahmin edicinin hatasını hesaplamak, onun yöntemiyle basit ama sabit bir görevi tekrarlama şeklinde uygulanabilir ve neyse ki iyi bir yaklaşıklığa sahiptir.

Yeniden örnekleme yöntemi ve buna dayalı analiz teknikleri hakkında daha fazla bilgi edinmek için Jackknife ve Bootstrap yeniden örnekleme yöntemlerini sade bir dille okuyun . Sade bir dille Örnekleme ve Yeniden Örnekleme’yi de okumaya değer .

Python’da Veri Biliminde Bootstrap

Veri biliminde önyükleme, çok fazla hipoteze dayanmadan istatistiksel çıkarım için güçlü, bilgisayar tabanlı bir yöntemdir. Bir veri örneğinden bir örnekleme dağılımı oluşturmak sadece sihirdir. Önyüklemede istatistiksel çıkarım için, tahmin edicilerin istatistiksel dağılımını bilmeye gerek yoktur. Bu sayede “Bootstrap”, “Makine Öğrenimi” alanında bile “Güven Aralığı” , “Regresyon Modeli” oluşturmak için yaygın olarak kullanılmaktadır . Bu metinde, veri biliminde önyükleme ile ilgili iki konuyu tartışacağız:

  1. güven aralığı oluşturma
  2. İstatistiksel bir hipotez testi gerçekleştirin

Tabii ki, bu durumların her biri, açık istatistiksel yöntemler ve bootstrap yardımıyla yapılır ve sonuçları karşılaştırırız. Bu arada, Python dilinin veri bilimindeki yöntemleri gerçekleştirmedeki geniş yelpazesi nedeniyle, hesaplamaları ve ilgili işlemleri gerçekleştirmek için bu dilde kodlar da tanıtıyoruz.

Veri biliminde önyükleme ile güven aralığı oluşturma

Gerçek dünyada, popülasyon veya istatistiksel popülasyon ve değişkenlerinin özellikleri ve özellikleri hakkında açık bilgilere sahip değiliz. Örneğin, tartıştığımız istatistiksel topluluk, gezegenin tüm nüfusu veya borsadaki geçmiş işlemler ve hatta bir şirketin mevcut ve gelecekteki cirosu olabilir. Ana sorun, istatistiksel popülasyonun büyük boyutundan dolayı, popülasyonun istatistiksel özelliklerine uygun bir tahminde bulunmak için örnekler almak zorunda olmamızdır.

Aslında, bu popülasyonla ilgili parametreyi anlamak ve bilmek için örneklem dağılımına güveniyoruz. Hipotez testi ve güven aralıklarının nasıl oluşturulacağı için farklı adlar vardır:

  • Örnek T-Testi
  • İki örnek t-testi
  • Z testi
  • Ki-kare Testi

Bunlardan herhangi birine parametrik olmayan bir alternatif, önyükleme yöntemini kullanmak olabilir. Bu makalede, ilgilenilen bir parametre için bir güven aralığı oluşturmak üzere örnekleme dağılımının nasıl kullanıldığını görmek için bir örnek üzerinden geçeceğiz.

Amaç : Alınan örneklerden kahve içen kişilerin boy ortalamaları hakkında fikir sahibi olmak istiyoruz.

İlk yöntem: önyükleme yöntemini kullanma

(kahve_full.csv) adlı bir dosyada saklanan tüm kahve içenlerin bir veri setine sahip olduğumuz varsayılmaktadır. Bu dosyayı sıkıştırılmış biçimde buradan indirin . Bu dosyayı açtıktan sonra aşağıdaki kod ile çağırabilirsiniz.

coffee_full = pd.read_csv(‘coffee_full.csv’)
Not : csv dosya biçimi. veya (Virgülle Ayrılmış Değerler), değişken sütunlarının birbirinden virgülle (,) ayrıldığı veri dosyalarını ifade eder.

Aşağıdaki komut yardımıyla coffee_full veritabanından 200’lük bir örnek olarak bir veri altkümesi oluşturuyoruz. Bu veri kümesine coffee_red adını verdik. Bundan sonra, hesaplamaları yapmak için bu örneği kullanacağız. Hatta bu sayede gerçek bir toplum örneği oluşturmuş oluyoruz.

coffee_red = coffee_full.sample(n=200)
Aşağıdaki komutları göz önünde bulundurun. Bu kod parçasının yardımıyla veri tabanımızda kahve içenlerin oranı hesaplanarak çıktıya yerleştirilmiştir.
[coffee_red[‘drinks_coffee’]==True].mean()
---Output---
0.595
Aşağıdaki kodda insanların ortalama boyları inç cinsinden hesaplanmıştır .
coffee_red[coffee_red[‘drinks_coffee’]==True]['height'].mean()
---Output---
68.119 inches
Şimdi aşağıdaki koda dayanarak veri biliminde bootstrap tekniğini kullanıyoruz ve ortalama için bir güven aralığı oluşturuyoruz.
# Let's first create an empty list for storing means of bootstrapped samples
boot_means = []
# Let's write a loop for creating 1000 bootstrapped samples
for i in range(1000):
    bootsample = coffee_red.sample(200, replace=True)
    bootsample_mean = bootsample.[bootsample[‘drinks_coffee’]==True]['height'].mean()
    boot_means.append(bootsample_mean)
boot_means = np.array(boot_means)
%95 güven veya aslında %5 hata için, ortalamayı 100 örnekleme zamanına göre tahmin ediyoruz. Bunların arasından en düşük değere sahip olanların %2,5’ini çıkaracağız. Ayrıca en yüksek tutara sahip olanlardan %2,5’luk pay da kaldırılacaktır. Kalan ortalamalar %95’lik bir güven aralığı oluşturur. Aslında, bu ortalamaların üst sınırının alt sınırı, istatistiksel popülasyon ortalaması için aynı %95 güven aralığıdır.
# we build 95% in the middle portion
np.percentile(boot_means, 2.5), np.percentile(boot_means, 97.5)
---Output---
(66.00, 67.59)

Yukarıdaki kodda üretilen güven aralığı, popülasyonun yüksekliği için %95 güvenle ortalamanın sınırları olarak kabul edilebilir. Persentil komutu yüzdelikleri belirtir, bu nedenle 2,5 ve 97,5 yüzdelik dilimlerini belirledik.

Bu güven aralığını görüntülemek için bir frekans tablosu (Histogram) kullanıyoruz. Aşağıda gördüğünüz kod, Bootstrap tarafından oluşturulan ortalamaların sıklığını göstermek içindir. Merkezden simetrik olarak tüm grafiğin %95’ine eşit alana sahip alan veya bölge güven aralığı olacaktır.

plt.hist(boot_means, alpha=0.7);
plt.axvline(np.percentile(boot_means, 2.5), color='red', linewidth=2) ;
plt.axvline(np.percentile(boot_means, 97.5), color='red', linewidth=2) ;
Aşağıdaki resimde, ortaya çıkan frekans diyagramını görebilirsiniz.

Güven aralığının yorumlanması

Bir güven aralığı, belirli bir güven düzeyiyle popülasyon ortalaması için bir zarf oluşturabileceğimiz rasgele sınırların belirlenmesidir. Bu şekilde, örneğin, aralığın doğru olduğundan %95 emin olduğumuzu söylüyoruz.(66.0,67.59)Nüfus ortalamasını (yani kahve içen insanların ortalama boyunu) içerir.

Aşağıdaki kodda, istatistiksel popülasyonun (tartışmamızın konusu olan tüm kişilerin) ortalamasının nasıl hesaplanacağı belirtilmiştir.

coffee_full[coffee_full[‘drinks_coffee’]==True][‘height’].mean()
---Output---
66.44 inch
Açıktır ki verilen aralık, yani(66.0,67.59)miktar dahil66.44Dır-dir.

İkinci yöntem: İstatistiksel varsayım testi (t-Test) yardımıyla güven aralığı oluşturma

Nüfus parametresi için istatistiksel güven aralığını hesaplamanın başka yöntemleri de vardır. Bu, özellikle ortalama testi gerçekleştiren işlevler kullanılırken geçerlidir.

Ortalama karşılaştırma testi yapmak için Python ile yazılan kod aşağıda görülebilir. Cm.tconfint_diff ifadesinde örneklemde yer alan iki grubun (kahve_kırmızısı) ve diğerlerinin ortalama boy farkı için bir güven aralığı oluşturulur.

import statsmodels.stats.api as sm
X1 = coffee_red[coffee_red['drinks_coffee']==True]['height'] 
X2 = coffee_red[coffee_red['drinks_coffee']==False]['height']
cm = sm.CompareMeans(sm.DescrStatsW(X1), sm.DescrStatsW(X2))
print (cm.tconfint_diff(usevar='unequal'))
Bu kodu çalıştırarak, bootstrap yönteminin parametrik olmayan doğasından kaynaklanan, bootstrap güven aralığının sonuçları ile doğrudan istatistiksel yöntemin sonuçları arasında küçük bir fark olduğunu görebilirsiniz. Veri dağılımının bilinmesi koşuluyla doğrudan yöntemin daha doğru ve güvenilir olduğu açıktır.

Doğrudan yöntemde güven aralığı boyutunun (üst ve alt sınırlar arasındaki fark) bootstrap yöntemine göre daha küçük olması gerektiği görülmektedir.

Veri biliminde istatistiksel hipotez testi ve önyükleme

Bir veri analisti olarak, istatistiksel hipotez ve hipotez testi kavramlarına aşina olmalısınız. Bu terimlere aşina değilseniz,  istatistiksel analizlerin ve testlerin – kavramlar ve terimler – içeriğini okumak daha iyidir.

İstatistiksel hipotez testi, toplumun istenen parametresine ilişkin iki hipotezi kullandığımız ve örnekleme sonuçlarına göre birini reddettiğimiz veya onayladığımız bir tekniktir.

İstatistiksel hipotez testine göre, insanların ortalama boyları hakkında bir hipotez oluşturmak ve aldığımız örneğe göre hipotezleri doğrulamak veya reddetmek istiyoruz. Kahve içen insanların ortalama boyunun 70 inçten uzun olup olmadığını bilmek istediğimizi unutmayın.

Bildiğiniz gibi, istatistiksel hipotez testi sıfır hipotezi ve zıt hipotez olarak adlandırılan iki hipotezden oluşur. Problemimiz için, bu hipotezleri aşağıdaki gibi değerlendirdik. Genellikle zaten var olan bir görüş veya hükmün “Sıfır Hipotez” veya “Yok Hipotez” içinde yazıldığını ve araştırmacı için istenen kararın (genellikle önceki hükmün tersi yönde olan) “Karşıt Hipotez” olarak adlandırıldığını unutmayın. “Alternatif Hipotez” olarak yazılır.

Şimdi, bu hipotezlerin her birinin geçerliliğine karar vermek için iki yöntem kullanıyoruz. İlk başta, veri bilimindeki önyükleme tekniğine dayanarak, hipotezleri test ediyoruz. Daha sonra simülasyon teknikleri ile sıfır hipotezinin doğruluğunu ölçeriz.

İlk yöntem: sıfır hipotezinin fizibilitesinin önyükleme yardımıyla kontrol edilmesi

Bu bölümde verileri 1000 kez simüle edip örneklem ortalamasını hesaplayarak popülasyon ortalaması için bir örneklem dağılımı ve güven aralığı oluşturuyoruz. Üretilen güven aralığı sıfır hipotezi ile tutarlıysa, o hipotezin doğrulanacağını biliyoruz. Ayrıca, güven aralığı karşıt hipotezle eşleşirse sıfır hipotezini reddederiz ve karşıt hipotezi doğrularız.

means = []
for i in range(10000):
   bootsample = sample_df.sample(n=150, replace = True)
   bootsample_mean = bootsample[bootsample['drinks_coffee']==True]
   means.append(bootsample_mean['height'].mean())
means = np.array(means)
np.percentile(means, 2.5), np.percentile(means, 97.5)
---Output---
(66.00, 67.59

Görüldüğü gibi üretilen %95 güven aralığı 66.0 ve 67.59 limitleri ile elde edilmektedir. Karşı varsayımda bahsedilen 70 değeri bu aralığa dahil değildir ve aralık 70’ten küçüktür. Dolayısıyla sıfır hipotezini reddetmek için bir sebep olmadığı ve zıt hipotezin reddedildiği söylenebilir.

İkinci yöntem: sıfır hipotezini simüle etmek

İstatistiksel hipotez testinde boş hipotezin doğru olduğunu varsayalım. Bu şekilde, bu varsayıma göre normal dağılımı simüle edersek ve birçok değer üretirsek, örneklem ortalamasının bunlara yakın olmasını ve sıfır hipotezinin doğrulanmasını bekleriz.

Aşağıdaki komutta, ortalama 70 ve ortalamaların standart sapması ile normal bir dağılımı simüle ettik. 70 değerinin sıfır hipotezinin veya zıt hipotezin sınırlarına karşılık geldiğini unutmayın.

null_vals = np.random.normal(loc = 70, scale = np.std(means), size =10000)

Her örnekleme, sıfır hipotezine dayalı olarak oluşturulmuş bir ortalama üretir. Bu simülasyonun yardımıyla, örnek ortalamanın karşılık gelen normal dağılımda nerede olduğu sorusuna cevap vermek mümkündür.

plt.hist(null_vals, alpha=0.7);
plt.axvline(sample_mean, color = 'red', linewidth=2);

Bu kodun çıktısı aşağıdaki şemada gösterilmiştir.

 

Bahsedilen istatistiksel hipotezlere göre sıfır hipotezinin doğrulanması ve zıt hipotezin reddedilmesi gerekmektedir.

p_value = (null_vals > sample_mean).mean()
p_value
--Output--
1.0

p değeri için büyük değerler , boş hipotezin doğrulandığını gösterir ve sıfır hipotezini reddetmek için bir neden olamaz. Böylece, ortalama nüfusun (kahve içenlerin boyu) 70 inçten az veya ona eşit olduğu görülmektedir. p-değeri ile ilgili aşağıdaki noktalara dikkat ediniz.

  • Görsel olarak, p-değeri, kırmızı çizginin sağ tarafında bulunan yukarıdaki resme karşılık gelen eğrinin altındaki alandır. Tüm değerler kırmızı çizginin sağında olduğundan, tüm değerler sıfır hipotezini doğrulamaya katkıda bulunur ve sıfır hipotezini reddedecek bir kanıt yoktur.
  • Burada p-değerini, numune ortalama değerinin (değer 67.5) normal dağılımından (ortalama 70 ve varyans numune varyansına eşit) numunelerin çıkardığı veya simüle ettiği durum sayısının ortalaması (veya olasılık değeri) olarak kabul ediyoruz. daha fazla.

Olasılık değerinin (p-değeri) nasıl hesaplanacağı hakkında daha fazla bilgi edinmek için, istatistiksel hipotez testindeki olasılık değerinin (p-Değeri) yazısını basit bir dille okumak daha iyidir.

Özet ve sonuç

Bu yazıda, veri biliminde açık önyükleme örnekleme yöntemini göz önünde bulundurarak, güven aralığını ve istatistiksel testi hesapladık ve bir veri örneğine dayanarak Python’da önyükleme tekniğini uyguladık. Görüldüğü gibi veri biliminde bootstrap tekniğinden elde edilen tahmincilerden elde edilen sonuçlar istatistiksel yöntemlerden elde edilen değerlerden pek farklı olmamakta ve yaklaşık olarak istenilen istatistiğin dağılımını bilemediğimiz durumlarda tatminkar sonuçlar elde edilmektedir. önyükleme