Technique/데이터 분석

[EDA] Heatmap, 데이터 패턴과 관계 파악하기

먼치 2025. 2. 26. 15:43

✅ Heatmap

히트맵(Heatmap)은 행과 열로 이루어진 2차원 데이터에서 값의 크기를 색상으로 표현한 시각화 기법이다. 주로 값의 분포, 상관관계, 패턴 및 이상치를 직관적으로 확인할 수 있다. 

 

1️⃣ 특징 및 장점

  • 색상 변화로 데이터의 크기나 빈도 표현 : 예를 들어, 진한 색은 높은 값을, 연한 색은 낮은 값을 나타냄
  • 상관관계 확인 : 변수들 간의 상관계수를 시각화하여 관계가 강한 변수를 쉽게 찾을 수 있음
  • 이상치 및 패턴 탐색 : 비정상적인 색상 패턴을 통해 이상치 감지 및 데이터 패턴 확인 가능

2️⃣ 주요 사용 사례

  • 상관계수 히트맵 (Correlation Heatmap)
    • 데이터의 상관관계를 나타내는 매트릭스를 시각화
    • 변수들 간의 상관관계 파악에 유용
    • Ex) 신용 점수와 연간 소득의 관계 확인
  • 데이터 분포 히트맵
    • 이산형 데이터빈도수 또는 분포를 표현
    • Ex) 연도별 월별 판매량 변화 패턴
  • 피처 중요도 히트맵
    • 모델 학습 후 피처 중요도를 색상으로 표현하여 중요 변수 식별에 사용
    • Ex) 랜덤포레스트 피처 중요도 시각화

3️⃣ Python에서 히트맵 그리기

seaborn 라이브러리를 활용한 상관관계 히트맵 예시
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 예시 데이터 생성
data = {
    'Yearly Income': [50000, 60000, 70000, 80000, 90000],
    'Score': [400, 650, 700, 750, 800],
    'Left': [10000, 12000, 20000, 25000, 40000],
    'Working Hours': [40, 45, 30, 55, 60],
    'default': [0, 0, 1, 0, 1]
}

df = pd.DataFrame(data)

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

# 히트맵 그리기
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='Spectral', vmin=-1, vmax=1)
plt.title('Correlation Heatmap')
plt.show()

 

📌  파라미터 설명

  • annot=True : 각 셀에 상관계수 값을 표시
  • cmap='Spectral' : 색상 팔레트 설정 
  • vmin, vmax : 색상 스케일 범위 설정 (-1 ~ 1)

위 코드 실행 결과 그려진 히트맵

💡결과 해석

 

주요 상관관계 해석

(1) Yearly Income (연간 소득)

  • Score와 +0.88: 강한 양의 상관관계. 연간 소득이 높을수록 신용 점수도 높아지는 경향이 있음.
  • Left와 +0.89: 강한 양의 상관관계. 연간 소득이 높을수록 대출 잔액도 높음.
  • Working Hours와 +0.83: 강한 양의 상관관계. 연간 소득이 높을수록 근무 시간도 길어지는 경향.
  • default와 +0.50: 양의 상관관계가 있지만 중간 정도의 강도. 소득이 높다고 해서 불이행이 반드시 증가하지는 않음.

(2) Score (신용 점수)

  • Yearly Income와 +0.88: 위에서 설명한 바와 같이, 연간 소득과 신용 점수가 함께 증가.
  • Left와 +0.85: 강한 양의 상관관계. 신용 점수가 높을수록 대출 잔액도 높음.
  • Working Hours와 +0.94: 아주 강한 양의 상관관계. 신용 점수가 높을수록 근무 시간이 긴 경향.
  • default와 -0.63: 음의 상관관계. 신용 점수가 높을수록 채무 불이행 가능성이 낮음.

(3) Left (대출 잔액)

  • Yearly Income와 +0.89: 소득이 높을수록 대출 잔액도 많음.
  • Score와 +0.85: 신용 점수가 높을수록 대출 잔액도 높음.
  • Working Hours와 +0.93: 근무 시간이 길수록 대출 잔액도 많음.
  • default와 +0.22: 약한 양의 상관관계. 대출 잔액이 많다고 해서 불이행 가능성이 크게 증가하지는 않음.

(4) Working Hours (근무 시간)

  • Score와 +0.94: 신용 점수와 근무 시간이 매우 밀접한 관계.
  • Left와 +0.93: 근무 시간이 길수록 대출 잔액도 많음.
  • default와 -0.32: 약한 음의 상관관계. 근무 시간이 길수록 채무 불이행 가능성이 조금 낮음.

(5) default (채무 불이행 여부)

  • Score와 -0.63음의 상관관계. 신용 점수가 낮을수록 채무 불이행 가능성이 높음.
  • Working Hours와 -0.32: 근무 시간이 길수록 채무 불이행 가능성이 약간 낮음.
  • Yearly Income과 +0.50: 약한 양의 상관관계. 소득이 높다고 해서 채무 불이행 가능성이 반드시 높지는 않음.
  • Left와 +0.22: 대출 잔액과 불이행은 큰 상관관계가 없음.

인사이트 및 해석 요약

 

  • 신용 점수(Score)채무 불이행(default) 간에는 음의 상관관계(-0.63)가 있습니다. → 신용 점수가 높을수록 채무 불이행 가능성은 낮아집니다.
  • 연간 소득(Yearly Income), 대출 잔액(Left), 근무 시간(Working Hours) 간에 강한 양의 상관관계가 나타납니다. → 소득이 높고 근무 시간이 길수록 대출 잔액도 많아지는 경향이 있습니다.
  • default와의 상관관계는 다른 변수에 비해 상대적으로 낮으며, 특히 Left와는 매우 약한 관계가 있습니다. → 대출 잔액이 채무 불이행에 직접적인 영향을 주지 않을 수 있습니다.
  • Working HoursScore매우 강한 양의 상관관계(+0.94)를 가지므로, 신용 점수 산정에 근무 시간이 중요한 영향을 미칠 가능성이 있습니다.

4️⃣추가 활용 방안

  • 상관계수가 강한 변수들을 이용해 파생 변수를 생성하면 모델 성능 향상 가능
  • sns.clustermap()을 사용하면 상관관계가 유사한 변수끼리 군집화된 히트맵을 그릴 수 있음

 

 

 

 

'Technique > 데이터 분석' 카테고리의 다른 글

[실험실. 01] 아주 간단한 A/B test  (0) 2024.07.08
Pandas와 Numpy 비교하기  (0) 2024.06.13
판다스와 넘파이 비교하기  (0) 2024.06.13
DB Schema  (0) 2024.04.23
KPI (2) - 어떻게 하는건데?  (0) 2024.04.19