Python'da box-cox dönüşümü nasıl gerçekleştirilir?


Box-cox dönüşümü, normal olarak dağıtılmayan bir veri kümesini daha normal olarak dağıtılan bir kümeye dönüştürmek için yaygın olarak kullanılan bir yöntemdir.

Bu yöntemin arkasındaki temel fikir, aşağıdaki formülü kullanarak dönüştürülen verinin normal dağılıma mümkün olduğunca yakın olmasını sağlayacak bir λ değeri bulmaktır:

  • y(λ) = (y λ – 1) / λ eğer y ≠ 0 ise
  • y(λ) = log(y) eğer y = 0 ise

Python’da scipy.stats.boxcox() fonksiyonunu kullanarak box-cox dönüşümü gerçekleştirebiliriz.

Aşağıdaki örnekte bu fonksiyonun pratikte nasıl kullanılacağı gösterilmektedir.

Örnek: Python’da Box-Cox dönüşümü

Üstel bir dağılımdan rastgele 1000 değer kümesi oluşturduğumuzu varsayalım:

 #load necessary packages
import numpy as np 
from scipy. stats import boxcox 
import seaborn as sns 

#make this example reproducible
n.p. random . seeds (0)

#generate dataset
data = np. random . exponential (size= 1000 )

#plot the distribution of data values
sns. distplot (data, hist= False , kde= True ) 

Dağılımın normal görünmediğini görebiliyoruz.

Daha normal bir dağılım üreten optimal lambda değerini bulmak için boxcox() işlevini kullanabiliriz:

 #perform Box-Cox transformation on original data
transformed_data, best_lambda = boxcox(data) 

#plot the distribution of the transformed data values
sns. distplot (transformed_data, hist= False , kde= True ) 

Python'da Box-Cox dönüşümü

Dönüştürülen verilerin çok daha normal bir dağılım izlediğini görüyoruz.

Box-Cox dönüşümünü gerçekleştirmek için kullanılan tam lambda değerini de bulabiliriz:

 #display optimal lambda value
print (best_lambda)

0.2420131978174143

Optimum lambdanın 0,242 civarında olduğu bulundu.

Böylece, her bir veri değeri aşağıdaki denklem kullanılarak dönüştürüldü:

Yeni = (eski 0,242 – 1) / 0,242

Orijinal verinin değerleri ile dönüştürülmüş verinin değerlerine bakarak bunu doğrulayabiliriz:

 #view first five values of original dataset
data[0:5]

array([0.79587451, 1.25593076, 0.92322315, 0.78720115, 0.55104849])

#view first five values of transformed dataset
transformed_data[0:5]

array([-0.22212062, 0.23427768, -0.07911706, -0.23247555, -0.55495228])

Orijinal veri kümesindeki ilk değer 0,79587 idi. Bu değeri dönüştürmek için aşağıdaki formülü uyguladık:

Yeni = (.79587 0.242 – 1) / 0.242 = -0.222

Dönüştürülen veri kümesindeki ilk değerin gerçekten -0,222 olduğunu doğrulayabiliriz.

Ek kaynaklar

Python’da QQ Grafiği Nasıl Oluşturulur ve Yorumlanır
Python’da Shapiro-Wilk Normallik Testi Nasıl Yapılır

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir