[내일배움캠프] 통계학 기초 (8)

셔닝🧸·2025년 7월 8일
0

오늘의 학습

상관관계
1. 피어슨 상관계수
2. 비모수 상관계수
3. 상호정보 상관계수


  1. 피어슨 상관계수

➖ 두 연속형 변수(숫자형) 간 선형 관계 측정 지표
➖ X와 Y의 선형 관계를 보여줌(직선적)
➖ -1 ~ 1 사이의 값

  • 1: 완전한 양의 선형 관계
  • -1: 완전한 음의 선형 관계
  • 0: 선형 관계 X

[사용하는 경우]
➖ 선형적 관계가 예상 될 때
➖ 숫자형 데이터일 때
➖ 정규분포를 따를 때

[파이썬 실습]

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import pearsonr

# 피어슨 상관계수 계산
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()

  1. 비모수 상관계수

➖ X와 Y 두 변수 순위 간 상관 관계 측정
➖ -1 ~ 1 사이의 값
➖ 종류: 스피어만 상관계수, 켄달의 타우 비선형 상관계수

  • 스피어만 상관계수: 두 변수의 순위 간 일관성 측정, 데이터 내 편차와 에러에 민감
  • 켄달의 타우 비선형 상관계수: 순위 간 일치 쌍 및 불일치 쌍 비율 바탕으로 계산

➖ 비선형 관계

[사용하는 경우]

➖ 데이터 분포에 대한 가정을 하지 못할 때
➖ 순서형 데이터에서도 사용하고 싶을 때
➖ 정규분포를 따르지 않을 때

[파이썬 실습]

from scipy.stats import spearmanr, kendalltau

 스피어만 상관계수 계산
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()

  1. 상호정보 상관계수

➖ X와 Y 두 변수 간 상호 정보 측정
➖ 변수 간 정보 의존성 바탕으로 비선형 관계 탐지
➖ 정보에 대한 불확실성 줄이는 정도를 바탕으로 계산
➖ 범주형 데이터에서 적용 가능

[사용하는 경우]

➖ 두 변수가 범주형 변수일 때
➖ 비선형적 관계일 때
➖ 복잡한 관계 탐지하고 싶을 때

[파이썬 실습]

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}")
profile
어떻게든 하겠숴여...❕

0개의 댓글