상관관계에 대해 이해한다.
다양한 상관관계 계산의 특징과 차이점을 이해하고 적용한다.
가장 많이 사용하는 상관계수!

피어슨 상관계수
- 가장 왼쪽 그래프
- x, y 의 선형 관계
- 점들이 직선형태로 퍼져있고, 상관계수 0.99로 매우 강한 양의 선형 관계
- 두 연속형 변수 간(= 수치 형태의 변수)의 선형 관계 ➡️ 연속형이 아니면 피어슨 상관계수 ❌
- -1에서 1사이 (1은 완전 양의 선형 / -1은 완전 음의 선형 / 0은 선형관계 없음)
피어슨 상관계수의 사용 ➡️ 선형적인 관계가 예상될 때 !!!! (비선형 관계에선 사용❌)
- 공부 시간과 시험 점수 간의 상관관계 분석

실습
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

비모수 상관계수
데이터가 정규분포를 따르지 않을 때 사용하는 상관계수!!
예) 순서형 데이터 : 등급, 등수 ... > 비모수 상관계수 사용(피어슨 X)
데이터의 분포에 대한 가정 없이 두 변수 간의 상관관계 측정
대표적으로 스피어만 상관계수, 켄달타우 상관계수가 있다.

스피어만 상관계수
- 두 변수의 순위 간의 일관성 측정
- 초록색 점들 (위 예시는 조금 안좋은 예시)
- 데이터 내 편차와 에러에 민감
켄달타우 상관계수
- x, y의 비선형 관계
- 순위 간의 일치 쌍 및 불일치 쌍의 비율로 계산
- 예) 키 크고 , 몸무게 큼 : 일치 쌍 / 키 큰데, 몸무게 작음 : 불일치 쌍
비모수 상관계수(스피어만, 켄달타우)의 사용
- 데이터의 분포에 대한 가정을 하지 못할 때
- 순서형 데이터에서 사용하고 싶을 때
실습
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

상호정보 상관계수
상호정보를 이용한 변수끼리의 상관계수 계산!
‼️ 참고
더보기
참고)
원칙적으로 상호정보 상관관계는 상관계수라는 표현을 굳이 사용하지는 않습니다.
쉽게 이해를 돕기 위해서 다른 상관관계랑 같이 '상관계수'라는 표현을 사용하였지만, 일반적인 상관계수는 -1~1 사이로 정규화 되어 있는데 상호정보 상관관계는 0이상 (무한까지)의 범위를 가지고 있기 때문입니다.
- 변수 간의 정보 의존성을 바탕을 비선형 관계를 탐지
- 서로의 정보에 대해 불확실성을 줄이는 정도를 바탕으로 계산
- 범주형 데이터에 대해서도 적용 가능
- x, y 간의 비선형 관계를 타나냄
- 상호 정보 값 = 0.90으로 표시 : 두 변수 간의 강한 비선형 의존성을 의미

상호정보 (상관계수)의 사용
- 두 변수가 범주형 변수일 때
- 비선형적이고 복잡한 관계를 탐지하고자 할 때
실습
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
끝.
'통계 (Statistics)' 카테고리의 다른 글
| [통계/세션] 4회차 - 데이터셋으로 실습 ( 수업 흐름대로, 의식 흐름대로 ) (0) | 2025.10.03 |
|---|---|
| [통계/세션] 3회차 (이론)- 가설검정 & 상관관계 (3) | 2025.10.01 |
| [통계/인강] 챕터4 - 선형회귀 | 다중회귀 | 범주형 변수 | 다항회귀 & 스플라인 회귀 (0) | 2025.10.01 |