이전 내용
[빅분기 실기] 작업형 3유형 : 가설검정
이전 내용 [빅분기 실기] 작업형 2유형 : 회귀 실습이전 내용 [빅분기 실기] 작업형 2유형 : 다중 분류 실습이전 내용 [빅분기 실기] 작업형 2유형 : 이진 분류 실습 (feat. 가짜데이터)이전 내용 [빅
puppy-foot-it.tistory.com
작업형 3유형
작업형 3유형은 데이터 분석 과정에서 필요한 통계학적 접근 방법을 이해하고 적용할 수 있는 능력을 평가하기 때문에, 1과 2유형보다 이론적 내용을 더 많이 포함한 시험 문제를 출제한다.
3유형에서는 사이파이(scipy)와 스태츠모델즈(statsmodels) 같은 통계 분석을 위한 주요 파이썬 라이브러리를 활용해 수행한다.
- 가설검정: 주어진 데이터가 특정 가설을 지지하는지 여부를 통계적으로 검토하는 방법. 이를 통해 귀무가설과 대립가설을 설정하고 검정.
- 분산 분석: 두 개 이상의 집단 간의 평균 차이를 검정하기 위한 통계적 기법으로, 집단 간 분산과 집단 내 분산을 비교.
- 카이제곱 검정: 범주형 변수 간의 독립성을 검정하는 방법, 기대 빈도와 관측 빈도를 비교하여 결과 도출.
- 회귀 분석: 하나 이상의 독립 변수가 종속 변수에 미치는 영향을 모델링하는 기법, 선형 회귀가 가장 일반적.
- 로지스틱 회귀 분석: 이진 종속 변수를 예측하기 위해 사용되는 회귀 분석 기법, 사건의 확률을 추정하는 데 적합.
분산 분석(ANOVA)
분산 분석: 여러 집단의 평균 차이를 통계적으로 유의미한지 검정하는 방법. ※ 주로 3개 이상의 집단 비교 시 사용
- 일원 분산 분석: 단일 요인의 수준 간 평균 차이 검정
- 이원 분산 분석: 두 요인의 수준 간 및 그들의 상호작용이 평균에 미치는 영향 검정
※ 요인: 독립변수로, 머신러닝에서는 '변수'를 의미.
◆ 분산 분석의 기본 가정
- 독립성: 각 집단의 관측치들은 모든 다른 집단의 관측치들과 독립적
- 정규성: 각 집단에서의 관측치는 정규 분포를 따름
- 등분산성: 모든 집단에서의 관측치는 동일한 분산을 가짐
◆ 일원 분산 분석의 귀무 가설과 대립 가설
- 귀무 가설: 모든 집단의 평균은 동일
- 대립 가설: 집단의 평균에는 차이가 있음. (적어도 두 그룹 간의 평균)
◆ 이원 분산 분석의 귀무 가설과 대립 가설
이원 분산 분석은 주 효과뿐 아니라 상호작용 효과에도 관심을 두기 때문에, 이원 분산 분석을 실시할 경우 주 효과 2개, 상호작용 효과 1개로 세 가지 가설을 세울 수 있다.
ex) 다이어트 시 운동 방법과 운동 장소에 따른 효과를 분석한다고 할 때 A요인은 운동 방법은 걷기와 달리기, B 요인은 야외에서 운동, 실내 (헬스장)에서 운동으로 구성된다.
A 요인: 운동 방법 | 걷기 | 달리기 | ||
B 요인: 운동 장소 | 야외 | 핼스장 | 야외 | 헬스장 |
- 주 효과: A 요인(운동 방법)
- 귀무 가설: 운동 방법에 따라 다이어트 효과가 차이가 없다
- 대립 가설: 운동 방법에 따라 다이어트 효과가 차이가 있다
- 주 효과: B 요인(운동 장소)
- 귀무 가설: 운동 장소에 따라 다이어트 효과가 차이가 없다
- 대립 가설: 운동 장소에 따라 다이어트 효과가 차이가 있다
- 상호작용 효과
- 귀무 가설: A 요인과 B 요인 간에 상호작용이 없다
- 대립 가설: A 요인과 B 요인 간에 상호작용이 있다
분산 분석 풀기
1. 일원 분산 분석
일원 분산 분석은 scipy의 f_oneway 사용
from scipy import stats
scipy.stats.f_oneway(sample1, sample2, sample3)
# sample은 각 집단 데이터
Q. 세 개 학급의 시험 점수 평균 비교
대학교 A학과에서는 세 개 반(1반, 2반, 3반)이 같은 시험을 봤다. 학생들이 얼마나 잘했는지 확인하고자, 각 반의 평균 점수가 통계적으로 차이가 있는지 알아보려 한다. (유의 수준 0.05)
- 귀무 가설: 세 반의 평균 시험 점수는 모두 같다
- 대립 가설: 적어도 하나의 반 평균은 다르다
# 일원 분산 분석
import pandas as pd
from scipy import stats
df = pd.DataFrame({
'class_1' : [82, 76, 91, 85, 77],
'class_2' : [89, 94, 90, 92, 88],
'class_3' : [70, 65, 72, 68, 74],
})
df
print("정규성 검정: p-value가 유의 수준보다 크면 정규 분포")
print(stats.shapiro(df['class_1']))
print(stats.shapiro(df['class_2']))
print(stats.shapiro(df['class_3']))
print("\n등분산성 검정: p-value가 유의 수준 보다 크면 모든 그룹의 분산 동일")
print(stats.levene(df['class_1'], df['class_2'], df['class_3']))
print("\n일원 분산 분석: p-value가 유의 수준 보다 크면 세 반의 평균 시험 점수는 모두 같다고 볼 수 있다 - 귀무 가설 채택")
print(stats.f_oneway(df['class_1'], df['class_2'], df['class_3']))
1) 정규성 검정 (shapiro)
- Shapiro-Wilk 검정은 각 그룹이 정규분포를 따르는지 확인하는 과정.
- p-value > 0.05 → 정규분포라고 판단 → ANOVA 사용 가능 조건 충족.
2) 등분산성 검정 (levene)
- Levene 검정은 세 그룹이 비슷한 분산을 갖는지 확인.
- p-value > 0.05 → 등분산 가정 충족 → 일원 분산 분석 가능.
3) 일원 분산 분석 (f_oneway)
- f_oneway()는 F-검정 통계량과 p-value를 반환.
검정 단계 | 결과 해석 | 결론 |
정규성 | 모든 반의 점수 분포는 정규성을 만족 | 만족 |
등분산성 | 세 반의 분산은 비슷함 | 만족 |
ANOVA | p-value가 작음 → 평균 차이 있음 | 귀무가설 기각 (차이 있음) |
2. 이원 분산 분석
이원 분산 분석의 경우 스태츠모델즈(statsmodels)의 ols와 anova_lm 사용
model = ols(종속변수 ~ 요인1 + 요인2 + 요인1:요인2).fit()
aonva_lm(model, typ=숫자)
# 종속변수: 연속형 변수
# 요인1: 첫 번째 독립 변수(범주형 변수)
# 요인2: 두 번째 독립 변수(범주형 변수)
# typ=1: 변수의 순서에 따른 분석 (기본값)
# typ=2: 각 변수의 독립적인 효과 분석
# typ=3: 모든 변수와 상호작용을 동시에 고려해 분석
Q. 운동 종류와 성별에 따른 체중 감소 효과 분석
헬스장에서 다이어트 프로그램을 진행하며, 두 가지 요인(factor)을 비교하고자 한다.
- 요인1: 운동 종류 (달리기, 근력)
- 요인2: 성별 (남성, 여성)
각 조합별로 3명씩 참가했고, 4주간 다이어트를 진행한 후 감량한 체중(kg)은 다음과 같다.
성별 | 운동 종류 | 감량 1 | 감량 2 | 감량 3 |
남성 | 달리기 | 3.2 | 2.8 | 3.0 |
남성 | 근력 | 1.5 | 1.8 | 1.7 |
여성 | 달리기 | 2.5 | 2.2 | 2.3 |
여성 | 근력 | 1.0 | 0.9 | 1.2 |
[문제]
- 운동 종류에 따라 체중 감량에 차이가 있는가?
- 성별에 따라 체중 감량에 차이가 있는가?
- 운동 종류와 성별의 상호작용 효과가 있는가?
# 이원 분산 분석
import pandas as pd
from statsmodels.formula.api import ols
df = pd.DataFrame({
'gender': ['m1', 'm1', 'm1','m2', 'm2','m2','w1','w1','w1', 'w2','w2','w2'],
'type': ['run', 'run','run','weight','weight','weight','run','run','run', 'weight','weight','weight'],
'lose_weight': [3.2, 2.8, 3.0, 1.5, 1.8, 1.7, 2.5, 2.2, 2.3, 1.0, 0.9, 1.2]
})
df
★ 필자가 작성한 코드는 개별 인물로 되어 있어서 약간 혼동이 있을 수 있으므로, 성별에 대한 효과만 필요하다면 아래와 같이 하는 것이 좋다.
df = pd.DataFrame({
'gender': ['male']*6 + ['female']*6,
'type': ['run']*3 + ['weight']*3 + ['run']*3 + ['weight']*3,
'lose_weight': [3.2, 2.8, 3.0, 1.5, 1.8, 1.7, 2.5, 2.2, 2.3, 1.0, 0.9, 1.2]
})
새로 변경한 데이터프레임으로 이원 분산 분석을 진행해 본다.
# 이원 분산 분석
import statsmodels.api as sm
from statsmodels.formula.api import ols
model = ols('lose_weight ~ gender+type+gender:type', data=df).fit()
anova_table = sm.stats.anova_lm(model)
anova_table
※ 만약, 범주형 변수가 1, 2, 3 과 같은 숫자로 되어있을 때는 연속형 변수로 잘못 해석될 위험이 있으므로 C()를 사용해 명확히 범주형으로 처리해줘야 한다.
model = ols('lose_weight ~ C(gender)+C(type)+C(gender):C(type)', data=df).fit()
- gender: 성별의 주효과
- type: 운동 종류의 주효과
- gender:type: 성별과 운동 종류의 상호작용 효과
[해석]
요인 | df | Sum_sq | Mean_sq | F값 | p-value | 해석 요약 |
gender | 1 | 1.267 | 1.267 | 46.09 | 0.000139 | ✅ 유의함 |
type | 1 | 5.200 | 5.200 | 189.12 | 0.0000007541 | ✅ 유의함 |
gender:type | 1 | 0.0008 | 0.0008 | 0.03 | 0.8661 | ❌ 유의하지 않음 |
Residual(오차) | 8 | 0.220 | 0.0275 | - | - | - |
용어 | 의미 | 설 |
df (자유도) | 각 요인의 그룹 수 - 1 | 비교한 그룹의 수에 따라 달라짐 |
Sum Sq (제곱합) | 전체 변동 중 이 요인이 설명하는 양 | 요인이 데이터의 차이에 얼마나 기여했는지 |
Mean Sq (평균제곱) | 제곱합을 자유도로 나눈 값 | 비교 기준값 |
F값 | 요인에 의한 분산 / 오차에 의한 분산 | F값이 클수록 요인의 효과가 크다는 뜻 |
p-value | 귀무가설이 맞을 확률 | 0.05보다 작으면 의미 있는 차이 있음(귀무가설 기각) |
◆ 요인별 해석
1. gender (성별의 효과)
- F = 46.09, p = 0.000139
- 해석: 성별에 따라 감량량에 통계적으로 유의미한 차이가 있음.
- 즉, 남성과 여성은 평균적으로 다르게 체중을 감량했음.
2. type (운동 종류의 효과)
- F = 189.12, p = 0.000000754
- 해석: 운동 종류(run vs. weight)에 따라 감량량에 매우 큰 차이가 있음.
- 어떤 운동이든 체중 감량에 영향을 많이 줬다는 뜻.
예를 들어 달리기(run)가 웨이트(weight)보다 감량 효과가 컸을 가능성 있음.
3. gender:type (성별과 운동 방식의 상호작용)
- F = 0.03, p = 0.866
- 해석: 성별과 운동 종류의 조합이 감량에 영향을 주지 않음.
즉, 남자가 달리기를 하든 웨이트를 하든, 여자가 어떤 운동을 하든 간에 그 조합 자체는 감량량 차이에 큰 영향을 주지 않음.
◆ 최종 결론
항목 | 결론 |
성별(gender) | 감량량에 유의미한 차이 있음 |
운동 종류(type) | 감량량에 유의미한 차이 있음 |
성별 x 운동 상호작용 | 감량량에 차이를 주지 않음 |
[참고]
유튜브 퇴근 후 딴짓
다음 내용
[빅분기 실기] 작업형 3유형 : 카이제곱 검정
이전 내용 [빅분기 실기] 작업형 3유형 : 분산분석이전 내용 [빅분기 실기] 작업형 3유형 : 가설검정이전 내용 [빅분기 실기] 작업형 2유형 : 회귀 실습이전 내용 [빅분기 실기] 작업형 2유형 : 다중
puppy-foot-it.tistory.com
'자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅분기 실기] 작업형 3유형 : 회귀 분석 (0) | 2025.05.31 |
---|---|
[빅분기 실기] 작업형 3유형 : 카이제곱 검정 (0) | 2025.05.31 |
[빅분기 실기] 작업형 3유형 : 가설검정 (0) | 2025.05.29 |
[빅분기 실기] 작업형 2유형 : 회귀 실습 (0) | 2025.05.27 |
[빅분기 실기] 작업형 2유형 : 다중 분류 실습 (1) | 2025.05.26 |