• SEARCH

    통합검색
세모계
    • Dark Mode
    • GNB Always Open
    • GNB Height Maximize
    • Color
    • Brightness
    • SINCE 2015.01.19.
    • 세모계 세모계
    •   SEARCH
    • 세상의 모든 계산기  
      • 자유(질문) 게시판  
      • 계산기 뉴스/정보  
      • 수학, 과학, 공학 이야기  
      • 세모계 : 공지 게시판  
        • 구글 맞춤검색  
      • 세상의 모든 계산기  
        • 자유(질문) 게시판  
    • TI  
    • CASIO  
    • HP  
    • SHARP  
    • 일반(쌀집) 계산기  
    • 기타계산기  
    • 세모계
    • by ORANGEDAY
  • 세상의 모든 계산기 수학, 과학, 공학 이야기
    • 세상의 모든 계산기 수학, 과학, 공학 이야기 확률통계
    • 게임에서 가챠 아이템을 뽑을 확률은?

    • Profile
      • 세상의모든계산기
        *.105.205.197
      • 2024.08.29 - 15:38 2024.08.29 - 13:29  118  2

    image.png

    총 10개의 아이템이 있고, 두 부류로 구분 됨.

     

    A형 5종 : 각 12% 의 확률로 선택됨

    B형 5종 : 각 8% 의 확률로 선택됨

    합계 100%로

    10개 상품이 온전히 있을 때 그 중 1개 뽑을 때의 확률을 의미함. 

     

    실제로는

    아이템 구매시 2개의 아이템이 선택되어 나오고, 

    동일한 아이템이 한꺼번에 나오지는 않음. 

     

    B형 아이템 중 특정한 아이템인 B1이 나올 확률은?

     

    스크린샷 2024-08-29 132556.png

     

    B1을 획득할 확률

    = A상품 후 B1을 뽑는 확률 + B1아닌 B상품 후 B1을 뽑는 확률 + B1을 처음에 뽑는 확률

     

     

    * 동일한 아이템이 선택되지 않도록 순차적으로 뽑는다고 생각하면, 
    두번째 선택시의 선택확률이 다시 주어져야 하지만 조건으로 주어지지 않았기 때문에 

    B1을 제외한 나머지의 선택확률은 남은 것들 중의 각각의 비중 비률로 계산함. 

    0
    0
    Attached file
    image.png 9.2KB 6스크린샷 2024-08-29 132556.png 24.7KB 6
    이 게시물을..
    • 세상의모든계산기 세상의모든계산기 Lv. 25

      계산기는 거들 뿐
      혹은
      계산기를 거들 뿐

     댓글 2

      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.08.29 15:08 #comment_46405

        시뮬레이션의 결과 (비복원 - 본문 풀이 논리와 동일)


        import random
        
        def generate_items_and_weights():
            # a형 항목
            a_items = [f'a{i}' for i in range(1, 6)]
            a_weights = [12] * 5  # 각 a형 항목의 선택 확률은 12%
            
            # b형 항목
            b_items = [f'b{i}' for i in range(1, 6)]
            b_weights = [8] * 5  # 각 b형 항목의 선택 확률은 8%
            
            items = a_items + b_items
            weights = a_weights + b_weights
            return items, weights
        
        def draw_items(items, weights):
            if len(items) < 2:
                return []  # 항목이 충분하지 않으면 빈 리스트 반환
            # 첫 번째 항목을 선택
            first_item = random.choices(items, weights=weights, k=1)[0]
            first_index = items.index(first_item)
            # 선택한 항목을 제거
            del items[first_index]
            del weights[first_index]
            # 두 번째 항목을 선택
            second_item = random.choices(items, weights=weights, k=1)[0]
            return [first_item, second_item]
        
        def is_valid_draw(draw):
            return draw[0] != draw[1]
        
        def main():
            total_trials = 10000000  # 테스트를 위한 시도 횟수
            valid_count = 0
            invalid_count = 0
            b1_count = 0
        
            for _ in range(total_trials):
                items, weights = generate_items_and_weights()
                drawn_items = draw_items(items, weights)
                if len(drawn_items) == 2:  # 항목이 2개 선택되었는지 확인
                    if is_valid_draw(drawn_items):
                        valid_count += 1
                        if 'b1' in drawn_items:
                            b1_count += 1
                    else:
                        invalid_count += 1
                else:
                    invalid_count += 1
        
            if valid_count == 0:
                probability_b1_given_valid = 0
            else:
                probability_b1_given_valid = b1_count / valid_count
        
            print(f"Total trials: {total_trials}")
            print(f"Valid draws: {valid_count}")
            print(f"Invalid draws: {invalid_count}")
            print(f"'b1' picked in valid draws: {b1_count}")
            print(f"Probability of 'b1' given valid draw: {probability_b1_given_valid:.4f}")
        
        if __name__ == "__main__":
            main()

         

        실행 결과 

        Total trials: 10000000
        Valid draws: 10000000
        Invalid draws: 0
        'b1' picked in valid draws: 1623986
        Probability of 'b1' given valid draw: 0.1624

        0
        댓글
      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.08.29 15:18 #comment_46408

        시뮬레이션의 결과 (복원 추출 - 단, 중복시 무효화 Invalid 처리)


        위의 비복원 추출에서 코드 일부 주석처리하여 설정함. 

            # 선택한 항목을 제거
            # del items[first_index]
            # del weights[first_index]

         

        실행 결과

        Total trials: 10000000
        Valid draws: 8960517
        Invalid draws: 1039483
        'b1' picked in valid draws: 1472355
        Probability of 'b1' given valid draw: 0.1643

         

        비복원 추출과 결과가 같을 줄 알았는데...  0.2% 높게 나옴.
        (여러차례 실행해도 같음)

         

        A1~B5 까지 중복시 무효처리가 동일하게 적용되기 때문에 영향이 없을 것으로 예상했지만, 
        실제로는 B1~B5 의 중복 선택 확률이 낮고 A1~A5의 중복 선택 확률이 높기 때문에, 
        B1이 안뽑히는 것 중에서 무효처리 되는 것이 상대적으로 많아짐. 
        즉 구하려는 확률에서 분모값이 작아지는 효과가 나타났고 확률값이 커지는 효과가 0.2% 상승으로 나타난 듯 함.

        0
        댓글
    • 댓글 입력
    • 에디터 전환
    댓글 쓰기 에디터 사용하기 닫기
    • 목록 목록
    • 목록
    2
    by OrangeDay
    • 세상의 모든 계산기 수학, 과학, 공학 이야기
    • allcalc.org
    • 세모계 all rights reserved.