상관관계(Correlation) 분석

Author

Gabriel Yang


1. 상관관계란?

상관관계(Correlation)는 두 변수 간의 선형적 관계를 나타내는 통계적 개념입니다. 두 변수 사이의 연관성의 강도와 방향을 나타내며, 상관계수라는 값으로 측정됩니다. 상관관계는 다음과 같이 분류됩니다:

  • 양의 상관관계: 한 변수가 증가하면 다른 변수도 증가하는 관계 (예: 공부 시간과 시험 성적).
  • 음의 상관관계: 한 변수가 증가하면 다른 변수는 감소하는 관계 (예: 운동 시간과 체중).
  • 상관관계가 없음: 두 변수 사이에 선형적인 관계가 없는 경우.

2. 상관계수

상관계수(Correlation Coefficient)는 -1에서 1 사이의 값을 가집니다: - +1: 완벽한 양의 상관관계. - 0: 상관관계 없음. - -1: 완벽한 음의 상관관계.

가장 많이 사용되는 상관계수는 피어슨 상관계수(Pearson Correlation Coefficient)로, 두 변수 간의 선형적 관계를 측정합니다.

3. 상관관계 분석의 중요성

상관관계 분석은 데이터 분석에서 중요한 역할을 합니다. 변수들 간의 관계를 파악함으로써, 어떤 변수들이 중요한지, 또는 변수 간의 잠재적 패턴을 발견할 수 있습니다. 예를 들어, 마케팅에서 광고 비용과 매출 간의 상관관계를 분석하여 광고가 매출에 미치는 영향을 파악할 수 있습니다.

4. Plotly를 사용한 상관관계 시각화

이제 Python의 Plotly 라이브러리를 사용하여 상관관계를 시각화하는 방법을 알아보겠습니다. 주로 산점도(Scatter Plot)와 상관 행렬(Correlation Matrix)을 사용하여 상관관계를 시각화할 수 있습니다.

4.1. 필요한 라이브러리 설치

먼저 plotly와 데이터 처리를 위한 pandas, numpy, 그리고 상관계수를 계산하는 seaborn 라이브러리가 필요합니다. 아래 명령어로 설치할 수 있습니다.

pip install plotly pandas numpy seaborn

4.2. 산점도를 이용한 상관관계 시각화

산점도는 두 변수 간의 상관관계를 시각적으로 확인할 수 있는 가장 기본적인 방법입니다. 다음은 Plotly를 사용해 산점도를 생성하는 예제입니다.

import numpy as np
import pandas as pd
import plotly.express as px

# 데이터 생성 (샘플 데이터: x와 y가 양의 상관관계를 가짐)
np.random.seed(42)
x = np.random.rand(100)
y = 2 * x + np.random.normal(0, 0.1, 100)

# pandas DataFrame으로 변환
df = pd.DataFrame({'x': x, 'y': y})

# 산점도 생성
fig = px.scatter(df, x='x', y='y', title='Scatter Plot of Correlation between X and Y',
                 labels={'x': 'Variable X', 'y': 'Variable Y'},
                 trendline='ols')  # 선형 회귀선 추가

# 그래프 출력
fig.show()

코드 설명:

  • 데이터 생성: xy가 양의 상관관계를 갖도록 샘플 데이터를 생성했습니다.
  • 산점도 생성: px.scatter 함수를 사용하여 두 변수 간의 산점도를 그립니다. trendline='ols' 옵션을 사용하여 선형 회귀선을 추가하면 두 변수 간의 관계를 더욱 명확히 볼 수 있습니다.

4.3. 상관 행렬을 이용한 시각화

여러 변수 간의 상관관계를 한눈에 보기 위해 상관 행렬(Correlation Matrix)을 사용합니다. 이 행렬은 각 변수 간의 상관계수를 계산하여, 이를 색상으로 표현합니다.

다음은 상관 행렬을 시각화하는 코드입니다:

import seaborn as sns
import plotly.graph_objects as go

# 데이터 생성 (여러 변수 간 상관관계를 위한 샘플 데이터)
data = pd.DataFrame({
    'A': np.random.rand(100),
    'B': np.random.rand(100),
    'C': np.random.rand(100),
    'D': np.random.rand(100)
})

# 상관계수 계산
corr_matrix = data.corr()

# Heatmap (상관 행렬) 시각화
heatmap = go.Heatmap(
    z=corr_matrix.values,
    x=corr_matrix.columns,
    y=corr_matrix.columns,
    colorscale='Viridis'
)

# 레이아웃 설정
layout = go.Layout(
    title='Correlation Matrix Heatmap',
    xaxis=dict(title='Variables'),
    yaxis=dict(title='Variables')
)

# 그래프 생성 및 출력
fig = go.Figure(data=[heatmap], layout=layout)
fig.show()

코드 설명:

  • 상관 행렬 계산: data.corr()를 사용하여 데이터의 상관계수를 계산합니다.
  • Heatmap 시각화: go.Heatmap을 사용하여 상관 행렬을 히트맵(Heatmap)으로 시각화합니다. 색상이 변수 간의 상관관계를 나타내며, colorscale을 통해 색상표를 설정할 수 있습니다.

4.4. 상관계수 계산 및 해석

위 코드에서 계산된 상관계수는 -1에서 1 사이의 값을 가집니다. 예를 들어, 상관계수가 0.8 이상이면 두 변수는 강한 양의 상관관계를, -0.8 이하이면 강한 음의 상관관계를 가집니다. 상관계수가 0에 가까울수록 상관관계가 약하거나 없습니다.

5. 상관관계 분석의 활용 사례

  • 마케팅 분석: 광고 비용과 매출 간의 상관관계를 분석하여 어떤 마케팅 캠페인이 효과적인지 평가할 수 있습니다.
  • 의료 데이터 분석: 특정 약물 복용량과 환자 회복률 간의 상관관계를 분석하여 약물의 효과를 확인할 수 있습니다.
  • 주식 시장 분석: 여러 주식 간의 상관관계를 분석하여 포트폴리오를 다양화하거나 위험을 관리할 수 있습니다.