이번 글에서는 "특성 간의 상관관계를 확인하고, 이들의 통계적 유의성(p-value)을 검정하는 방법"을 살펴보려 한다. 상관계수를 계산함으로써 데이터 간의 관계를 이해하고, 통계적 검정을 통해 이러한 관계가 실제로 의미 있는지를 평가해 볼 것이다.
차례와 사용 툴 및 라이브러리는 아래와 같다.
[차례]
첫 번째, 상관관계
두 번째, 상관관계 확인
세 번째, 상관관계 검정
[사용 툴]
- Jupyter notebook(웹 기반 대화형 코딩 환경)
[사용 라이브러리 및 모듈]
- 데이터 분석 라이브러리: pandas
- 시각화 라이브러리: seaborn
- 과학 계산 라이브러리: scipy
- scipy.stat.spearmanr: 스퍼어만 상관관계 검정
- scipy.stats.pearsonr: 피어슨 상관관계 검정
상관관계
상관관계 개념
상관관계는 두 특성 간의 직선적인 관계의 강도와 방향을 나타내는 통계적 지표로, 이를 '상관계수'로 표현한다. 상관계수는 '-1'에서 '+1' 사이의 값을 가지며, 절댓값이 클수록 두 변수 간의 선형 관계가 강함을 의미한다.
양의 상관관계는 한 변수의 증가가 다른 변수의 증가와 관련이 있음을 나타내며(0 ~ +1의 범위), 그래프 상에서 우상향 하는 경향을 보인다.
음의 상관관계는 한 변수의 증가가 다른 변수의 감소와 관련이 있음을 나타내며(-1 ~ 0 범위), 그래프 상에서 우하향하는 경향을 보인다.
상관계수가 '0'에 가까운 경우, 변수들 사이에 선형 관계가 없거나 매우 약하다는 것을 의미하며, 비선형 관계가 존재할 가능성이 있다.
상관관계 특징
상관관계는 독립변수와 종속변수 사이, 또는 독립변수들 사이에서 모두 나타날 수 있다.
독립변수와 종속변수 사이의 상관관계는 해당 독립변수가 종속변수의 변화를 얼마나 잘 설명하는지를 나타낸다.
독립변수들 간의 상관관계는 변수들 사이에 '공선성'이 있는지를 파악하는 데 도움이 되며, 이는 머신러닝 모델을 구축할 때 변수 선택이나 모델의 정확도에 영향을 미칠 수 있다.
상관관계를 통해 데이터에 내제된 패턴을 파악하고, 모델의 설명력(결정계수)을 향상시키며, 예측 변수들을 선택하는 데 있어 중요한 가이드라인을 제공한다.
상관관계 확인
상관관계 확인
corr 함수는 pandas 라이브러리에서 제공되며, 데이터프레임 내의 모든 수치형 변수들 사이의 '상관관계'를 계산하는 함수이다. 이 함수는 각 변수 쌍 사이의 선형 관계의 강도를 '-1'부터 '+1' 사이의 값으로 나타내는 '상관계수 행렬'을 반환한다. 반환된 상관계수 행렬을 통해 변수들 간의 강한 양 또는 음의 선형 관계를 쉽게 확인할 수 있다.
import pandas as pd
df_org = pd.read_csv("./data/01_회귀_주택가격예측_데이터셋_Row_1000.csv")
correlation_matrix = df_org.corr()
correlation_matrix
상관관계 해석(1)
- 주택가격과 면적: 면적이 클수록 주택가격이 증가하는 경향을 보이며, 이는 긍정적인 관계성을 띄고 있음
- 주택가격과 층수: 층수가 높아질수록 주택가격의 증가 경향이 있지만, 관계성은 비교적 약한 것으로 보임
- 주택가격과 역까지의 도보시간: 역까지 걸리는 시간이 길수록 주택가격이 다소 감소하는 관계성을 미세하게 보이고 있음
- 주택가격과 주변 편의시설 점수: 주변 편의시설 점수는 주택가격에 미치는 영향이 매우 낮은 것으로 보임
이러한 상관관계 분석 결과는 훈련에 사용될 특성(열)을 선택하는 하나의 방법으로 활용된다. 높은 선형 상관계수를 가진 특성들은 일반적으로 훈련 성능에 큰 영향을 미친다. 처음 모델을 훈련할 때는 모든 특성(열)을 포함시키는 것이 일반적이지만, 이후 '특성 중요도'를 평가하여 상대적으로 영향력이 낮은 특성들은 제외하고 모델을 재훈련할 수 있다. 특히, 상관계수가 '0.01' 이하인 특성들은 훈련에 유의미한 영향을 미치지 않는 것으로 간주된다.
상관관계 시각화(1) - 히트맵
Seaborn 라이브러리의 heatmap 함수를 활용하여 상관관계 히트맵을 그렸으며, 이때 사용된 인자로는 데이터를 나타내는 행렬, 셀에 값을 표시하는 주석 옵션, 숫자 포맷을 정의하는 소수점 표시 옵션, 셀 경계의 선 두께를 지정하는 옵션, 그리고 히트맵의 색상을 결정하는 색상 팔레트 옵션이 포함되었다.
import seaborn as sns
plt.figure(figsize=(10, 8))
plt.title("상관관계 히트맵")
sns.heatmap(correlation_matrix, annot=True, fmt=".3f",
linewidths=.5, cmap="coolwarm")
상관관계 시각화(2) - 산점행렬도
seaborn 라이브러리의 pairplot 함수를 사용하여 df_org 데이터프레임의 각 특성(열) 사이의 관계를 산점도와 히스토그램으로 나타내는 산점행렬도를 생성한다.
sns.pairplot(df_org)
plt.suptitle("산점행렬도", y=1.02)
plt.show()
상관관계 해석(2)
- 히트맵과 산점행렬도를 통해, 면적과 주택가격 사이에는 강한 선형관계를 보임
- 층수는 주택가격과 약한 양의 관계를, 역까지 도보시간은 매우 약한 음의 관계를 보임
- 주변 편의시설 점수는 주택가격에 뚜렷한 영향을 미치지 않는 것으로 보임
- 따라서, 관찰된 선형 관계가 통계적으로 유의미한지 확인하기 위해 특정 특성 간의 상관관계를 검정하려 함
상관관계 검정
상관관계 검정
'상관관계 검정'은 독립변수와 종속변수 사이의 관계가 통계학적으로 유의미한지를 평가하는 과정이다.
'p-value'가 '0.05 미만'일 경우, 관계가 '유의미'하다고 간주하며, 이는 통계적으로 95% 신뢰 수준을 나타내며 결과가 우연이 아님을 의미한다.
반대로 'p-value'가 '0.05 이상'이면, 관계가 '유의미하지 않다'라고 해석한다. 이는 관찰된 패턴이 우연에 의한 것일 수 있음을 나타낸다.
사용되는 p-value의 기준값(0.05)은 상황에 따라 다를 수 있으며, 연구 목적에 맞게 조정될 수 있다. 상관계수가 높은 값을 가지더라도, p-value가 기준 이상이면 해당 관계는 통계학적으로 유의미하지 않다고 판단할 수 있다. 이러한 '검정'을 통해 연구 가설의 타당성을 평가할 수 있다.
예를 들어, "면적이 작을수록 주택가격은 커진다"는 가설을 설정하고, 이를 검증할 수 있다. 여기서 '귀무가설'과 '대립가설'을 설정하고, p-value를 기준으로 귀무가설의 채택 여부를 결정한다. '귀무가설'은 일반적으로 기존의 가정이나 일반적인 상황을 의미하며, '대립가설'은 연구자가 증명하고자 하는 새로운 주장이나 가설을 의미한다. p-value가 0.05 미만이면 귀무가설을 기각하고 '대립가설'을 채택함으로써 연구를 진행할 수 있다.
상관관계 검정 종류
- 스피어만(Spearman) 상관관계 검정
- 목적: 비선형적인 관계를 포함하며, 두 특성 간의 일관된 '순위 변화'를 파악하는 데 사용된다. 이 방법은 데이터가 정규분포를 따르지 않거나, '순위'와 같은 순서가 있는 척도로 표현될 때 적합하다.
- 예: 학생들의 시험 점수가 숫자로 주어지지만, 그보다는 학생들이 어느 순위에 위치하는지가 더 중요할 경우, 예를 들어 전체 학생 중 상위 몇 퍼센트에 해당하는지가 중요할 경우에 스피어만 검정이 적합하다. - 피어슨(Pearson) 상관관계 검정
- 목적: 두 특성 사이의 선형적인 '관계의 강도'를 수치적으로 파악하는 데 널리 사용되는 방법이다. 이 방법은 특성들이 정규분포를 가정하고, 값들이 균등한 간격을 가질 때 적합하다.
- 예: 외부 온도와 아이스크림 판매량과 같이 서로 연속적인 수치 데이터가 있을 때, 이 두 특성 사이에 어떤 직선적인 관계가 있는지 살펴보고자 할 때 피어슨 검정이 적합하다.
여기서 말하는 '정규 분포'는 대부분의 값들이 평균값 근처에 모여 있는, 종 모양의 곡선 분포를 의미한다. 예를 들어 사람들의 키나 몸무게와 같이 자연스럽게 중앙값을 중심으로 분포하는 경우가 이에 해당한다.
상관관계 검정 방법
상관관계 검정을 위해, 위 df_org 데이터프레임에서 독립변수와 종속변수를 분리하였다. 이 과정에서, 두 변수의 데이터 수가 정확히 일치해야만 정확한 분석과 효과적인 모델 학습이 가능하다.
# 독립변수
X = df_org.iloc[:, :-1]
# 종속변수
y = df_org["주택_가격"]
print(f"{len(X)} / {len(y)}")
1. 스피어만(Spearman) 상관관계 검정
scipy 라이브러리의 spearmanr 함수를 사용하여, 스피어만 상관관계 검정을 수행한다. 해당 함수는 독립변수의 각 특성(X)과 종속변수(y) 사이의 '스피어만 순위 상관관계'를 산출하고, 그 상관계수의 통계적 유의성을 나타내는 'p-value'를 반환한다.
from scipy.stats import spearmanr
# 특성 간 상관관계 검정
for column in X.columns :
corr, p_value = spearmanr(X[column], y)
print(f"{column} vs 주택가격 : corr={corr:.4f} / p_value={p_value:.4f}")
1.1 해석
- 스퍼어만 상관관계 검정 결과, 면적과 주택가격 사이에는 0.9704의 상당히 높은 양의 순위 상관관계가 나타남
- 층수와 역까지의 도보시간은 각각 0.2382와 0.1308로, 두 특성 모두 약한 양의 상관관계를 가지는 것으로 보임
- 반면, 주변 편의시설 점수는 0.1 미만의 상관계수로, 주택가격에 미치지 영향이 미미한 것으로 판단됨
- 또한, 모든 특성의 유의성은 p_value < 0.05로 관찰되며, 이 특성들 간의 상관관계가 통계적으로 유의미하다고 판단됨
2. 피어슨(Pearson) 상관관계 검정
scipy 라이브러리의 pearsonr 함수를 사용하여, 피어슨 상관관계 검정을 수행한다. 해당 함수는 독립변수의 각 특성(X)과 종속변수(y) 사이의 '피어슨 상관관계'를 계산하고, 이 상관계수의 통계적 유의성을 나타내는 'p-value'를 반환한다.
from scipy.stats import pearsonr
for column in X.columns :
corr, p_value = pearsonr(X[column], y)
print(f"{column} vs 주택가격 : corr={corr:.4f} / p_value={p_value:.4f}")
2.1 해석
- 피어슨 상관관계 검정 결과, 모든 독립변수들의 p-value 값, 즉 유의성은 p-value < 0.005 이므로, 모든 특성들이 주택가격과 통계적으로 유의미한 관계를 가지는 것으로 보임
- 따라서, 면적, 층수, 역까지의 도보시간, 주변 편의시설 점수를 활용하여 주택가격을 예측하는 모델을 구축할 수 있을 것으로 보임
이번 글에서는 corr 함수를 사용하여 특성 간 상관관계를 확인하고, 스피어만과 피어슨 상관관계 검정을 통해 이들 간의 통계적 유의성(p-value)을 평가하였다. 상관관계와 유의성 분석은 불필요한 특성을 제거하거나, 중요한 특성을 강조함으로써 모델의 정확도와 해석 가능성을 향상시킬 수 있는 근거를 제공한다. 이러한 분석을 통해, 각 특성이 모델 예측에 얼마나 중요한 역할을 하는지 파악할 수 있다.
'[파이썬] > 머신러닝' 카테고리의 다른 글
[머신러닝] GridSearchCV를 활용한 하이퍼파라미터 튜닝 이해하기 (1) | 2024.01.07 |
---|---|
[머신러닝] 훈련·검증·테스트 데이터로 분리하는 이유(+분리 비율) (1) | 2023.12.27 |
[머신러닝] 릿지·라쏘모델의 성능비교와 알파값 조정 (0) | 2023.12.25 |
[머신러닝] 특성공학을 활용한 다중회귀모델 성능 향상(+예제, 해석, 개념) (0) | 2023.12.24 |
[머신러닝] 선형회귀와 다항회귀 모델링의 이론과 실제 적용 방법(+예제) (1) | 2023.12.23 |