두 집단이 정말 차이가 있는 걸까? 아니면 우연일까?
t-검정이나 카이제곱 검정 등을 활용해 데이터의 의미를 통계적으로 확인하는 방법에 대한 유형입니다.
가. 가설검정

1. T-검정
1) 일표본 평균 검정: 모분산을 모르는 경우 (단일표본 t 검정)
from scipy import stats
statistic, pvalue = stats.ttest_1samp(sample_data, popmean=기준값)
2) 이표본 독립표본 평균 검정(독립표본 t 검정, 대응표본 t 검정)
statistic, pvalue = stats.ttest_ind(male_data, female_data, equal_var=False)
3) 대응 표본
statistic, pvalue = stats.ttest_rel(before, after)
구분 함수 이름 설명
| 단일표본 t-test | stats.ttest_1samp() | 한 집단 평균 vs 기준값 비교 |
| 독립표본 t-test | ✅ stats.ttest_ind() | 두 독립 집단 평균 비교 |
| 대응표본 t-test | stats.ttest_rel() | 한 집단의 전후 평균 비교 |
2. Chi-검정 : 테이블 형태의 자료(범주형 자료)에 대한 가설 검정
cnt_tb = pd.crosstab(df['Department'], df['JobSatisfaction'])
statistic, pvalue, dof, expected = stats.chi2_contingency(cnt_tb)
3. ANOVA : Analysis of Variance (분산분석)
1)일원분산분석 (One-way ANOVA)
ANOVA 목적 : “그룹별 숫자 값을 비교하는 시험”
예:
부서별(JobSatisfaction)이 서로 차이가 있는지 알려면
- Sales 부서 사람들의 만족도들
- HR 부서 사람들의 만족도들
- R&D 부서 사람들의 만족도들
이 각각의 숫자 묶음이 필요해.
이걸 ANOVA 함수에 넣으면 됨:
f_oneway(그룹1, 그룹2, 그룹3 ...)
ANOVA 분석 적용
예시
f_stat, p_value = stats.f_oneway(sample1, sample2, sample3, ...)
예제 사용
statistic, p_value = stats.f_oneway(*Samples)
2)이원분산분석
나. 통계분석
1. 선형 회귀 분석
★ R^2의 의미
공식적 정의:

- RSS (Residual Sum of Squares): 모델이 맞추지 못한 오차 제곱합
- TSS (Total Sum of Squares): 데이터가 평균에서 얼마나 퍼져 있는지 제곱합
즉, R²는 모델이 데이터의 변동성을 얼마나 설명하는지를 나타냄
- 일반적으로 R²의 범위는 0 ~ 1
- 0 → 모델이 데이터를 전혀 설명하지 못함
- 1 → 모델이 데이터를 완벽하게 설명함
- 단, 회귀에서 y의 예측치가 평균보다 더 안 맞으면 음수가 나올 수도 있음
→ 예: 모델이 너무 엉망이면 RSS > TSS → R² < 0
p-value란?
p-value = 귀무가설(H₀)이 맞다고 했을 때, 지금처럼 극단적인 결과가 나올 확률
- 즉, 귀무가설이 맞다고 가정했을 때 데이터가 얼마나 이상한지 측정한 값
- 작을수록 → 데이터가 귀무가설과 맞지 않을 가능성이 높음
2. 직관적 의미
- p-value가 작다 (예: < 0.05)
→ 관측된 데이터가 귀무가설 하에서는 거의 나올 수 없음
→ 귀무가설 기각, 대립가설 지지 - p-value가 크다 (예: > 0.05)
→ 관측된 데이터가 귀무가설 하에서도 충분히 나올 수 있음
→ 귀무가설 기각 불가, 차이가 있다고 말하기 어렵다
- 다중 회귀 모델 (model = sm.OLS(y, x_const) : 종속변수(Y)가 연속형이어야 함
OLS : Ordinary Least Squares(일반 최소 제곱법)
+ R-squared 찾는 법 : result.rsqured
import statsmodels.api as sm
sm.OLS(y, X)
- 로지스틱 회귀 분석 (model = sm.Logit(y, X_const) : 종속변수(Y)가 **범주형(0/1 등)**이어야 함
필요 모듈
import pandas as pd
import numpy as np #오즈비 계산
import statsmodels.api as sm #로지스틱 회귀 모델 적용
1) 회귀식에 절편 추가
절편(intercept)이 필요할까?
회귀식은 기본적으로 이런 형태야:
y=β0+β1X1+β2X2+…y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots
여기서
- β0\beta_0 = 절편, intercept
- β1,β2,...\beta_1, \beta_2, ... = 각 변수의 계수
문제는… statsmodels는 절편(β0)을 자동으로 포함하지 않는다.
그래서 직접 X에 **상수 1짜리 열(column)**을 추가해야 한다.
X_const = sm.add_constant(X)
+여러개 독립 변수를 X에 넣을때
X = df[['Column1', 'Column2', 'Column3']]
2) 로지스틱 회귀 모델
model = sm.Logit(y, X_const)
result = model.fit()
print(result.summary())
3) 결과값 변수의 회귀계수 구하기
ans_3 = result.params.loc['Glucose']
- 오즈비
odds_ratio = np.exp(회귀계수)
- 추가 예측하기
sample = pd.DataFrame([{
'satisfaction':0.5,
'salary' : 0.7,
'years_at_company' : 3.0,
'const' : 1.0
}])
ans3 = result.predict(sample)'Python > 빅데이터분석기사 실기' 카테고리의 다른 글
| 빅데이터 분석기사 실기 체험 문제 유형 2번 풀이(25.11/21) (0) | 2025.11.21 |
|---|---|
| (2015.11.16) 빅데이터분석기사 실기 체험 문제 (0) | 2025.11.16 |
| 빅분기 실기 유형 1 기출문제 코드 (set_option, unique) (0) | 2025.11.11 |
| 빅분기 실기 유형 1 기출문제 코드 (corr) (0) | 2025.11.09 |
| 빅분기 실기 유형 1 기출문제 코드 (to_datetime, strftime, astype) (0) | 2025.11.09 |