상관관계(Correlation): 왜 상관관계를 보는가?

calico·2025년 11월 25일

Artificial Intelligence

목록 보기
119/161

1. 왜 상관관계를 보는가?


1) 중복 정보(Highly correlated features)를 제거하려고


예:

  • incomeannual_salary 의 상관관계가 0.95

→ 사실상 같은 변수 두 개.

이런 변수가 여러 개 있으면

  • 모델이 불필요한 변수에 가중치를 주고

  • 노이즈가 늘어나고

  • 과적합 위험이 올라감.

실무에서는 보통

  • 피처 상관 > 0.8 이면 하나 제거하는 경우가 많음.



2) 모델의 안정성과 일반화 성능을 높이려고


특히 선형 모델(Logistic Regression, Linear Regression)은 독립 변수끼리 상관이 높으면 다중공선성(multicollinearity) 문제가 생김.

결과:

  • 회귀계수(coefficient)가 불안정하게 변함

  • 데이터가 조금만 바뀌어도 가중치가 크게 요동침

  • 해석이 어려움

실무 현상 예:

  • 어떤 캠페인 변수 두 개가 또 겹쳐서 회귀 계수가 양수/음수로 뒤집힘



3) 피처 엔지니어링 방향을 잡기 위해


상관관계를 보면 다음을 판단할 수 있음.

예:

  • age → income 상관이 강함 → 나이대별로 income

  • purchase_amount → label 상관이 강함 → 중요한 feature임이 확인됨

  • 상관이 약함 → feature importance가 낮을 가능성 있음

즉, feature selection/engineering 우선순위를 정할 수 있음.



4) 데이터 품질 점검(quality check) 목적


실무에서 상관행렬은 데이터 오류 탐지 도구라고 보면 됨.

예:

  • 사용자 “나이”와 “총 지출금액”이 갑자기 상관 -0.7?

→ ETL 잘못된 것, 단위 오류, merge 오류 가능성.

이런 오류를 초기에 잡기 위해 반드시 상관을 봄.



2. “그럼 상관관계가 없어도 머신러닝은 학습될까?”


네, 특히 비선형 모델은 상관이 없어도 학습 잘 됩니다.

예:

  • RandomForest

  • XGBoost / LightGBM

  • Neural Network

이런 모델들은 feature 간 비선형 관계, interaction 을 자동으로 잡아줌.

그래도 “상관을 보는 것”은 여전히 유효합니다.



3. 실무에서 상관관계 어떻게 사용하나? (예시 코드 포함)


1) 상관행렬 확인


corr = df.corr()
print(corr)



2) 높은 상관만 필터링


high_corr = corr.abs() > 0.8



3) 제거할 후보 찾기


to_drop = [col for col in corr.columns if any(corr[col].abs() > 0.9)]



4. 정리


  • 중복 피처 제거 → 성능과 속도 개선

  • 모델 안정성 확보 → 특히 선형 모델

  • 데이터 문제 탐지

  • 피처 엔지니어링 방향 결정

  • 모델 해석력 향상



profile
https://velog.io/@corone_hi/posts

0개의 댓글