본문 바로가기
Python 데이터 분석 입문

(Python 데이터 분석 입문 11편) t 검정, p-value, 상관분석, Heat Map 그래프

by mangoseed3434 2025. 12. 31.

안녕하세요? mangoseed3434입니다.

 

이번에는 통계적 가설 검정 기법 중 t 검정과 상관분석에 대해 실습할 수 있었습니다.

 

오늘도 'Do it! 쉽게 배우는 파이썬 데이터 분석'에 수록된 가이드를 따라하면서 포스팅을 작성합니다.

 

 


 

1. 통계 분석 기법

 

통계 분석 기법의 종류 (2가지)

1. 기술 통계 분석 (Descriptive Statistics)

: 데이터를 요약해 설명하는 통계 분석 기법

ex) 중합한 고분자 분자량의 무게를 측정해 평균 분자량을 계산

 

2. 추론 통계 분석 (Inferential Statistics)

: 어떤 값이 발생할 확률을 계산하는 통계 분석 기법

ex) 고분자 분자량에 따라 점도 차이가 있는 경향이 있을 때, 이 차이가 우연히 발생할 확률을 계산

 

추론 통계의 결론 (2가지)

1. 통계적으로 유의하다. (Statistically Significant)

: 차이가 우연히 나타날 확률이 적을 때 = 우연에 의해 차이가 관찰될 가능성이 낮다. = 우연이 아니다.

 

2. 통계적으로 유의하지 않다. (Not Statistically Significant)

: 차이가 우연히 나타날 확률이 높을 때 = 우연에 의해 차이가 관찰될 가능성이 크다. = 우연이다.

 

일반적으로 통계 분석을 수행했다. = 추론 통계 분석을 통해 가설 검정을 했다.

 

통계적 가설 검정 절차가 필요한 이유

1. 기술 통계 분석으로 발견한 두 집단의 차이는 우연히 발생할 수 있다.

2.이를 보완하고자, 통계적 가설 검정 절차를 통해 유의확률을 계산한다.

 


 

2. 통계적 가설 검정

 

통계적 가설 검정 (Statistical Hypothesis Test)

: 유의확률을 이용해 가설을 검정하는 방법

 

유의 확률 (p-value, significance probability)

: 우연히 차이가 있는 데이터가 추출될 확률

 

p-value가 클 때 : 통계적으로 유의하지 않다. = 우연에 의해 차이가 관찰될 가능성이 크다. = 우연이다.

p-value가 낮을 때 : 통계적으로 유의하다 = 우연에 의해 차이가 관찰될 가능성이 낮다. = 우연이 아니다.

 


 

3. t 검정

 

t 검정 (t-test)

: 두 집단의 평균에 통계적으로 유의한 차이가 있는지 파악하는 통계 분석 기법

 

scipy 패키지의 ttest_ind( ) 함수를 이용해 Python으로 t 검정을 할 수 있다.

(cmd → pip install scipy 입력 및 실행 → scipy 패키지 설치)

 

요약표 만들기

 

우선, t 검정을 적용하기 위한 데이터 요약표를 만든다.

나는 차량 category의 수량과 평균 도시 주행 연비에 대한 요약표를 만들었다.

compact와 suv의 평균 도시 주행 연비의 차이가 우연인지 판단해보겠다.

 

stats.ttest_ind( ) 함수

 

Python에서 t 검정은 stats.ttest_ind( ) 함수를 이용한다.

stats.ttest_ind(변수1, 변수2, equal_var = True/False)의 구조로 작동한다.

equal_var = True : 두 변수의 분산이 동일할 때

equal_var = False : 두 변수의 분산이 동일하지 않을 때 (이분산 t 검정 사용)

 

p-value가 2.39*10^(-21)의 값이 나왔고, 0.05보다 작다.

즉, compact와 suv간 평균 도시 주행 연비 차이는 통계적으로 유의하다. = 우연이 아니다.

 


 

4. 상관분석

 

상관분석 (Correlation Analysis)

: 상관계수를 통해 두 연속 변수가 서로 관련성이 있는지 파악하는 통계 분석 기법

 

상관계수 (Correlation Coefficient)

: 두 변수의 관련성을 나타내는 지표

 

상관계수 특징

1. -1 ~ 1 사이의 값을 갖는다.

2. 1에 가까울수록 관련성이 크다.

3. 양수 : 정비례 관계

4. 음수 : 반비례 관계

 

df.corr( ) 함수

 

df.corr( ) 함수를 이용하면 상관계수를 구할 수 있다.

unemploy와 pce의 상관계수가 0.61이다.

즉, 정비례 관계를 가진다는 관계성을 도출할 수 있다.

 

df.corr( ) 함수로는 p-value를 구할 수 없다.

scipy 패키지의 stats.pearsonr( ) 함수를 이용해 p-value와 상관계수를 같이 구할 수 있다.

 

stats.pearsonr( ) 함수

 

stats.pearsonr(변수1, 변수2)의 구조로 작동한다.

출력 결과 중 statistic이 상관게수, p-value가 유의확률이다.

df.corr( ) 함수와 stats.pearsonr( ) 함수의 상관계수가 동일하다.

p-value는 6.77*10^(-61)이기 때문에, unemploy와 pce의 상관관계는 통계적으로 유의하다.

 


 

5. 상관행렬 히트맵 만들기

 

히트맵 (Heat Map)

: 값의 크기를 색상으로 구분한 그래프

 

상관행렬 (Correlation Matrix)

: 여러 변수들 간의 선형적 관계를 한눈에 파악할 수 있도록 행렬(표) 형태로 시각화한 통계 도구

 

1단계 : 상관행렬 만들기

 

df.corr( ) 함수

 

df.corr( ) 함수를 이용해 상관행렬을 만든다.

 

2단계 : 히트맵 만들기

 

sns.heatmap( ) 함수

 

상관행렬 데이터프레임을 히트맵으로 그린다.

히트맵은 seaborn 패키지의 heatmap( ) 함수를 이용해 그릴 수 있다.

heatmap(데이터프레임, annot = True/False, cmap = '색상')의 구조이다.

 

annot = True : 상관계수 표시

annot = False : 상관계수 미표시

cmap : 히트맵 색상

 

히트맵에서 상관계수가 클수록 색상이 진하다.

우측 도표를 통해 알 수 있듯이,

상관계수가 양수면 푸른색, 상관계수가 음수면 붉은색이다.

 

3단계 : 대각 행렬 제거하기

 

3-1단계 : mask 만들기

 

numpy 패키지의 zeroes_like( ) 함수

 

히트맵으로 시각화할 상관 행렬 데이터프레임과 동일한 행/열 수를 가진 mask 행렬을 만든다.

numpy 패키지의 zeroes_like(데이터프레임)을 이용해 mask 행렬을 만들되, 값이 모두 0인 행렬을 만들 수 있다.

 

numpy 패키지의 triu_indices_from( ) 함수

 

그리고 triu_indices_from( ) 함수를 이용해 오른쪽 위 대각 행렬의 0을 1로 바꾼다.

 

3-2단계 : 히트맵에 mask 적용하기

 

seaborn 패키지의 heatmap( ) 함수

 

그리고 heatmap( ) 함수의 ( 괄호 )안에 mask를 지정해준다.

mask의 1에 해당되는 행/열의 값이 제거되어 좌하단의 상관계수만 히트맵에 출력된다.

 

 

3-3단계 : 빈 행/열 제거하기

 

좌측 최상단과 우측 최하단의 비어 있는 행/렬을 제거한다.

 

 

Python에서 행렬의 행/열은 [행:열]으로 표현되는 것으로 추즉된다.

mask와 df.iloc[1:, :-1]을 이용해 mask와 상관행렬의 첫 번째 행과 마지막 열을 제거한다.

 

 

짜잔~

 


 

scipy 패키지

stats.ttest_ind(변수1, 변수2, equl_var = True) : 분산이 같은 두 변수의 p-value 구하기

stats.pearsoner(변수1, 변수2) : 두 변수의 p-value와 상관계수 구하기

 

seaborn 패키지

sns.heatmap(데이터프레임, annot = True/False, cmap = '색상') : 히트맵 만들기

 

numpy 패키지

np.zeros_like(상관행렬 데이터프레임) : 상관행렬 데이터프레임과 동일한 행/열의 수를 같는 0행렬 만들기

 

df.corr( ) : 상관행렬 만들기

 

다음에는 머신러닝에 대해 공부한 내용을 정리할 예정이다.