공부/파이썬을 통한 기초통계학

Probability, 확률

ko_sick 2025. 2. 10. 12:51

😀 Probability
- 통계에서 가장 근본이 되는 확률에 대해서 알아볼계획이고, 파이썬을 통해서 간단한 예제문제를 다뤄볼 생각입니다.

문제

공정한 동전을 던졌을 때, 앞(Head) 또는 뒤(Tail)가 나올 확률을 구하는 함수를 작성해보세요. 베이스라인code here 을 채우세요.

베이스라인

def pmf_coin(outcome):
    '''
    본 함수는 동전을 던졌을 때 나오는 결과(Head 혹은 Tail)를 입력값으로 받는다.
    입력값 outcome이 Head와 Tail 둘 중 하나일 때는 0.5, 그 외에는 0이 확률이 된다.
    확률 변수의 형식으로, 주어진 outcome에 대한 확률을 출력한다.
    '''
    if outcome in # code here
        '''
        code here
        '''
    else:
        '''
        code here
        '''

    print(f"P(X = x) = {p:.2f}")

 

입력(Input)

pmf_coin('Head')

pmf_coin('Tail')

pmf_coin('etc')

 

출력(Output)

P(X = x) = 0.50

P(X = x) = 0.50

P(X = x) = 0.00

 

입력 코드 정답

더보기

정답 코드(스포주의)

def pmf_coin(outcome):
    '''
    본 함수는 동전을 던졌을 때 나오는 결과(Head 혹은 Tail)를 입력값으로 받는다.
    입력값 outcome이 Head와 Tail 둘 중 하나일 때는 0.5, 그 외에는 0이 확률이 된다.
    확률 변수의 형식으로, 주어진 outcome에 대한 확률을 출력한다.
    '''
    if outcome in ["Head", "Tail"]:
        p = 0.5
    else:
        p = 0
        
    print(f"P(X = x) = {p:.2f}")

 

개인적으로 확인해본 큰수의 법칙

import random
random.seed(12345)

count_num = [1000, 10000, 100000]
choices = ["tail", "head"]


# 결과를 확인하려면 예를 들어, 각 선택의 빈도를 계산할 수 있습니다.
from collections import Counter

for Number in count_num:
    results = [random.choice(choices) for _ in range(Number)]
    counter = Counter(results)
    print(f'{Number}번 toss 했을 때 Head가 나올 확률은 :',round(counter['head']/(counter['head']+counter['tail']) * 100, 2))
    print(f'{Number}번 toss 했을 때 Tail이 나올 확률은 :',round(counter['tail']/(counter['head']+counter['tail']) * 100, 2))

코인토스를 1000번, 10000번, 100000번 했을때, 앞면과 뒷면이 나올 확률을 확인 해본 결과 시행의 횟수가 많아 질 수록 head와 tail이 거의 비슷하게 나오는 것을 확인 할 수 있었습니다.

 

확률 분포, 왜 알아야 할까요?

통계와 머신러닝의 핵심, 확률 분포!

우리가 앞으로 배우게 될 통계 및 머신러닝 모델들은 확률 분포에 기반하고 있습니다. 따라서 확률 분포를 제대로 이해하는 것은 모델의 유용성과 한계를 파악하고, 적절한 상황에 맞는 모델을 선택하는 데 필수적입니다.

다양한 모델과 확률 분포의 관계

  • t-test: t분포 사용
  • 베르누이 분포: 전환율, 사망률 등 이항 분류 문제 (Logistic regression과 연관)
  • 선형 회귀: 잔차의 일관된 분산과 독립성 가정 (ANOVA 포함)
  • K-means: 클러스터별 독립적인 정규 분포 가정 (GMM으로 확장 가능)
  • 잠재 디리클레 할당(LDA): 디리클레 분포와 다항 분포 사용

위 예시들을 당장 이해하지 못해도 괜찮습니다. 중요한 것은 많은 모델들이 확률 분포를 활용하며, 이를 이해해야 모델을 제대로 활용할 수 있다는 점입니다. 앞으로 각 분포가 어떻게 사용되는지 자세히 살펴볼 예정이니, 지금은 확률 분포의 개념과 중요성에 집중해 주세요.

확률 분포란 무엇일까요?

확률 분포, 확률 변수, 확률 세 가지 용어를 정확히 구분하는 것이 중요합니다.

확률 분포란 확률 변수가 특정한 값을 가질 확률을 나타내는 함수입니다.

  • 확률 변수: 확률적으로 값이 결정되는 변수 (예: 동전 던지기의 윗면)
  • 확률 분포: 확률 변수가 특정 값일 확률을 나타내는 함수 (예: 앞면일 확률)
  • 확률: 특정 사건이 일어날 가능성을 0~1 사이의 숫자로 표현한 값 (예: 동전 던지기에서 앞면이 나올 확률)

동전 던지기 예시 👀

동전 던지기에서 윗면은 확률 변수입니다. 앞면 또는 뒷면이 나올 수 있으며, 각각의 가능성 값이 확률입니다. 윗면이 앞면 또는 뒷면일 때 확률을 알려주는 함수가 확률 분포입니다. 동전을 던져 실제로 앞면이나 뒷면이 나오는 것을 실현이라고 합니다.

추가 용어 정리

  • 사건(사상): 확률 변수에서 관측될 수 있는 결과의 집합 (예: 동전 던지기에서 앞면)
  • 표본 공간: 가능한 모든 사건의 집합 (예: 동전 던지기의 표본 공간은 {앞면, 뒷면})

수식으로 표현하기 ✍️

P(X=head) = p

  • P: 확률 분포
  • X: 확률 변수
  • head: 사건
  • p: 동전의 앞면이 나올 확률

(통계학에서 "공정(fair)하다"는 것은 각 사건의 확률이 동일하다는 의미입니다.)

다음 내용

다음 포스팅에서는 Probability Distribution에 대한 코드 및 설명에 대해서 포스팅을 하도록 하겠습니다.