- 세상의 모든 계산기 수학, 과학, 공학 이야기 확률통계 ()
게임에서 가챠 아이템을 뽑을 확률은?
총 10개의 아이템이 있고, 두 부류로 구분 됨.
A형 5종 : 각 12% 의 확률로 선택됨
B형 5종 : 각 8% 의 확률로 선택됨
합계 100%로
10개 상품이 온전히 있을 때 그 중 1개 뽑을 때의 확률을 의미함.
실제로는
아이템 구매시 2개의 아이템이 선택되어 나오고,
동일한 아이템이 한꺼번에 나오지는 않음.
B형 아이템 중 특정한 아이템인 B1이 나올 확률은?
B1을 획득할 확률
= A상품 후 B1을 뽑는 확률 + B1아닌 B상품 후 B1을 뽑는 확률 + B1을 처음에 뽑는 확률
* 동일한 아이템이 선택되지 않도록 순차적으로 뽑는다고 생각하면,
두번째 선택시의 선택확률이 다시 주어져야 하지만 조건으로 주어지지 않았기 때문에
B1을 제외한 나머지의 선택확률은 남은 것들 중의 각각의 비중 비률로 계산함.
댓글2
-
세상의모든계산기
시뮬레이션의 결과 (비복원 - 본문 풀이 논리와 동일)
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 -
세상의모든계산기
시뮬레이션의 결과 (복원 추출 - 단, 중복시 무효화 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% 상승으로 나타난 듯 함.
세상의모든계산기 님의 최근 댓글
[TI-nspire] Error: Domain Error https://allcalc.org/52070 Degree -> Radian 2025 10.07 참고 https://allcalc.org/52065 TI NSPIRE CX CAS 복소수 관련 문제 문의 드립니다. 2025 09.28 Rectangular 설정시 ▶Polar 2025 09.28 Real or Cpmplex Format : Polar 설정시 2025 09.28 비교 AC-68U[ ID] Interval Transfer Bandwidth[ 4] 0.00-10.00 sec 475 MBytes 398 Mbits/sec sender[ 4] 0.00-10.00 sec 475 MBytes 398 Mbits/sec receiver 2025 09.24