이벤트 추첨, 특정 사람만 뽑힐까 확인법

부서 회식 자리를 정하거나 조를 나누고, 이벤트 경품 당첨자를 뽑을 때 랜덤 추첨 프로그램을 쓰다 보면 유독 같은 사람이나 번호가 반복해서 나오는 것 같은 느낌을 받을 때가 있습니다. 이게 프로그램이 특정 값을 봐주는 건지 아니면 그냥 우연이 겹친 건지는 한 번 뽑은 결과만 보고는 판단할 수 없습니다. 여러 번 뽑아 나온 값을 직접 비교하면 눈으로 확인할 수 있습니다.
요약 ① 한 번의 결과만으로는 편향 여부를 알 수 없고, 같은 조건으로 여러 번 반복해 비율을 비교해야 합니다 ② 난수를 정해진 범위로 좁힐 때 생기는 '모듈로 편향'을 처리하지 않으면 특정 값이 미세하게 더 자주 나옵니다 ③ '중복 없이' 옵션은 한 번 뽑을 때 안에서만 겹침을 막을 뿐, 다음번 뽑기에서 같은 사람이 다시 나오는 것과는 별개입니다
추첨 결과가 한쪽으로 쏠리는 것처럼 보이는 이유
팀을 5명씩 나누거나 10명 중 경품 당첨자 1명을 뽑을 때, 몇 번 반복하다 보면 같은 사람이 두 번 연속 나오는 경우가 생깁니다. 이때는 확률을 따지기보다 프로그램이 특정 값을 미리 정해뒀다고 의심하기 쉽습니다.
하지만 뽑을 때마다 조건이 동일하다면 각 항목이 나올 확률도 매번 같습니다. 명단이 10명이면 매번 10분의 1, 숫자 범위가 1~45라면 매번 45분의 1의 확률로 독립적으로 뽑힙니다. 시행 횟수가 적을 때는 이 확률대로 딱 맞아떨어지지 않는 편차가 자연스럽게 생깁니다.
진짜로 확인해야 할 지점은 두 가지입니다. 하나는 시행 횟수를 충분히 늘렸을 때도 편차가 계속되는지고, 다른 하나는 난수를 뽑는 계산 방식 자체에 특정 값이 더 잘 걸리는 구조적 편향이 있는지입니다.
반복해서 뽑아보고 직접 비교하는 방법
가장 확실한 방법은 같은 조건으로 여러 번 반복해서 뽑고 결과를 받아 적는 것입니다. 예를 들어 10명 명단에서 1명씩 30회를 뽑아 이름별로 몇 번 나왔는지 세어봅니다. 완벽하게 3번씩 나오지는 않아도 30회쯤 쌓이면 특정 이름만 5번 이상 나오는지 정도는 눈으로 구분할 수 있습니다.
숫자 범위도 같은 방식입니다. 1~45 범위에서 1개씩 여러 번 뽑아 종이나 엑셀에 빈도표를 적어두면, 시행 횟수가 늘어날수록 각 숫자가 나온 횟수가 비슷한 수준으로 수렴하는지 확인할 수 있습니다.
여기서 헷갈리기 쉬운 지점이 있습니다. '중복 없이' 옵션은 한 번의 뽑기 시행 안에서 같은 사람이나 숫자가 두 번 나오지 않게 막는 기능입니다. 시행을 새로 시작할 때마다 명단 전체를 기준으로 다시 계산하므로, 방금 전 뽑기에서 나온 사람이 다음 뽑기에서 다시 나오는 것은 정상입니다.
저희 도구로 확인하기. 뽑기 버튼을 누를 때마다 암호학적 난수(crypto.getRandomValues)로 새로 계산하고, 결과 복사 버튼으로 매 시행 결과를 바로 옮겨 적을 수 있어 반복 검증이 손으로 세는 것보다 빠릅니다.
무료 · 가입 불필요 · 암호학적 난수로 브라우저에서 바로 추첨

자주 막히는 지점
| 상황 | 확인할 점 |
|---|---|
| 5~10회 정도만 뽑았는데 같은 사람이 겹쳐요 | 시행 횟수가 적을 때는 자연스러운 편차입니다. 30회 이상 반복해 비율을 봐야 판단할 수 있습니다 |
| '중복 없이'를 켰는데 다음 뽑기에서 같은 사람이 또 나와요 | 중복 방지는 한 번의 시행 안에서만 적용됩니다. 새로 뽑을 때마다 전체 명단을 기준으로 다시 계산합니다 |
| 뽑을 개수를 명단 인원보다 많이 입력했어요 | 명단 인원만큼만 뽑고, 부족한 만큼은 자동으로 줄었다는 안내가 함께 표시됩니다 |
| 최소·최대를 반대로 입력했어요 | 도구가 작은 값과 큰 값을 자동으로 정렬해 범위를 계산하므로 결과에는 영향이 없습니다 |
정리
추첨 결과가 한쪽으로 쏠리는 것처럼 보일 때는 몇 번의 인상만으로 판단하지 말고, 같은 조건으로 반복해서 뽑은 뒤 빈도를 세어보면 됩니다. 시행 횟수가 늘어날수록 각 항목이 나온 비율은 이론적인 확률에 가까워져야 합니다.
'중복 없이' 옵션은 한 번의 시행 안에서만 겹침을 막는 기능이라는 점, 그리고 난수 계산 자체가 모듈로 편향을 처리하는지가 진짜 확인 포인트라는 점을 기억해두면 결과를 오해하지 않습니다.
무료 · 가입 불필요 · 암호학적 난수로 브라우저에서 바로 추첨
자주 묻는 질문
crypto.getRandomValues는 Math.random과 무엇이 다른가요
Math.random()은 자바스크립트 엔진이 통계적 분산을 목적으로 만든 의사난수로, 시드 값이나 생성 알고리즘이 예측 불가능함을 보장하지 않습니다. crypto.getRandomValues()는 운영체제가 제공하는 암호학적으로 안전한 난수 생성기를 사용해 특정 값이 더 잘 나오도록 예측하기 어렵게 만듭니다.
'중복 없이' 옵션을 켜면 정확히 어떻게 뽑히나요
전체 대상을 무작위로 섞은 뒤 앞에서부터 필요한 개수만큼 잘라내는 방식으로 뽑습니다. 이 방식에서는 같은 시행 안에서 이미 뽑힌 값이 다시 나올 수 없고, 대상 전체가 한 번씩 골고루 섞이는 것이 보장됩니다.
입력한 이름 목록이나 숫자 범위가 서버에 저장되나요
아니요. 명단 입력부터 난수 추첨, 결과 표시까지 전 과정이 브라우저 안에서만 처리되고 서버로 전송되지 않습니다. 페이지를 새로고침하면 입력한 내용과 추첨 기록도 함께 사라집니다.
