안녕하세요? 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의 평균 도시 주행 연비의 차이가 우연인지 판단해보겠다.


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( ) 함수를 이용하면 상관계수를 구할 수 있다.
unemploy와 pce의 상관계수가 0.61이다.
즉, 정비례 관계를 가진다는 관계성을 도출할 수 있다.
df.corr( ) 함수로는 p-value를 구할 수 없다.
scipy 패키지의 stats.pearsonr( ) 함수를 이용해 p-value와 상관계수를 같이 구할 수 있다.

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( ) 함수를 이용해 상관행렬을 만든다.
2단계 : 히트맵 만들기


상관행렬 데이터프레임을 히트맵으로 그린다.
히트맵은 seaborn 패키지의 heatmap( ) 함수를 이용해 그릴 수 있다.
heatmap(데이터프레임, annot = True/False, cmap = '색상')의 구조이다.
annot = True : 상관계수 표시
annot = False : 상관계수 미표시
cmap : 히트맵 색상
히트맵에서 상관계수가 클수록 색상이 진하다.
우측 도표를 통해 알 수 있듯이,
상관계수가 양수면 푸른색, 상관계수가 음수면 붉은색이다.
3단계 : 대각 행렬 제거하기
3-1단계 : mask 만들기

히트맵으로 시각화할 상관 행렬 데이터프레임과 동일한 행/열 수를 가진 mask 행렬을 만든다.
numpy 패키지의 zeroes_like(데이터프레임)을 이용해 mask 행렬을 만들되, 값이 모두 0인 행렬을 만들 수 있다.

그리고 triu_indices_from( ) 함수를 이용해 오른쪽 위 대각 행렬의 0을 1로 바꾼다.
3-2단계 : 히트맵에 mask 적용하기

그리고 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( ) : 상관행렬 만들기
다음에는 머신러닝에 대해 공부한 내용을 정리할 예정이다.
'Python 데이터 분석 입문' 카테고리의 다른 글
| (Python 데이터 분석 입문 12편) 머신러닝 모델, 의사결정나무 모델, 성능 평가 지수 (0) | 2026.01.07 |
|---|---|
| (Python 데이터 분석 입문 10편) 인터렉티브 그래프 그리기 (1) | 2025.12.27 |
| (Python 데이터 분석 입문 09편) 데이터 분석 프로젝트: 한국인의 삶을 파악하기(下) (0) | 2025.12.26 |
| (Python 데이터 분석 입문 08편) 데이터 분석 프로젝트: 한국인의 삶을 파악하기(上) (0) | 2025.12.25 |
| (Python 데이터 분석 입문 07편) 그래프 그리기: Scatter Plot, Bar Chart, Line Chart, Box Plot (0) | 2025.12.22 |