Що таке коваріація?
Коваріація — це числова міра, яка кількісно визначає зв'язок між двома змінними.
Вона показує, як зміни однієї змінної відповідають змінам іншої змінної. Більш конкретно, коваріація вимірює спільну варіативність двох змінних і дає уявлення про напрямок (додатній або від’ємний) цієї варіативності.
Обчислення коваріації
- Провести перший стохастичний експеримент кілька разів і записати результати кожного експерименту в масив. Це буде масив
x
; - Провести другий стохастичний експеримент кілька разів і записати результати в масив
y
; - Обчислити коваріацію за допомогою бібліотеки
numpy
:covariance = np.cov(x, y)[0, 1]
.
Приклади
12345678910111213141516171819import numpy as np import matplotlib.pyplot as plt # Assume that results of some stochastic experiments are stored in x array x = np.random.rand(100) * 10 # We provide another stochastic experiment by using the value of x and adding some noise y = x + np.random.randn(100) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
Ми бачимо, що зі збільшенням значення x
значення y
також зростає. Кореляція, отже, є позитивною. Розглянемо інший експеримент:
12345678910111213141516171819import numpy as np import matplotlib.pyplot as plt # Assume that resylts of some stohastic experiments are stored in x array x = np.random.rand(100) * 10 # We provide another stohastic experiment by using the value of -x and adding some noise y = -x + np.random.randn(100) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
Тепер, коли значення x
зростає, значення y
зменшується, і коваріація є негативною. Тепер розглянемо коваріацію між результатами двох незалежних експериментів:
1234567891011121314151617181920import numpy as np import matplotlib.pyplot as plt # Generate random data for two variables with zero correlation np.random.seed(0) x = np.random.rand(200) y = np.random.rand(200) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
У результаті можна зробити висновок:
- Якщо коваріація між двома величинами додатна, то зі збільшенням першої величини друга також зростає;
- Якщо коваріація між двома величинами від’ємна, то зі збільшенням першої величини друга зменшується;
- Якщо величини незалежні, то їхня кореляція дорівнює нулю (вони некорельовані).
Зверніть увагу на останній пункт: кореляція дорівнює нулю, якщо величини незалежні. Але обернене твердження не є істинним: якщо кореляція дорівнює нулю, це не означає незалежність. Розгляньте приклад:
1234567891011121314151617181920212223242526import numpy as np import matplotlib.pyplot as plt # Set the number of vectors/points to generate num_points = 1000 # Generate random angles uniformly distributed between 0 and 2*pi angles = np.random.uniform(0, 2*np.pi, num_points) # Convert angles to vectors in polar coordinates r = np.sqrt(np.random.uniform(0, 1, num_points)) # Square root to achieve uniform distribution within the circle x = r * np.cos(angles) y = r * np.sin(angles) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
Точки у наведеному вище прикладі знаходяться всередині одиничного кола, тому є залежними, але некорельованими.
Загалом, лише лінійні зв'язки між значеннями можна добре ідентифікувати за допомогою коваріації. Таким чином, у випадку некорельованих значень можна зробити висновок, що вони не мають лінійних залежностей, але можуть мати інші, більш складні типи залежностей.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.85
Що таке коваріація?
Свайпніть щоб показати меню
Коваріація — це числова міра, яка кількісно визначає зв'язок між двома змінними.
Вона показує, як зміни однієї змінної відповідають змінам іншої змінної. Більш конкретно, коваріація вимірює спільну варіативність двох змінних і дає уявлення про напрямок (додатній або від’ємний) цієї варіативності.
Обчислення коваріації
- Провести перший стохастичний експеримент кілька разів і записати результати кожного експерименту в масив. Це буде масив
x
; - Провести другий стохастичний експеримент кілька разів і записати результати в масив
y
; - Обчислити коваріацію за допомогою бібліотеки
numpy
:covariance = np.cov(x, y)[0, 1]
.
Приклади
12345678910111213141516171819import numpy as np import matplotlib.pyplot as plt # Assume that results of some stochastic experiments are stored in x array x = np.random.rand(100) * 10 # We provide another stochastic experiment by using the value of x and adding some noise y = x + np.random.randn(100) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
Ми бачимо, що зі збільшенням значення x
значення y
також зростає. Кореляція, отже, є позитивною. Розглянемо інший експеримент:
12345678910111213141516171819import numpy as np import matplotlib.pyplot as plt # Assume that resylts of some stohastic experiments are stored in x array x = np.random.rand(100) * 10 # We provide another stohastic experiment by using the value of -x and adding some noise y = -x + np.random.randn(100) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
Тепер, коли значення x
зростає, значення y
зменшується, і коваріація є негативною. Тепер розглянемо коваріацію між результатами двох незалежних експериментів:
1234567891011121314151617181920import numpy as np import matplotlib.pyplot as plt # Generate random data for two variables with zero correlation np.random.seed(0) x = np.random.rand(200) y = np.random.rand(200) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
У результаті можна зробити висновок:
- Якщо коваріація між двома величинами додатна, то зі збільшенням першої величини друга також зростає;
- Якщо коваріація між двома величинами від’ємна, то зі збільшенням першої величини друга зменшується;
- Якщо величини незалежні, то їхня кореляція дорівнює нулю (вони некорельовані).
Зверніть увагу на останній пункт: кореляція дорівнює нулю, якщо величини незалежні. Але обернене твердження не є істинним: якщо кореляція дорівнює нулю, це не означає незалежність. Розгляньте приклад:
1234567891011121314151617181920212223242526import numpy as np import matplotlib.pyplot as plt # Set the number of vectors/points to generate num_points = 1000 # Generate random angles uniformly distributed between 0 and 2*pi angles = np.random.uniform(0, 2*np.pi, num_points) # Convert angles to vectors in polar coordinates r = np.sqrt(np.random.uniform(0, 1, num_points)) # Square root to achieve uniform distribution within the circle x = r * np.cos(angles) y = r * np.sin(angles) # Calculate the covariance covariance = np.cov(x, y)[0, 1] plt.scatter(x, y) # Add labels and title plt.xlabel('X') plt.ylabel('Y') plt.title('Covariance is '+ str(round(covariance, 3) )) # Show the plot plt.show()
Точки у наведеному вище прикладі знаходяться всередині одиничного кола, тому є залежними, але некорельованими.
Загалом, лише лінійні зв'язки між значеннями можна добре ідентифікувати за допомогою коваріації. Таким чином, у випадку некорельованих значень можна зробити висновок, що вони не мають лінійних залежностей, але можуть мати інші, більш складні типи залежностей.
Дякуємо за ваш відгук!