Kovaryans & Python Uygulaması

Asli Cerman
Machine Learning Turkiye
4 min readAug 8, 2021

Kovaryans, rassal iki değişken arasındaki doğrusal ilişki ölçülerinden biridir. Kovaryans değeri ile iki değişkenin birlikte ne kadar değiştikleri ve aralarındaki ilişkinin yönü hakkında fikir sahibi oluruz.

Kovaryans değerlerinin sınırları yoktur ve değişkenlerin birimine bağlı olarak ölçülür. Bu durum yorumlama güçlüğüne neden olur. Çünkü farklı ölçeklere sahip veri kümelerindeki varyans değerleri karşılaştırılabilir değildir. Bir veri kümesindeki zayıf bir kovaryans değeri, farklı ölçeklere sahip farklı bir veri kümesinde güçlü bir kovaryans değerine denk olabilir.

Değişkenlerin değeri ne kadar büyük olursa kovaryans değeri de o kadar büyük olacaktır. Kovaryans bize değişkenlerin arasındaki ilişkinin yönü hakkında bilgi verir ancak bu ilişkinin ne kadar güçlü olduğunu söylemez. (Bu bilgiyi bize korelasyon katsayısı verir. Kovaryansı standart sapmaya bölerek korelasyon katsayısını elde ederiz. Korelasyon katsayısı için kovaryansın standartlaştırılmış versiyonu diyebiliriz.

Kovasyans Formülü

Aşağıdaki formüle göre pay “ortalamaya göre düzeltilmiş değişkenlerin çarpımlar” toplamını verir. Bu değerin serbestlik derecesine böldüğümüzde kovaryans değerini elde ederiz. “Gözlem sayısı fazla olduğunda n-1 yerine n’nin kullanılması tercih edilir.” (Çok Değişkenli İstatiksel Yöntemler — Prof. Dr. Reha Alpar.)

Kovaryans varyansa benzemekle birlikte, varyans tek bir değişkenin nasıl değiştiğinin, kovaryans ise iki değişkenin birlikte nasıl değiştiklerinin ölçüsüdür.

https://towardsdatascience.com/the-geometric-meaning-of-covariance-f8e6df967111

Buna göre;

  • Değişkenler aynı yönde hareket ediyorsa aralarındaki kovaryans değeri pozitiftir.
  • İki değişken birinin tam tersi yönde hareket ediyorsa aralarındaki kovaryans değeri negatiftir.
  • Eğer değişkenler arasında bir ilişki yok ise kovaryans değeri sıfıra yakındır.
https://www.statisticshowto.com/probability-and-statistics/statistics-definitions/covariance/

Bir örnek ile açıklamak gerekirse; aşağıdaki grafiğin kişilerin boy (y) ve kilo (x) değerlerini gösterdiğini varsayalım. x ve y eksenlerini tam ortadan kesen doğrular ise boy ve kilo için ortalama değerleri işaret etmektedir. Grafikte her veri noktası için bir dikdörtgen kullanılarak verilerin ortalamaya olan uzaklıkları belirtilmiş.

Emma Freedman -Visual Explanation of Principal Component Analysis, Covariance, SVD

Buna göre grafikte sağ üst ve sol alt köşe boy ve kilo açısından aynı yönde hareket eden (pozitif kovaryans) veri noktalarını , sol üst ve sağ alt köşe ise ters yönde hareket eden (negatif kovaryans) veri noktalarını göstermektedir.

Örneğin sol alt köşede büyük dikdörtgene ait değer , hem boy hem de kiloya ait ortalama değerin altında kalmaktadır. Sol üst köşede kırmızı dikdörtgene ait değer kilo değişkenine ait ortalamanın altındayken boy değişkenine ait ortalamanın üzerindedir.

Tüm bu alanları toplayıp gözlem sayısını böldüğümüzde elimizde bir renkte bir alan kalacaktır. İşte bu alan ile temsil edilen değer bize iki değişken arasındaki ilişki hakkında bilgi veren kovaryans değerini verecektir.

Bir değişkenin kendisi ile yaptığı kovaryans, o değişkenin varyans değerine eşittir. Buna göre p x p boyutlu değişkenlerin karşılıklı kovaryans değerlerine ait matris aşağıdaki gibi bir simetrik varyans-kovaryans matrisi olacaktır.

Emma Freedman -Visual Explanation of Principal Component Analysis, Covariance, SVD

Python Uygulaması

x ve y değişkenleri için kovaryans değerini formüldeki eşitliğe göre uygulayacak şekilde Python kodlarını oluşturalım.

import numpy as np
from functools import reduce
x = [4, 8, 9, 6, 15, 2]
y = [1, 6, 7, 9, 2, 10]
def mean(data):
return reduce(lambda a, b: a + b, data) / len(data)
def cov(x,y):
if len(x) != len(y):
return
#değişkenlerin ortalamaya göre düzeltilmiş çarpımlar toplamı
sum_of = 0
for i,j in zip(x,y):
sum_of += (i - mean(x)) * (j - mean(y))
return sum_of/(len(x)-1)
cov(x,y)
-7.533333333333334

Aynı hesaplamayı bir de numpy ile gerçekleştirelim.

np.cov(x,y)
array([[20.66666667, -7.53333333],
[-7.53333333, 13.36666667]])

x ve y değişkenleri için Numpy ile ulaştığımız kovaryans sonucunda gelen array’in simetrik varyans-kovaryans matrisi olduğunu hatırlayarak aşağıdaki gibi yorumlamalıyız.

cov(x,x)  cov(x,y)

cov(x,y) cov(y,y)
np.cov(x,y)[0][1]
-7.53333333

Umarım faydalı olmuştur.

Kaynaklar

Çok Değişkenli İstatiksel Yöntemler — Prof. Dr. Reha Alpar

How would you explain covariance to someone who understands only the mean?
https://stats.stackexchange.com/questions/18058/how-would-you-explain-covariance-to-someone-who-understands-only-the-mean

--

--

Asli Cerman
Machine Learning Turkiye

Data Scientist at Tanı Pazarlama ve İletişim Hizmetleri A.Ş.