// chikrii_algorithm_strategic_labprovided as internal research — read-only
root@chikrii-lab:~/chikrii-lab/algorithm-decoding/decision-calculus.md

소프트웨어가 확률을 계산할 때 사람이 놓치는 네 가지 함정

검사 정확도 99%인데 실제 확률은 33%라는 계산

직접 겪어보면 안다. 데이터 기반으로 무언가를 판단하는 시스템을 설계할 때, 사람 머리로 “이 정도면 맞겠지”라고 넘긴 부분에서 소프트웨어가 전혀 다른 답을 내놓는 순간이 온다. 그 괴리의 대부분은 수학이 틀린 게 아니라 사람의 직관이 틀린 데서 온다.

단적인 예를 하나 들겠다. 인구 1,000명 중 5명이 걸리는 질병이 있다. 이 병을 잡아내는 검사의 정확도는 99%다. 검사를 받았더니 양성이 나왔다. 실제로 병에 걸렸을 확률은? 직감적으로 99%라고 답하는 사람이 대부분이다. 실제 답은 대략 33%다.

베이즈 정리로 풀면 이렇다. 감염 확률 0.005, 양성 판정 정확도 0.99, 거짓 양성률 0.01일 때 P(감염|양성) = (0.99 × 0.005) / ((0.99 × 0.005) + (0.01 × 0.995))로 약 0.332가 나온다. 핵심은 기저율, 즉 애초에 그 병에 걸린 사람이 전체의 0.5%뿐이라는 사실을 계산에 넣느냐 빼느냐다. 소프트웨어는 이 숫자를 빠뜨리지 않는다. 코드에 들어간 변수는 계산에서 빠질 수가 없으니까. 사람은 빠뜨린다. 눈앞의 “99%”라는 인상적인 숫자에 잡혀서 배경 확률을 무시한다.

카너먼과 트버스키가 1973년에 이걸 실험으로 보여줬다. 기저율 무시(Base Rate Neglect)라는 이름이 붙었고, 이후 수십 년간 의료 진단부터 사기 탐지 시스템까지 같은 패턴이 반복 관찰됐다. 사람이 직접 판단하는 시스템은 이 함정에 특히 약하다.

연속으로 졌으니까 다음엔 이길 거라는 착각

동전을 10번 던졌는데 8번 앞면이 나왔다. 다음엔 뒷면이 나올 것 같은 느낌이 든다면, 그게 바로 도박사의 오류다. 큰 수의 법칙은 시행 횟수가 수천, 수만 번으로 늘어날 때 평균이 기댓값 근처로 수렴한다는 이야기이지, 직전 결과가 다음 결과를 반대 방향으로 잡아당긴다는 뜻이 아니다.

소프트웨어 안에서 난수 생성기가 돌아갈 때, 각 시행은 이전 시행과 독립이다. 시드값과 알고리즘이 동일하면 동일한 시퀀스가 나오지만, 그 시퀀스 안에서 이전 출력이 다음 출력의 확률 분포를 바꾸지는 않는다. 몬테카를로 시뮬레이션이 수렴하는 과정을 실제로 돌려보면 이 점이 분명해진다. 초반 수백 회에서는 분포가 들쑥날쑥한데, 시행 횟수가 쌓이면서 이론값에 가까워진다. 하지만 중간에 “앞면이 7번 연속 나온 뒤 뒷면으로 보정되는” 구간 같은 건 없다.

사람 뇌가 이걸 받아들이기 어려운 이유가 있다. 전두엽은 시퀀스에서 패턴을 뽑아내도록 진화했다. 초원에서 포식자 행동을 예측하는 데는 유용한 능력인데, 독립 사건의 나열을 해석하는 데는 오히려 방해가 된다. 스탠퍼드 인지과학 백과에서도 이 주제가 꽤 비중 있게 다뤄진다. 무작위 시퀀스를 보여주고 “패턴이 있느냐”고 물으면, 사람 대다수가 없는 패턴을 찾아낸다.

부분에서 A가 이기는데 전체에서는 B가 이기는 현상

치료법 A와 B가 있다. 남성 환자 그룹에서 A의 회복률이 높다. 여성 환자 그룹에서도 A가 높다. 그런데 남녀를 합치면 B가 높다. 처음 들으면 말이 안 되는 것 같은데, 수학적으로 완전히 가능한 상황이다.

심슨의 역설이라고 불리는 이 현상은 하위 그룹의 크기가 다를 때 생긴다. 1973년 UC 버클리 입학 데이터가 유명한 사례다. 학과별로 보면 여성 합격률이 남성과 비슷하거나 오히려 높았는데, 여성 지원자가 경쟁률 높은 학과에 몰리는 바람에 전체 합격률에서는 여성이 낮게 나왔다. 데이터를 한 덩어리로 뭉쳐서 보면 엉뚱한 결론이 나오는 전형적 사례다.

소프트웨어가 이 역설을 자동으로 피하는 건 아니다. 다만 설계 단계에서 데이터를 세그먼트별로 쪼개는 파이프라인을 짜넣을 수 있다는 게 차이점이다. 노이즈와 시그널을 분리하는 정규화 파이프라인의 원리가 여기에도 그대로 적용된다. 사람은 요약 테이블 하나를 보고 판단을 내리지만, 소프트웨어는 요약 이전 단계의 원시 데이터를 레이어별로 쪼개서 교란 변수가 결과를 뒤집고 있는지 검사할 수 있다.

A/B 테스트에서 이 함정을 밟는 경우

실무에서 자주 보는 상황이다. 모바일과 데스크톱 트래픽을 분리하지 않고 전환율을 집계하면, 트래픽 비율 차이 때문에 세그먼트별로는 A안이 이기는데 전체에서는 B안이 이기는 결과가 나올 수 있다. 구글 옵티마이즈를 쓰던 시절이든 지금의 자체 실험 플랫폼이든, 세그멘테이션 없이 숫자만 합산하면 잘못된 의사결정으로 이어진다. 데이터 팀이 세그먼트를 쪼개는 데 집착하는 이유가 정확히 이것이다.

새 증거가 와도 믿음을 안 바꾸는 사람, 매번 바꾸는 기계

베이즈 추론의 뼈대는 간단하다. 새 증거가 들어올 때마다 기존 확률을 갱신해서 사후 확률을 다시 계산한다. 스팸 필터를 예로 들면, 이메일 한 통이 들어오면 단어 하나하나를 증거로 잡아서 “이 메일이 스팸일 확률”을 실시간으로 업데이트한다. 특징 변수가 50개면 50번 갱신이 일어난다.

사람한테는 이 과정이 어렵다. 한 번 “이건 이렇다”라고 믿으면 그 믿음을 지지하는 증거에는 무게를 싣고, 반대 증거는 깎아내리는 경향이 있다. 확증 편향이라고 부르는 현상인데, 전문가라고 예외가 아니다. 필립 테틀록이 정치 분석가 284명을 20년 가까이 추적한 연구 결과, 전문가 예측의 적중률이 단순 통계 모델보다 나을 게 없었다. 경력이 길수록 자기 프레임에 갇혀서 새 데이터로 판단을 수정하는 속도가 오히려 느려졌다.

NIST의 AI 리스크 관리 프레임워크에서 알고리즘 의사결정의 감사 가능성(Auditability)을 강조하는 맥락도 여기에 닿아 있다. 기계가 확률을 갱신하는 과정은 로그로 남길 수 있고, 어느 시점에서 어떤 증거가 결론을 얼마나 바꿨는지 추적이 된다. 사람 머릿속에서 일어나는 판단 과정은 그런 추적이 불가능하다.

직관이 무너지는 지점을 아는 것이 설계의 시작점이다

소프트웨어가 사람보다 낫다는 이야기가 아니다. 잘못된 데이터가 들어가면 잘못된 답이 나오고, 어떤 변수를 모델에 넣을지를 결정하는 건 결국 사람이다. 다만 조건부 확률 계산이나 교란 변수 탐지, 반복적 확률 갱신처럼 사람의 인지 구조가 체계적으로 미끄러지는 영역은 코드에 맡기는 편이 합리적이다.

문제 정의, 변수 선택, 윤리적 경계선 설정은 사람이 해야 한다. 계산과 갱신은 기계가 해야 한다. 이 분업이 제대로 작동하려면, 먼저 자기 직관이 어디에서 틀리는지를 정확히 파악하는 과정이 필요하다. 위에서 다룬 네 가지 사각지대는 그 파악의 출발점이다.

확률 분석과 데이터 흐름을 연상시키는 추상 이미지