WTHeat Blog

WTHeat이 메뉴를 뽑는 방식과 편향을 줄이는 확인법

2026-06-08 · 수정 2026-07-22 · 7분 읽기

선택 후보만 섞고 crypto.getRandomValues를 사용하는 현재 추천 로직과, 데이터 편향을 확인하는 방법을 정리했습니다.

전체 102개에서 바로 고르지 않습니다

WTHeat은 사용자가 선택한 후보 ID만 불러와 그 목록 안에서 하나를 고릅니다. 카테고리와 검색은 후보를 보여주는 장치이고, 최종 추천에 들어가는 것은 체크한 메뉴뿐입니다. 그래서 후보를 고르지 않은 상태에서 무작위 메뉴를 던지는 서비스와 결과가 다릅니다.

후보가 하나면 이미 결정한 것으로 보고 추천을 실행하지 않습니다. 두 개 이상일 때만 마지막 비교를 넘겨받습니다. 이 제약이 있어야 랜덤 버튼을 계속 누르는 화면이 아니라 후보를 정리하는 도구가 됩니다.

가능하면 브라우저의 난수 값을 씁니다

현재 random.ts는 브라우저에서 crypto.getRandomValues를 사용할 수 있으면 Uint32Array 값을 받아 후보 인덱스를 정합니다. 사용할 수 없는 환경에서는 Math.random으로 돌아갑니다. 메뉴 추천에 보안 수준 난수가 필요한 것은 아니지만 브라우저가 제공하는 값을 우선 사용하도록 만들었습니다.

추천 결과에는 사용자 프로필, 클릭 기록, 광고 상품 우선순위가 들어가지 않습니다. 같은 후보라면 각 메뉴가 선택될 기회는 동일하게 두는 것이 현재 기준입니다.

랜덤이어도 후보 데이터는 편향될 수 있습니다

한식 후보를 20개, 일식 후보를 2개 선택하면 한식이 더 자주 나오는 게 정상입니다. 알고리즘이 공정해도 사용자가 만든 후보 수가 다르기 때문입니다. 카테고리별로 비슷한 기회를 주고 싶다면 각 카테고리에서 같은 수만큼 후보를 남겨야 합니다.

메뉴 데이터 자체도 한식 30개, 기타 6개로 수가 다릅니다. 전체 선택을 켠 채 추천하면 데이터가 많은 카테고리가 더 자주 나옵니다. 그래서 WTHeat은 전체 자동 선택보다 사용자가 후보를 직접 고르는 흐름을 앞에 둡니다.

결과를 확인하는 간단한 방법

후보 두 개만 남기고 여러 번 뽑았을 때 한 메뉴만 계속 나온다면 선택 상태와 난수 인덱스 계산을 확인합니다. 후보를 추가하거나 지운 뒤 저장된 ID 목록이 실제 화면과 같은지도 봅니다. 잘못된 ID는 데이터 검증과 로딩 단계에서 걸러야 합니다.

추천의 품질은 랜덤 함수 하나로 결정되지 않습니다. 중복 없는 데이터, 상황에 맞는 후보, 결과를 받아들이는 규칙까지 같이 있어야 실제 결정 시간이 줄어듭니다.