[빅데이터분석기사] - 유형3 정리(2)

조민수·2026년 6월 12일

빅데이터분석기사

목록 보기
15/15
post-thumbnail

유형 3 문제별 검정 함수 정리 (2)

9. 지지도, 신뢰도, 향상도

  • 지지도(A, B): A와B를 동시에 포함한 거래의 비율
    : P(A∩B) / 전체

  • 신뢰도(A, B): A의 거래 중 B도 같이 구매한 거래의 비율(조건부 확률)
    : P(A∩B) / P(A)

  • 향상도(A, B): A를 구매했을 때 B를 구매하는 확률이, B를 무작위로 구매할 확률보다 얼마나 우수한지에 대한 확률
    : P(A∩B) / P(A) x P(B) = Conf(A→B) / P(B)

    • 향상도(Lift) = 1: A와 B는 독립
    • Lift > 1: 양의 상관관계(유의미), A 구매 시, B 구매 확률 증가
    • Lift < 1: 음의 상관관계, A 구매 시, B 구매 확률 감소
import numpy as np
N = len(df)

countA = df['colA'].sum()
countB = df['colB'].sum()
countA_B = len(df[(df['colA'] == True) & (df['colB'] == True)])

# 지지도
support = countA_B / N
# 신뢰도
confidence = coundA_B / countA
# 향상도
Lift = confidence / (countB / N)

10. 포아송 분포

: 단위 시간 당 접속 횟수, 발생 건수 등

from scipy import stats
# 평균
mu = 3
# 정확히 N명, N번
prob = stats.poisson.pmf(N, mu)

# N번 이상
prob = stats.poisson.cdf(N, mu)

# 적어도 N번
prob = 1 - stats.poisson.cdf(N, mu)
  • pmf(k, mu): 정확히 k번 발생할 확률 리턴
  • cdf(k, mu): 0~k번까지 발생할 누적 확률

11. 두 변수(데이터) 사이의 관계(독립성) 확인

: 카이제곱 검정_독립성 검정 stats.chi2_contingency

from scipy import stats

chi2, p_value, dof, expected = stats.chi2_contingency(data)
# data는 행렬(2차원)
# 기대빈도
res = expected[x][y]
  • 일반적으로 두 변수가 서로 독립적이라고 주장. 즉, p_value < 0.05라면 두 변수는 독립이 아니다.
  • dof: 자유도
  • expected: 기대빈도

12. 베르누이 분포 / 이항분포

: n번의 시도에서 성공 or 실패, 각 시도의 성공 확률 => 베르누이 분포
: n번의 시도 중 정확히 k번 성공할 확률 => 이항분포

from scipy import stats
# 베르누이 분포 계산
# 성공 수 / 전체 횟수
n = len(df)
prob_bi = df['Success'].sum() / n

# 이항 분포 계산
k = 60 #(특정 값, 문제에서 제시)
prob = stats.binom.pmf(k, n, prob_bi)
  • stats.binom.pmf(k, n, p): 이항분포
    • k: 정확히 성공할 횟수
    • n: 전체 시도 횟수
    • p: 각 시도에서 성공할 확률

13. 점추정 / 신뢰구간

: 점추정(표본 평균) = 전체 데이터의 평균(.mean())
: 구간추정 = t-분포를 통한 신뢰구간 추정(stats.t.interval(신뢰도, 자유도, 표본평균, 표준오차))

from scipy import stats
import numpy as np
# 점추정(표본 평균)
sample_mean = df['colA'].mean()

# 신뢰구간
# 95% 기준
confidence = 0.95
# 자유도 dof = n - 1
n = len(df['colA'])
dof = n-1
# 표본 표준편차
sample_std = df['colA'].std(ddof = 1)
# 표준 오차
standard_error = sample_std / np.sqrt(n)
std_err = stats.sem(df['colA'])

# t-분포
lower, upper = stats.t.interval(confidence, dof, loc = sample_mean, scale = standard_error)
  • stats.t.interval() 파라미터
    1. confidence: 신뢰도
    2. dof: 자유도
    3. loc: 표본 평균
    4. scale: 표준 오차

14. 이원 분산 분석

: 주 효과 2개, 상호작용 효과 1개 확인
: 변수x가 변수y에 미치는 영향 확인, 변수 x1, x2y에 미치는 영향 확인
1. 최소제곱법(ols())를 통한 선형 회귀 모델
2. 해당 모델을 anova_lm으로 분산분석: 3개 이상 집단의 평균이 서로 같은지, 다른지

from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

model = ols('종속변수 ~ 독립변수1*독립변수2', data = df).fit()
anova_table = anova_lm(model)

f_colA = anova_table.loc['colA', 'F']
p_colA = anova_table.loc['colA', 'PR(>F)']

f_inter = anova_table.loc['colA:colB', 'F']
p_inter = anova_table.loc['colA:colB', 'PR(>F)']
  • anova_table 해석
    • 자유도 df: 집단 수 - 1
    • 잔차 자유도 Residualdf: 전체 데이터 수 - 집단 수
    • 제곱합 sum_sq: 부서 간 평균 차이로 인해 발생한 변동성, 클수록 부서별 차이가 심하다는 뜻
    • F-통계량 F
    • p-value PR(>F)

15. accuracy / log-likelihood

accuracy-score: 예측 결과에 대한 정확도

log-likelihood: 모델이 주어진 데이터를 얼마나 잘 설명하는지에 대한 지표
: 보통 음수값, 0에 가까울수록 모델 성능 좋다.

from sklearn.metrics import accuracy_score

...
pred = model.predict(X_test)

accuracy = accuracy_score(df['colA'], pred')
log-likelihood = model.llf

16. 잔차이탈도

: 모델이 데이터를 얼마나 못 맞추고 있는지
: 수가 작을수록 모델이 실제 데이터를 잘 설명하고 있음.
=> -2 * model.llf

from stats.formula.api import logit
...
model = logit(...).fit()
# 잔차이탈도
residual_deviance = -2 * model.llf

17. AIC / BIC

: 모델의 가성비 지표

  1. AIC = 2k - 2*ln(k), k는 변수 개수
    : 이탈도에 변수 개수 만큼의 패널티, 값이 작을수록 좋음

  2. BIC = ln(n)*k - 2*ln(k), n은 데이터 개수
    : AIC보다 변수 개수에 엄격, 데이터가 많아질수록 변수 추가에 까다로움
    : 값이 작을수록 좋음

from statsmodels.formula.api import logit

model = logit( ... ).fit()
model.aic
model.bic

18. 비모수 검정

: 윌콕슨 검정(Wilcoxon Signed-Rank Test)

  • 데이터에 대한 중앙값과의 비교
  • 데이터가 정규분포를 따르지 않거나, 샘플 수가 적을 때 특정 중앙값과의 비교
    • stats.wilcoxon, alternative=? 필수
from scipy import stats

# 기준값과 데이터의 차이 계산
diff = df['colA'] - st # st(기준값)은 문제에서 제시

# 윌콕슨 부호순위 검정
# 중앙값이 기준값보다 클 것이다(greater)
statistics, p_value = stats.wilcoxon(diff, alternative='greater')
profile
Being a Modern Project Manager

0개의 댓글