확률 관련 계산을 다루는 클래스를 파이썬으로 구현하는 것은 유용한 프로젝트입니다. 아래는 간단한 확률 클래스를 만들어 기본적인 확률 계산, 조합, 그리고 베르누이 분포를 다루는 예제입니다. 이 클래스는 확률을 다루기 위해 다음과 같은 기능을 제공합니다:

  1. 확률 계산: 특정 사건의 확률을 계산하는 메서드.
  2. 조합 계산: n개 중 k개를 선택하는 조합 수를 계산하는 메서드.
  3. 베르누이 확률: 주어진 성공 확률에 대한 베르누이 분포를 계산하는 메서드.

확률 클래스 구현

import math

class Probability:
    def __init__(self):
        pass

    @staticmethod
    def probability(event_outcomes, total_outcomes):
        """ 특정 사건의 확률을 계산합니다. """
        if total_outcomes <= 0:
            raise ValueError("총 경우의 수는 0보다 커야 합니다.")
        if event_outcomes < 0:
            raise ValueError("사건의 경우의 수는 음수일 수 없습니다.")
        return event_outcomes / total_outcomes

    @staticmethod
    def combination(n, k):
        """ n개 중 k개를 선택하는 조합 수를 계산합니다. """
        if k > n or n < 0 or k < 0:
            raise ValueError("n은 k보다 크거나 같아야 하며, 두 값 모두 0 이상이어야 합니다.")
        return math.comb(n, k)

    @staticmethod
    def bernoulli_distribution(p, n, k):
        """ 베르누이 분포의 확률을 계산합니다. """
        if p < 0 or p > 1:
            raise ValueError("성공 확률 p는 0과 1 사이의 값이어야 합니다.")
        if n < 0 or k < 0 or k > n:
            raise ValueError("n과 k는 0 이상이어야 하며, k는 n보다 작거나 같아야 합니다.")

        # 베르누이 확률 질량 함수
        q = 1 - p  # 실패 확률
        return (Probability.combination(n, k) * (p ** k) * (q ** (n - k)))

# 사용 예시
if __name__ == "__main__":
    prob = Probability()

    # 특정 사건의 확률 계산
    event_outcomes = 3
    total_outcomes = 10
    print(f"확률: {prob.probability(event_outcomes, total_outcomes):.2f}")

    # 조합 계산
    n = 5
    k = 2
    print(f"{n}C{k} = {prob.combination(n, k)}")

    # 베르누이 분포 확률 계산
    p = 0.6  # 성공 확률
    n = 10   # 시행 횟수
    k = 6    # 성공 횟수
    print(f"베르누이 분포 확률: {prob.bernoulli_distribution(p, n, k):.4f}")

설명

  1. probability 메서드:

    • 사건의 경우의 수와 총 경우의 수를 받아 해당 사건의 확률을 계산합니다.
    • 총 경우의 수가 0 이하이거나 사건의 경우의 수가 음수인 경우, ValueError를 발생시킵니다.
  2. combination 메서드:

    • 조합을 계산하는 메서드로, math.comb를 사용하여 n개 중 k개를 선택하는 조합 수를 계산합니다.
    • n이 k보다 작거나, 두 값이 음수인 경우 ValueError를 발생시킵니다.
  3. bernoulli_distribution 메서드:

    • 주어진 성공 확률, 시행 횟수, 성공 횟수에 대한 베르누이 분포의 확률을 계산합니다.
    • 성공 확률이 0과 1 사이가 아닐 경우 또는 n, k가 음수이거나 k가 n보다 클 경우 ValueError를 발생시킵니다.

사용 예시

  • 위의 코드에서 클래스의 메서드를 호출하여 사건의 확률, 조합 수, 그리고 베르누이 확률을 계산할 수 있습니다.
  • 이 코드는 직접 실행하면 확률을 계산하는 예시 결과를 출력합니다.

이와 같은 확률 클래스를 통해 다양한 확률 관련 계산을 쉽게 수행할 수 있습니다. 필요한 경우 이 클래스를 확장하여 추가적인 확률 분포나 통계 계산을 추가할 수 있습니다.

+ Recent posts