π‘π‘œπ‘‘π‘’π‘π‘œπ‘œπ‘˜

상관관계 λ³Έλ¬Έ

톡계학

상관관계

seoa__ 2025. 1. 13. 20:19

   [ λͺ©μ°¨ ]

 

ν”Όμ–΄μŠ¨ μƒκ΄€κ³„μˆ˜

κ°€μž₯ λŒ€ν‘œμ μœΌλ‘œ 많이 μ‚¬μš©ν•˜λŠ” μƒκ΄€κ³„μˆ˜

  • νŒŒλž€μƒ‰ μ λ“€λ‘œ λ‚˜νƒ€λ‚΄μ—ˆμœΌλ©°, 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()

 

λΉ„λͺ¨μˆ˜ μƒκ΄€κ³„μˆ˜

데이터가 μ •κ·œλΆ„ν¬λ₯Ό λ”°λ₯΄μ§€ μ•Šμ„ λ•Œ μ‚¬μš©ν•˜λŠ” μƒκ΄€κ³„μˆ˜

  • μ΄ˆλ‘μƒ‰ μ λ“€λ‘œ λ‚˜νƒ€λ‚΄μ—ˆμœΌλ©°, x와 y의 μˆœμœ„ 관계λ₯Ό λ³΄μ—¬μ€Œ
  • μŠ€ν”Όμ–΄λ§Œ μƒκ΄€κ³„μˆ˜λŠ” 두 λ³€μˆ˜μ˜ μˆœμœ„κ°„μ˜ 상관 관계λ₯Ό 츑정함
  • 값은 -1μ—μ„œ 1μ‚¬μ΄λ‘œ 해석

  • x와 y의 λΉ„μ„ ν˜• 관계λ₯Ό λ³΄μ—¬μ€Œ
  • μΌ„λ‹¬μ˜ νƒ€μš°λŠ” 두 λ³€μˆ˜ κ°„μ˜ μˆœμœ„ 일관성을 츑정함
  • λΉ„μ„ ν˜• 관계λ₯Ό νƒμ§€ν•˜λŠ”λ° μœ μš©ν•¨

λΉ„λͺ¨μˆ˜ μƒκ΄€κ³„μˆ˜

  • 데이터가 μ •κ·œλΆ„ν¬λ₯Ό λ”°λ₯΄μ§€ μ•Šκ±°λ‚˜ λ³€μˆ˜λ“€μ΄ μˆœμ„œν˜• 데이터일 λ•Œ μ‚¬μš©ν•˜λŠ” μƒκ΄€κ³„μˆ˜
  • λ°μ΄ν„°μ˜ 뢄포에 λŒ€ν•œ 가정없이 두 λ³€μˆ˜ κ°„μ˜ 상관관계λ₯Ό μΈ‘μ •ν•  λ•Œ μ‚¬μš©
  • λŒ€ν‘œμ μœΌλ‘œ μŠ€ν”Όμ–΄λ§Œ μƒκ΄€κ³„μˆ˜μ™€ μΌ„λ‹¬μ˜ νƒ€μš° μƒκ΄€κ³„μˆ˜κ°€ 있음

1. μŠ€ν”Όμ–΄λ§Œ μƒκ΄€κ³„μˆ˜

  • 두 λ³€μˆ˜μ˜ μˆœμœ„ κ°„μ˜ 일관성을 μΈ‘μ •
  • μΌ„λ‹¬μ˜ νƒ€μš° μƒκ΄€κ³„μˆ˜λ³΄λ‹€ 데이터 λ‚΄ νŽΈμ°¨μ™€ μ—λŸ¬μ— 민감

2. μΌ„λ‹¬μ˜ νƒ€μš° μƒκ΄€κ³„μˆ˜

  • μˆœμœ„κ°„μ˜ 일치 쌍 및 뢈일치 쌍의 λΉ„μœ¨μ„ λ°”νƒ•μœΌλ‘œ 계산
  • 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()

 

μƒν˜Έμ •λ³΄ μƒκ΄€κ³„μˆ˜

μƒν˜Έμ •λ³΄λ₯Ό μ΄μš©ν•œ λ³€μˆ˜λΌλ¦¬μ˜ μƒκ΄€κ³„μˆ˜ 계산

 

μƒν˜Έμ •λ³΄ μƒκ΄€κ³„μˆ˜

  • 두 λ³€μˆ˜ κ°„μ˜ μƒν˜Έ 정보λ₯Ό μΈ‘μ •
  • λ³€μˆ˜κ°„μ˜ 정보 μ˜μ‘΄μ„±μ„ λ°”νƒ•μœΌλ‘œ λΉ„μ„ ν˜• 관계λ₯Ό 탐지
  • μ„œλ‘œμ˜ 정보에 λŒ€ν•œ λΆˆν™•μ‹€μ„±μ„ μ€„μ΄λŠ” 정도λ₯Ό λ°”νƒ•μœΌλ‘œ 계산
  • λ²”μ£Όν˜• 데이터에 λŒ€ν•΄μ„œλ„ 적용 κ°€λŠ₯
  • μƒν˜Έμ •λ³΄ μƒκ΄€κ³„μˆ˜λ₯Ό 그림으둜 확인해보기 !
    • 보라색 점듀은 x 와 y κ°„μ˜ λΉ„μ„ ν˜• 관계λ₯Ό λ‚˜νƒ€λƒ„
    • μƒν˜Έμ •λ³΄ 값은 0.90으둜 ν‘œμ‹œλ˜μ–΄ 있으며, μ΄λŠ” 두 λ³€μˆ˜ κ°„μ˜ κ°•ν•œ λΉ„μ„ ν˜• μ˜μ‘΄μ„±μ„ 의미

 

μƒν˜Έμ •λ³΄ μƒκ΄€κ³„μˆ˜λŠ” μ–Έμ œ μ‚¬μš©ν• κΉŒβ“

  1. 두 λ³€μˆ˜κ°€ λ²”μ£Όν˜• λ³€μˆ˜μΌ λ•Œ 
  2. λΉ„μ„ ν˜•μ μ΄κ³  λ³΅μž‘ν•œ 관계λ₯Ό νƒμ§€ν•˜κ³ μž ν•  λ•Œ 
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}")

 

μ—°μŠ΅λ¬Έμ œ

1. ν”Όμ–΄μŠ¨ μƒκ΄€κ³„μˆ˜μ˜ 의미λ₯Ό μ„€λͺ…

  • 두 λ³€μˆ˜ κ°„μ˜ μ„ ν˜• 관계λ₯Ό μΈ‘μ •ν•œλ‹€

2. λΉ„λͺ¨μˆ˜ μƒκ΄€κ³„μˆ˜μ˜ λŒ€ν‘œμ μΈ 예둜 μ˜³μ§€ μ•Šμ€ 것

  • ν”Όμ–΄μŠ¨ μƒκ΄€κ³„μˆ˜

3. μƒν˜Έμ •λ³΄ μƒκ΄€κ³„μˆ˜μ˜ 의미λ₯Ό μ„€λͺ…ν•˜λŠ” 것을 λͺ¨λ‘ κ³ λ₯΄μ„Έμš”

  • 두 λ³€μˆ˜ κ°„μ˜ λΉ„μ„ ν˜• 관계λ₯Ό μΈ‘μ •
  • 두 λ³€μˆ˜ κ°„μ˜ μƒν˜Έ 정보λ₯Ό μΈ‘μ •

 

'톡계학' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

κ°€μ„€κ²€μ •μ˜ 주의점  (0) 2025.01.13
μœ μ˜μ„±κ²€μ •  (0) 2025.01.10
톡계학 기초 2  (1) 2025.01.10
톡계학 기초  (2) 2025.01.10