본문 바로가기

AI가 뭐길래 왜 어려운 거죠?

Statistic_통계 (ft.내_머리)

1주차 개강 첫날이 가장 멘붕이었고 이후로는 이만큼의 충격은 없을 것이라고 확신하고 있었던 과거의 나,,

미래 예측 따위는 절대 다시 하지말자

역시 뜻대로 되지 않는 인생사 새옹지마아아아ㅏㅏㅏ

겨우 데이터 분석의 첫 단계를 입문하였을 뿐인데 나는 왜 벌써부터 머리를 쥐어뜯고 있는 것인가

요즘 나의 최대 고민은 부캠 끝마칠 때 나의 머리는 온전할까이다..ㅎ 

이번 주말도 월요일의 스챌(한주를 마무리하는  시험) 준비로 빠듯하당

아이 신나 아이 행복해

 

미래의 내 머리,,?

 


Section1_Sprint2
  • 학습목표
    • 베이지안 정리 (Bayesian Theorem)
    • 중심극한정리 (Central Limit Theorem)
    • 가설 검정 (Hypothesis Test)
    • AB테스트 (AB Test)

모든 데이터 분석은 통계에서 출발하며, 통계의 본질은 바로 데이터로부터 의미를 찾는 것이다.

 

< 목차 >

 

1. 베이지안 정리 

  • 이항 분포 (Binomial Distribution)
  • 조건부 확률 (Conditional Probability)
  • 베이지안 정리 (Bayesian Theorem)

 

2. 중심 극한 정리 

  • 큰 수의 법칙 (Law of Large Numbers)
  • 중심 극한 정리 (Central Limit Theorem)
  • 신뢰 구간 (Confidence Intervall )

 

3. 가설 검정

  • 귀무가설과 대립가설 (Null Hypothesis & Alternative Hypothesis)
  • 1종 오류와 2종 오류 (Type 1 Error & Type 2 Error)
  • 유의 수준 (Significance Level)
  • 단측 검정과 양측 검정(One-tailed Test & Two-tailed Test)

 

4. AB 테스트

  • AB 테스트 정의 및 특성
  • AB 테스트 진행

 

 


Part 1. 베이지안 정리 (Bayesian Theorem)

 

1. 확률이란 

어떠한 원인에 의해 사건이 발생할 때 이에 대한 결과를 예측하는 것
즉, 어떤 사건에서 어떤 일이 일어날 가능성을 수로 나타낸 것
  • 전체 확률의 법칙 
    • 사건에 의해 발생한 모든 잠재적 결과들이 나올 확률의 합은 1이다. 
    • P(A) = 1 - P(^A)
  • 확률 계산
    • 동전을 두 번 던졌을 때의 확률의 예시로서, 앞면과 뒷면이 각각 한번씩 나올 확률을 구한다. 
    • 진리표 확인 후, 원하는 경우의 확률을 모두 더하기

진리표 확인법

  • 확인하고자 하는 경우의 확률만 곱하여 더하기

확률 곱하여 더하기

 

2. 이항 분포 

독립적으로 반복되어지는 행위에 의해서 실패 또는 성공과 같이 두 가지 옵션을 가지는 사건의 확률을 결정하는 함수 
원하는 사건의 모든 잠재적 경우와 이에 대한 확률을 나타낸다. 
소비자의 행동 패턴을 모델링하는 데에 많이 이용된다. (구매 혹은 비구매, 전환 또는 비전환)
  • 이항 분포의 계산
    • x축은 모든 잠재적 경우이고, y축은 확률을 나타내므로
    • 이항분포의 면적 값(확률의 총합)은 전체 확률의 법칙에 의해 1이어야 한다
    • 진리표 계산

  • 공식 계산
    • n = 동전을 던진 횟수
    • k = 앞면이 나온 회수
    • n번 던져 k개의 앞면이 나올 수 있는 경우의 수 확인
      • n! / k! * (n-k)!
    • 확률 확인
      • 원하는 사건이 일어나는 총 경우의 수 확인
      • 원하는 사건이 발생하는 경우의 수 확인
      • 위의 두 정보를 이용해 2. / 1. 과 같이 나누어 총 확률계산 

구부러진 동전을 던졌을 때의 확률 (앞면과 뒷면 각각의 확률이 다름 - 0.7, 0.4) - 공식 확인

  • 동전을 5번 던져 2개의 앞면이 나오는 경우의 수 : 5! / (2! *(5-2)! = 10
  • 2개의 앞면과 3개의 뒷면이 나오는 확률 : 0.7 * 0.7 *  0.3 * 0.3 * 0.3 = 0.01323
  • 각 일어날 확률총 일어날 경우의 수곱해 5번 던져 2개의 앞면과 3개의 뒷면이 나올 확률 구하기
    • 0.01323 * 10 = 0.1323
정리 
1. n번 동전을 던져 앞면이 k번 나오는 경우의 수 : n! / k! * (n-k)!
2. k번 앞면이 나오고 n-k번 뒷면이 나오는 확률 :

3. 이항 분포의 공식 : 경우의 수 * 확률

 

3. 조건부 확률

어떠한 사건의 결과에 의해 영향을 받는 한 사건의 결과에 대한 확률
이항 분포와 같은 독립적인 시행이 아닌, 서로 관련되어 있는 사건에 사용된다. 
P(A | B) = P( A ∩ B) / P(B)

 

4. 베이지안 정리

조건부 확률을 베이지안 이론으로 확장시킨다.
사전 확률(Prior Probability)에 테스트를 통해 얻은 증거(Evidence)를 사후 확률(Posterior Probability)에 포함하는 것
Poster Probability = Prior Probability * Evidence 
P(A | B) = P( A ∩ B) / P(B) = P(B|A) * P(A) / P(B) = P( A ∩ B) /  [ P(B ∩ A) + P( B ∩ ^A) ]
                                                                                =  P(B|A) * P(A) / [ P(B|A) * P(A) + P(B|^A) * P(^A) ]

 

 

 


Part 2. 중심 극한 정리

 

1. 기술 통계 vs 추리 통계

●  모집단(population)
▷ 알고 싶어하는 또는 다루고 싶어 하는 대상을 구성하는 모든 데이터
●  모수(parameter)     
▷ 이 모집을 구성하는 데이터를 설명하는 수치값
▷ 우리가 알고자 하는 정보이자, 모집단의 특성을 설명하는 값 
▷ 모평균, 모분산, 모표준편차, 모비율, 모상관관계 등
▷ 모집단에 대한 데이터를 모두 수집하는 것은 불가능하다. 
▷ 표본을 추출해서 모집단의 모수를 추청할 수 있다. 
●  표본(sample)
▷ 모집단에서 추출된 모집단의 부분 집합
●  통계량(statistics)
▷ 표본의 특성을 설명하는 값
▷ 표본평균, 표본분산, 표본표준편차, 표본비율, 표본상관관계 등
모수와 통계랑의 차이점 
모수는 모집단이 변하지 않기 때문에 그 값이 변하지 않지만,
통계량은 표본을 어떻게 추출하느냐에 따라 그 값이 변한다. 
●  추론(inference)
▷ 우리가 가지고 있는 샘플의 통계치를 기반으로 모수에 대한 결론을 도출하게 되는 과정
●  기술 통계(descriptive statistics)
▷ 샘플의 통계치를 요약, 묘사, 설명하는 통계 기법
▷ 평균, 분산, 표준편차, 비율, 상관 관계 등
●  추리 통계(inferential statistics)
▷ 샘플의 통계치를 기반으로 모집단(모수)에 대한 결론을 도출하는 통계 기법

 

2. 표본 분포 (Sampling Distribution)

  • 모집단에서 랜덤으로 추출한 샘플의 통계량의 확률 분포(Distribution 0f a Statistics)
왜 중요한가 
표본 분포는 한정적인 데이터를 이용해 모수를 추론할 수 있도록 하기 때문에 중요하다. 
시행 방법 
1. 우리가 가지고 있는 샘플을 모집단이라 가정한다. 
2. 이 모집단에서 랜덤으로 샘플을 추출하여 샘플의 평균값을 저장한다. 
3. 2.를 반복하여 얻은 평균값들을 분포 형식을 나타낸다.
4. 3.의 분포를 통해 모집단의 모수를 추론한다. 
가지고 있던 샘플에서 다시 샘플링을 시행하고 추출된 데이터의 평균값을 사용하여 모수를 추론하게 된다.
📊 코드 구현 (w/ 예시)
1. numpy lib의 random.choice 메서드를 이용하여 모집단(가지고 있던 샘플)에서 10개의 데이터를 추출한다. 
2. 10개의 데이터의 평균을 계산하여 리스트에 저장한다. 
3. 1번과 2번의 과정을 for loop을 이용하여 10,000번 반복하여 리스트에 10,000번 추출된 10개의 평균값이 저장된다.  
4. 히스토그램을 이용해 리스트에 존재하는 평균값들의 분포를 확인한다. 
▷ 샘플 사이즈 = 10개
▷ 샘플링 반복 횟수 = 10,000번
📊 부트스트래핑(Bootstrapping)
●  중복 추출을 허용하여 원하는 개수의 데이터를 추출하는 기법
●  구현 방법
1. for loop을 사용하여 10,000번 iterations(반복) 돌린다.
2. 각 iteration 마다 random.choice 메서드를 이용하여 샘플을 추출한다.  
●  장점
▷ 더 많은 데이터를 요구하지 않고 가지고 있던 데이터로 모수를 추청할 수 있다.
●  샘플 사이즈의 차이
▷ 모집단(가지고 있던 샘플)에서 샘플 추출할 때 표본의 크기가 커지면 표본의 평균은 모집단(가지고 있던 샘플)의
     모수와 같아질 확률이 높아진다는 것은 큰 수의 법칙에 근거하고 있다.   

 

3. 큰 수의 법칙 (Law of Large Numbers)

  • 추출할 샘플 사이즈가 커질수록 샘플의 통계치는 모집단의 모수에 가까워진다는 이론
  • 부트스트랩 기법을 이용하여 표본 분포를 simulate할때 적용하게 되면 유용하다. 
    • 모집단의 개수가 5,000개이고 여기서 샘플을 추출하고자 할때
    • 모집단의 데이터 개수만큼 (5,000개) 중복허용을 통해 샘플링하게 되면
    • 표본 분포의 평균은 모집단의 모수에 가장 가까운 값을 얻을 수 있게 된다. 

df.shape[0]&nbsp; = 모집단의 데이터 개수 , replace=True = 중복허용

** np.random.choice 공식 문서

 

4. 중심 극한 정리 (Central Limit Theorem; CLT)

  • 모집단의 분포에 상관없 임의의 분포에서 추출된 표본들의 평균 분포는 정규분포를 이룬다는 이론
  • 이때 주의사항은 충분한 샘플 사이즈를 추출해야 한다는 점이다. 

CLT는 이와 같은 통계치에 적용될 수 있다.

  • 랜덤으로 시뮬레이트한 모집단 

  • 샘플사이즈 3개일 때 표본 분포 

  • 샘플사이즈 100개일 때 표본 분포

🔎 해설
랜덤으로 시뮬레이트한 모집단의 분포는 heavily right-skewed되어 있다. 
샘플 사이즈 3개일 때의 표본 분포는 right-skewed(분포가 왼쪽으로 기울어져있음)되어 있음을 알 수 있고,
샘플 사이즈 100개일 때의 표본 분포는 skewedness없이 완전한 정규 분포를 이루고 있음을 알 수 있다.
이를 통해, 모집단의 분포에 상관없이 충분한 샘플 사이즈로 추출된 표본 분포는 정규 분포를 이룬다는 것을 알 수 있다. 
이것이 중심 극한 정리 이론이다. 
또한 두 표본의 평균값은 모집단 평균의 근처에 존재한다는 사실까지 알 수 있다. 

 

5. 신뢰 구간 (Confidence Interval)

모집단의 모수는 알 수 없기에 모수의 값을 어떠한 특정 값으로 추정한다면 불확실성을 초래한다. 
따라서, 특정 값을 추정/예측하기 보다는 모수가 포함되어 있을 구간을 확률과 함께 제공하여
불확실성을 줄이고 모수의 신뢰성을 가늠하고자 한다. 
이때, 모수가 포함되어 있을 구간을 신뢰구간이라고 한다. 
대부분의 경우 모집단의 모수를 포함할 확률이 95%가 되는 구간을 찾는다. 

신뢰 구간 찾는 코드

 


Part 3. 가설 검정

  • 관심 있는 특정 모집단의 특성에 대한 가설을 세우고
  • 샘플 데이터를 사용하여 검토하는 추론의 과정을 일컫는다. 
📍 용어 정리
●  귀무가설(Null Hypothesis; H0)
▷ 데이터 수집 전 사실이라고 믿는 가설
●  대립가설 (Alternative Hypothesis; Ha)
▷ 우리가 사실이라고 증명하고자 하는 가설
●  검정통계량 (Test Statistics; X)
▷ 샘플 데이터에서의 통계량
●  귀무 분포 (Null Distribution)
▷ 귀무가설을 가정했을 때의 확률 분포
●  유의 확률 (p-value)
▷ 귀무 가설을 지지하는 정도
●  표본 분포 (Sampling Distribution)
▷ 모집단에서 샘플을 복원추출하고, 매 추출마다 통계치를 계산했을 때 그 표본 통계치로 그린 분포 

 

1. 귀무가설과 대립가설

  • 우리가 알고자 하는 질문을 두개의 대립되는 가설로 세우고, 이것의 참과 거짓을 수집한 데이터를 통해 판단하는 것
  • 귀무가설 : 디폴트 가설/특별한 사유가 없다면 받아들여지는 가설,  =, >=, <=
  • 대립가설 : 귀무가설이 충분한 증거로 기가되었을 때 채택되는 가설,  !=, >, < 
  • ⛔ 귀무가설과 대립가설은 서로 대립해야 하고 겹치는 부분이 있어서는 안된다. 

 

2. 1종 오류와 2종 오류 (Type 1 Error & Type 2 Error)

Fact(↓)                                    Predict(→) Reject H0 (기각)  Fail to Reject H0 (채택)
H0 Is True Type 1 Error Correct
H0 Is False Correct Type 2 Error
  • 1종 오류 : 귀무가설이 참인데 기각한 경우, alpha, False Positive
  • 2종 오류 : 귀무가설이 거짓인데 채택한 경우, beta, False Negative

 

3. 유의 수준

  • 귀무가설이 참인데도 불구하고 기각할 확률
  • 유의수준의 값이 0.05보다 작으면 귀무가설을 잘못 기각할 가능성이 5% 미만이라는 것을 알 수 있다. 
  • 그만큼 잘못 기각할 가능성이 낮으며, 귀무가설을 기각할 충분한 증거를 확보했다는 의미이다. 

 

4. 단측 검정과 양측 검정

📊 검정 방법론 (T-test 메소드 - .ttest_1samp, .ttest_ind)
●  신뢰구간 확인
1. 가지고 있는 샘플 데이터를 모집단으로 가정한다.
2. 1번의 모집단에서 10,000번 랜덤으로 샘플을 꺼내 평균을 계산하여 리스트에 저장한다. 
3. 평균 값들의 리스트를 이용해 평균의 표본 분포를 시뮬레이트한다. 
4. 시뮬레이트한 분포의 95% 신뢰구간을 확인한다.
5.  귀무가설이 신뢰구간에 비교하여 어디에 해당하는지 확인한다.
6. 어떤 가설을 채택할지 결정한다. 

●  P-value 확인
1. 귀무가설이 사실임을 가정한다.
2. 가지고 있는 샘플 데이터로 평균의 표본 분포를 시뮬레이트한다. 
3. 2번 분포의 표준 편차를 변수에 저장한다. 
4. 귀무가설과 대립가설의 가장 근접한 값과 변수에 저장한 표준 편차를 이용하여 귀무 분포를 시뮬레이트한다. 
5. 이때의 귀무 분포는 정규분포를 가지게 된다. 
6. 귀무 분포에 가지고 있던 샘플 데이터의 평균값이 어디에 있는지 확인한다. 
7. 귀무 분포에 샘플 데이터의 평균값보다 큰 면적(p-value)를  확인한다.
8. 이 면적이 0.05(유의 수준)보다 작으면 귀무가설이 사실인데 기각했을 때의 오류가 5%보다 작음을 의미한다. 

 


Part 4. AB 테스트

 

1. AB 테스트 정의 및 특징

📍 정의
  • 구매율을 올리기 위해 AB 테스트를 실행하여 테스트 결과를 기반으로 회사는 의사결정을 내리도록 한다. 
  • AB 테스트 가설 

  •  즉, 귀무가설을 기각하는 데에 실패하면 이전 버전을 유지해야 한다. 
📍 특징
  • 간단하지만, 이에 따라 신뢰성이 떨어진다. 
  • 따라서 충분한 데이터가 뒷받침되어야만 테스트를 진행할 수 있다. (한계점)
  • 모든 의사결정을 AB 테스트을 기반으로 이뤄지면 안될 것이다. 
  • 가장 최근의 데이터를 사용해야 한다. 

 

2. AB 테스트 진행 

1. 샘플 사이즈 확인
▷ 고객의 데이터 개수가 충분해야 한다. 
▷ 어느 정도가 적당한지는 계산 툴인 옵티마이즐리를 통해 파악한다. 
▷ 옵티마이즐리 결과값과 df.shape[0]의 비교

2. 순 방문자 확인

▷ 중복되는 고객의 데이터 삭제
▷ df.고객아이디/명.nunique()

3. AB 테스트 진행기간
▷ 테스트 시행 기간은 30일을 넘기지 않는 것을 추천한다. 
▷ 샘플 사이즈가 늘어날수록 표준오차는 줄어들고 p-value도 감소되므로 
▷ 새로운 버전이 효과가 없는 경우에도 통계적으로 유의미하다는 결과가 도출될 수 있다. 

4. 샘플에서의 전환율 확인
전체 데이터에서의 전환율 확인
▷ 대조군(이전 버전)에서의 전환율 확인
▷ 실험군(새 버전)에서의 전환율 확인
▷ 전환율의 차이 = 실험군 - 대조군
 
5. 대조군과 실험군 명수 비교
전체 방문자 중 실험군(새 버전)에 해당하는 확률
전체 방문자 중 대조군(이전 버전)에 해당하는 확률
각각의 확률이 비슷한지 확인하여 전환율의 차이가 샘플 개수로부터의 차이가 아님을 확인한다. 

** p-value 확인 -  np.random.binomial() 공식 문서

** test statistics와 p-value 확인 -  import stasmodels.api as sm  / sm.stats.proportions_ztest() 공식 문서

 

 

 

2023.02.26(일)