지난 글에서는 온라인통제 실험상에서의 인과추론과 선형회귀모델을 적용하는 방법에 대해서 알아보았다. 이번 글은 선형회귀가 어떻게 무작위 배정을한 것처럼 보이게 할 수 있는지 원리와 그 기반에 되는 직교화의 개념, FWL 방법론에 대해서 작성해본다!


 

1. 글목차

  • 조건부 독립성
  • 직교화: 기하학 관점
  • 선형회귀관점에서의 직교화: FWL
  • 더미변수를 이용한 회귀 분석
  • 심슨의 역설

2. 본문

지난 글에서는 무작위 배정을 통한 교란변수의 통제가 중요하다는 것을 알았다. 하지만, RCT가 불가능하거나 어려운 상황 예컨데, 은행에서 고객들의 대출을 빌려주는 상황에서는 어떻게 처치변수(신용한도)가 채무불이행(결과변수)에 미치는 영향을 정량화 할 수 있을까?  실무로 통하는 인과추론 책 4단원에서는 선형회귀를 통한 방법론을 설명하고 있다. 

4단원을 한마디로 요약하자면 다음과 같다.

조건부 독립성이 유지될 때 직교화를 이용해서 처치가 무작위로 배정된 것처럼 보이게 할 수 있다는 점 이 방법은 FWL 정리를 이용해 적용한다. 

한글로 적혀있는데 도통 무슨 말인지 모르겠다.. 하나씩 파헤쳐보고자 한다.

2.1. 조건부 독립성

 

조건부 독립성이란 두 변수 $T$와 $Y$가 어떤 제 3의 변수 $X$가 주어 졌을 때 독립이라는 뜻이다. 수학적으로는 다음과 같이 표현된다. 

$T \perp Y | X $

  • $T$: 처치 변수, 실험하려는 요소
  • $Y$: 결과 변수, 관측하려는 요소
  • $X$: 혼란 변수, 처치와 결과에 영향을 줄 것으로 생각되는 변수

조건부 독립성이 성립하면 처치 변수 $X$가$T$와 $Y$사이의 모든 상관관계를 설명한다고 볼 수 있다. 다시 말해, 혼란 변수가 되는 $X$를 통제한다면 $T$와 $Y$의 인과 관계를 정확하게 추정할 수 있다는 이야기이다.

 

2.2. 직교화(Orthogonalization): 기하학 관점

직교화의 선형회귀 효과를 이해하기 전에 기하학관점에서 이해해보자. 우리가 생각하는 변수들은 모두 벡터 공간에서 벡터로 이해될 수 있다.(ex $Y, X, T$) 이 벡터들은 n차원의 공간에 존재하며, n은 관측치의 개수이다. 

회귀 분석에서 우리가 수행하는 것은 벡터 투영이다. 예를들어 결과 변수 $Y$를 교란 변수 벡터 $X$에 회귀 한다는 것은 $Y$를 $X$벡터 방향으로 직교 투영(Orthogonal Projection) 시킨다는 의미이며 식으로는 다음과 같이 표현한다. 

(선형대수의 필요성..)

$ \hat{Y} = X(X^{T}X)^{-1}X^{T}Y$

여기서 $\hat{Y}$는 $Y$의 벡터가 $X$벡터의 공간에 투여된 결과이다. 이 벡터는 $Y$가 $X$로 설명될 수 있는 부분만을 나타내는 것이다.

 

반면 잔차 벡터 $e$는 $Y$가 $X$에 투영되지 않는 부분으로 정의된다. 

$e = Y - \hat{Y}$

요약하자면 직교 투영을 통해 변수 간의 상관성을 제거하고 특정 벡터가 다른 벡터에 의해 설명되지 않은 순수한 부분을 구하게 된다. 이과정에서 벡터 공간에서 직교화(orthogonalization)가 이루어지는 것이다. 

위 부분은 다음 블로그를 참고하면 좀 더 정석적으로 알 수 있다.

https://angeloyeo.github.io/2020/08/24/linear_regression.html

 

선형회귀 - 공돌이의 수학정리노트 (Angelo's Math Notes)

 

angeloyeo.github.io

 

 

2.3. 선형회귀 관점에서의 직교화: FWL 

요약하자면 FWL(Frisch-Waugh-Lovell Theorem)은 다음 3단계를 거쳐 진행된다.

  1. 편향 제거 단계: 처치 $T$를 교란 요인 $X$에 대해 회귀하여 처치 잔차 $\widetilde{T} = T - \hat{T}$를 구한다.
  2. 잡음 제거 단계: 결과 $Y$를 교란 요인 $X$에 대해 회귀하여 결과 잔차 $\widetilde{Y} = Y - \hat{Y}$를 구한다.
  3. 결과 모델 단계: 결과 잔치 $\widetilde{Y}$ 를 처치 찬차 $\widetilde{T}$에 대해서 회귀하여 $T$가 $Y$에 미치는 인과효과의 추정을 구한다. 

 

다시말해 직교화는 선형 회귀에서 독립 변수들 사이의 상관성을 제거하는 과정이다. 이를 통해 특정 변수가 다른 변수로부터 독립적으로 보이게 하여 처치가 마치 무작위로 배정된 것 처럼 만드는 방법이다. 이는 FWL 정리를 사용해 두 단계로 구현할 수 있다.

import numpy as np
from sklearn.linear_model import LinearRegression

# 가상의 데이터 생성
np.random.seed(42)
n = 100
T = np.random.rand(n, 1)  # 처치 변수
X = np.random.rand(n, 1)  # 교란 변수
Y = 5 * T + 3 * X + np.random.randn(n, 1)  # 결과 변수, T와 X의 조합으로 생성됨

# 1단계: Y를 X에 회귀시켜 잔차 계산 (X가 Y에 미치는 영향을 제거)
model_Y_X = LinearRegression().fit(X, Y)
Y_residual = Y - model_Y_X.predict(X)

# 2단계: T를 X에 회귀시켜 잔차 계산 (X가 T에 미치는 영향을 제거)
model_T_X = LinearRegression().fit(X, T)
T_residual = T - model_T_X.predict(X)

# 3단계: Y의 잔차를 T의 잔차에 회귀하여 T의 순수한 효과 추정
model_residuals = LinearRegression().fit(T_residual, Y_residual)
beta_T_estimate = model_residuals.coef_

print(f"T의 순수한 효과 (beta_T 추정치): {beta_T_estimate[0][0]:.4f}")

위 단계에서 1, 2 단계가 직교화 과정이다. 

  • 1단계: $Y$를 $X$에 회귀 시켜서 잔차 계산. 결과 변수에서 교란 변수의 영향을 제거하는 역할을 한다.
  • 2단계: $T$를 $X$에 회귀 시켜서 잔차 계산. 처치 변수에서 교란 변수의 영향을 제거하는 역할을 한다. 

 잔차끼리 회귀를 수행하는 3단계는 직교화된 변수들 사이에서 처치 변수의 순수한 인과적 효과를 추정하는 과정이다.$Y$ 의 잔차는 X로 설명할 수 없는 Y의 변동 부분만 남게되며, $T$의 잔차는 $X$로 설명할 수 없는 $T$의 변동만 남게 된다

 

2.4. 더미변수를 이용한 회귀분석

책에 있는 예제를 가져와보자. 지출을 예측하기 위해서 신용한도를 처치변수로 추론하는 모델이며, 추후 임금을 통해 보정하는 방식으로 이루어진다.

  • $Y$: 결과변수 - 신용불량
  • $T$: 처치변수 - 신용한도
  • $X$: 혼란변수 - 임금

1. 데이터 불러오기

import pandas as pd
import graphviz as gr
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import statsmodels.formula.api as smf
risk_data_rnd = pd.read_csv("./data/risk_data_rnd.csv")
risk_data_rnd.head()

 

2. 단순회귀 적합하기

plt_df = (risk_data_rnd
          .assign(size=1)
          .groupby("credit_limit")
          .agg({"default": "mean", "size":sum})
          .reset_index())

plt.figure(figsize=(10,4))
sns.scatterplot(data=plt_df,
                x="credit_limit",
                y="default",
                size="size",
                sizes=(1,100))
sns.regplot(data = plt_df,
            x="credit_limit",
            y="default",
            ci = None)
plt.ylim(-0.1,0.3)

plt.title("Default Rate by Credit Limit")
plt.show()

model = smf.ols("default ~ credit_limit", data=risk_data_rnd).fit()
model.summary().tables[1]

 

먼저 신용한도와 신용불량을 단순 회귀 모델을 적합하면  계수가 음수가 나온다. 그대로 해석하면 신용한도가 높을 수록 채무불이행률은 낮아진다는 것이다. 하지만 이 부분은 현재 교란변수를 보정하지 않았기 때문에 올바르지 않은 결과일 확률이 높다. 

따라서 임금을 이용하여 보정변수로 사용할 수 있으며, 이를 위해 credit_score 1을 binning하여 적합할 수 있다. 먼저 구간 별로 히스토그램을 그리면 다음과 같다.

plt.figure(figsize=(15,6))
sns.histplot(data=risk_data_rnd,
             x="credit_limit",
             hue="credit_score1_buckets",
             kde=True,
             palette="Paired",
             alpha = 0.5);
plt.title("Conditional random experiment")
plt.show()

이후 credit_score 구간별로 더미화한뒤 적합한 결과는 다음과 같다.

risk_data_dummies = (risk_data_rnd
                     .join(pd.get_dummies(risk_data_rnd["credit_score1_buckets"],
                                          prefix="sb",
                                          drop_first=True)))

model = smf.ols(
    "default ~ credit_limit + sb_200+sb_400+sb_600+sb_800+sb_1000",
    data=risk_data_dummies
).fit()

model.summary().tables[1]

다중 회귀식 해석에 따라, 다른 credit_score을 고정시켰을때(조건부 확률일 때) 채무불이행률은 신용한도와 양수의 관계를 가진다.  단위가 작은것은 신용한도가 0 ~ 1000단위이며 채무불이행률은 0과 1값을 가지기 때문에 단위차임을 확인할 수 있다. 

위 binning을 바탕으로 임금별로 선형회귀를 각각 적합하면 다음과 같다. 

plt_df = (risk_data_rnd
          .assign(risk_prediction = model.fittedvalues)
          .groupby(["credit_limit", "credit_score1_buckets"])
          ["risk_prediction"]
          .mean()
          .reset_index())

plt.figure(figsize=(10,4))
sns.lineplot(data=plt_df,
             x="credit_limit", 
             y="risk_prediction", 
             hue="credit_score1_buckets", 
             palette = 'Set1');
plt.title("Fitted values by group")
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()

 

2.5. 심슨의 역설(Simpson's paradox)

위 사례를 보면서 언뜻 심슨의 역설이 생각났다. 심슨의 역설이란, 전체 데이터를 분석했을 때 경향과 그룹으로 나누어 분석했을 때의 경향이 서로 반대되는 상황을 말한다. 영국의 통계학자 에드워드 심슨이 정리한 역설이다.

 

위 내용을 보았을때, 회귀 분석에서 교란변수($X$)를 독립변수로 추가하는 것은 심슨의 역설을 해소하고, 처치 변수($T$)와 결과 변수($Y$)간의 정확한 인과관계 추론을 하는데 중요한 역할을 한다는 것을 알 수 있다. 

 

3. 출처와 링크

 

 

 

1장에서는 인과추론의 소개, 2장에서는 RCT의 중요성과 기초 통계개념 그리고 3장에서는 인과관계를 표현하는 그래프 인과모델에 대해서 알아보았다. 이번 장에서는 인과관계를 추론하는데 아주 중요한 회귀분석을 알아본다. 회귀분석은 데이터 분석에서 접할 수 있는 가장 간단하지만 파워풀한 통계방법론으로 편향을 줄이는 방법에서도 유용하다. 또한, 온라인 마케팅 모델에서의 실용적인 사례도 알아본다.


1. 글목차

  • A/B test 결과 회귀분석 적용
  • 온라인 마케팅에서의 회귀분석

2. 본문

2.1. A/B test 결과 회귀분석 적용

온라인 스트리밍 서비스를 하는 회사에서 새로운 추천시스템을 개발했고 이를 측정하기 위해서 A/Btest를 수행했다. 이를 단순집계와 선형회귀의 결과로 표현해보자.

import pandas as pd
data = pd.read_csv('./rec_ab_test.csv')
data.head()


다음은 단순 선형회귀의 식과 구현 결과이다. 

$ WatchTime_{i} = \beta_{0} + \beta_{1}challenger_{i} + e_{i} $

import statsmodels.formula.api as smf
#C()카테고리 변수 처리
#상수항을 따로 넣지 않아 watch_time은 recommender 변수에만 의존 한다고 가정함.
result = smf.ols('watch_time ~ C(recommender)', data = data).fit()
result.summary().tables[1]

다음은 추천시스템 유무에 따른 평균시청시간 결과이다. 

data.groupby('recommender')[['watch_time']].mean()

 

추천시스템을 적용한 그룹은 평균 시청시간이 2.19시간이었고 대조군은 2.05시간이였다. 이는 선형회귀의 결과에서 기본 $\hat{\beta_{0}}$이 2.05 이고 $\hat{\beta_{1}}$(= 추천시스템을 적용했을 때 시청시간의 증가분)가 0.14 라는 값과 일치한다. 이미 a/b test 를 적용한 결과이니 교란변수가 잘 제어되었다는 반증이기도 하다. 

2.2. 온라인 마케팅에서의 회귀분석

2.2.1. 온라인 마케팅의 관심사

책에서느 채무 불이행이라는 데이터를 가지고 회귀분석의 이론과 유용성을 설명한다. 필자는 인과추론의 데이터과학이라는 Youtube와 같이 책을 보고 있는데 다음 영상이 매우 실증적인 설명을 잘해주셔서 풀어서 써보려고한다. 링크는 다음과 같다 .

https://www.youtube.com/watch?v=07SWlTOqxpY&t=1s

온라인 마케팅이란 마케팅 목표(신규 고객 유치, 이탈방지)를 수립하고 이 목표를 달성하기 위한 마케팅을 진행하는 과정이며, 가장 중요한 것은 마케팅 예산 투입 대비 얼만큼의 효과가 발생했는지 효율을 측정하는 것이다. 이를 대표한 지표로서 ROAS(Return on Advertisement Spend)이다. 

2.2.2. 기존 측정 지표: LTA

 

LTA 방법론

LTA(Last Touch Attribution)은 가장 기본적인 측정 방법으로 마케팅 여러가지 매체(Meta, google, naver)쓰고 노출이 되더라도 마지막에 인입된 경로를 기준으로 측정하는 방법이다. 딱 들어도 naive한 방법이라고 여겨지기 때문에 다음과 같은 한계를 가진다.

  • 한계
    1. 유저가 거쳐온 여러 종류의 매체 효과를 측정하기 어려움.
    2. Touch 이후 전환을 측정할 수 없으면 LTA 측정 불가
         ex) 광고를 보고 잠시 있다가 기억이나서 검색해서 들어오는 경우, 광고에 대한 측정 데이터가 남지 않음
    3. 광고의 Incremental(증가분) 측정 불가 
         ex) 원래 들어오려고 했던 organic유저인가 아니면 마케팅 효과로 들어온 유저인가?
      • 이를 위해서는 비광고 대조군의 영향을 제거해야함. a/btest 를 이용하여 광고 타켓군과 대조군을 분할하여 광고를 집행 해볼 수 있다.

비광고 대조군이 존재한다면 해당 영향을 제거하여 광고로 인한 효과를 측정할 수 있을 것

하지만 위 상황에서 우리가 알아야하는 점은 신규유저의 경우 대조군 설정이 불가능하다. 이유는 애초에 데이터가 존재하지 않기 때문이다. 온라인 마케팅은 2가지 UA 마케팅과 리타겟팅 마케팅이 존재하는데 abtest를 적용할 수 있는 마케팅은 리타게팅 마케팅으로 이미 접속한 유저를 재모객하는 온라인 마케팅일 때 유효하다고 할 수 있겠다.

Youtube [실무로 통하는 인과추론] 4-2. 온라인 마케팅 분야에서의 회귀분석

 

2.2.3. 마케팅 믹스 모델링(MMM)

하지만 abtest는 개별 매체의 성과를 비교하는데 유용하지만, 다채널 환경에서의 복잡성에서는 적용하기 어려운 점이 있다. 또한 abtest가 적용하기 어려운 장기적인 광고효과를 측정하는데도 어려움이 있다.  따라서, 광고의 Incremnental 효과를 측정하면서도 각 매체의 기여도를 파악할 순 없을까? 라는 의문에서 MMM이 시작되었다.

고객 1명을 데리고 오는데 각 마케팅 매체가 어느정도 기여를 했는지 파악

(좌) MMM의 개요와 (우) MMM 결과

이때 다중선형회귀를 이용해서 모델링한다. 

$y_{i} = \beta_{0} + \beta_{1}x_{1}  + \beta_{2}x_{2} + ... \beta_{n}x_{n} + \epsilon$

  • $x$: 원인변수 외부 매체, 환경 요인)
  • $\beta$: 원인 변수의 기여도(마케팅 매체 별 효율)

예를 들어 판매량에 대한 회귀분석을 수립하면 다음과 같다. 

$y  = \beta_{Never}X_{Never} + \beta_{mechat}X_{mechat} + \beta_{stargram}X_{stargram} + \beta_{makao}X_{makao} + \sum_{i=1}^{12}\beta_{month}I(X_{month} = i) + \epsilon$

위 결과의 해석은 coef = 1이면 투입 대비 성과가 1:1이라는 것이며, mechat의 효율이 제일 좋고 never의 효율이 제일 좋지 않다고 판단단 내릴 수 있다. 따라서, 마케팅 예산을 mechat에 집중하고 never에 집행 예산을 축소하거나 중단하는 등의 의사결정을 지원할 수 있다. 

 

3. 출처와 링크

  • 교보문고 실무로 통하는 인과추론 with python 
  • Jupyter book 인과추론 
  • github  가짜연구소 Casual Inference Team 
  • Youtube 인과추론의 데이터과학
    • Youtube  [실무로 통하는 인과추론] 4-1. 실무자가 바라본 고객 신용한도와 채무불이행률의 인과적 관계
    • Youtube [실무로 통하는 인과추론] 4-2. 온라인 마케팅 분야에서의 회귀분석 
  • Github causal-inference-in-python-code

 

 

본격적으로 인과추론을 위한 언어인 그래프 모델에 대해서 알아본다. 그래프 모델은 기본적으로 사슬구조, 분기구조, 충돌구조를 개념으로 설명한다.  또한,  교랸편향과 선택편향에 알아 본다. 


1. 글목차

  • 그래프 인과모델
  • 그래프 구조: 사슬, 분기, 충돌구조
  • 교란편향
  • 선택편향

2. 본문

2.1. 그래프 인과모델

1장에서는 인과추정량의 정의, 2장에서는 인과추론을 하기 위한 온라인통제 실험과 기초통계지식에 대해서 알아보았다.  3장에서는 인과추론의 식별과 추정 2단계 중에서 식별에 대한 내용을 더 깊게 들어간다. 식별은 문제가 언어추론의 식으로 표현될 수 있는지 판단하는 단계이며, 추정은 데이터를 사용하여 인과 효과 값을 계산하는 단계이다. 수식이 수학의 언어이듯 인과추론에서는 수식에 더하여 그래프로 설명하는데 그 개념을 담기 위한 단원이라고 생각하면 된다. 

그래프의 표기가 중요한 이유는 인과 구조의 명확한 표현으로 변수들 간의 상호작용을 쉽게 이해할 수 있기 때문이다. 핵심 요소는 다음과 같다. 

  • 노드(Node): 그래프에서 확률변수를 나타내는 원을 의미함
    • T: 처지변수 / M: 중재자  / Y: 종속변수
  • 엣지(Edge): 변수들의 관계를 나타내는 화살표이며 방향성을 표현한다.
  • 방향성 비순환 그래프(DAG, Directed Acyclic Graph): 사이클이 없는 방향성 그래프이다. 순환 구조가 없다고 가정함

2.2. 그래프 구조: 사슬, 분기, 충돌구조

A Survey on Causal Discovery Methods for I.I.D. and Time Series Data, 2024

2.2.1. 사슬 구조

가장 간단한 구조는 사슬(Chain)구조이다. 위 그림의 (a) 그래프이며 인과관계는 화살표 방향으로 흐르지만 상관관계는 양방향으로 흐른다. 위 경우에는 X와 Y는 독립이 아니며 다음과 같이 표현한다.  

$ X \not\perp Z $

반면 Y를 고정시킨다면 X와 Z는 독립이 되며 다음과 같이 표현한다.

$ X \perp Z | Y $

고정시킨다는 것은 조건부라고 표현하기도 한다. 이게 무슨소리냐하면  X를 공부시간, Y를 시험대비 학습 수준(상/중/하), Z를 성적이라고 한다면, 시험대비 학습 수준이 고정된다면 X와 Y의 인과관계가 차단된다.  시험 대비 학습수준이 동일하다면 공부를 얼마나 하든 성적에 영향이 없다는 것이다. 

2.2.2. 사슬 구조

두번째 분기(fork)구조에는 공통원인이 있다. 같은 변수(X)가 Y,Z에 공통된 원인이 된다. 이런 경우 X는 교란요인(Cofounder)라고 부른다. 예컨데 좋은 데이터분석가를 정의해보자. 좋은 데이터 분석가(X)는 뛰어난 SQL 쿼리능력(Y)와 데이터 시각화 능력(Z)에 영향을 주는 교란변수이다. 회사는 좋은 데이터 분석가를 뽑고 싶기 떄문에 기본적으로 SQL쿼리 시험을 보는 것이고 이는 데이터 시각화 능력이 있는 가능성이 높다고 할 수 있겠다. 이렇게 SQL쿼리능력과 데이터 시각화 능력 간에는 상관관계가 존재한다.

일반적으로 공통원인을 공유하는 두 변수는 독립이다. 좋은 데이터 분석가는 일반적으로 SQL쿼리시험과 데이터 시각화 능력이 관계가 있다. 

$ Y \not\perp Z$

반면, 공통원인이 주어지면(고정시키면) 두 변수는 독립이다. 예컨대 좋은 데이터분석가 역량을 고정한다면, 서로 다른 관측치끼리 비교할때 SQL쿼리 능력이 증가하면 데이터 시각화 능력에 대한 역량이 떨어질 수 있다.

$ Y \perp Z | X$

 

2.2.3. 충돌 구조

마지막으로 충돌 구조는 두 노드가 하나의 자식(Z)을 공유하지면 그들(X,Y)사이에는 직접적인 관계가 없는 경우이다. 일반적으로 두 변수는 독립이다. 부모의 키는 서로 독립인 경우를 생각하자.

$ X \perp Y $

하지만 Z가 고정된다면 두 변수는 독립이지 않다.  만약 자식의 키가 170인 가족을 모은다면, 한쪽 부모의 키가 크면 자연스럽게 다른쪽 부모는 작은 경향을 나타낼 것이다.

$ X \not\perp Y | Z $

 

2.3. 식별예제

 

컨설턴트 영입 유무에 따른 회사 수익의 변동유무를 측정해보자.

  • profits_prev_6m: 컨설턴트 고용시점 이전 6개월 간의 회사수익
  • profits_next_6m: 고용시점 이후 6개월간의 회사 수익
  • consultancy: 컨설턴트 고용 유무
import pandas as pd

df = pd.DataFrame({"profits_prev_6m":[1,1,1,5,5,5], "consultancy":[0,0,1,0,1,1],"profits_next_6m":[1,1.1,1.2,5.5,5.7,5.7]})
df

 

컨설턴트 영업 유무에 따른 6개월간의 단순 수익을 비교하면 다음과 같다. 

$E[Y | T = 1] - E[Y | T = 0] $

$ \frac{(1.2 + 5.7 + 5.7)}{3} - \frac{(1.0 + 1.1 + 5.5)}{3}  = 1.67 $

코드로 구현하면 다음과 같다.

con_df = df.groupby(['consultancy'])[['profits_next_6m']].mean()
diff = (con_df.loc[1] - con_df.loc[0]).values[0]
print(f"{diff:.2f}")
#1.67

하지만 위 결과 값은 기본적으로 과거 실적이 좋았던 회사들이 컨설팅을 고용한 비율이 높기 때문에 인과효과라고 하기 어렵다. 따라서 과거 실적이 비슷한 회사끼리 비교하여 한다.  

avg_df = (df.groupby(['consultancy','profits_prev_6m'])['profits_next_6m'].mean())
avg_df.loc[1] - avg_df.loc[0]

'''
profits_prev_6m
1    0.15
5    0.20
Name: profits_next_6m, dtype: float64
'''

위 경우 ATE는 (0.15 + 0.2)/ 2 인가 된다. 즉, 컨설턴트를 고용한 평균처치 효과는 175,000달러가 된다고 알 수 있다. 

여기서 뒷문경로(Back door path)의 개념이 나온다. 6개월 이후 수익에 영향을 줄 수 있는 변수는 처치한 변수(컨설팅)과 6개월 이전의 수익이다. 결과적으로 6개월 이후 수익이 컨설팅이 영향있다는 것을 입증하기 위해서는 6개월 이전의 수익을 고정시켜 뒷문경로를 차단하여 올바른 인과관계를 도출하는 것이다.

2.3. 교랸편향

편향의 첫 번째 주요 원인은 교란이다. 교란은 대개 열린 뒷문 경로가 있을때 발생하는데, 이는 처치와 결과가 공통 원인을 공유하기 떄문이다. 위 예시와 같이 인과효과를 식별하려면 처치와 결과 사이의 모든 뒷문 경로를 닫아 T -> Y로 이루어지는 직접적인 효과만 남겨야한다. 이를 위해선 처치와 결과의 공통 원인을 보정해야하지만 항상 이 원인을 알 수 있거나 측정 가능한 것은 아니다. 

예컨대  관리자의 자질 -> 교육 -> 팀 참여도에 관한 인과관계를 측정하기 위해선  관리자 자질이 직접적으로 팀 참여도에 기여하는 뒷문경로를 차단야한다. 하지만 관리자의 자질은 정량적으로 측정하기 어려우므로,  관리자의 근속기간, 교육 수준 등의 외부변수로 영향을 측정할 수 있으며 이를 대리 교란 요인이라고 한다. 

2.4. 선택편향

 

 

3. 출처와 링크

지난 글에서는 인과추론의 개념과 등장하는 지표에 대해서 알아보았다. 또한, 어떤 처치를 주었을 때와 주어지지 않은 경우를 동시에 관측할 수 없는 상황이 있는 것도 이해했다.  이번 단원에는 극복하기 위한 방법 중 하나로 무작위 배정 실험과 함께 유의수준, p-value 등 기초 통계 개념도 정리한다.


 

1. 글목차

  • 온라인 통제 실험(OCE)
  • 무작위 통제 실험(RCT)
  • 수식으로 알아보는 무작위 배정의 효과
  • 불확실성 반영하기 1: 표본오차와 신뢰구간
  • 불확실성 반영하기 2 : 가설검정
  • 표본 크기 계산

 

2. 본문

2.1. 온라인 통제 실험(OCE)

이전 글에서 평균처치효과(ATE)를 통해 처지에 대한 추정량을 측정할 수 있으며 이를 위해서 실험군과 대조군이 교환가능성이 존재해야한다는 사실을 획득했다.

이 교환가능성을 확보하기 위하여 온라인 환경에서 적용할 수 있는 방법을 온라인 통제 실험(online controlled experiements, OCE)라고 한다. 흔히 A/B test라고 알려져 있다. 예컨대 제품을 사용하는 사용자들을 무작위로 추출하여 두 그룹에 배치한다. 이를 각각 실험군(treatment group)과 대조군(control group)이라 칭하며 균등 비율 5:5로 나누게 된다. 

 

AB test 흐름, Controlled experiments on the web: survey and practical guide, 2008, Data Min Knowl Disc

 

여담으로 해당 비율을 나누는 방법에 대한 방법은 murmur hash 알고리즘이 일반적이며 이를 설명하는 아티클은 다음을 참고하기 바란다. 따로 서비스를 쓰지 않고 직접 개발하는 경우를 위한 요약 자료가 될 것이다. 

A/B testing expreience at Doctrine 

Hash algorithm, Statistical Properties of Exclusive and Non-exclusive Online Randomized Experiments using Bucket Reuse. 2012

 

2.2. 무작위 통제실험(RCT)

OCE는  무작위 통제 실험(Randomized Controlled Trial)에 기반을 두고 있다.이는 통계학에서 한번쯤 들어봤을 로널드 피셔가 제안한 방법론으로 대표적인 예시가 신약개발을 위한 임상시험에 사용하는 방법이다. 

RCT가 강력한 이유는 무작위 할당을 통하여 혼란 변수(cofunder)가 무작위 과정에서 골고루 분포되기 때문에 처치와 결과 간의 관계가 인과적 관계로 해석 할 수 있기 때문이다.

Quasi-Experimental Designs : Research Designs without Random Assignment, 2022, Korea Summer Workshp on Casual Infercnce

 

RCT는 이런 장점에도 불구하고 현실세계에서는 적용하기 어려운 점은 ① 비용 ② 윤리적 문제 이다. 

예컨대 희귀병을 임상시험한다고 할 때 충분한 결과를 내기위한 최소 모집인원이 존재하기 때문에 무한정으로 비용과 시간을 쓸 수 없다. 특히 이 문제는 임상시험의 비용의 상승과 나아가 희귀약의 비용의 증가로 직결된다. 이번에는 임산부의 흡연 유무에 따른 태아의 영향을 연구를 해보자. 이 경우 임상시험을 위하여 임산부에게 흡연을 권장한다면 윤리적인 문제에 봉착하게 된다. 오프라인은 이렇게 적용되는 제한점이 있다.

하지만 온라인의 경우 다르다. 충분한 웹/앱 트래픽과 기간이 있다면 검증을 하기 위한 n수를 늘릴 수 있으며, 윤리적인 문제도 피해갈 수 있다.(사용자들에게 각각 다른 화면을 보여주었다고 하더라도 큰 문제가 되지 않는다). 때문에 OCE가 현재와 같은 분석분야에 널리 사용되고 있다. 

 

2.3.  수식으로 알아보는 무작위 배정의 효과

실험군과 대조군의 평균의 차이가 ATE와 일반적으로 같지 않는 이유는 간단하게 말하면 "우리가 처치한 변수 말고 영향을 줄 수 있는 원인이 존재하기 때문"이다. 1단원에서 가져온 처치와 결과과의 연관 관계는 다음과 같이 수식으로 표현된다. 

$E[Y | T = 1] - E[Y|T=0] $

$ E[Y | T = 1] - E[Y | Y = 0] $ : 실험군과 대조군 간의 관찰된 평균 차이(단순 계산이며 상관관계)

상점의 예시를 들자면 할인(처치)를 실행한 회사의 평균 판매량에서 할인(처치)를 하지 않은 회사의 평균 판매량을 뺀 값이다. 아래 표는 각 상점이 할인을 한 상황과 할인을 하지 않은 상황을 동시에 관찰(평행세계)를 가정하여 작성된 결과이다.

i y0 y1 t x y y1-y0
1 200 220 0 0 200 20
2 120 140 0 0 120 20
3 300 400 0 1 300 100
4 450 500 1 0 500 50
5 600 600 1 0 600 0
6 600 800 1 1 800 200
  • i: 상점 번호
  • y0: 할인(처치)를 적용하지 않은 잠재적 판매량 결과
  • y1: 할인(처치)를 적용한 잠재적 판매량 결과
  • t: 할인(처치) 여부
  • x: 크리스마스 1주일 전이면 1, 크리스마스 주간이면 0
  • y: 할인(처치)에 따른 실제 판매량
  • y1-y0: 잠재적 판매량 결과의 차

 

우리는 위 식에서 잠재적 결과 모델(potentail Outcomes)로 표현하면 다음과 같다.

$E[Y | T = 1] - E[Y | Y = 0] = E[Y_{1} | T =1] - E[Y_{0} | T = 0] $

  • $ E[Y_{1} | T =1] - E[Y_{0} | T = 0]$: 처치를 받았을 때 잠재적 결과와 처치를 받지 않았을 때의 잠재적 결과

 

위 식에  $ E[Y_{0} | T=1} $을 더하고 빼서 정리하면 다음과 같이 ATT와 편향으로 나눌 수 있다.

 

$E[Y | T = 1] - E[Y | Y = 0] = E[Y_{1} - Y_{0}| T = 1] + E[Y_{0} | T = 1] - E[Y_{0} | T = 0] $

  • $ E[Y_{1} - Y_{0}| T = 1]$: 처치된 그룹의 평균 처치 효과(ATT), 실제로 처치 를 받은 사람들이 처치를 받았을 때와 받지 않았을 때의 평균 결과의 차이 
  • $E[Y_{0} | T = 1] - E[Y_{0} | T = 0]$: 편향, 처치 를 받은 사람과 받지 않는 사람 간에 존재하는 처치 이전의 차이. $ E[Y_{0} | T = 1]$ 는 처치 를 받은 사람들이 처치를 받지 않았을 경우의 잠재적 결과(평행세계)

위 식은 상관관계가 인과관계가 될 수 없다는 사실을 편향을 통해서 보여준다. 실제로 규모가 더 큰 상점은 할인을 할 수이쓴 여력이 있었고 할인(처치)를 할 수 있었던 규모가 큰 상점들이 $Y_{0}$이 클 수 밖에없었 다는 것을 보여준다.  $E[Y_{0} | T = 0] < E[Y_{0} | T = 1]$

 따라서 위 예제에서는 실험군과 대조군이 교환가능성이 없었다는 것이다. 반대로 교환가능성이 있다는 말은 $Y_{0}, Y_{1}$과 할인(처치)와 독립적이라는 말이며 다음과 같이 표현된다. 

$Y_{0}, Y_{1} \perp T$

혹은 다음 두 값이 같다는 것으로 표현할 수 있다

$ E[Y_{0} | T = 1} = E[Y_{1} | T = 1} $

이렇게 실험군과 대조군이 교환가능하거나 처치를 무작위로 배정하게 된 경우 실험군과 대조군의 결과를 단순 비교하면 평균처치효과(ATE)를 얻을 수 있다.

$ATE = E[Y_{1} - Y_{0}] = E[Y | T = 1] - E[Y| T=0]$

 

2.4. 불확실성 반영하기 1: 표본오차와 신뢰구간

2.3을 완벽하게 이해하지 못하여도 괜찮다. 우리는 온라인 통제실험을 통해 실험군과 대조군의 교환가능성을 확보하여 편향을 없앨수 있음을 확인했다. 결국 우리는 평균처치효과(ATE)가 관심있는 소재이다. 

여기서 ATE(평균처치효과)가 표본에서 추출된 평균 값이라는 것에 대해서 주목하자. 표본의 평균에 대한 지표이기 때문에 표본오차의 개념의 자연스럽게 나와야한다. 왜냐하면 대부분 모집단 전체에 대한 ATE를 직접 측정할 수 없고 표본을 사용해 추정해야하기 때문이다. 표본을 100개씩 뽑아 10,000번 수행하게 되면 매번 데이터의 분포가 다르게 될 것이며 그에 따라 표본의 평균도 달라질 수 있다. 이때 표본 평균의 표준편차를 표본 오차라 한다. 

예컨대 전환률 0.08인 표본 100개를 10,000 뽑아 히스토그램을 그리면 다음과 같다. 베르누이 분포를 따르는 데이터이지만 표본의 평균은 정규분포의 형태를 따라 중심극한정리(CLT)가 적용되는 모습을 볼 수 있다.

import numpy as np 
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(42)
conv_rate = 0.08
size = 100
def run_binomail(conv_rate,size):
    return np.random.binomial(1,conv_rate, size = size)
# 100번 샘플 추출을 10,000번 반복하여 추출하여 평균을 expriments에 저장
expriments = [run_binomail(conv_rate,size).mean() for _ in range(10000)]
plt.hist(expriments, edgecolor = 'black')
plt.axvline(x = conv_rate, color = 'red', linestyle = '--')

 

이 표본평균의 변동성을 설명하기 위한 것이 표본 오차이며 다음과 같이 정의 된다. 

$SE(\bar{X}) = \frac{\sigma}{\sqrt{n}}$

  • $\sigma$ : 모표준편차
  • $\sqrt{n}$: 표본의 크기

위 식을 생각해보자면 표본을 많이 뽑을수록 표본오차는 작아질 것이며, 모표준편차가 크면 클수록 자연스럽게 표본으로 뽑힌 데이터들도 오차가 커질 것임을 알 수 있다. 또한, 모표준편차를 아는 경우가 드물기 때문에 경우 표본의 표준편차 $s$로 대체하게 된다. 

하지만 이런 의문을 가질 수 있다. 표본오차를 추정할 수 있다고 하더라도 통계학에서 '절대'라는 것은 없다. 따라서, 하나의 지표를 제시하는 것보다 표본 평균이 모집단 평균을 포함할 수 있는 범위를 제공하는 것이 바람직하다. 이를 신뢰구간(Confidential Interval)이라고 하며 다음과 같이 정의 된다. 

$ \bar{X} = Z * SE(\bar{X})$

95%의 신뢰구간을 추정하면 Z 는1.96이지만 2 반올림하여 표본 오차를 대입하면 다음과 같다. 

$ \bar{X} = 2 \times \frac{\sigma}{\sqrt{n}} $

해석하자면 실제 평균의 100번 중 95번은 위 신뢰구간에 속함을 의미한다.

 

2.5. 불확실성 반영하기 2: 가설검정

또한 결과에 통계적 방법을 적용하는 방법은 가설 검정이다. 예컨대 두 그룹의 평균의 차이가 통계적으로 유의한 차이가 있는가에 대한 질문을 답하기 위해서 사용할 수 있다. 

가설 검정은 귀무가설과 대립가설 수립이 가장 우선시 된다.

  • 귀무가설($H_0$): 기존에 믿고 있던 사실, ex) 약물은 효과가 없다 
  • 대립가설($H_1$): 주장하려고하는 사실,  ex) 약물은 효과가 있다.

통계의 가설 검정은 귀류법으로 진행한다. 귀류법은 어떤 명제를 참이라고 가정한 후 모순이 도출되면 그 명제는 거짓으로 결론내리는 논리적 추론 방법이다. 귀무가설이 우리가 일반적으로 받아들여지는 사실이므로 이를 참이라고 가정하고 유의확률(p-value)를 도출하여 확률적으로 희박하다고 생각되면 귀무가설을 기각하고 대립가설을 선택한다. 이름하야 새로운 주장의 등장이다.해당 기준을 유의수준(Significant level)이라고 하며 일반적으로 5%를 기준으로 잡는다. 

그럼 유의확률은 어떻게 도출하는가? 세상에 나온 일반적인 데이터 분포에 빗대어 계산한다. 이때 검정통계량(Test Statstics)이 등장한다. 귀무가설이 참이라고 가정했으므로 이를 통해 관찰값과 기대값의 차이를 표준화하여 계산한다. 

예컨데 z-검정 통계량은 표본 평균과 가설로 기대되는 평균의 차이를 표준 편차로 나눈 값이다. 

$ z = \frac{\bar{X} - \mu_0}{\frac{\sigma}{\sqrt{n}}} $

그 밖에 검정통계량은 다음 링크를 참고

(8) Khan Academy: 유의성 검정과 절차, 통계방법론 정리

 

(8) Khan Academy: 유의성 검정과 절차, 통계방법론 정리

이번 글에서는 추론통계의 핵심 유의성 검정과 등장하는 개념, 그리고 일반적인 통계방법론을 정리해본다.1. 글목차유의성 검정에 필요한 개념1종오류와 2종오류유의성 검정 절차통계검정 절차

snowgot.tistory.com

 

하지만 유의수준을 5%로 관리한다고 해도, 아주 낮은 확률로 실제와 판단한 사실이 다를 수 있다. 이 개념을 이해하기 위해서 다음과 같은 혼동행렬을 작성할 수 있다. 

판단 \ 실제 상황 귀무가설이 사실 대립가설이 사실
귀무가설을 기각하지 못함 옳은 채택( ($1-\alpha$) 2종 오류($\beta$)
귀무가설을 기각함 1종 오류($\alpha$) 옳은 기각($1-\beta$, 검정력)

우리는 여기서 2가지를 관리한다. 1종 오류(귀무가설이 사실인데도 불구하고 귀무가설을 기각할 확률 $/alpha$), 2종 오류(대립가설이 사실인데도 불구하고 대립가설을 기각할 확률 $\beta$). 

유의수준($\alpha$)를 5%로 관리했던 것처럼 일반적으로 검정력($1-\beta$)는 80%로 관리한다. 

 

2.6. 표본 크기 계산

자 그럼 이제 불확실성을 반영하고 해당 실험을 만들기 위한 표본 사이즈를 몇 개를 수집해야하는가가 중요하다. 단순히 나오는 결과에 해석하기 보다 A/B test는 해당 실험을 하기 위해 얼마큼 표본의 크기를 수집해야하는 중대한 결정사항이 있기 때문이다. 각 서비스마다 트래픽이 다르기 때문에  적절한 설계를 위해서는 필요한 표본의 크기(n)를 산정해야한다. 

요약하자면 산업의 기준에서 검정력 80%, 유의수준 0.05 에 대하여 필요한 표본의 크기는 다음과 같다.

$n = \frac{16*\sigma^{2}}{\delta^{2}}$

  • $\sigma$: 표준편차
  • $\delta$: 효과의 크기 

해석하자면 효과의 크기를 작게 설정할수록, 1%의 전환률보다 0.1%의 전환율을 측정하고 싶을 경우 더 큰 표본이 필요하다. 또한 과거의 대조군의 표준편차가 클수록 변동성이 크므로 더 많은 표본이 필요하다. 

 

3. 출처와 링크

 

인과관계는 데이터 분석을 입문할 때 항상 등장하는 개념이다. 단순히 "상관관계와 헷갈리지 말자!! 도메인지식을 활용하자!" 라는 성급한 마무리로 인과관계를 밝혀내고 측정하는 방법에 대해서는 넘겨 버린 것이 사실이다. 이번에 실무로 통하는 인과추론 책을 스터디하면서 공부하는 내용을 정리할 예정이다.


 

1. 글목차

  • 인과추론의 기본 개념
  • 인과 추론을 위한 기본 수식과 기호
  • 인과 추정량

2. 본문

 

 

2.1. 인과추론의 기본 개념

 

인과추론(Casual Inference)란 무엇인가? 두 변수 $X_{1}, X_{2}$의 상관관계를 알았다고 하자. 하지만 두 변수가 바로 원인과 결과로 속단하긴 어렵다. $X_{1}$이 원인 $X_{2}$가 결과일 수 도 있고 그 반대의 경우일 수 도 있다. 반면 둘 다 원인의 결과가 아닌 다른 교란변수(confounder)가 두 변수 $X_{1}, X_{2}$에 영향을 준 사례일 수 도있다. 예를 들어 키카 크면 몸무게가 나가는가? 몸무게가 크면 키가 큰가 라는 질문에 두 변수는 상관관계를 가지고 있지만 어느 하나가 원인이라고 보기 어렵다. 다시 말해 성장 혹은 나이가 두 변수를 상승시키는 요인이라고 보는 것이 더 적절할 것이다. 

 

이처럼 통계방법은 어떤 원인가 결과를 직관적으로 설명해주지 않는다. 하지만 이를 추적하고 정량화 하는 방법을 인과추론의 방법이라고 하겠다. 

  • 원인(Cause): 다른 변수에 영향을 미치는 변수. 흔히 독립 변수(independent variable)이라고 불림
  • 결과(Effect): 원인의 변화로 인해 발생하는 결과. 흔히 종속 변수(dependent variable)이라고 불림
  • 상관관계(Correlation): 두 변수간 관계를 말하며 한 변수가 다른 변수와 함께 변할 때 상관관계가 있다고 함. 그러나 상관관계가 받반드시 인과관계를 의미하는 것은 아님
  • 인과관계(Causation): 한 변수의 변화가 다른 변수를 초래하는 관계. 즉 원인이 결과에 직접적인 영향을 미치는 경우

 

2.2. 인과 추론을 위한 기본 수식과 기호

  • 처리 변수(Treatment Variable, $T$): 실험에서의 독립변수로 예를 들어 고혈압 약물에 대한 효과평가를 진행한다고 할 때 복용한 그룹과 복용하지 않은 그룹은 '복용'이 처리 변수
  • 결과 변수(Outcome Variable, $Y$): 종속 변수로 처리에 의하여 영향을 받는 변수. 예를 들어 고혈압 약을 복용(처리 변수)하여 변하는 혈압의 수치를 결과 변수라 함
  • 잠재적 결과(potential Outcomes): 처리 여부에 따라 나타 날 수 있는 두가지 가능한 결과
    • $Y_1$: 처리 받았을 때의 결과
    • $Y_0$: 처리를 받지 않았을 때의 결과

잠재적 결과는 동시에 관찰 할 수 없기 때문에(평행 우주라도 가져오지 않는 한) 서로 대립적 결과(counterfactual problem)을 가진다. 이런 맥락으로, 범주가 두 개인 이진 처치를 관하여 설명할 때 다음 기호를 사용하며 "잠재적" 결과라는 호칭을 붙인다.

  • $Y_{0i}$: 처치 받지 않는 실험 대상 $i$의 잠재적 결과
  • $Y_{1i}$: 처치 받은 실험 대상 $i$의 잠재적 결과
  • $\tau_{i}  = Y_{1i} - Y_{0i} $: 잠재적 결과의 개별 차이

 

 

2.3. 인과 추정량(Casual Estimands)

하지만 평행 세계를 우리가 탐험할지 못하더라도 결과적으로 인과추정으로 인해서 "추정"할 수 있다고 자신감을 가져보자. 일단 인과 추정이 가능하다는 가정하에서 우리가 측정할 지표를 선언하는게 우선일 것 이다. 다음 3가지 지표를 제시한다.

 

  • 평균 처치 효과(Average Treatment Effect, ATE)
    • 전체 모집단에서 처리의 평균적인 인과효과로 전체 모집단에서 처리로 인해 평균적으로 얼마나 변할 것으로 기대되는지를 타나내는 추정량
    • 수식: $ATE = E[Y_{1} - Y_{0}]$ 또는 $E[\tau_{i}]$
      • $Y_{1}$: 처리를 받았을 때의 잠재적 결과
      • $Y_{0}$: 처리를 받지 않았을 때의 잠재적 결과
      • $E(X)$: 기대값
  • 실험군에 대한 평균 처치 효과(Average Treatment Effect on the Treated, ATT)
    • 실제로 처치를 받은 개체들에 대해 계산된 평균적인 처리 효과, 이미 처치를 받은 사람들에게만 초점을 맞춰 그들이 처치를 받았을 때 평균적인 인과에 대한 추정량. 반대는 대조군(Untreated)에 대한 처치효과인 ATU
    • 수식: $ATT = E[Y_{0} - Y_{1} | T = 1] $
      • $T=1$: 처리를 받은 집단
  • 조건부 평균 처치 효과(Conditional Average Treatment Effect, CATE)
    • 특정한 조건이나 집단에 대해 처치가 결과에 미치는 평균적인 인과 효과를 측정하는 개념.개별 특성이나 조건에 따라 처치 효과가 다를 수 있다는 점을 반영하며 ATE와 달리 하위 집단(sugroup)에서의 인과 효과를 추정하는데 중점
    • 수식: $CATE(x)  = E[Y_{1} - Y_{0} |  X = x] $
      • $ X = x $ : 특정 조건을 만족하는 집단

2.3. 인과 추정량 예시

다음은 크리스마스 전주/해당 주간 상점의 할인에 대한 데이터이다. 실제로 상점이 할인 한 세계와 할인하지 않은 세계는 동시에 존재할 수 없지만 인과추정량 계산을 위해 알 수 있다고 가정하고 작성한다.

  • i: 상점 번호
  • y0: 할인(처치)를 적용하지 않은 잠재적 판매량 결과
  • y1: 할인(처치)를 적용한 잠재적 판매량 결과
  • t: 할인(처치) 여부
  • x: 크리스마스 1주일 전이면 1, 크리스마스 주간이면 0
  • y: 할인(처치)에 따른 실제 판매량
  • y1-y0: 잠재적 판매량 결과의 차
i y0 y1 t x y y1-y0
1 200 220 0 0 200 20
2 120 140 0 0 120 20
3 300 400 0 1 300 100
4 450 500 1 0 500 50
5 600 600 1 0 600 0
6 600 800 1 1 800 200

위처럼 평행세계의 관찰자라면 각 인과 추정량을 쉽게 구할 수 있다. 

평균 처치 효과(ATE)는 마지막 열에 대한 평균 값이다. $(20 + 20 + 100 +50 + 0 + 200) / 6 = 65 $ 따라서 가격의 할인으로 판매량이 65가 증가함을 알 수 있다.

실험군에 대한 평균 처치 효과(ATT)는 가격을 할인한 회사(t=1)의 평균 판매량이다. $(50 + 0 + 200)/3 = 83.33$ 

크리스마스 1주일 전이라는 조건부 평균 효과(CATE) 는 회사의 3번과 6번의 효과의 평균이다. $(100 + 200)/2 = 150$ 

하지만 위처럼 데이터를 모두 아는 경우는 없다. 따라서 표는 다음 데이터가 실제 현황이라고 볼 수 있다.

i y0 y1 t x y y1-y0
1 200 NaN 0 0 200 NaN
2 120 NaN 0 0 120 NaN
3 300 NaN 0 1 300 NaN
4 NaN 500 1 0 500 NaN
5 NaN 600 1 0 600 NaN
6 NaN 800 1 1 800 NaN

실제로 한 상점의 할인과 할인을 하지 않은 세계를 동시에 관측하기는 불가능 하므로 처치군과 대조군의 평균을 비교하면 안될까? 

$ ATE = (500 + 600 + 800) / 3 - (200 + 120 + 300) /3   = 426.67 $

이는 상관관계를 인과관계를 착각하는 대표적인 예시이다. 왜냐면 두 할인한 회사와 할인하지 않은 회사가 규모가 다르기 때문이다. 할인을 한다는건 큼 경제적으로 튼튼하여 할인을 많이할 수 도 있다. 두 회사의 매출 규모자체가 다르기 때문이다.  이마트와 롯데마트처럼 다르지만 규모가 비슷한 데이터를 비교해야하지 이마트와 편의점을 비교하면 안된다. 

이는 실험군과 대조군의 교환가능성(Exchangeability)에 대한 여부를 말하는 사례이다. 

2.4. 독립성 가정

인과추론에서 독립성 가정은 조건부 독립성(Conditional Indepence)와 혼란 변수의 통제(Control for Confounders)가 있다.  한가지 방법은 무작위 배정을 통해서 혼란 변수의 통제가 가능하다. 

조건부 독립성은 처리(treatment)와 잠재적 결과(potential outcomes, $Y_{1}, Y_{0}$)가 혼란 변수집합($X$)에 대하 조건부로 독립적이여야한다는 가정이다. 이를 통해 선택 편향(selection bias)를 없는 상태로 만드는 것이며 이를 다음과 같은 수식으로 표현한다.

$(Y_{1}, Y_{0}) \perp T | X$

  • $Y_{1},Y_{0}$: 각각 처치 받았을 때, 받지 않았을 때의 잠재적 결과
  • $X$: 혼란변수
  • $T$: 처리 변수

 

결과적으로 실험군과 대조군이 교환 가능하거나 처치를 무작위로 배정한 경우에는 단순히 실험군과 대조군의 결과를 단순히 비교하면 처치 효과를 얻을 수 있다.

 

$E[Y_{1} - Y_{0}] = E[Y | T = 1] - E[Y | T = 0] $

 

 

 

 

 

3. 출처와 링크

 

데이터 사이언스라는 분야는 앞으로도 건재할까? IT 직군의 데이터분석가는 AI 시대에 영속할까? 아니면 없어지게 될까. 데이터 직군이 나아가야 할 방향을 고민해본 내용을 정리해본다. 


1. 글 목차

  • 데이터 사이언스는 없어질까?
  • 데이터 분석가 직군은 없어질까?
  • 기업 사례로 본 데이터직무의 역할
  • 데이터 직군은 왜 진입하기 어려운가?
  • 앞으로 데이터 분석가의 방향성은?
  • 기타) DS & 배포 Framework

2. 본문

2022년 ChatGPT가 발표된 뒤로 IT업계는 AI에 대한 화두를 빼놓은 발표주제가 없다시피 하다. 데이터 분석가는 직군은 어떻게 변모할 것인가에 대한 고민을 모아 이 글에 풀어 넣어본다.


2.1. 데이터 사이언스는 없어질까?
No. 데이터 사이언스라는 말이 유창하긴 하지만 기존에 데이터 기반으로 의사결정으로 하는 업무들은 항상 있었다. Excel로 소규모 데이터를 정리하고 보고하는 일, 실험에서 얻는 결과를 통계분석을 통해 결론을 내리는 일 등등. 최근에 와서 "데이터분석" 이라는 행위가 고유명사로 변모했지만, 여전히 데이터 사이언스는 유효하고 앞으로도 그럴 것이다. 단지 저장가격의 저하, 처리능력의 증가 그리고 알고리즘의 발전으로 빅데이터를 활용할 수 있는 방법이 많아졌기에 빅데이터 트렌드가 잠시 주목 받는 것일 뿐이라고 생각된다.


2.2. 데이터 분석가 직군은 없어질까?
일부 Yes. 현재 IT 업계에서는 회사 내 데이터를 보고 리포팅 하는 역할을 하는 Business Data Analyst,  웹/앱에서 발생되는 데이터를 가지고 서비스에 실험과 검증을 통해 성장시키는 Product Analyst, 머신러닝/딥러닝 모델을 이용해 미래를 예측하거나 이미지생성, LLM 서비스를 구현하는 Data Scientist 등이 파생되고 있다. 따라서  단순히 SQL 혹은 BI 툴로만 데이터 직무를 한정한다면 그 능력은 모든 회사 구성원의 "일반 스킬로" 정착될 것이다. 마치 엑셀처럼
 

LLM/AI서비스들이 분석의 수단을 어느정도 지원하지만 결정을 책임 져주거나 회사에 맞는 fine-tunning을 도와주진 않는다. 아직은 이 AI서비스를 도입하고 적용하고 Action까지 이어지는 단계에는 AI보다는 사람의 역량이 필요한 부분이 많다. 그럼에도 많은 곳에서 업무에 AI를 도입하고 있다. 대표적인 예시가 원티드의 데이터볼트 SQL쿼리 생성AI의 예시이다.
https://m.blog.naver.com/wantedlab/223277157047

 

천재 인턴 ‘데이터 볼트’를 소개합니다 🤖 | Interview. 원티드랩 데이터 엔지니어 최종원 (SQL,

얼마 전, 원티드랩 데이터팀에 아주 똑똑한 인턴이 입사했습니다. 바로 쿼리 생성 AI ‘데이터 볼트(Dat...

blog.naver.com

 
하지만 이것도 데이터가 잘 "흐르는" 조직에서 존재할 수 있는 직무이고 대부분의 스타트업 혹은 규모가 있는 기업이라면 이렇게 세분화 되진 않고 그저 IT 조직의 구성원이 "분석"이라고 할 수 있는 부분 일부를 담당하는 형태이다.  전자라고 하면 데이터 분석 업무 그 자체가 독립적인 직무로 존재할 수 있지만, 후자는 분석이라는 수행보다는 그를 위한 준비 (예를들면 데이터 수집, 용어 통일, 데이터 가버넌스 관리, 파이프라인 구축)이 더 필요하다. 따라서 데이터 분석이라는 직무 자체는 데이터 기반으로 의사결정할 수 있는 회사 혹은 문화에 존재할 수 있고 후술할 데이터직군 통합 관점에서 pivot이 될 것으로 생각한다.


2.3. 기업 사례로 보는 데이터 직군의 역할
① 제조업 공장 회사 A 기업은 장비를 구입하여 데이터를 쌓고 있다. 이를 운영 혹은 분석에 사용한다기보다는 구입한 장비에 대한 AS 이슈로 만일에 대비하여 Log 형태로 데이터를 보관하고 있다. 구성원은 데이터가 존재하는지 혹은 어떻게 활용할 수 있는지에 대한 아이디어가 없어 수집만 진행하고 있다.

② 스타트업 교육 회사 B 기업은 수강생들의 데이터를 Google Spreadsheet로 관리하고 있다. 교육과정마다 평가 기준이 다르다. 어떤 교육은 과제 채점이 5점 만점. 어떤 과제는 21점 만점 등으로 기준이 세워져있다. 각자 운영 Manager가 담당하고 있다. 필요할 때마다 그래프를 그려서 보고 있으며 통합된 관리는 하지 않고 있다.


A 기업의 사례는 운영DB와 분석DB의 분리가 되지 않은 문제이다. 실제로 분석을 뭘 할 수 있는지 그러기 위해선 어떤 형태로 데이터가 저장되어야 하는지 대표와 개발자들은 관심이 없거나 알지 못한다. 일차적으로 눈앞에 있는 업무들을 처리해야 하니까 당장의 성과가 중요하기에 데이터 기반 의사결정을 하지 않는다. 이 부분에서는 데이터 분석가는  Log 형태의 데이터를 최소한 JSON 형태로 저장하고 정형화하도록 프로세스를 만들고 필요에 따라 시계열 형태 등으로 시각화해야 할 것이다. 

B 기업의 사례는 일반적인 스타트업에서 만연하다. Spreadsheet는 매우 훌륭한 데이터 분석 툴이지만 먼저 전체 교육과정에 대한 평가 스케일이 정리되어야 할 것이다. 근데 누구를 설득해야 하는가? 최소한 교육과정을 다루는 개발 파트장들 그리고 나아가서 대표한테 제시해야할 것이다. 현재 평가 척도가 파편화되어있으니 최소한의 기준을 정해야 한다고.  두 번째로는 데이터베이스에 저장해야한다.  SpreadSheet는 정보 수정이 쉬운 만큼 손실도 쉽다. 공통된 데이터베이스 RDB이든 NoSQL이던 최소한 대시보드를 연결 가능한 서비스로 탑재를 해야 할 것이다. 


위 2가지 사례만 보아서 데이터 분석가의 직무는 어떤 국소적인 일이라기보다 컨설팅에 가까운 것처럼 보인다. 나는 데이터 분석가가 컨설팅업과 교집합이 많다고 생각하며 "회사가 가진 체질, 문제를 바꾸기 위해서 도구나 방법 나아가 프로세스를 제시하는 것"이  회사에 존재하는 이유라고 생각한다. 


2.4. 데이터 직군은 왜 진입하기 어려운가?
위 내용을 보았을 때 분석가가 갖춰야 하는 요소가 참 많아 보인다.  교과서적으로 Hard Skill(프로그래밍 능력, IT지식, 분석능력), Soft Skill(의사소통 능력, 발표 능력)가 필요하다는 이야기들이 피부로 와닿지 않을 수 있다. 분석가가 하는 일을 복기하면서 설명해보면  회사가 가진 체질, 문제를 바꾼다.  라는 내용은 회사의 생리 혹은 최소한 해당 산업군의 메타인지가 있을 때 가능하다. 안타깝게도 이를 알려주는 부트캠프나 강의는 매우 희박하고 N개의 산업군과 N*M개의 회사가 있기에 내가 관심있는 회사를 뜯어보고 파헤쳐봐야 한다. 동아비즈니스리뷰(DBR), 하버드비즈니스리뷰(HBR), 비즈니스캔버스와 같은 잡지,책을 이용해서 최소한 내가 관심있는 회사가 어떻게 돈을 벌고 어디에 쓰는지에 대한 Diagram을 그려야 회사가 가진 체질, 문제를 이해할 수 있다. 

마켓컬리의 비즈니스 캔버스 도식화

두 번째로 도구와 방법 나아가 프로세스를 제시하는 것은 회사에 이미 몸담고 있는 사람이라면 도구와 방법은 Youtbue, 책, 강의를 통해 배울 수 있다. 데이터를 적재하는 방법이 필요하다면 개발자와 얘기하여 정량적 데이터 분석을 위한 데이터 저장 방식을 제안할 수 있다. 운영DB에서 데이터를 추출하여 데이터 마트를 만들거나 분석DB를 구축해보자. 나아가 대시보드를 제작하여 데이터기반 의사결정을 지원할 수 도 있다. 혹은 추론통계나 머신러닝 기법을 이용해서 데이터를 활용하는 방법에 대해서 배우고 적용해볼 수 있겠다. 


2.5. 앞으로 데이터분석가는 방향성은?
사실 이 글을 쓰게된 트리거가 하용호님의 AI시대 데이터직군 생존 전략밋업이다. 2022년에 발표하신 데이터를 하는 사람은 어떤 커리어를 밟아야하나? 도 매우 좋은 자료고 요즘에도 여전히 적용되므로 데이터분석 입문자들은 반드시 듣길 권하는 편이다.  2022년 발표와 일관성 있게 말씀하시고 또 강조하는 단어는 Full Stack Data Expert 이다. 
최근 데이터 직군에 대한 거품이 꺼진 이유 중 하나는 끝내주는 결과를 가져와도(혹은 가져왔다고 생각하지만) "그래서 뭐 어떻게 해야할까요?" 라는 추가 Action이 없기 때문이다. 먼저 이 Action Point에 대하여 제안할 수 있는 컨설팅 능력이 필요하다. 또한, 데이터분석가가 장기적으로  데이터 수집 -> 정제 -> 분석 -> 배포 까지하는 Pipeline을 구축할 수 있는 사람이 되어야 한다고 생각하며 이런 관점에서 용호님이 말씀하신 것과 어느정도 결이 같다. (사실 그전에 강연을 들어서 그런지도..)
 

하용호 - AI시대 데이터직군 생존 전략밋업

그에 따라 기존 Data Engineer와 Data Analyst의 간극을 메워줄 혹은 둘 다 역할을 수행할 수 있는 Analytics Engieer 직무의 생성도 시대의 흐름이라고 더욱 생각이 든다. 
https://snowgot.tistory.com/entry/Analytics-Engineer-%EC%A7%81%EB%AC%B4-%EB%9C%AF%EC%96%B4%EB%B3%B4%EA%B8%B0

 

[글또]Analytics Engineer 직무 뜯어보기

글의 목적 데이터 분석은 self serving부터 시작한다는 가치관을 가지고 일을 하다 보니 엔지니어링 프레임워크 관심을 두게 되었다. 이런 흐름을 반영하듯 Analytic Engineer 직무가 최근에 국내 기업

snowgot.tistory.com

 
더욱 이 주장에 힘들 실어줄 수 있는 배경은 역시 AI이다. 기존에는 Hard Skill의 깊이가 깊었고 그만큼 숙련된 여러사람이 필요했다면 현재 그리고 앞으로는 AI 도움 혹은 서비스(SaaS)의 도움을 받아 시간과 노력을 단축하게 되었다. 서비스는 점점 우리의 일을 줄일 것이며 우리는 필요한 서비스를 선별하여 도입하고 합리적인 가격인지 의사결정하는 과정을 개입하게 될 것이라 생각한다. 

데이터 직군은 발산하였다가
다시 합쳐지고 있다.

마침 용호님 자료에서 괜찮은 Data Science Framework를 정리해주셔서 같이 남겨본다.
기타) DS & 배포 Framework 
DS Framework

  • vanna ai: text2SQL / using LLM/RAG
  • pygwalker: jupyternotebook에서 시각화 기능적용
  • imbalanced-learn: 불균형데이터처리방법
  • InterpretML: 설명가능한 AI, GBM의 glass box 모델 제공, xgboost보다 성능 좋음. 기존 SHAP 등 XAI에 대체제가 될수도?
  • pyod: 이상치 탐색

배포 Framework

jupyternotebook에서 신기해하는 시대는 끝났다. 실제 운영배포단계를 배워야할 시기

위 프레임워크를 적용해서 하나의 PoC를 만들어 보는 것도 좋은 배움이 될 수 있을 텐데...  그거까지 하면 글이 너무 길어지므로 다음에 ...!

3. 마무리

최근에 다양한 스타트업의 이슈들이나 데이터/AI와 아직은 친숙하지 않은 회사들의 사례를 마주하면서 여전히 데이터 직무는 할일이 많겠다 라는 생각이 들었다. 나아가서 데이터분석가에서 이제는 컨설턴트의 역할로, 회사의 문제를 해결하고 방법을 제시하는 조언자로서 CDO로서의 방향이 명확해진 것 같다. 

4. 출처

 
 
 

이번 글은 Khan Acadmey 마지막 단원인 14 ~ 16단원에 해당하는 카이제곱 분포와 검정방법 3가지(적합도, 독립성, 동질성), 분산분석에 대해서 다룬다. 예시로 쉽게 알아보고 Python 코드를 이용해서 적용해보자.


1. 글목차

  • 카이제곱 분포
  • 카이제곱 검정: 적합도, 독립성, 동질성 검정
  • F 분포
  • 분산분석

2. 본문

2.1. 카이제곱 분포

카이제곱분포이란 무엇인가?  표준정규분포를 따르는 $Z \sim N(0,1^{2})$변수의 그림을 떠올려 보자. 

이를 제곱한 분포를 그려보자.  새로운 분포인 $\chi^{2}  = Z^{2}$라고 표현할 수 있다. 표준정규분포는 평균이 0 이고 표준편차가 1인 분포를 따르기 때문에 이를 제곱한 결과는 0에 대부분 쏠려 있을 것이다. 반면  평균이 0 이지만 0을 벗어난 즉, 1,2와 같은 값들이 극히 희박한 확률로 존재할 수있다.  확률변수가 $X$ 1개 이니 자유도는 1로 표현한다. 

확률변수가 1개 이상을 제곱하여 더한 분포도 존재할 수도 있다. $\chi^{2} = Z^{2}_{1} + Z^{2}_{2}... + Z^{2}_{n}$ 단 여러개의 확률변수를 더하기 때문에 그 수가 많아질 수록 $\chi$값의 분포는 좌측으로 이동하게 될 것이다 

변수가 많아질수록 즉, 자유도가 커지는 변화에 따른 분포에 대한 그림을 그릴 수 있고, 분포 별로 확률 그래프도 도출 가능할 것 이다.

 

표는 다음 링크을 참고: https://www.scribbr.com/statistics/chi-square-distribution-table/

 

2.2. 카이제곱 검정  - 적합도 검정

위에서 카이제곱 분포를 설명한 대로 확률 변수의 제곱을 분포에 표현한 것으로 이해할 수 있다. 이를 적용하기 위한 방법이 카이제곱 검정이다. 이때 카이제곱 검정 통계량은 다음 식으로 정의한다. 

$\chi^{2} = \sum^{n}_{i}\frac{(O_{i} - E_{i})^{2}}{E_{i}}$

  • $O_{i}$: 관찰 빈도
  • $E_{i}$: 기대빈도
  • 자유도: $ n - 1$

Q1) 왜 기대 값을 분모로 나누어 정규화할까?

카이제곱 검정에서 확인하고자 하는 바는 관측 값이 기대 값보다 얼마나 차이나는가이다. 만약 기대빈도가 크다면 조금의 오차가 있더라도 이해할 수준으로 관리하는 것이고, 기대 값이 작다면 작은 숫자의 차이에도 민감하게 적용하도록 설정한 것이라고 이해할 수 있다.

Q2) 왜 관측 값과 기대 값를 차에 대한 제곱을 관리할까?

관측 값와 기대 값은 양수가 될 수도 음수가 될 수 도 있다. 단순히 이차이를 더한다면 상쇄될 수 있기 때문에 제곱을 통해서 양수로 변환하는게 첫 번째 목적이다. 다음으로는 제곱은 큰 차이를 더 부풀리는 효과를 가지고 있다. 1의 제곱과 10의 제곱은 변화에 대한 차이가 후자가 더 크다. 이를 이용해서 차이의 크기를 강조하기 위함이 두 번째이다. 세 번째는 제곱하는 방법은 평균에서 이탈을 측정하는 분산(Variance)와 같이 제곱 형태는 통계학에서 자주 사용되는 개념이기 때문이다.

다음은 상점을 매수하려는 상황에서 상점 주인이 주장하는 방문객 비율과 실제 관측한 방문 수로 적합도 검정을 수행하는 예시이다.

  합계
주장하는 방문 비율(%) 10 10 15 20 30 16 100
관측한 방문 수(명) 30 14 34 45 57 20 200
  • 귀무가설($H_{0}$): 관찰된 요일별 방문객 수는 주장된 비율과 차이가 없다.
  • 대립가설 ($H_{1}$) : 차이가 있다.
  • 풀이방법
    • $\chi^{2} = \frac{(30-20)^{2}}{20} + \frac{(14-20)^{2}}{20} + \frac{(34-30)^{2}}{30} + \frac{(45-40)^{2}}{40} + \frac{(57-60)^{2}}{60} + \frac{(20-30)^{2}}{30}$    = 11.442 
      • (월요일부터 토요일까지의 검정통계량 값)
    • 자유도: 6 - 1 = 5
    • $p-value$: 0.043
    • 따라서 주장된 비율과 차이가 있음. 귀무가설 기각. 대립 가설 채택

위 처럼 주어진 기대비율과 실제 관찰된 비율이 얼마나 차이가 나는지 평가하는 것을 적합도 검정(Goodness of fit) 이라 한다. 후술할 독립성 검정은 2가지 변수가 존재해야하는데 반하여 적합도 검정은 1차원 데이터에도 적용할 수 있는 특징을 가지고 있다.

 

import numpy as np
from scipy.stats import chisquare

# 주장하는 방문 비율(%)을 기반으로 기대값을 계산
expected_ratios = np.array([10, 10, 15, 20, 30, 15])
total_visits = 200
expected_counts = (expected_ratios / 100) * total_visits

# 관찰된 방문 수
observed_counts = np.array([30, 14, 34, 45, 57, 20])

# 카이제곱 적합도 검정을 수행
chi2_stat, p_val = chisquare(f_obs=observed_counts, f_exp=expected_counts)

# 결과 출력
print(f"Chi-squared Statistic: {chi2_stat:.3f}") # 11.442
print(f"P-value: {p_val:.3f}") # 0.043

# 결론 도출
alpha = 0.05  # 유의수준
if p_val < alpha:
    print("귀무가설 기각: 관찰된 방문 비율은 주장하는 비율과 다르다.")
else:
    print("귀무가설 채택: 관찰된 방문 비율은 주장하는 비율과 같다.")

 

적합도 검정의 좋은 예시가 있어서 링크달기: 광고 채널별 고객 유입 분석

https://m.blog.naver.com/gksshdk8003/222020037634

 

[SAS] 적합도 검정(goodness of fit test)

안녕하세요. 데이터 과학자를 꿈꾸는 꿈쟁이입니다. 오늘은 카이제곱 검정의 한 유형인 적합도 검정(goodne...

blog.naver.com

 

 

2.2. 카이제곱 검정  - 독립성 검정

적합도 검정이 1개 변수의 기대 값과 관찰 값의 차이를 검증하는 과정이라고 한다면, 독립성 검정은 2가지 변수가 존재할 떄 사용한다. 예컨데 성별과 흡연 여부의 독립성 검정을 위해서 관측된 자료가 다음과 같다고 하자. 

  흡연자 비흡연자 합계
남성 40 60 100
여성 30 70 100
합계 70 130 200

위 합계를 가지고 기대 빈도를 도출 할 수 있다. 전체 인원 200명 중 남여의 비율은 50%으로  남성이면서 흡연하는 사람과 여성이면서 흡연하는 사람은 전체 70명 중 50%인 35명씩 기대값을 가져야한다. 같은 맥락으로 비흡연자로 65명씩 기대값을

    • $\chi^{2}= \frac{(40-35)^{2}}{35} + \frac{(30-35)^{2}}{35} + \frac{(60-65)^{2}}{65} + \frac{(70-65)^{2}}{65}  = 2.1978 $
      • 각각 남성/흡연 + 여성/흡연 + 남성/비흡연 + 여성/비흡연에 대한 카이제곱 통계량
    • 자유도: (행의수 - 1) x (열의수 -1)  = (2-1)*(2-1) = 1
    • $p-value$: 0.138
    • 결론: 유의수준 0.05 하에서 귀무가설을 기각하지 못하므로  남녀간 흡연엔 독립적이다.
import numpy as np
from scipy.stats import chi2_contingency

# 관찰된 데이터: 성별과 흡연 여부에 따른 빈도수
data = np.array([
    [40, 60],  # 남성: 흡연자, 비흡연자
    [30, 70]   # 여성: 흡연자, 비흡연자
])

# 카이제곱 통계량, p-value, 자유도, 기대값을 계산
chi2_stat, p_val, dof, expected = chi2_contingency(data, correction=True)

# 결과 출력
print(f"Chi-squared Statistic: {chi2_stat:.3f}") #1.780
print(f"P-value: {p_val:.3f}") #0.182
print(f"Degrees of Freedom: {dof:.3f}") #1.000
print("Expected frequencies:")
print(expected)
'''
[[35. 65.]
 [35. 65.]]
 '''

# 결론
alpha = 0.05  # 유의수준
if p_val < alpha:
    print("귀무가설 기각: 성별과 흡연 여부는 독립적이지 않다.")
else:
    print("귀무가설 채택: 성별과 흡연 여부는 독립적이다.")

Q) 왜 검정통계량이 손 계산과 다른가?

실제로 scipy를 이용해서 검정을 해보면 correction =True 기본 옵션으로 인하여 검정통계량과 p-value가 손 계산과 다르게 나온다. 이는 연속성 수정방식을 사용하기 때문이다. 이는 카이제곱 분포가 연속형 확률변수에 기인하였지만 실제 데이터는 이산형인 경우가 많기 때문에  검정통계량을 줄임으로써 실제로 귀무가설을 기각할 가능성을 줄이는 방식으로 작동한다. 2x2 교차표(정확히는 자유도가 1일 때)에서는 연속성 수정하는 것이 권장되고 카이제곱 통계량을 계산할때 각 항에 0.5를 뺌으로써 적용한다. 이는 n > 30이면 정규분포를 따른다는 가정처럼 경험적인 수치다. 

다음은 scipy의 chi2_contigency 함수 문서이다.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2_contingency.html

 

chi2_contingency — SciPy v1.14.0 Manual

In [4], the use of aspirin to prevent cardiovascular events in women and men was investigated. The study notably concluded: …aspirin therapy reduced the risk of a composite of cardiovascular events due to its effect on reducing the risk of ischemic strok

docs.scipy.org

 

 

2.3. 카이제곱 검정  - 동질성 검정

동질성 검정(Test of Homogenetiy)는 서로 다른 두 개 이상 집단에서 동일한 범주형 변수의 분포가 동일한지를 검정하는 방법이다. 귀무가설은 모든 집단에서 특정 변수의 분포가 동일하다는 점으로 설정한다. 기본적으로 독립성 검정과 동일한 방식으로 작동하며 검정의 목적데이터 해석방식에만 차이가 있다.

  독립성 검정
(Test of Independence)
동질성 검정
(Test of Homogeneity)
공통점 카이제곰 검정 사용  
차이점: 목적 두 범주형 변수 간 독립유무를 검정 여러 집단에서 동일한 범주형 분포가 동일한지 검정
차이점: 가설 $H_{0}$: 두 변수는 독립적
$H_{1}$: 두 변수는 독립적이지 않음
$H_{0}$: 모든 집단에서 분포가 동일
$H_{1}$: 적어도 하나의 집단에서 분포가 다름

 

다음은 학교별로 과목에 대한 선호도 조사표이다. 

과목 학교A 학교B 학교C 합계
수학 50 60 55 165
과학 40 45 50 135
문학 30 35 40 105
합계 120 140 145 405
  • 귀무가설$H_{0}$: 각 학교에서 학생들이 선호하는 과목의 분포는 동일
  • 대립가설$H_{1}$: 각 학교에서 학생들의 선호하는 과목의 분포는 동일하지 않다. 

위 관측 값에서 학교A의 수학에 대한 기대 값은 다음과 같이 계산할 수 있다. 

 $E_{\text{수학}, A} = \frac{\text{수학의 전체 학생 수} \times \text{학교 A의 총 학생 수}}{\text{전체 학생 수}} = \frac{165 \times 120}{405} = 48.89
 명$

위 식에 따라 기대값 표는 다음과 같다.(소괄호로 작성)

과목 학교A 학교B 학교C 합계
수학 50(48.89) 60(57.04) 55(59.07) 165
과학 40(40.00) 45(46.67) 50(48.33) 135
문학 30(31.11) 35(36.30) 40(37.60) 105
합계 120 140 145 405
  • 자유도: (행 - 1 ) x (열 -1) = (3 - 1) x (3 - 1) = 4
  • 카이제곱 통계량: 0.817
  • $p-value$: 0.936
  • 귀무가설 채택, 각 학교에서 과목 선호도는 동일하다.

 

import numpy as np
from scipy.stats import chi2_contingency

# 관찰된 데이터: 각 학교에서 학생들이 선호하는 과목의 빈도수
data = np.array([
    [50, 60, 55],  # 수학 선호
    [40, 45, 50],  # 과학 선호
    [30, 35, 40]   # 문학 선호
])

# 카이제곱 통계량, p-value, 자유도, 기대값을 계산
chi2_stat, p_val, dof, expected = chi2_contingency(data)

# 결과 출력
print(f"Chi-squared Statistic: {chi2_stat:.3f}"): 0.817
print(f"P-value: {p_val:.3f}") : 0.936
print(f"Degrees of Freedom: {dof:.3f}") # 0.400
print("Expected frequencies:")
print(expected.round(3))

'''
[[48.889 57.037 59.074]
 [40.    46.667 48.333]
 [31.111 36.296 37.593]]
'''

# 결론
alpha = 0.05  # 유의수준
if p_val < alpha:
    print("귀무가설 기각: 각 학교에서 과목 선호도는 동일하지 않다.")
else:
    print("귀무가설 채택: 각 학교에서 과목 선호도는 동일하다.")

 

2.4. F분포

F분포는 두 개의 카이제곱 분포를 나눈 비율로 그룹 간 차이그룹 내 변동보다 얼마나 큰지를 나타내기 위해서 고안한 분포이다.  그룹 간의 차이가 단순이 우연에 의한 것인지 아니면 유의미한 차이가 있는지 판단하는데 사용된다. 다음은 2 그룹간 자유도에 따른 F분포이다. 

$F = \frac{MSB}{MSW}$

F 통계량은 1보다 크다면, 그룹 간 분산이 그룹 내 분산보다 크다는 것을 의미하며, 이는 그룹간의 평균 차이에 유의미한 차이가 있음을 시사한다. 또는 1에 가깝거나 작다면 그룹 간 평균의 차이가 크지 않으며 이는 유연히 발생한 차이일 가능성을 시사하는 것이다. F 통계량은 분산분석(ANOVA), 회귀분석, 분산의 동질성을 검정하는데 사용한다.

2.5. 분산분석(ANOVA)

분산분석(ANOVA)이란 그룹 간 차이를 평가하기 위한 방법으로 평균의 차이를 분석하는 모수적 통계방법이다. 반면 카이제곱 검정은 비모수적 방법이다.  ANOVA는 두 개 이상의 평균이 서로 다른지 확인하기 위해서 사용된다. 또한 t-검정은 두 그룹 간의 평균을 비교하지만 ANOVA는 세 개 이상의 그룹 간 평균의 차이를 동시에 분석할 수 있다. 

  카이제곱 분산분석
분석 유형 범주형 데이터 연속형 데이터
목적 1. 관찰 값과 기대값의 일치여부(적합도 검정)
2. 두 변수간 독립성
3. 집단 간 동질성 검정
여러 그룹간 평균이 동일한지 검정
가정 분포 가정 필요 없음(비모수적)
관측빈도가 5개 이상 만족
정규 분포 및 등분산 가정 요구(모수적)
예시 성별과 흡연 여부에 대한 독립성 검정 각 교육방법 간 평균 시험 점수 비교, 신약에 따른 혈압 감소량 차이 비교

 

 

 고혈압 신약 A,B,C에 따른 환자들의 혈압감소량을 비교한다고 생각해보자.

신약A 신약B 신약C
5 8 7
7 9 6
8 7 5
6 10 8
7 9 7

F통계량에서 따지는 것은 그룹 내 분산(Within-Group Variance, SSW) 과 그룹 간 분산(Between-Group Variance, SSB) 이다.

그룹 내 분산(SSW)는 각 표본이 그룹의 평균과 얼마나 편차가 있는지가 관심 대상이며 다음과 같이 정의 된다.

$SSW = \sum^{k}_{i=1}\sum^{n_i}_{j=1}(X_{ij}-\bar{X_{i}})^{2}$

  • $X_{ij}$: $i$번째 그룹의 $j$번째 관찰 값
  • $\bar{X_{i}}$: $i$ 번째 그룹의 평균
  • $n_{i}$: $i$번째 그룹의 관찰 값 수

신약 A의 평균 $X_{1}$: 6.6, 신약 B의 평균 $X_{2}$: 8.6, 신약 C의 평균 $X_{3}$: 6.6  

그룹 간 분산(SSB)는 각 그룹이 전체 평균에 대해서 얼마나 벗어나 있는지가 관심 대상이며 다음과 같이 정의 된다.

$ SSB = \sum^{k}_{i=1}n_{i}(\bar{X_i} - \bar{X})^{2}$

전체 평균($\bar{X}$은 7.27이다.

F통계량은 위 SSW, SSB의 값의 비율이며 자유도로 나누어 주어야 한다. 

$F = \frac{MSB}{MSW}$

$MSB = \frac{SSB}{dfB}$

이때 그룹 간 자유도($dfB$)는  전체 표본 갯수 - 1 이된다. 전체 평균을 알고 데이터 14개를 알면 나머지 1개를 자연스럽게 알 수 있기 때문이다.

$MSW = \frac{SSW}{dfW}$

이때 그룹 내 자유도는($dfW$)는 전체 데이터에서 그룹 수를 뺀 값이다($N - k $) 그룹의 평균을 알고 나머지 데이터 4개를 알면 나머지 1개를 알게되며 이를 3 그룹 모두 적용할 수 있기 때문이다. 즉 위의 예시에서는 12가 된다. 

import numpy as np
import scipy.stats as stats

# 예시 데이터: 각 그룹에서 혈압 감소량 (mmHg)
group1 = [5, 7, 8, 6, 7]  # 신약 A
group2 = [8, 9, 7, 10, 9]  # 신약 B
group3 = [7, 6, 5, 8, 7]  # 신약 C

# 세 그룹의 데이터를 배열로 묶기
data = [group1, group2, group3]

# ANOVA 수행
f_statistic, p_value = stats.f_oneway(*data)

# 결과 출력
print(f"F-statistic: {f_statistic:.3f}") # 5.128
print(f"P-value: {p_value:.3f}") #0.025

# 결론 도출
alpha = 0.05  # 유의수준
if p_value < alpha:
    print("귀무가설 기각: 신약 간에 혈압 감소 효과에 차이가 있다.")
else:
    print("귀무가설 채택: 신약 간에 혈압 감소 효과에 차이가 없다.")

 

이번 글에서는 추론통계의 핵심 유의성 검정과 등장하는 개념, 그리고 일반적인 통계방법론을 정리해본다.


1. 글목차

  • 유의성 검정에 필요한 개념
  • 1종오류와 2종오류
  • 유의성 검정 절차
  • 통계검정 절차(Diagram) -연속형 종속변수인 경우, 일반적인 경우

2. 본문

 

2.1. 유의성 검정의 개념

유의성검정은 연구나 실험에서 관찰된 결과가 우연에 의한 것인지 아니면 실제로 의미있는 차이가 존재하는지를 판단한다는 것이다. 

이를 위해 몇가지 기본 개념을 설명하고 진행해야한다. 

  • 귀무가설($H_{0}$): 일반적으로 받아들여지는 사실
  • 대립가설($H_{1}$): 주장하고자 하는 바(귀무가설의 반대)

왜 귀무가설을 상정해야하는가?  수학의 증명방법 중에 귀류법 이라는 것이 있다. 모순에 의한 논증법으로 일단 귀무가설이 사실이라고 치자. 그리고 논리를 전개하다가 모순에 도달하게 되면 대립가설을 채택하게 되고 그렇지 않으면 귀무가설을 지지하게 되는 것이다. 

  • p-value: 관찰된 데이터가 귀무가설 가설이 참일 때 얻어질 확률이다. 
    • p-value가 작다면 귀무가설이 참일때 관찰된 데이터가 발생할 확률이 낮다는 의미다. 이는 우연에 의한 사건으로 보기 어렵다고 판단할 수 있으며, 그때는 귀무가설을 기각하고 대립가설을 채택해야한다. 
    • p-value가 크다면 이는 우연에 의한 사건으로 판단하여 귀무가설을 지지하는 증거가 된다. 

그렇다면 그 p-value의 기준은 얼마로 판단해야하는가? 이를 유의수준(significant level, $\alpha$)이라고 한다. 일반적으로 0.05 즉 5% 를 기준으로 그보다 희박한 확률인가 아닌가가 판단 기준이된다. 

p-value는 증거의 강도를 나타내지만 확실한 결론을 제공하지는 않는다. 이 때문에 유의수준이라고 하는 우리만의 기준을 만들어서 해석한다고 할 수 있다. 또한, 효과의 크기나 중요성을 표현하진 않는다.

 

  • 검정 통계량(test statistic)
    • 검정통계량은 데이터를 단일된 숫자로 요약하여 관찰된 데이터가 귀무가설 하에서 기대되는 것과 얼마나 차이나는 지 평가할 수 있는 척도이다.

 

  • z-검정 통계량
    • 사용조건: 모집단의 표준편차($\sigma$)가 알려져 있는 경우
    • 표본의 크기가 충분히 큰 경우(경험적 기준 n>30)

$z = \frac{\bar{X} - \mu_0}{\frac{\sigma}{\sqrt{n}}}$

 

  • t검정 통계량
    • 모집단의 표준편차($\sigma$)가 알려져 있지 않은 경우
    • 표본 크기가 작은 경우

$t = \frac{\bar{X} - \mu_0}{\frac{s}{\sqrt{n}}}$

  • 카이제곱 검정 통계량

$\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i}$

  • F-검정 통계량

$F = \frac{\text{Between-group variability}}{\text{Within-group variability}} = \frac{\frac{SSB}{df_B}}{\frac{SSW}{df_W}}$

 

 

2.2. 1종 오류와 2종 오류

늘 판단은 틀릴 수 있다. 이를 극복하기 위한 것이 혼동행렬이다. 

판단 \ 실제 상황 귀무가설이 사실 대립가설이 사실
귀무가설을 기각하지 못함 옳은 채택( ($1-\alpha$) 2종 오류($\beta$)
귀무가설을 기각함 1종 오류($\alpha$) 옳은 기각($1-\beta$,  검정력 )

귀무가설은 일반적으로 우리가 받아들여지는 사실이라고 했다. 유의수준을 0.05로 설정하고 꽤나 까다롭게 설정하였는데도 불구하고 판단은 틀릴 수 있다. 정말 우연하게도. 귀무가설이 사실인데도 불구하고 대립가설을 채택하는 상황을 1종오류 ($\alpha$) 라고 한다.  일반적으로 받아들여지는 사실을 바뀐다는 것은 혼란을 불러온다. 우리는 이를 관리하기 위해서 일반적으로 1종오류를 관리한다. 

반면 대립가설이 사실인데도 불구하고 귀무가설을 채택하는 경우를 2종 오류 ($\beta$) 라고 부른다.일반적으로 1종 오류와 2종 오류는 동시에 낮추기 어렵고 상충관계(Trade off)가 존재한다. 귀무가설이 거짓일 때, 이를 옳게 기각할 확률을 검정력(power)라고 하며  $ 1- \beta$로 표현한다.

검정력과 표본크기 계산은 다음 링크를 참조

https://snowgot.tistory.com/entry/DSforS-Chap-3-%ED%86%B5%EA%B3%84%EC%A0%81-%EC%8B%A4%ED%97%98%EA%B3%BC-%EC%9C%A0%EC%9D%98%EC%84%B1-%EA%B2%80%EC%A0%95-34-38

 

(6) DSforS : Chap 3 통계적 실험과 유의성 검정 3.4 ~ 3.8.

1. 목차3.4. 통계적 유의성과 p값3.5. t검정3.6. 다중검정3.7. 자유도3.8. 분산분석  2. 본문3.4. 1종오류와 2종오류1종 오류: 귀무가설이 참인데도 불구하고 귀무가설을 채택하지 않는 오류2종 오류:

snowgot.tistory.com

 

 

2.3. 유의성 검증 절차

유의성 검증 절차는 다음과 같다. 

  • 귀무가설, 대립가설을 설정한다. 
  • 검정 유의수준(1종오류를 관리할 기준)을 세운다. 
  • 검정 방법을 결정한다(구하려는 문제에 따라 적용)
  • 검정 통계량을 계산한다. 
  • 판단

2.4. 통계 방법론 정리 

 11단원에서는 정규분포하에서의 신뢰구간을 구하는 방법에 대해서 논한다. 


1. 글목차

  • 모평균과 모비율이 중요한 이유
  • 모비율 추론
  • 모평균 추론

 

2. 본문

2.1. 모평균과 모비율이 중요한 이유

  • 모평균은 전체 모집단의 평균이다. 우리가 관심있는 변수 (ex 키, 소득, 점수)등에 대한 전체 모집단에 일반적인 수준을 이해하는데 도움이 되는 대표적인 지표이다.
  • 모비율은 전체 모집단에서 발생하는 비율이다.(ex 후보를 지지하는 비율) 
  • 통계학의 중요한 목표 중 하나는 표본으로 부터 모집단에 대한 결론을 도출하는 것이다. 모평균과 모비율에 대한 추정은 이를 기반하기 위한 근거가 될 수 있다. 
  • 또한, 모평균과 모비율은 정확히 아는 것을 불가능에 가깝기 때문에 신뢰구간을 설정함으로서 특정 범위 내에 있는 확률을 제공하게 된다. 
  • 신뢰구간(confidentail Interval)은 모수(모평균 혹은 모집단)에 대한 추정한 값을 중심으로 이 모수가 포함될 것이라고 기대되는 범위이다. 일반적으로 신뢰수준은 95% 혹은 99%로 표현한다.
  • 예컨데 모평균의 95% 신뢰구간이 10과 20사이라고 한다면, 여러 번 분포을 추출하여 동일한 방법으로 신뢰구간을 계산할 때 그 중 95%의 신뢰구간이 실제로 모평균을 포함할 것이라는 의미이다. 

 

2.2. 모비율 추론

2.2.1. 비율 추론의 조건

  1. 표본은 집단에서 무작위로 추출
  2. 표본 크기  $np >= 5$ 이면서 $np(1-p) >= 5$ (즉 사건의 성공 및 실패 횟수가 5회 이상)
    - Khan Academy에서는 10으로 제안하고 있음.
  3. 각 표본의 독립성(일반적으로 비복원 추출시 표본의 크기가 모집단 크기를 10%를 넘지 않을 때)
    위 10%는 절대적인 정해진 수치가 아닌 경험적 가이드라인 임을 주의! 이를 통해 비복원추출에서도 추출의 독립성을 확보하는 것에 목적을 두는 것.

만약 위 조건을 만족하지 않는다면  부트스트래핑 혹은 비모수적인 방법을 고려해야한다. 

seaborn 모듈에서 제공하는 errobar 옵션

 

 위 조건들은 대부분 표본의 크기가 충분히 클 경우 모집단의 분포에 관계 없이 표본 비율(표본평균)의 분포는 정규분포에 근사하게 된다는 중심극한정리(Central Limit Theroy)에 따라 만족된다. 

 

 

2.2.2. 그럼에도 불구하고?

중심극한정리는 강력한 이론이지만 ① 표본의 크기가 작거나 ② 모집단의 분포가 비정규적(비대칭, 첨도가 높음) ③ 이상치가 있는 경우 ④ 모수적 가정이 불확실하여 유연한 분석이 필요할 때 와 같은 이유로  부트스트래핑과 비모수적 방법이 필요할 수 있다. 

특히 부트스트래핑은 흔히 신뢰구간을 표현하기 위한 데이터 사이언스에서 애용하는 방법이므로 한번쯤 확인해보면 좋다. 

https://snowgot.tistory.com/entry/DSforS-Chap-2-%ED%83%90%EC%83%89%EC%A0%81-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D-24-28

 

(3) DSforS : Chap 2 탐색적 데이터분석 2.4 ~ 2.8

1. 목차2.4. 부트스트랩2.5. 신뢰구간2.6. 정규분포2.7. 긴꼬리 분포2.8. 스튜던트 t 분포모수, 통계량을 넘어가서 표본샘플링과 신뢰구간, 분포 등에 대해서 알려주는 단원입니다.  2. 본문2.4. 부트

snowgot.tistory.com

 

 

2.2.1 모비율에 대한 신뢰 구간

$ \hat{p} \pm Z \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}$

  • 모집단에서 특정한 사건이 발생하는 비율 p에 대해 신뢰구간을 구하는 방법
  • $\hat{p}$ : 표본 비율
  • $Z$: 검정통계량

Z 검정 통계량은 가설 검정하에서 표본 비율과 귀무가설 모집단의 비율간 차이가 표준오차와 비교해 얼마나 큰지를 나타내는 지표이다.

$ Z = \frac{\hat{p} - p_0}{\sqrt{\frac{p_0(1 - p_0)}{n}}}$ 

  • $\hat{p}$: 표본 비율
  • $p_{0}$: 귀무가설에서 주장하는 모집단 비율
  • $n$:표본 크기
    (Z 검정에서는 모집단의 분산이 주어져있거나 충분히 큰 표본으로 표본의 분산이 모집단의 분포를 잘 추정한다고 가정 따라서 자유도를 사용하지 않음)

 

 

2.3. 모평균 추론

1. 모평균: 모분산(표준편차)를 알고 있는 경우 

$\overline{x} \pm Z  \frac{\sigma}{\sqrt(n)} $

  • $\overline{x}$: 표본 평균
  • $Z$: 신뢰 수준에 해당하는 $Z$값( 95% : 1.96, 99% : 2.58)
  • $\sigma$: 모집단의 표준 편차
  • $n$: 표본의 크기

하지만 모집단에 대한 데이터 획득이 어려운 상황에서 모평균을 알지 못하여 추정을 하는 것인데 당연히 모분산을 아는 경우도 매우 드물다. 예를 들자면 기계가 생산하는 제품의 결과에 대한 변동이 일정하게 유지되는 경우 과거의 데이터로부터 모분산을 안다고 가정하는 식으로 진행할 수 있다. 

2. 모평균: 모분산(표준편차)을 모르는 경우

$\overline{x} \pm t  \frac{s}{\sqrt(n)} $

  • 이 경우 표본의 표준 편차 $s$를 사용하고 t-분포를 적용한다.
  • $t$: 신뢰구간과 자유도에 따른 t 값(자유도는 n-1)
  • $s$: 표본의 표준 편차

 

2.4. 웹/앱서비스에서의 적용

  • 클릭률(Click Through Rate,CTR) 분석
    • 상황: 특정 광고 배너나 버튼이 노출된 후 사용자가 이를 클릭한 비율을 분석
    • 모비율: 전체 사용자 중 해당 광고를 클릭한 사용자의 비율을 모비율로 추정
    • 예시: 1000명의 노출군 중 150명이 광고를 클릭했다면 전체 사용자에 대한 클릭률을 추정하여 캠페인의 성과를 측정 가능
  • 앱 내 구매율 분석
    • 상황: 앱을 다운로드한 사용자가 실제로 인앱 구매를 진행한 비율
    • 모비율: 다운로드한 사용자 중 구매한 사용자의 비율을 모비율로 추정
    • 예시: 10,000명의 다운로드 사용자 중 500명이 구매했다면 전체 사용자에 대한 구매율 추정
  • 평균 사용시간 분석
    • 상황: 앱 사용자들이 앱을 사용하는 평균 시간을 분석
    • 모평균: 앱에서 보낸 평균시간을 모평균으로 추정
    • 예시: 앱 사용자의 표본 500명의 일일 평균 사용시간이 30분이라며 전체 사용자에 대한 일일 평균 사용시간을 추정하여 사용 패턴 분석
  • 평균 주문 금액 분석
    • 상황: 모바일 쇼핑앱에서 사용자가 한번의 거래에서 소비하는 평균 금액 분석
    • 모평균: 특정 기간동안 발생한 거래의 평균 금액을 모평균으로 추정, 사용자당 수익(ARPU)를 계산
    • 예시: 표본으로 선택한 1000건의 거래에서 평균 주문금액이 $50이라면 전체 거래 평균 금액을 추정
  • 종합 활용: A/B 테스트
    • 모비율: 버튼 디자인의 클릭률 기반 A/B test
    • 모평균: 두 랜딩 페이지에 따른 앱에서 보내는 평균 시간 비교

 

3. 읽어볼만한 글

https://yozm.wishket.com/magazine/detail/1967/

 

사용자 데이터를 효과적으로 분석하는 법 | 요즘IT

사용성 평가나 설문 조사 그리고 인터뷰와 같은 사용자 조사는 고객 관점에서의 사업 기회 발굴과 디자인 개선에 대한 인사이트를 제공해 줍니다. 그렇지만 단순히 사용자 조사로 수집된 데이

yozm.wishket.com

 

이산확확률변수와 연속확률 변수들을 정리해본다.


1. 글목차

  • 이산확률변수
  • 연속확률변수

2. 본문

현실의 세계 문제는 다양하고 복잡하다. 동전을 던지는 실험, 도로에서 발생하는 교통사고의 수, 특정 시간동안 걸려오는 콜 전화의 수 등  다양한 상황을 정확하게 반영하기 위해서 다른 확률 변수가 필요하다고 할 수 있다. 

확률변수는 특정 현상을 모델링하는데 의의미가 있다. 예컨데 포아송 확률변수는 일정 시간 또는 공간에서 발생하는 사건의 수를 모델링하는데 유용한 식으로 말이다. 오늘은 이산확률 변수에 대하서 정리해보자.

2.1. 이산확률변수

- 각 시행마다 성공확률($p$)가 정해져 있을때 시행 횟수 ($n$)회 중에서 성공한 횟수 ($X$)의 도수 분포

  • 평균: $E(X) = np$  혹은 $ E(X) = \sum_{k=0}^{n}{k*Pr(X=k)}$
  • 분산: $Var(X) = npq$ 혹은 $ Var(X) = E(X^{2}) - (E(X})^{2}$ 

위 식을 파이썬을 구현해보자. decimal모듈 이용해 정확한 계산을 해본다.

 

2.2.1. 베르누이 확률변수

  • 베르누이 확률변수(Bernoulli Random Variable)은 성공 실패를 단 두 가지의 가능한 결과를 가지는 실험을 나타내는 확률 변수이다. 
  • 예시: 동전을 던졌을 때 앞면이 나오는 경우, 뒷면이 나오는 경우
  • 분포: 베르누이 분포

2.2.2.이항확률 변수

  • 이항확률 변수(Binomial Random Variable)은 성공과 실패 두가지 가능한 결과를 가지는 실험을 일정 횟수 반복할 때, 그 성공 횟수를 나타내는 확률 변수
  • 독립적인 베르누이 시행을 n번 반복했을 때 성공한 횟수를 나타내는 확률 변수
  • 분포: 이항 분포
  • 조건
    • 각 시행은 실패 혹은 성공
    • 각 시행은 독립적
    • 확률 변수는 고정되어야함(유한한 숫자)
    • 각 시행의 성공 확률은 상수

2.2.3. 기하확률 변수

  • 기하확률변수(Geometric Random Variable)은 독립적인 베르누이 시행을 반복할 때, 첫 번째 성공이 나타낼 때까지의 시행 횟수를 나타내는 확률변수
  • 예시: 6의 나올 때 까지의 주사위를 굴리는 시행
  • 분포: 기하분포

2.2.4. 포아송 확률 변수

  • 포아송 확률변수는 일정 시간 또는 공간에서 발생하는 사건의 수
  • 예시: 특정 시간 동안 전화 교환기에 도착하는 전화의 수
  • 분포: 포아송 분포

2.2.5. 음이항 확률변수

  • 음이항 확률변수(Negative Binomial Random Variable)은 성공확률 $p$를 가지는 독립적인 베르누이 시행에서 $r$번째 성공이 발생할 때 까지 시행 횟수(실패 횟수)를 나타내는 확률 변수
  • 예시: 주사위를 3번 던져 6 나올까지의 던진 횟수
  • 분포: 음이항 분포

2.2.6. 다항 확률 변수

  • 다항 확률변수(Mutinomial Random Variable은 여러 개의 가능한 결과가 존재하는 경우에 각 결과가 나타나는 횟수를 나타내는 확률변수
  • 예시: 주사위를 10번 던져 각각의 면이 나오는 횟수
  • 분포: 다항 분포

2.2.7. 초기하 확률 변수

  • 초기하 확률 변수(Hypergeometric Random Variable)은 집단에서 성공과 실패가 있는 경우 중복없이 추출할 때 성공의 갯수를 나타낸느 확률 변수
  • 예시: 10개 카드 중 4개의 에이스가 있는 카드 덱에서 3장의 카드를 뽑았 을 때, 에이스가 나온느 갯수
  • 분포: 초기하 분포

2.3. 연속확률 변수

  • 확률 밀도 함수(Probability Density Function , PDF)란 연속확률 변수가 특정 값을 가능성을 나타내는 함수 이다. 
  • 특징
  1. 비음수성: $ f(x) >= 0 $
  2. 모든 확률의 합 1 : $\int_{-\infty}^{\infty} f(x) \, dx = 1$
  3. 구간확률 계산은 그래프의 적분 값 : $ \Pr(a \leq X \leq b) = \int_{a}^{b} f(x) \, dx$
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 정규분포의 매개변수 설정
mu = 0      # 평균 (mean)
sigma = 1   # 표준편차 (standard deviation)

# X값 범위 설정 (평균을 중심으로 -4sigma ~ 4sigma)
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)

# 정규분포의 확률밀도함수 계산
pdf = norm.pdf(x, mu, sigma)

# 그래프 그리기
plt.plot(x, pdf, label=f'Normal Distribution\n$\mu={mu}$, $\sigma={sigma}$')
plt.title('Probability Density Function (PDF)')
plt.xlabel('X')
plt.ylabel('Density')
plt.legend()
plt.grid(True)
plt.show()

2.3.1. 정규확률 변수

  • 정규 확률 변수(Normal Distribution)을 따르는 확률 변수로 연속 확률 변수 중 가장 널리 알려진 분포
  • 예시: 키, 시험 점수 등

2.3.2. 지수확률 변수

  • 지수 확률 분포(Exponential Distribution)을 따르는 확률 변수로 연속 확률 변수 중에서 사건 간의 대기 시간을 모델링하는데 사용
  • 포아송 분포와 밀접관 관련
  • 예시: 반도체 장치의 수명

2.3.3. 카이제곱 확률 변수

  • 카이제곱 분포(Chi-Square Distribution)을 따르는 확률 변수로 정규 분포를 따르는 독립적인 표본들의 제곱합을 따르는 분포
  • 예시: 카이제곱 독립성 검정, 적합성 검정 등

2.3.4. t분포 확률 변수

  •  표본의 분포를 분석할 떄 사용되며 특히 표본의 크기가 작은 경우 사용
  • 예시: 두 집단의 평균비교

2.3.5. F-분포 확률 변수

  • 두 독립적인 카이제곱 분포를 따르는 확률 변수의 비율로 정의
  • 주로 분산분석(ANOVA)에 사용됨
  • 예시: 집단 간 분산의 비교

+ Recent posts