Sparta/Theory

[250917] 통계 05 - 상관계수

junecho 2025. 9. 17. 19:34

✅ 상관계수                                                                 

🔰 피어슨 상관계수                                                                                                    

가장 대표적으로 많이 사용하는 상관계수

  • 그래프에서 점들이 직선적으로 퍼져 있으며, X와 Y의 선형 관계를 보여줌
  • 상관계수는 0.99로 매우 강한 양의 선형 관계를 나타냄

 

피어슨 상관계수

  • 두 연속형 변수 간의 선형 관계를 측정하는 지표
  • 데이터가 정규분포로 존재할 것이라는 가정을 할 수 있는 경우에만 사용 가능
  • -1에서 1 사이의 값을 가지며,
    • 1 : 완전한 양의 선형 관계
    • -1 : 완전한 음의 선형 관계
    • 0 : 선형 관계 ❌
  • ex) 선형적인 관계가 예상 될 때 - 공부 시간과 시험 점수 간의 상관관계 분석
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import pearsonr

# 예시 데이터 생성
np.random.seed(0)
study_hours = np.random.rand(100) * 10
exam_scores = 3 * study_hours + np.random.randn(100) * 5

# 데이터프레임 생성
df = pd.DataFrame({'Study Hours': study_hours, 'Exam Scores': exam_scores})

# 피어슨 상관계수 계산
pearson_corr, _ = pearsonr(df['Study Hours'], df['Exam Scores'])
print(f"피어슨 상관계수: {pearson_corr}")

# 상관관계 히트맵 시각화
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('pearson coefficient heatmap')
plt.show()

*>>>
피어슨 상관계수: 0.8642702080660165*

 

 

🔰 비모수 상관계수                                                                                                 

데이터가 정규분포를 따르지 않을 때 사용하는 상관계수

  • 데이터가 정규분포를 따르지 않거나 변수들이 순서형 데이터일 때 사용하는 상관계수
  • 데이터의 분포에 대한 가정 없이 두 변수 간의 상관관계를 측정할 때 사용
  • 데이터의 분포에 대한 가정을 하지 못할 때, 순서형 데이터에서도 사용하고 싶을 때 사용
  • 대표적으로 스피어만 상관계수, 켄달의 타우 상관계수

 

스피어만 상관계수

  • 두 변수의 순위 간의 상관 관계를 측정
  • 켄달의 타우 상관계수 보다 데이터 내 편차와 에러에 민감

 

켄달의 타우 상관계수

  • 순위 간의 일치 쌍 및 불일치 쌍의 비율을 바탕으로 계산
  • ex) 사람의 키와 몸무게에 대해 상관계수를 알고자 할 때 키가 크고 몸무게도 더 나가면 일치 쌍에 해당, 키가 크지만 몸무게가 더 적으면 불일치 쌍에 해당 이들의 개수 비율로 상관계수를 결정
from scipy.stats import spearmanr, kendalltau

# 예시 데이터 생성
np.random.seed(0)
customer_satisfaction = np.random.rand(100)
repurchase_intent = 3 * customer_satisfaction + np.random.randn(100) * 0.5

# 데이터프레임 생성
df = pd.DataFrame({'Customer Satisfaction': customer_satisfaction, 'Repurchase Intent': repurchase_intent})

# 스피어만 상관계수 계산
spearman_corr, _ = spearmanr(df['Customer Satisfaction'], df['Repurchase Intent'])
print(f"스피어만 상관계수: {spearman_corr}")

# 켄달의 타우 상관계수 계산
kendall_corr, _ = kendalltau(df['Customer Satisfaction'], df['Repurchase Intent'])
print(f"켄달의 타우 상관계수: {kendall_corr}")

# 상관관계 히트맵 시각화
sns.heatmap(df.corr(method='spearman'), annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('spearman coefficient heatmap')
plt.show()

*>>>
스피어만 상관계수: 0.8663546354635462
켄달의 타우 상관계수: 0.6690909090909092*

 

 

🔰 상호정보 상관계수                                                                                                

✔ 상호정보를 이용한 변수끼리의 상관계수 계산

  • 두 변수 간의 상호 정보를 측정
  • 변수 간의 정보 의존성을 바탕으로 비선형 관계를 탐지
  • 서로의 정보에 대한 불확실성을 줄이는 정도를 바탕으로 계산
  • 범주형 데이터에 대해서도 적용 가능
  • 두 변수가 범주형 변수일 때, 비선형적이고 복잡한 관계를 탐지하고자 할 때 사용
  • 상호정보 상관계수를 그림으로 확인해보기
    • 보라색 점들은 X와 Y 간의 비선형 관계를 나타냄
    • 상호 정보 값은 0.90으로 표시되어 있으며, 이는 두 변수 간의 강한 비선형 의존성을 의미

❗참고)

원칙적으로 상호정보 상관관계는 상관계수라는 표현을 굳이 사용하지는 않음

쉽게 이해를 돕기 위해서 다른 상관관계랑 같이 '상관계수'라는 표현을 사용하였지만, 일반적인 상관계수는 -1~1 사이로 정규화 되어 있는데 상호정보 상관관계는 0이상 (무한까지)의 범위를 가지고 있기 때문

import numpy as np
from sklearn.metrics import mutual_info_score

# 범주형 예제 데이터
X = np.array(['cat', 'dog', 'cat', 'cat', 'dog', 'dog', 'cat', 'dog', 'dog', 'cat'])
Y = np.array(['high', 'low', 'high', 'high', 'low', 'low', 'high', 'low', 'low', 'high'])

# 상호 정보량 계산
mi = mutual_info_score(X, Y)
print(f"Mutual Information (categorical): {mi}")

*>>> 
Mutual Information (categorical): 0.6931471805599456*

 


🔰 문제                                                                                                                     

더보기
  1. 피어슨 상관계수(Pearson correlation coefficient)의 의미를 설명하세요.
    1. 두 변수 간의 비선형 관계를 측정한다.
    2. 두 변수 간의 선형 관계를 측정한다.
    3. 두 변수 간의 독립성을 측정한다.
    4. 두 변수 간의 비모수 관계를 측정한다.
  2. 비모수 상관계수(non-parametric correlation coefficient)의 대표적인 예로 옳지 않은 것을 고르세요.
    1. 피어슨 상관계수
    2. 스피어만 상관계수
    3. 켄달의 타우 상관계수
    4. 정답 없음
  3. 상호정보(Mutual Information) 상관계수의 의미를 설명하는 것을 모두 고르세요.
    1. 두 변수 간의 선형 관계를 측정한다.
    2. 두 변수 간의 비선형 관계를 측정한다.
    3. 두 변수 간의 상호 정보를 측정한다.
    4. 두 변수 간의 독립성을 측정한다.

'Sparta > Theory' 카테고리의 다른 글

[250922] 스파르타코딩 본캠프 35일차  (0) 2025.09.22
[250917] 통계 06 - 주의점  (0) 2025.09.17
[250917] 통계 04 - 회귀  (1) 2025.09.17
[250916] 통계 03 - 검정  (0) 2025.09.16
[250916] 통계 02 - 분포  (0) 2025.09.16