Python/SciPy

SciPy 상관 관계 분석 (SciPy.stats)

임베디드 친구 2025. 12. 3. 20:55
728x90
반응형

SciPy 상관 관계 분석 (SciPy.stats)

1. 상관 관계 분석이란?

상관 관계 분석(Correlation Analysis)은 두 변수 간의 관계를 측정하는 통계적 방법입니다. 이는 한 변수의 변화가 다른 변수의 변화와 어떻게 연관되어 있는지를 분석하는 과정입니다. 예를 들어, 학생의 공부 시간과 성적 간의 관계를 파악하고 싶을 때 상관 관계 분석을 사용할 수 있습니다.

상관 관계는 -1에서 1 사이의 값을 가지며, 다음과 같이 해석할 수 있습니다.

  • 1에 가까운 값: 두 변수는 강한 양의 상관 관계를 가짐 (한 변수가 증가하면 다른 변수도 증가)
  • 0에 가까운 값: 두 변수는 상관 관계가 없음
  • -1에 가까운 값: 두 변수는 강한 음의 상관 관계를 가짐 (한 변수가 증가하면 다른 변수는 감소)

2. 상관 관계 분석의 필요성

상관 관계 분석은 다양한 분야에서 활용됩니다. 다음과 같은 상황에서 유용하게 사용할 수 있습니다.

  • 과학 연구: 실험 결과 간의 관계 파악
  • 경제 분석: 주식 시장과 경제 지표 간의 관계 분석
  • 의료 연구: 특정 질병과 생활 습관 간의 관계 탐색
  • 마케팅 분석: 광고 비용과 판매량 간의 관계 파악

3. SciPy를 활용한 상관 관계 분석

Python의 SciPy 라이브러리는 상관 관계 분석을 간편하게 수행할 수 있도록 다양한 함수를 제공합니다. 주요 함수는 다음과 같습니다.

  • scipy.stats.pearsonr : 피어슨 상관 계수 (선형 관계 분석)
  • scipy.stats.spearmanr : 스피어만 상관 계수 (순위 기반 관계 분석)
  • scipy.stats.kendalltau : 켄달 타우 상관 계수 (순위 기반 관계 분석)

이제 각 방법을 예제와 함께 살펴보겠습니다.

3.1 피어슨 상관 계수 (Pearson Correlation Coefficient)

피어슨 상관 계수는 두 변수 간의 선형 관계를 측정하는 방법입니다. 연속형 변수 간의 관계를 분석할 때 주로 사용됩니다.

import numpy as np
from scipy.stats import pearsonr

# 예제 데이터
x = np.array([10, 20, 30, 40, 50])
y = np.array([15, 25, 35, 45, 55])

# 피어슨 상관 계수 계산
corr, p_value = pearsonr(x, y)

print(f"피어슨 상관 계수: {corr}")
print(f"p-value: {p_value}")

해석:

  • corr 값이 1에 가까우므로 x와 y는 강한 양의 상관 관계를 가집니다.
  • p-value가 0.05보다 작으면 상관 관계가 통계적으로 유의미하다고 판단할 수 있습니다.

3.2 스피어만 상관 계수 (Spearman Correlation Coefficient)

스피어만 상관 계수는 두 변수의 순위 간 관계를 분석하는 방법입니다. 데이터가 정규성을 따르지 않거나 순위형 변수일 때 유용합니다.

from scipy.stats import spearmanr

# 예제 데이터
x = np.array([10, 20, 30, 40, 50])
y = np.array([5, 15, 25, 35, 45])

# 스피어만 상관 계수 계산
corr, p_value = spearmanr(x, y)

print(f"스피어만 상관 계수: {corr}")
print(f"p-value: {p_value}")

해석:

  • 스피어만 상관 계수는 데이터의 순위 관계를 분석하므로, 선형 관계가 아니더라도 상관성을 평가할 수 있습니다.

3.3 켄달 타우 상관 계수 (Kendall's Tau)

켄달 타우 상관 계수는 순위 일관성을 기반으로 두 변수 간의 관계를 측정하는 방법입니다.

from scipy.stats import kendalltau

# 예제 데이터
x = np.array([10, 20, 30, 40, 50])
y = np.array([10, 22, 29, 41, 52])

# 켄달 타우 상관 계수 계산
corr, p_value = kendalltau(x, y)

print(f"켄달 타우 상관 계수: {corr}")
print(f"p-value: {p_value}")

해석:

  • 켄달 타우는 작은 데이터셋이나 순서 기반의 관계를 분석할 때 적합합니다.

4. 상관 관계 분석 시 주의사항

상관 관계 분석을 수행할 때 다음과 같은 점을 유의해야 합니다.

  1. 인과 관계와 상관 관계는 다르다:

    • 상관 관계는 두 변수 간의 관계를 나타낼 뿐, 원인과 결과를 설명하지는 않습니다.
  2. 이상치(Outlier)의 영향:

    • 이상치는 상관 계수에 큰 영향을 미칠 수 있습니다. 분석 전 이상치를 식별하고 처리하는 것이 중요합니다.
  3. 선형 관계만을 분석:

    • 피어슨 상관 계수는 선형 관계만을 측정합니다. 비선형 관계는 스피어만이나 켄달 타우를 사용하는 것이 좋습니다.
  4. 샘플 크기:

    • 작은 표본에서는 상관 계수가 정확하지 않을 수 있습니다. 충분한 데이터를 확보하는 것이 중요합니다.

5. 상관 관계 분석 결과 시각화

분석 결과를 더 잘 이해하기 위해 산점도를 통해 시각화하는 방법을 소개합니다.

import matplotlib.pyplot as plt

# 데이터 생성
x = np.array([10, 20, 30, 40, 50])
y = np.array([15, 25, 35, 45, 55])

# 산점도 시각화
plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='b')
plt.title('산점도를 통한 상관 관계 시각화')
plt.xlabel('변수 X')
plt.ylabel('변수 Y')
plt.grid(True)
plt.show()

6. 결론

상관 관계 분석은 데이터 간의 관계를 이해하고 패턴을 파악하는 데 매우 유용한 도구입니다. SciPy의 stats 모듈을 활용하면 다양한 방법으로 상관 관계를 분석할 수 있으며, 분석 결과를 해석할 때는 인과 관계와 상관 관계를 혼동하지 않도록 주의해야 합니다.

앞으로의 분석에서는 상관 관계 분석을 바탕으로 보다 심화된 통계 분석과 예측 모델링을 진행해보는 것도 좋은 접근법이 될 것입니다.

참고 자료

반응형