Quiz / 확률과 통계 / 전체 문항
GitHub

확률과 통계 전체 문항

확률론, 추정, 검정, 베이지안. 문항과 선택지별 해설을 글 순서대로 나열했습니다.

108문항 · 글 18
직접 풀어보기 →

확률의 기초: 표본공간, 사건, 확률 공리부터 셈 원리까지

원문 읽기 →
개념 확인구조
실험 트래픽을 나누려고 사용자 12명을 버킷 A에 5명, B에 4명, C에 3명으로 배정한다. 같은 버킷 안에서는 누가 먼저 들어갔는지 구분하지 않는다.

가능한 배정은 몇 가지인가?

  1. 479,001,600가지다. 12명을 한 줄로 세운 뒤 앞에서부터 5명, 4명, 3명씩 끊는다.

    12!은 줄 세우는 방법의 수라서 같은 버킷 안의 순서까지 다른 경우로 센다. A에 들어간 5명의 순서를 바꿔도 배정 결과는 똑같으므로 그 5!가지가 전부 중복이다. 세 버킷에서 5! × 4! × 3! = 17,280번씩 겹친다.

  2. 정답27,720가지다. 12!을 각 버킷 안의 순서인 5!, 4!, 3!으로 나눈다.

    그룹 크기가 정해진 상태로 나누는 경우의 수가 다항 계수이고, 12!/(5!4!3!) = 27,720이다. 버킷을 하나씩 떼어내며 C(12,5) × C(7,4) × C(3,3) = 792 × 35 × 1로 세도 같은 값이 나온다. 조합을 여러 그룹으로 확장한 것이 다항 계수다.

  3. 531,441가지다. 사용자마다 세 버킷 중 하나를 고르므로 3의 12제곱이다.

    3^12은 버킷 크기에 제약이 없을 때의 계산이다. 12명이 전부 A로 몰리는 배정까지 포함하므로 5명, 4명, 3명이라는 조건을 무시한 셈이다. 크기가 고정되어 있는지 아닌지가 다항 계수와 이 계산을 가른다.

  4. 1,320가지다. 12명 중 세 명을 뽑아 각 버킷의 대표로 세우는 순열이다.

    P(12,3) = 1,320은 사람 셋을 서로 다른 자리에 앉히는 문제의 답이다. 여기서는 12명 전원이 어느 버킷에든 들어가야 하므로 세는 대상 자체가 다르다.

해설

셈 원리를 고를 때 던지는 질문은 하나다. 순서가 결과를 바꾸는가. 바꾸면 순열, 바꾸지 않으면 조합, 정해진 크기의 여러 그룹으로 쪼개면 다항 계수다. 다항 계수는 조합을 그룹 여러 개로 확장한 것이라, 12!에서 각 그룹 안의 순서를 나눠 없애는 방식과 조합을 차례로 곱하는 방식이 같은 값을 준다. 여기서 갈림길은 그룹 크기가 고정되어 있느냐다. 각자 자유롭게 버킷을 고르는 문제였다면 3^12이 답이고, 이 둘을 헷갈리면 자릿수가 통째로 어긋난다.

이 내용 다시 읽기 →
상황 적용구조

콜모고로프의 세 공리에는 확률이 1을 넘지 못한다는 조항이 없다. 그런데도 P(A) ≤ 1이 항상 성립하는 근거는 무엇인가?

  1. 고전적 정의 P(A) = |A|/|Ω|에서 분자가 분모보다 클 수 없기 때문이다.

    고전적 정의는 결과가 유한하고 모두 동등하게 가능할 때만 쓸 수 있다. 공리계는 그런 제약 없이 세워졌고 다트판 위의 점처럼 결과가 무한한 실험에도 적용된다. 특수한 경우의 정의로 일반 공리의 성질을 떠받칠 수는 없다.

  2. 공리 3이 요구하는 무한급수의 수렴 조건 때문에 합이 발산할 수 없어서다.

    수렴한다는 것과 1 이하라는 것은 다른 이야기다. 공리 3은 배반인 사건들의 확률을 더해도 된다고 허락할 뿐 그 합에 상한을 두지 않는다. 상한은 공리 2가 P(Ω) = 1로 못박은 데서 온다.

  3. 정답A와 Aᶜ의 확률을 공리 3으로 더하면 1이고, 공리 1이 P(Aᶜ)를 음수로 두지 않는다.

    A와 Aᶜ는 배반이고 합치면 Ω이므로 공리 3과 공리 2에서 P(A) + P(Aᶜ) = 1이 나온다. 여기에 공리 1의 P(Aᶜ) ≥ 0을 넣으면 P(A) ≤ 1이 따라 나온다. 세 줄짜리 공리에서 나머지가 전부 파생된다는 것이 이 체계의 요점이다.

  4. 네 번째 공리로 따로 규정되어 있고, 위 세 가지는 그중 자주 쓰는 것만 추린 것이다.

    콜모고로프의 공리는 비음성, 정규성, 가산 가법성 세 개가 전부다. 여사건 공식, 포함배제 원리, 단조성은 모두 정리이지 공리가 아니다. 무엇이 가정이고 무엇이 결과인지 섞이면 증명의 방향을 잃는다.

해설

공리와 정리를 구분하는 것이 이 절의 요점이다. 콜모고로프는 확률을 이런 성질을 만족하는 함수라고 정의했고, 그 성질은 비음성, P(Ω) = 1, 배반사건의 가산 가법성 세 개뿐이다. 여사건 공식, 포함배제 원리, 단조성, P(A) ≤ 1까지 전부 여기서 유도된다. 이 구조가 값진 이유는 확률이 무엇인지(공리)와 확률을 어떻게 구하는지(고전적, 빈도론적, 주관적)를 떼어놓기 때문이다. 해석이 무엇이든 세 공리만 지키면 같은 수학을 쓰게 되고, 그래서 빈도주의와 베이지안이 철학에서는 갈려도 계산 규칙에서는 다투지 않는다.

이 내용 다시 읽기 →
상황 적용판단
지난 분기 배포 기록을 집계했다. 빌드가 실패한 배포가 전체의 18%, 성능 회귀가 잡힌 배포가 12%, 둘 중 적어도 하나가 있었던 배포가 25%다.

빌드 실패와 성능 회귀가 함께 일어난 배포의 비율은 얼마인가?

  1. 정답5%다. 0.18 + 0.12에서 합사건 0.25를 빼면 겹친 부분만 남는다.

    포함배제 원리 P(A∪B) = P(A) + P(B) - P(A∩B)를 교집합에 대해 풀면 된다. 0.18 + 0.12 - 0.25 = 0.05이므로 배포 100건당 5건에서 두 문제가 함께 났다. 네 값 중 셋을 알면 나머지 하나가 정해진다.

  2. 2.16%다. 두 사건의 확률을 곱한다.

    0.18 × 0.12는 두 사건이 독립일 때만 성립하는 계산이다. 실제 교집합 0.05는 이 값의 두 배가 넘으므로 독립 가정이 깨져 있고, 빌드가 흔들린 배포에서 성능 회귀도 더 자주 났다는 뜻이다. 독립은 가정이지 기본값이 아니다.

  3. 7%다. 합사건 0.25에서 더 큰 쪽인 0.18을 뺀다.

    0.25 - 0.18 = 0.07은 빌드 실패 없이 성능 회귀만 난 배포의 비율이다. 교집합이 아니라 B에서 A를 뺀 차집합이므로 묻는 대상이 다르다.

  4. 30%다. 두 비율을 그대로 더한다.

    0.18 + 0.12 = 0.30은 겹치는 배포를 두 번 센 값이고, 실제 합사건 0.25보다 크다. 그 차이 0.05가 바로 중복해서 센 교집합이다.

해설

포함배제 원리는 한 방향으로만 쓰는 공식이 아니다. P(A), P(B), P(A∩B), P(A∪B) 네 값 중 셋을 알면 나머지 하나가 결정되므로 여기서는 교집합을 역산했다. 얻은 0.05를 P(A)P(B) = 0.0216과 견주면 정보가 하나 더 나온다. 두 값이 다르므로 빌드 실패와 성능 회귀는 독립이 아니고, 실제로는 독립 가정보다 두 배 넘게 함께 발생한다. 여기서 곧장 나오는 실무적 판단이 있다. 두 지표를 따로 모니터링하면 같은 뿌리에서 나온 사고를 두 건으로 세게 된다.

이 내용 다시 읽기 →
상황 적용함정
배포 파이프라인은 단계 5개로 이뤄져 있고 각 단계가 실패할 확률은 8%다. 단계들의 실패는 서로 독립이다.

릴리스 하나가 적어도 한 단계에서 실패할 확률은 얼마인가?

  1. 40%다. 단계마다 8%이므로 다섯 번 더한다.

    확률을 그냥 더하는 것은 사건들이 배반일 때만 성립한다. 두 단계가 동시에 실패할 수 있으므로 배반이 아니고, 그 경우가 중복해서 세어진다. 단계가 열세 개면 이 계산이 1을 넘어버리는 것에서 방식 자체가 틀렸음이 드러난다.

  2. 정답약 34%다. 다섯 단계가 모두 성공할 확률을 1에서 뺀다.

    적어도 하나의 여사건은 하나도 없음이고, 다섯 단계가 모두 성공할 확률은 0.92^5 = 0.6591이다. 1에서 빼면 0.3409다. 정확히 한 단계, 두 단계, 세 단계 실패하는 경우를 따로 세어 더하는 계산보다 훨씬 짧다.

  3. 8%다. 단계마다 실패율이 같으므로 파이프라인 전체의 실패율도 같다.

    단계 하나의 실패율과 파이프라인 전체의 실패율은 다른 값이다. 관문이 늘어날수록 통과하지 못할 기회가 늘어나므로 전체 실패율은 반드시 8%보다 커진다.

  4. 약 0.0003%다. 실패 확률 0.08을 다섯 번 곱한다.

    0.08^5은 다섯 단계가 전부 실패할 확률이다. 적어도 하나가 아니라 전부에 해당하므로 묻는 사건이 다르고, 그래서 값도 다섯 자릿수만큼 작다.

해설

적어도 하나가 들어간 문제는 반대편을 세는 쪽이 거의 항상 짧다. 정확히 1개, 2개, 3개인 경우를 다 더하면 항이 다섯 개지만 하나도 없을 확률은 곱셈 한 번이면 끝난다. 이 계산이 알려주는 실무적 사실도 있다. 단계 하나의 성공률이 92%로 나쁘지 않아 보여도 다섯 번 곱하면 66%까지 떨어진다. 마이크로서비스나 다단계 파이프라인처럼 직렬로 연결된 구성 요소가 많은 시스템에서 개별 가용성이 아니라 곱한 값을 봐야 하는 이유가 이것이다.

이 내용 다시 읽기 →
분석과 판단적용
단축 링크 서비스의 ID를 무작위 64비트 정수로 뽑기로 했다. 이미 쓰인 값이 나오면 다시 뽑는다. 팀에서는 2^64가 1,800경이 넘으니 수십억 건까지는 충돌을 신경 쓸 필요가 없다고 본다.

충돌이 일어날 확률이 50%를 넘는 지점은 대략 어디인가?

  1. 정답2^32, 약 43억 건 근처다.

    생일 문제와 구조가 같아서 기준선이 공간 크기가 아니라 그 제곱근에 놓인다. n개를 뽑으면 비교되는 쌍이 n(n-1)/2개로 제곱에 비례해 늘고, 이 쌍의 수가 2^64에 가까워질 때 충돌이 절반을 넘는다. 팀이 안전하다고 본 수십억 건이 바로 그 지점이다.

  2. 2^63, 약 920경 건 근처다.

    공간의 절반을 채워야 충돌이 시작된다는 직관인데, 이 시점이면 충돌 확률은 이미 사실상 1이다. 비둘기집 원리로 공간을 다 채우기 전에 충돌이 확정되는 지점과, 확률이 절반을 넘는 지점은 완전히 다른 자리에 있다.

  3. 2^64의 1%인 약 18경 건 근처다.

    충돌 확률이 채운 비율에 비례한다는 가정인데 실제로는 뽑은 개수의 제곱에 비례해 오른다. 비례 관계를 잘못 잡으면 기준선이 여덟 자릿수 가까이 어긋난다.

  4. 건수와 무관하다. 새로 뽑는 값이 기존 값과 겹칠 확률은 늘 1/2^64다.

    1/2^64는 특정한 값 하나와 겹칠 확률이다. 이미 n개가 저장되어 있으면 비교 대상이 n개이므로 새 값이 걸릴 확률은 n/2^64이고, n이 커질수록 함께 커진다.

해설

충돌을 걱정해야 하는 지점은 공간 크기 N이 아니라 대략 √N이다. 365일에 23명, 2^64 공간에 2^32건이 같은 계산이고, 두 경우 모두 쌍의 개수가 제곱으로 늘어나는 것이 원인이다. 암호학에서 해시의 안전 강도를 출력 길이의 절반으로 잡는 근거도 이것이라 128비트 해시의 충돌 저항은 64비트급으로 평가된다. 실무에서는 ID 공간을 정할 때 전체 개수가 아니라 그 제곱근을 예상 발행량과 견주면 된다. 하루 1억 건을 발행할 계획이라면 64비트로는 부족하고 128비트로 올려야 한다는 판단이 여기서 나온다.

이 내용 다시 읽기 →
분석과 판단함정
신약 후보 물질 하나가 임상 3상을 통과할지 논의하는 자리다. 한 사람이 통과하거나 못 하거나 둘 중 하나이므로 확률은 50%라고 말한다.

이 주장의 문제를 가장 정확히 짚은 것은 무엇인가?

  1. 정답고전적 정의는 결과가 동등하게 가능할 때만 쓸 수 있는데 여기에는 그 대칭성이 없다.

    주사위 여섯 면에 각각 1/6을 주는 근거는 면이 여섯 개라서가 아니라 모양이 대칭이라서다. 임상 통과와 실패에는 그런 대칭성을 보장할 근거가 없다. 표본공간의 크기를 확률로 곧장 옮긴 것이 이 주장의 오류다.

  2. 이 사건은 반복할 수 없으므로 애초에 확률을 정의할 수 없다.

    반복 불가능성은 빈도론적 정의를 막을 뿐이다. 주관적 확률은 반복할 수 없는 사건에도 믿음의 정도로 값을 주고, 유사 후보의 과거 통과율을 근거로 삼는 방식이 그 예다. 확률 자체가 정의되지 않는 것은 아니다.

  3. 결과가 두 개뿐인 표본공간은 콜모고로프 공리를 만족하지 못한다.

    동전 던지기도 결과가 둘이고 공리를 문제없이 만족한다. 공리는 확률값이 지켜야 할 성질만 규정하지 표본공간의 크기를 따지지 않는다.

  4. 50%라는 값에는 신뢰구간이 붙지 않아 불확실성을 표현하지 못한다.

    구간이 없다는 것은 표현의 부족이지 값이 틀린 이유가 아니다. 문제는 50%라는 점추정 자체가 데이터도 대칭성도 아닌, 결과가 두 개라는 사실 하나에서 나왔다는 데 있다.

해설

고전적 정의 P(A) = |A|/|Ω|는 대칭성이라는 물리적 근거 위에서만 성립한다. 결과가 두 개라는 사실만으로 각각 1/2을 주는 것은 표본공간의 크기를 확률로 착각한 것이고, 이 오류는 이진 결과가 등장하는 자리마다 반복된다. 그렇다고 반복 불가능한 사건에 확률을 못 매기는 것도 아니다. 빈도론적 정의는 반복 실험을 전제하므로 임상 3상 하나에는 쓸 수 없지만, 주관적 확률은 유사 후보의 과거 통과율이나 전문가 판단을 근거로 값을 준다. 세 관점은 서로 경쟁하는 것이 아니라 적용 조건이 다른 도구이고, 어느 조건도 만족하지 못하는 자리에서 숫자를 만들어내는 것이 문제다.

이 내용 다시 읽기 →

조건부 확률과 베이즈 정리: 사전 정보를 업데이트하는 방법

원문 읽기 →
개념 확인구조

P(A) = 0.3, P(B) = 0.4이고 두 사건은 배반이다. A와 B는 독립인가?

  1. 독립이다. 겹치는 부분이 없으니 한쪽이 다른 쪽 확률을 건드릴 수 없다.

    겹치지 않는다는 것은 영향이 없다는 뜻이 아니라 가장 강한 영향이 있다는 뜻이다. A가 일어났다는 사실 하나로 B의 확률이 0.4에서 0으로 떨어지므로 영향이 최대다.

  2. 정답독립이 아니다. A가 일어나면 B는 일어날 수 없어 P(B|A) = 0이 된다.

    독립의 정의는 P(B|A) = P(B)인데 여기서는 0과 0.4로 다르다. 곱셈 쪽으로 봐도 P(A∩B) = 0이지만 P(A)P(B) = 0.12라 등식이 깨진다. 두 확률이 모두 0보다 큰 배반 사건은 결코 독립이 될 수 없다.

  3. 주어진 값만으로는 P(A∩B)를 알 수 없어 판정할 수 없다.

    배반이라는 조건이 곧 P(A∩B) = 0이라는 뜻이다. 판정에 필요한 값은 이미 전부 주어져 있다.

  4. P(A) + P(B) = 0.7로 1보다 작으므로 독립이다.

    합이 1 이하인 것은 배반 사건이 두 개일 때 당연히 성립하는 성질일 뿐 독립과 아무 관계가 없다. 독립 판정에 쓰는 값은 합이 아니라 곱이다.

해설

배반과 독립은 이름이 비슷해 자주 섞이지만 가리키는 방향이 정반대다. 배반은 한쪽이 일어나면 다른 쪽이 절대 일어나지 못한다는 뜻이라 가능한 가장 강한 종속 관계다. 독립은 한쪽의 발생 여부가 다른 쪽 확률을 전혀 건드리지 않는다는 뜻이다. 이 혼동은 실무에서 곱셈 공식을 아무 데나 적용하는 형태로 나타난다. 두 사건이 동시에 일어날 수 없다는 말을 듣고 확률을 곱해도 된다고 판단하면 계산이 통째로 어긋난다. 배반이면 더하고 독립이면 곱한다고 외워두면 적어도 연산은 뒤집히지 않는다.

이 내용 다시 읽기 →
상황 적용연결 문항판단
계정 탈취 탐지 모델을 계정 10만 개에 돌렸다. 이 가운데 실제로 탈취된 계정은 200개다. 모델은 탈취된 계정의 95%를 잡아내고, 정상 계정의 2%를 탈취로 잘못 표시한다.

모델이 탈취로 표시한 계정 하나를 골랐을 때 그것이 진짜로 탈취되었을 확률은 얼마인가?

  1. 95%다. 탈취 계정의 95%를 잡아내는 성능이 그대로 신뢰도가 된다.

    95%는 실제로 탈취되었다는 조건 아래에서 표시될 확률이다. 우리가 알고 싶은 것은 표시되었다는 조건 아래에서 실제로 탈취되었을 확률이라 조건과 결과가 뒤집혀 있다. 이 둘을 잇는 다리가 베이즈 정리다.

  2. 98%다. 정상 계정을 잘못 표시하는 비율 2%를 1에서 뺀 값이다.

    그 값은 특이도이고, 정상 계정이 조용히 넘어갈 확률이다. 표시된 계정의 구성과는 다른 질문에 대한 답이다.

  3. 정답약 8.7%다. 표시된 2,186건 가운데 진짜 탈취는 190건이다.

    탈취 200건 중 190건이 잡히고, 정상 99,800건 중 2%인 1,996건이 오탐으로 표시된다. 합쳐서 2,186건이 표시되고 그중 진짜는 190건이라 190/2,186 = 0.0869다. 정상 계정이 압도적으로 많아 낮은 오탐률도 큰 절대 건수를 만든다.

  4. 0.2%다. 탐지 결과와 무관하게 원래 비율이 그대로 유지된다.

    모델이 아무 정보도 주지 않을 때만 사전확률이 그대로 남는다. 여기서는 8.7%로 40배 넘게 올라갔으므로 탐지에 정보가 분명히 들어 있다. 다만 그 정보가 확신을 주기에는 모자랄 뿐이다.

해설

검사 성능과 검사 결과의 신뢰도는 다른 값이다. 민감도 95%는 탈취된 계정을 놓치지 않는 비율이고, 운영자가 알고 싶은 것은 표시된 계정이 진짜일 비율이라 조건의 앞뒤가 뒤집혀 있다. 이 둘을 잇는 것이 베이즈 정리이고 그 사이에 기저율이 들어간다. 정상 계정이 탈취 계정의 499배나 되므로 오탐률이 2%로 낮아도 절대 건수에서는 오탐이 정탐의 열 배를 넘는다. 탐지 모델을 평가할 때 정확도나 재현율만 보고 운영 부담을 예측할 수 없는 이유가 이것이고, 희귀 사건을 다루는 알림은 거의 예외 없이 이 벽에 부딪힌다.

이 내용 다시 읽기 →
분석과 판단연결 문항진단
하루 뒤 같은 모델을 다시 돌렸더니 그 계정이 또 표시됐다. 1차 사후확률 8.7%를 사전확률로 넣어 다시 계산하니 약 82%가 나왔다.

이 순차 업데이트가 딛고 선 가정 가운데 실무에서 가장 잘 깨지는 것은 무엇인가?

  1. 정답탈취 여부가 주어졌을 때 두 실행이 조건부 독립이라는 가정이다.

    같은 모델은 같은 입력 특징을 보고 같은 판단을 내리므로, 어제 오탐을 낸 정상 계정은 오늘도 오탐이 날 가능성이 높다. 두 번째 양성이 첫 번째와 무관한 새 증거라는 전제가 무너지면 실제 사후확률은 82%보다 낮다. 반복 검사는 확신을 실제보다 빠르게 부풀린다.

  2. 하루 사이에 기저율이 달라지지 않았다는 가정이다.

    탈취 비율이 하루 만에 크게 움직이는 일은 드물고, 움직였더라도 1차 사후확률을 사전확률로 쓰는 순간 그 값은 이미 이 계정 하나에 대한 믿음으로 바뀌어 있다. 모집단 기저율은 2차 계산에 직접 들어가지 않는다.

  3. 민감도와 특이도가 두 실행에서 같다는 가정이다.

    모델을 재배포하지 않았다면 이 값은 그대로다. 성능 지표가 흔들리는 것보다 두 판단이 서로 얽혀 있는 쪽이 훨씬 흔하고 영향도 크다.

  4. 베이즈 정리는 사후확률을 다시 사전확률로 쓰는 것을 허용하지 않는다는 점이다.

    조건부 독립만 성립하면 순차 업데이트는 두 관측을 한 번에 넣은 계산과 정확히 같은 값을 준다. 절차 자체가 금지된 것이 아니라 그 절차가 기대는 가정이 문제다.

해설

베이즈 업데이트를 이어 붙일 수 있는 근거는 상태가 주어졌을 때 두 관측이 조건부 독립이라는 가정이다. 이 가정이 있어야 1차 사후확률을 2차 사전확률로 그대로 넘길 수 있고, 없으면 두 관측의 결합 우도를 따로 모델링해야 한다. 문제는 같은 검사를 반복하는 경우 이 가정이 거의 항상 깨진다는 데 있다. 오탐이 무작위 잡음에서 오는 것이 아니라 그 계정의 고유한 특징에서 오기 때문이다. 확신을 정직하게 높이려면 같은 검사를 두 번 돌릴 것이 아니라 서로 다른 근거를 보는 검사를 붙여야 한다. 의료에서 확진에 다른 원리의 검사를 쓰는 이유도 같다.

이 내용 다시 읽기 →
분석과 판단확장함정
Monty Hall 게임에서 참가자가 1번 문을 골랐다. 그런데 이번 진행자는 자동차 위치를 모른 채 남은 두 문 중 하나를 무작위로 열었고, 마침 3번 문에서 염소가 나왔다.

이 상황에서 2번 문으로 바꾸면 유리한가?

  1. 정답유리하지 않다. 1번과 2번이 각각 1/2로 같아진다.

    자동차가 1번에 있든 2번에 있든 무작위로 연 3번 문에서 염소가 나올 확률이 똑같이 1/2이다. 우도가 같으면 관측이 두 가설을 구분하지 못하므로 사후확률이 사전확률의 비인 1:1을 그대로 유지한다. 계산하면 (1/2 × 1/3) / (1/3) = 1/2이다.

  2. 여전히 바꾸는 쪽이 2/3으로 유리하다. 결과가 같으니 계산도 같다.

    열린 문 뒤에 염소가 있었다는 결과는 같아도 그 결과가 만들어진 과정이 다르다. 원래 규칙에서 P(3번을 엶 | 자동차가 2번) = 1이었던 자리가 여기서는 1/2로 내려가고, 그 차이가 사후확률을 통째로 바꾼다.

  3. 유지하는 쪽이 2/3으로 유리해진다. 염소가 나온 것은 처음 선택이 맞았다는 증거다.

    처음 선택이 맞았을 때와 틀렸을 때 모두 염소가 나올 확률이 1/2로 같으므로 어느 쪽 증거도 되지 못한다. 관측이 한쪽 가설에서 더 흔해야 그쪽으로 믿음이 기운다.

  4. 진행자가 자동차 위치를 몰랐으므로 확률을 계산할 근거 자체가 없다.

    진행자가 무엇을 아는지는 우도를 정하는 재료이지 계산을 막는 조건이 아니다. 무작위로 연다는 규칙이 명시되어 있으므로 우도는 1/2로 확정된다.

해설

이 문제의 답을 가르는 것은 열린 문 뒤에 무엇이 있었는지가 아니라 진행자가 무엇을 알고 문을 골랐는지다. 원래 규칙에서는 진행자가 자동차 위치를 알고 반드시 염소 문을 열기 때문에, 자동차가 2번일 때 3번을 열 확률이 1이 되어 관측이 2번 쪽으로 강하게 기운다. 무작위로 열면 그 우도가 1/2로 내려가 두 가설이 같아진다. 같은 관측이라도 그것이 만들어진 과정에 따라 정보량이 달라진다는 것이 여기서 얻을 교훈이다. 데이터를 볼 때 값만 보고 수집 과정을 묻지 않으면 이 차이를 통째로 놓치게 되고, 관측 방식이 결과에 개입하는 상황은 로그 샘플링이나 설문 회수처럼 실무에도 흔하다.

이 내용 다시 읽기 →
상황 적용판단
결제 요청의 70%는 PG사 A로, 30%는 B로 보낸다. A를 거친 요청의 실패율은 0.4%, B를 거친 요청의 실패율은 1.8%다.

실패한 요청 하나를 골랐을 때 그것이 B를 거쳤을 확률은 얼마인가?

  1. 정답약 66%다. 트래픽은 30%뿐이지만 실패 건수로는 다수가 된다.

    전확률 공식으로 전체 실패율을 구하면 0.7 × 0.004 + 0.3 × 0.018 = 0.0082이고, 그중 B의 몫은 0.0054다. 0.0054/0.0082 = 0.659이므로 실패의 3분의 2가 B에서 나온다. 트래픽 비중이 작아도 실패율이 4.5배면 기여도가 뒤집힌다.

  2. 30%다. B로 보내는 트래픽 비율이 그대로 유지된다.

    실패라는 조건이 붙는 순간 표본공간이 실패 건으로 줄어들고, 그 안의 구성은 원래 트래픽 비율과 다르다. 조건부 확률은 축소된 공간에서 다시 세는 것이다.

  3. 1.8%다. B의 실패율이 곧 답이다.

    1.8%는 B를 거쳤다는 조건 아래에서 실패할 확률이다. 묻는 것은 실패했다는 조건 아래에서 B를 거쳤을 확률이라 조건과 결과가 서로 바뀌어 있다.

  4. 약 34%다. A가 트래픽의 다수이므로 실패도 A 쪽이 더 많다.

    A의 실패 기여도 0.0028을 전체 0.0082로 나눈 값이라 계산 자체는 맞지만 묻는 대상이 B다. 트래픽이 많다고 실패도 많으리라는 직관은 실패율 차이가 트래픽 차이보다 크면 뒤집힌다.

해설

전확률 공식은 원인을 모른 채 결과의 확률을 구하게 해주고, 베이즈 정리는 그 결과에서 원인 쪽으로 되돌아가게 해준다. 여기서 눈여겨볼 것은 트래픽 비중과 실패 기여도의 순서가 뒤집힌다는 점이다. B는 트래픽의 30%만 받지만 실패율이 4.5배라 실패 건수에서는 3분의 2를 차지한다. 장애를 분석하면서 전체 트래픽 비중으로 원인을 짐작하면 이런 역전을 놓친다. 반대 방향의 함정도 있다. B를 끊으면 실패의 3분의 2가 사라지는 것은 맞지만, 그 트래픽을 A가 감당할 수 있는지는 이 계산이 답해주지 않는다.

이 내용 다시 읽기 →
상황 적용구조

텍스트 분류에서 단어들이 조건부 독립이 아닌 것은 분명한데도 나이브 베이즈가 쓸 만한 결과를 내는 이유는 무엇인가?

  1. 특성 수가 늘어나면 위반이 서로 상쇄되어 곱이 참값에 수렴한다.

    상쇄되지 않고 오히려 같은 방향으로 누적된다. 붙어 다니는 단어를 독립으로 보고 곱하면 같은 증거를 여러 번 세는 셈이라 확률이 0이나 1 쪽으로 더 심하게 몰린다.

  2. 조건부 독립은 무조건 독립보다 약한 가정이라 대부분의 데이터에서 성립한다.

    두 개념은 강약 관계가 아니라 별개다. 독립인 사건이 조건을 붙이면 종속이 되기도 하고 그 반대도 일어나므로, 한쪽이 다른 쪽을 함의하지 않는다.

  3. 정답분류는 확률의 크기 순서만 맞으면 되고 정확한 값까지 필요하지 않다.

    최종 판단은 클래스별 사후확률 중 가장 큰 것을 고르는 argmax뿐이다. 가정 위반이 클래스 전반에 비슷하게 걸리면 값이 왜곡돼도 순서는 남는다. 다만 그 확률값을 임계값 조정이나 기대손실 계산에 그대로 쓰면 어긋난다.

  4. 라플라스 평활을 적용하면 종속 관계로 생긴 편향이 제거된다.

    평활은 학습 데이터에 없던 단어 때문에 확률이 0이 되는 문제를 막는 장치다. 단어끼리의 종속 관계와는 다른 문제를 다룬다.

해설

조건부 독립은 무조건 독립과 별개의 개념이라 어느 쪽도 다른 쪽을 함의하지 않는다. 나이브 베이즈는 클래스가 주어졌을 때 특성들이 조건부 독립이라고 놓고 우도를 곱으로 분해하는데, 이 가정 덕분에 특성이 수천 개여도 추정할 파라미터가 특성 수에 비례해서만 늘어난다. 텍스트에서 free와 offer처럼 함께 나타나는 단어를 독립으로 보고 곱하면 같은 증거가 두 번 세어져 사후확률이 극단으로 몰린다. 그래도 분류가 되는 것은 argmax만 취하기 때문이다. 여기서 곧장 나오는 실무 주의점이 있다. 보정을 거치지 않은 나이브 베이즈의 출력값을 신뢰도로 읽거나 임계값을 조정하는 근거로 쓰면 안 된다.

이 내용 다시 읽기 →

확률변수와 기댓값: PMF, PDF, CDF, 기댓값, 분산의 핵심 원리

원문 읽기 →
개념 확인함정

평균 0, 표준편차 0.1인 정규분포의 PDF는 x = 0에서 약 3.99다. 이 값이 뜻하는 것은 무엇인가?

  1. 확률이 399%라는 뜻이므로 정규화가 어긋난 분포다.

    이 분포의 전체 적분은 정확히 1이라 정규화에는 문제가 없다. 밀도값 하나를 확률로 읽은 것이 오류다.

  2. 정답밀도값이다. 확률은 넓이로만 구해지므로 밀도 자체는 1을 넘어도 된다.

    PDF는 확률을 x의 단위로 나눈 값이라 x의 눈금이 촘촘할수록 커진다. 표준편차가 0.1이면 확률 1이 좁은 구간에 몰려야 하므로 봉우리가 높아질 수밖에 없다. 확률은 오직 구간을 적분한 넓이로만 나오고 그 값은 늘 0과 1 사이다.

  3. x = 0 근처에서 값이 나올 확률이 99.9%를 넘는다는 뜻이다.

    근처가 얼마나 넓은지를 정하지 않으면 확률을 말할 수 없다. 폭을 정해 적분해야 비로소 확률이 나오고, 폭을 0으로 좁히면 확률도 0으로 간다.

  4. 표준편차가 1보다 작을 때 생기는 수치 오차이므로 σ를 1로 표준화해 읽어야 한다.

    오차가 아니라 정확한 값이다. 1/(0.1 × √(2π)) = 3.9894로 정직하게 계산된 밀도이고, 표준화는 해석을 편하게 할 뿐 값이 틀려서 하는 일이 아니다.

해설

PDF 값은 확률이 아니라 밀도다. 단위로 보면 확률을 x의 단위로 나눈 값이라 분포가 좁을수록 봉우리가 높아지고, 그 높이가 1을 넘는 것은 아무 문제가 아니다. 확률은 오직 넓이로만 나오고 전체 넓이는 언제나 1이다. 이 구분을 놓치면 스케일이 다른 변수끼리 밀도값을 견주거나 우도값을 확률처럼 읽는 실수로 이어진다. 연속 분포에서 로그 우도가 양수로 나와도 이상한 일이 아니라는 것 역시 같은 이야기이고, PMF를 쓰는 이산 분포에서만 그 값이 곧 확률이다.

이 내용 다시 읽기 →
상황 적용구조
요청 하나가 서비스 A와 B를 차례로 거친다. 각 구간의 응답 시간을 X, Y라 할 때 E[X] = 40ms, E[Y] = 25ms, Var(X) = 100, Var(Y) = 64다. 두 서비스는 같은 DB를 쓰기 때문에 함께 느려지는 경향이 있고 Cov(X, Y) = 48이다.

총 응답 시간 X + Y의 기댓값과 분산은 얼마인가?

  1. 평균 65ms, 분산 164다. 두 분산을 더하면 된다.

    Var(X) + Var(Y)로 끝나는 것은 두 변수가 독립일 때뿐이다. 여기서는 공분산이 48로 0이 아니므로 2Cov(X, Y) = 96이 더 붙는다. 함께 느려지는 구간을 독립으로 보면 흔들림을 실제보다 작게 잡는다.

  2. 평균 65ms, 분산 212다. 공분산 48을 한 번 더한다.

    덧셈 정리의 공분산 항에는 2가 붙는다. X와 Y를 전개하면 교차항이 두 번 나오기 때문이고, 그래서 164 + 96 = 260이다.

  3. 정답평균 65ms, 분산 260이다.

    기댓값의 선형성은 독립 여부와 무관하므로 40 + 25 = 65가 그대로 답이다. 분산은 100 + 64 + 2 × 48 = 260이다. 표준편차로 보면 독립일 때 12.8ms일 것이 실제로는 16.1ms다.

  4. 두 변수에 상관이 있으므로 평균도 주어진 값만으로는 구할 수 없다.

    E[X + Y] = E[X] + E[Y]는 독립을 요구하지 않는 항등식이라 어떤 상관 구조에서도 성립한다. 상관 정보가 필요한 쪽은 분산뿐이다.

해설

기댓값과 분산은 합칠 때의 규칙이 다르다. 기댓값의 선형성은 독립을 요구하지 않아 언제나 그냥 더하면 되지만, 분산은 공분산 항을 달고 있어 독립일 때만 그냥 더해진다. 여기서 두 서비스는 DB를 공유해 함께 느려지므로 공분산이 양수이고, 총 응답 시간의 흔들림이 각 구간의 흔들림을 더한 것보다 커진다. 꼬리 지연을 예측하면서 구간별 분산을 단순히 더하면 실제보다 낙관적인 값이 나오고, 공유 자원이 끼어 있는 구간일수록 그 차이가 벌어진다. 반대로 음의 상관이 있으면 합의 분산이 각각의 합보다 작아지는데, 이 성질을 노리는 것이 포트폴리오 분산 투자다.

이 내용 다시 읽기 →
상황 적용판단
지난 분기 장애 100건의 복구 시간을 집계했다. 95건은 5분 안에 끝났고 나머지 5건은 각각 6시간이 걸렸다. 평균 복구 시간은 22.75분이다.

이 22.75분을 복구 목표의 근거로 쓸 때 놓치는 것은 무엇인가?

  1. 정답기댓값은 반복했을 때의 평균일 뿐 대표적인 한 건을 말해주지 않는다.

    주사위의 기댓값 3.5가 실제로는 한 번도 나오지 않는 값인 것과 같은 이야기다. 여기서는 긴 장애 5건이 평균을 끌어올렸지만 실제 경험의 95%는 5분 안에 끝난다. 22.75분은 어느 쪽 경험도 설명하지 못하는 자리에 있다.

  2. 가중치를 잘못 줬다. 건수 비율이 아니라 소요 시간 비율로 가중해야 한다.

    기댓값은 각 값이 나올 확률로 가중하는 것이 정의라 건수 비율이 맞다. 소요 시간으로 가중하면 긴 장애에 두 번 가중치를 주는 셈이 된다.

  3. 표본이 100건뿐이라 평균의 신뢰도가 낮다.

    표본을 1만 건으로 늘려도 분포 모양이 같으면 평균은 여전히 22.75분 근처이고 문제도 그대로다. 추정의 정밀도가 아니라 요약 방식이 문제다.

  4. 분산을 함께 보고하면 이 문제가 해소된다.

    평균과 분산 두 숫자로는 한쪽으로 길게 늘어진 분포를 요약할 수 없다. 여기서 표준편차는 77분에 이르는데 이 값 역시 어느 실제 경험과도 맞지 않는다.

해설

기댓값은 무한히 반복했을 때의 평균이지 대표적인 한 건이 아니다. 여기서는 긴 장애 다섯 건이 평균을 22.75분까지 끌어올렸지만 실제 경험의 95%는 5분 안에 끝난다. 분산을 덧붙여도 크게 나아지지 않는다. 평균과 분산은 한쪽으로 길게 늘어진 분포를 요약하기에 모자란 두 숫자이고, 여기서는 표준편차조차 어떤 실제 사례와도 닿지 않는다. 이런 지표는 p50, p95, p99처럼 분위수로 보고하는 것이 맞다. 응답 시간이나 복구 시간의 목표를 평균이 아니라 분위수로 정의하는 관행이 여기서 나왔다.

이 내용 다시 읽기 →
분석과 판단진단
피처 두 개의 상관계수를 재니 -0.0006이 나왔다. 그런데 둘째 피처는 첫째 피처를 제곱해서 만든 값이고, 첫째 피처는 -1과 1 사이에 고르게 퍼져 있다.

상관계수가 0에 가까운데도 두 피처를 함께 쓰는 것이 중복인 이유는 무엇인가?

  1. 표본이 10만 개로 커서 상관계수가 0으로 수축했다. 표본을 줄이면 값이 드러난다.

    표본이 커질수록 추정은 참값에 가까워진다. 여기서 참값 자체가 0이므로 표본을 줄이면 오차만 커지고 관계가 드러나지는 않는다.

  2. 제곱은 새 정보를 만드는 변환이므로 중복이 아니고, 상관계수 0이 그 증거다.

    제곱은 원래 값에서 부호를 지우는 변환이라 정보를 더하지 않고 오히려 줄인다. 첫째 피처를 알면 둘째 피처가 완전히 결정되므로 추가되는 정보는 없다.

  3. 정답상관계수는 선형 관계만 잰다. 한쪽이 다른 쪽으로 완전히 결정되는 관계는 이 자에 잡히지 않는다.

    x가 -a일 때와 +a일 때 y가 같은 값을 가지므로 곱의 부호가 짝을 지어 상쇄된다. 그래서 종속이 완벽한데도 공분산은 0으로 나온다. 독립이면 공분산이 0이지만 역은 참이 아니라는 문장의 실질적 의미가 이것이다.

  4. 첫째 피처의 범위가 대칭이라 0이 나왔을 뿐이고, 범위와 무관하게 두 피처는 독립이다.

    대칭 구간이라 상쇄가 일어난 것은 맞지만 결론이 뒤집혀 있다. 한쪽이 다른 쪽을 완전히 결정하므로 두 피처는 어떤 구간에서도 독립이 아니고, 구간을 양수 쪽으로 옮기면 상관계수도 0에서 벗어난다.

해설

상관계수와 공분산은 선형 관계만 재는 자다. 한쪽이 다른 쪽으로 완전히 결정되는 관계여도 값이 대칭 구간에 퍼져 있으면 곱의 부호가 짝을 지어 상쇄되어 0이 나온다. 피처 선택에서 상관 행렬만 보고 중복을 걸러내면 비선형으로 얽힌 쌍을 통째로 놓치게 된다. 트리 계열 모델에서는 그 중복이 분할 기준을 나눠 가져 중요도 해석까지 흐린다. 상호정보량처럼 선형에 갇히지 않는 지표를 함께 보거나 산점도를 직접 그려보는 편이 안전하고, 자동화된 피처 선별 파이프라인일수록 이 맹점을 그대로 물려받는다.

이 내용 다시 읽기 →
분석과 판단확장적용
예측 분산이 각각 σ²인 모델 n개의 출력을 평균 내는 앙상블을 만든다. 교과서 계산으로는 평균의 분산이 σ²/n이 되어야 하는데, 모델 수를 100개에서 500개로 늘려도 실제 분산이 거의 줄지 않는다.

분산이 더 내려가지 않는 이유는 무엇인가?

  1. 모델 수가 늘어나면 각 모델의 개별 분산 σ²이 함께 커진다.

    모델을 더 학습시킨다고 이미 만든 모델의 분산이 달라지지는 않는다. 바뀌는 것은 모델끼리의 관계이지 개별 모델의 성질이 아니다.

  2. 정답모델들이 같은 데이터를 봐서 예측이 양의 상관을 갖는다. 공분산 항이 바닥을 만든다.

    상관계수 ρ를 넣어 다시 계산하면 평균의 분산이 ρσ² + (1-ρ)σ²/n이 된다. n을 아무리 키워도 ρσ² 밑으로는 내려가지 않으므로 어느 지점부터는 모델을 더해도 소용이 없다. σ²/n은 예측들이 서로 독립일 때만 나오는 값이다.

  3. 평균을 내면 편향이 커져서 분산이 줄어든 만큼을 상쇄한다.

    편향과 분산은 서로 다른 항이라 한쪽이 다른 쪽을 상쇄하지 않는다. 게다가 같은 종류의 모델을 평균 내는 것은 편향을 거의 그대로 남긴다.

  4. 분산의 덧셈 정리는 변수 두 개까지만 성립하고 셋 이상에는 적용되지 않는다.

    n개로 확장하면 개별 분산 n개와 서로 다른 쌍의 공분산 n(n-1)개가 모두 더해진다. 항이 늘어날 뿐 정리 자체는 그대로 성립한다.

해설

n개의 예측을 평균 내면 분산이 σ²/n로 줄어든다는 계산은 예측들이 서로 독립일 때만 참이다. 상관계수 ρ를 넣으면 평균의 분산이 ρσ² + (1-ρ)σ²/n이 되고, n을 키워도 ρσ²라는 바닥이 남는다. 배깅이 부트스트랩 표본을 쓰고 랜덤 포레스트가 분할마다 특성을 무작위로 고르는 이유가 바로 이 ρ를 떨어뜨리기 위해서다. 앙상블에서 모델 개수를 늘리는 것보다 모델끼리 다르게 만드는 쪽이 중요한 이유이기도 하다. 같은 데이터로 같은 알고리즘을 500번 돌리면 ρ가 1에 가까워 분산이 거의 그대로 남고, 계산 비용만 500배가 된다.

이 내용 다시 읽기 →
상황 적용구조
어떤 피처의 평균이 512, 표준편차가 64다. 학습 전에 (x - 512) / 64로 표준화한다.

이 변환이 분산에 하는 일은 무엇인가?

  1. 512를 빼면 분산도 512만큼 줄고, 64로 나누면 거기서 다시 64분의 1이 된다.

    상수를 빼는 것은 모든 값을 같은 만큼 옮길 뿐이라 값들 사이의 거리가 그대로다. 분산은 거리의 제곱을 평균 낸 것이므로 평행 이동에 반응하지 않는다.

  2. 평행 이동과 스케일링 모두 분산을 그대로 두므로 4,096으로 유지된다.

    평행 이동은 분산을 바꾸지 않지만 스케일링은 바꾼다. Var(aX + b) = a²Var(X)에서 b는 사라지고 a만 제곱으로 남는다.

  3. 분산이 64분의 1인 64가 된다.

    나누는 상수는 제곱으로 작용하므로 64가 아니라 4,096으로 나뉜다. 지수를 놓치면 자릿수가 통째로 어긋난다.

  4. 정답512를 빼도 분산은 그대로이고, 64로 나누는 것이 분산을 4,096분의 1로 줄인다.

    Var(aX + b) = a²Var(X)에서 b는 영향을 주지 않고 a만 제곱으로 들어간다. 원래 분산 64² = 4,096을 64²으로 나누면 1이 되고 표준편차도 1이 된다. 표준화가 평균 0, 분산 1을 만드는 근거가 이 한 줄이다.

해설

Var(aX + b) = a²Var(X)라는 한 줄이 표준화의 근거다. 평행 이동은 모든 값을 같은 만큼 옮길 뿐이라 흩어진 정도를 건드리지 않고, 스케일링만 분산을 a²배로 바꾼다. 여기서 눈여겨볼 것은 a가 제곱으로 들어간다는 점이다. a가 음수여도 분산은 양수로 남으므로 값을 뒤집는 변환이 흩어짐을 줄이지 않는다. 반대 방향의 함의도 있다. 단위를 미터에서 센티미터로 바꾸는 것만으로 분산이 1만 배가 되므로, 단위가 다른 피처끼리 분산의 크기를 견주는 것은 의미가 없다. 거리 기반 알고리즘에서 스케일링이 선택이 아니라 전제인 이유가 이것이다.

이 내용 다시 읽기 →

이산확률분포 총정리: 베르누이, 이항, 포아송, 기하, 초기하

원문 읽기 →
개념 확인구조

고객센터에 한 시간 동안 걸려오는 전화 건수를 모델링하려 한다. 어느 분포가 맞는가?

  1. 이항 분포다. 매 순간 전화가 오거나 오지 않거나 둘 중 하나다.

    이항을 쓰려면 시행 횟수 n이 정해져 있어야 하는데 여기서는 셀 수 있는 기회 자체가 없다. 순간을 잘게 쪼개 n을 무한히 키우고 각 순간의 확률을 0으로 보내면 포아송으로 수렴하므로, 이 직관의 종착지도 결국 포아송이다.

  2. 기하 분포다. 첫 전화가 걸려올 때까지의 대기를 센다.

    기하 분포가 세는 것은 첫 성공까지의 시행 횟수다. 여기서 알고 싶은 것은 정해진 한 시간 안에 몇 건이 들어오는가이므로 세는 대상이 다르다.

  3. 초기하 분포다. 하루치 전화 가운데 한 시간분을 비복원으로 떼어낸다.

    초기하는 크기가 정해진 모집단에서 표본을 뽑을 때 쓴다. 하루 전체 통화량이 미리 정해져 있지 않으므로 뽑아낼 모집단 자체가 없다.

  4. 정답포아송 분포다. 단위 시간당 사건 발생 횟수이고 상한이 없다.

    단위 시간이나 단위 공간당 사건 횟수를 세는 자리가 포아송의 영역이다. 전화는 이론적으로 몇 통이든 올 수 있으므로 상한이 없다는 점도 맞아떨어진다. 필요한 파라미터는 시간당 평균 발생률 λ 하나뿐이다.

해설

분포를 고를 때 먼저 물을 것은 무엇을 세는가다. 성공과 실패로 나뉘는 시행을 n번 하고 성공 횟수를 세면 이항, 첫 성공까지 몇 번 걸리는지를 세면 기하, 단위 시간당 사건 횟수를 세면 포아송이다. 포아송이 나머지와 구별되는 지점은 시행 횟수라는 개념이 아예 없다는 것이다. 전화가 언제든 걸려올 수 있으므로 몇 번의 기회가 있었는지 셀 수 없고 상한도 없다. 다만 평균 발생률이 일정하다는 전제가 붙는다. 점심시간에 문의가 몰리는 콜센터라면 하루 전체에 λ 하나를 쓰는 대신 구간을 나눠 따로 잡아야 한다.

이 내용 다시 읽기 →
상황 적용진단
일 단위 CS 문의 건수를 90일치 모았다. 표본 평균은 42건, 표본 분산은 310이다. 담당자는 포아송 분포로 다음 주 문의량의 예측 구간을 만들려 한다.

이 데이터에 포아송을 그대로 얹기 어렵다고 판단하는 근거는 무엇인가?

  1. 표본이 90일뿐이라 분산 추정이 불안정하다.

    90개 표본이면 분산 추정이 7배씩 어긋날 정도로 불안정하지는 않다. 여기서 문제는 추정의 정밀도가 아니라 모형이 요구하는 제약이 관측과 정면으로 어긋난다는 점이다.

  2. 정답포아송은 평균과 분산이 같아야 하는데 분산이 평균의 7배가 넘는다.

    포아송에서는 E[X] = Var(X) = λ가 성질이 아니라 제약이다. 42와 310은 이 제약을 명백히 벗어나고, 이런 상태를 과산포라 부른다. 그대로 예측 구간을 만들면 폭이 실제보다 훨씬 좁게 나온다.

  3. 평균 42는 포아송이 다루기에 너무 커서 정규 근사로 넘어가야 한다.

    λ가 크면 포아송이 종 모양에 가까워지는 것은 맞지만 그것이 포아송을 못 쓰는 이유는 아니다. 정규 근사로 갈아타도 분산을 42로 잡는 한 같은 문제가 그대로 남는다.

  4. 분산이 평균보다 크면 이항 분포를 써야 한다.

    이항의 분산 np(1-p)는 평균 np보다 항상 작으므로 방향이 정반대다. 분산이 평균보다 큰 데이터에 이항을 얹으면 어긋남이 더 커진다.

해설

포아송 분포는 평균과 분산이 같다는 강한 제약을 달고 있다. 관측 분산이 평균보다 훨씬 크면 그 제약이 깨진 것이고 이를 과산포라 부른다. 원인은 대개 둘 중 하나다. 평균 발생률 자체가 날마다 달라지거나(캠페인, 요일 효과), 사건이 독립이 아니라 뭉쳐서 발생하는 경우(장애 하나가 문의 수십 건을 부름)다. 어느 쪽이든 포아송을 그대로 쓰면 예측 구간이 실제보다 좁게 나와 용량 설계가 낙관적으로 기운다. 흔한 대안은 λ 자체에 감마 분포를 얹은 음이항 분포이고, 원인이 시간대나 요일이라면 구간을 나눠 λ를 따로 추정하는 편이 더 정직하다.

이 내용 다시 읽기 →
상황 적용함정
패킷 전송의 성공 확률이 0.8이라고 알려져 있다. 방금 세 번 연속으로 전송에 실패했다.

네 번째 시도가 성공할 확률은 얼마인가?

  1. 0.8보다 높다. 세 번이나 실패했으니 이제 성공할 차례다.

    도박사의 오류다. 시행이 독립이면 과거의 결과가 다음 시행의 확률을 조정하지 않는다. 균형을 맞추려는 힘 같은 것은 존재하지 않는다.

  2. 0.0016이다. 네 번째에 처음 성공할 확률인 0.2의 세제곱 곱하기 0.8이다.

    그 값은 아직 아무것도 관측하지 않은 시점에서 네 번째에 첫 성공이 나올 확률이다. 이미 세 번 실패했다는 조건이 주어졌으므로 그 부분은 이미 일어난 사실이고 확률에서 빠진다.

  3. 0.8보다 낮다. 세 번 연속 실패는 실제 성공률이 0.8보다 낮다는 증거다.

    성공 확률을 모르는 상황이라면 타당한 추론이고 사후분포가 낮은 쪽으로 이동한다. 다만 여기서는 0.8이 주어진 값이라는 전제가 붙어 있어 데이터가 그 값을 수정하지 않는다.

  4. 정답0.8이다. 앞선 실패는 다음 시도의 확률을 바꾸지 않는다.

    기하 분포의 무기억성이 이것이다. P(X > s+t | X > s) = P(X > t)이므로 세 번 실패한 뒤 남은 대기의 분포가 처음 시작할 때와 똑같다. 이산분포 가운데 이 성질을 갖는 것은 기하 분포뿐이다.

해설

무기억성은 이미 흘려보낸 실패가 앞으로의 확률 구조를 전혀 바꾸지 않는다는 성질이다. 세 번 실패한 뒤 남은 대기의 분포가 처음과 똑같으므로 이제 성공할 차례라는 직관에는 근거가 없다. 이산분포 중 이 성질을 갖는 것은 기하 분포뿐이고 연속 쪽에서는 지수 분포가 대응한다. 여기서 함께 짚을 것은 전제다. 성공 확률 0.8이 이미 알려진 값이어야 이 결론이 성립한다. p를 모르는 상태였다면 세 번 연속 실패가 p를 낮게 보게 만드는 증거가 된다. 재시도 로직을 설계할 때 이 둘을 구분하지 않으면, 링크가 끊겨 성공률이 0에 가까워진 상황에서도 같은 확률을 기대하며 재시도를 반복하게 된다.

이 내용 다시 읽기 →
분석과 판단진단
재고 20개 가운데 불량이 4개다. 검사원이 5개를 비복원으로 뽑아 불량 개수를 센다. 담당자는 이것을 불량률 20%인 이항 분포 Binomial(5, 0.2)로 계산했다.

이 근사가 어긋나게 만드는 것은 무엇인가?

  1. 평균과 분산을 모두 과소평가한다. 비복원이면 뽑을수록 성공 확률이 올라가기 때문이다.

    비복원에서 남은 불량 비율은 앞서 무엇을 뽑았느냐에 따라 오르기도 내리기도 한다. 한 방향으로 치우치지 않으므로 평균은 이항과 정확히 같은 1.0이다.

  2. 분산을 과소평가한다. 남은 모집단이 편중되면서 결과가 더 크게 흔들린다.

    방향이 반대다. 뽑을수록 남은 구성이 확정되므로 결과의 흔들림은 오히려 줄어든다. 20개를 전부 뽑으면 불량은 반드시 4개이고 분산은 0이 된다.

  3. 정답평균은 같지만 분산을 과대평가한다. 유한 모집단 보정 계수가 빠졌다.

    두 분포 모두 평균은 5 × 0.2 = 1.0이다. 초기하의 분산에는 (N-n)/(N-1) = 15/19가 곱해져 0.632인데 이항은 0.8이라 27% 크다. 표본 비율이 25%로 통상 기준인 5에서 10%를 크게 넘은 것이 원인이다.

  4. 차이가 없다. 평균 불량률이 같으면 두 분포의 평균과 분산이 모두 일치한다.

    평균은 일치하지만 분산은 일치하지 않는다. 복원과 비복원의 차이가 분산에만 나타나기 때문에 평균만 확인하고 넘어가면 이 어긋남을 놓친다.

해설

표본이 모집단에서 차지하는 비중이 크면 비복원 추출의 종속성을 무시할 수 없다. 여기서는 20개 중 5개라 비중이 25%이고, 흔히 쓰는 5에서 10% 기준을 크게 넘는다. 평균은 두 계산이 같지만 분산은 초기하 쪽이 유한 모집단 보정 계수만큼 작다. 직관으로도 맞는 방향이다. 뽑을수록 남은 모집단의 구성이 정해지므로 결과가 덜 흔들리고, 전부 뽑으면 분산이 0이 된다. 이 차이를 무시하면 검사 결과의 구간 추정이 실제보다 넓게 나온다. 판정할 수 있는 상황에서 표본을 더 뽑자는 결론으로 이어지므로, 비용이 큰 전수 근접 검사에서는 이 보정이 실질적인 차이를 만든다.

이 내용 다시 읽기 →
분석과 판단확장적용
분당 평균 5건이 들어오는 API를 워커가 분당 8건까지 처리한다. 이때 요청이 처리 용량을 넘칠 확률은 6.8%다. 트래픽이 두 배인 분당 10건으로 늘어날 예정이라 용량도 두 배인 분당 16건으로 올리려 한다.

트래픽과 용량을 함께 두 배로 올리면 넘칠 확률은 어떻게 되는가?

  1. 정답약 2.7%로 내려간다. 평균 대비 흔들림이 λ의 제곱근에 반비례해 줄기 때문이다.

    포아송에서 평균은 λ, 표준편차는 √λ다. λ가 두 배가 되면 평균은 두 배지만 표준편차는 √2배만 늘어 상대적 변동이 줄어든다. 여유분이 평균의 60%에서 그대로 60%여도 표준편차 단위로는 더 두꺼워진 셈이다.

  2. 6.8% 그대로다. 트래픽과 용량의 비율이 같으므로 확률도 같다.

    비율만으로 결정된다면 규모와 무관해야 하는데 실제로는 규모가 커질수록 안정된다. 확률을 정하는 것은 여유분이 표준편차의 몇 배인가이고, 그 배수가 λ와 함께 커진다.

  3. 약 13.6%로 두 배가 된다. 요청이 두 배이므로 넘칠 기회도 두 배다.

    요청 수와 넘칠 확률은 비례 관계가 아니다. 넘침은 한 분 동안의 총량이 임계값을 넘는 사건이고, 평균이 커져도 임계값이 함께 커지면 오히려 멀어진다.

  4. 약 3.4%로 절반이 된다. 워커 수에 반비례해 줄어든다.

    감소는 있지만 반비례가 아니다. 포아송 꼬리 확률은 여유분을 표준편차로 나눈 값에 대해 지수적으로 떨어지므로 단순한 비례식으로 예측되지 않는다.

해설

포아송 분포에서 평균은 λ, 표준편차는 √λ다. λ가 두 배가 되면 평균은 두 배지만 표준편차는 √2배밖에 늘지 않으므로 변동계수 1/√λ는 오히려 줄어든다. 트래픽과 용량을 같은 비율로 키우면 넘칠 확률이 그대로가 아니라 내려가는 이유가 이것이다. 규모가 커질수록 여유 용량을 비율로는 덜 잡아도 된다는 뜻이고, 큰 서비스가 작은 서비스보다 상대적으로 얇은 버퍼로 버티는 근거이기도 하다. 뒤집어 말하면 트래픽을 잘게 쪼개 워커마다 고정 분배하면 각 워커의 λ가 작아져 변동성이 커진다. 부하 분산에서 요청을 미리 나누는 것보다 공용 큐에서 꺼내 쓰는 구조가 유리한 이유도 같은 계산에서 나온다.

이 내용 다시 읽기 →
상황 적용구조
Binomial(100, 0.03)과 Poisson(3)의 PMF는 소수점 셋째 자리까지 맞아떨어진다. 그런데 같은 np = 3인 Binomial(10, 0.3)과 Poisson(3)은 k = 0에서 0.028과 0.050으로 꽤 어긋난다.

같은 np인데도 두 경우가 갈리는 이유는 무엇인가?

  1. n = 10은 너무 작아 이항 공식 자체가 부정확해진다.

    이항 PMF는 n이 얼마든 정확한 값을 준다. 근사에 쓰이는 쪽은 포아송이고, 어긋나는 것도 포아송이 이항을 얼마나 잘 흉내 내느냐의 문제다.

  2. 정답p가 작아야 한다는 조건이 빠졌다. p = 0.3에서는 분산이 어긋난다.

    수렴 조건은 n이 크고 p가 작으면서 np가 고정될 때다. 두 분포의 분산을 견주면 이유가 바로 보인다. 이항은 np(1-p), 포아송은 np이므로 (1-p)가 1에 가까워야 하고, p = 0.03이면 0.97이지만 p = 0.3이면 0.7이다.

  3. np가 같으면 두 분포는 항상 같아야 하므로 계산이 틀렸다.

    np는 평균만 맞춰줄 뿐이다. 평균이 같아도 분산이 다르면 분포 모양이 달라지고, 여기서 갈리는 것이 정확히 그 지점이다.

  4. 포아송에는 값의 상한이 없고 이항에는 n이라는 상한이 있어서다.

    상한 차이는 n = 100일 때도 똑같이 존재했지만 그때는 근사가 잘 맞았다. 게다가 어긋남이 k = 0이라는 가장 낮은 값에서 나타나므로 꼬리 쪽 상한과는 무관하다.

해설

이항이 포아송으로 수렴하려면 n이 크다는 것만으로 모자라고 p가 작아야 한다는 조건이 함께 필요하다. 두 분포의 분산을 견주면 이유가 곧바로 보인다. 이항은 np(1-p), 포아송은 np이므로 (1-p)가 1에 가까울 때만 둘이 가까워진다. p = 0.03이면 차이가 3%지만 p = 0.3이면 30%가 벌어진다. 이 근사가 쓸모 있는 자리는 기회가 아주 많고 각각의 확률은 아주 낮은 상황이다. 하루 수백만 요청 중 특정 에러가 나는 횟수, 대규모 코호트에서 희귀 질환이 발생하는 건수 같은 것이 그렇다. p가 크면 근사를 버리고 이항을 그대로 쓰거나 정규 근사로 넘어가는 편이 낫다.

이 내용 다시 읽기 →

연속확률분포 총정리: 균일, 정규, 지수, 감마, 베타 분포

원문 읽기 →
개념 확인함정
# 평균 100, 분산 25인 정규분포에서 P(X <= 90)을 구하려 한다
from scipy import stats

rv = stats.norm(loc=100, scale=25)
print(rv.cdf(90))
# 0.3446   <- 기대한 값은 0.0228이었다

이 코드가 엉뚱한 값을 내놓는 이유는 무엇인가?

  1. loc에는 평균이 아니라 중앙값을 넣어야 한다.

    정규분포는 좌우 대칭이라 평균과 중앙값이 같은 값이다. 어느 쪽을 넣어도 결과가 달라지지 않는다.

  2. cdf가 아니라 sf를 써야 P(X ≤ 90)이 나온다.

    cdf(x)가 곧 P(X ≤ x)이고 sf(x)는 P(X > x)다. 호출한 메서드는 맞았고 넘긴 파라미터가 틀렸다.

  3. 정답scale에는 분산이 아니라 표준편차 5가 들어가야 한다.

    scipy의 norm에서 scale은 표준편차다. 분산 25를 그대로 넣으면 표준편차가 다섯 배인 분포가 만들어져 90이 평균에서 2σ가 아니라 0.4σ 떨어진 자리가 된다. scale=5로 고치면 0.0228이 나온다.

  4. norm은 표준정규분포 전용이라 loc과 scale을 받지 않는다.

    loc과 scale은 scipy의 모든 연속분포가 공통으로 받는 인자다. 기본값이 0과 1이라 생략하면 표준정규가 될 뿐이다.

해설

scipy의 연속분포 인자는 교재 표기와 이름이 어긋나는 자리가 여럿이라 실수가 잦다. norm의 scale은 표준편차이고 분산이 아니다. expon은 rate λ가 아니라 그 역수를 scale로 받고, gamma는 a가 형태 파라미터이며, uniform의 scale은 오른쪽 끝점이 아니라 구간 길이다. 이 실수가 특히 위험한 이유는 예외를 내지 않고 조용히 틀린 숫자를 뱉는다는 데 있다. 여기서는 꼬리 확률이 0.0228이어야 할 자리에 0.3446이 나와 열다섯 배 어긋났다. 낯선 분포를 처음 쓸 때는 rv.mean()과 rv.var()를 찍어 의도한 값이 나오는지 확인하고 넘어가는 편이 안전하다.

이 내용 다시 읽기 →
상황 적용진단
API 응답 시간의 평균이 120ms, 표준편차가 40ms다. 팀은 3σ에 해당하는 240ms를 이상 임계값으로 잡고 이를 넘는 날이 1년에 한두 번쯤일 것으로 예상했다. 실제로는 한 달에 여러 번 넘었다.

이 어긋남의 가장 그럴듯한 원인은 무엇인가?

  1. 정답응답 시간 분포가 오른쪽으로 길게 늘어져 있어 정규 가정이 꼬리를 과소평가했다.

    68-95-99.7 법칙은 정규분포에서만 성립하는 수치다. 응답 시간은 아래로 0에서 막히고 위로는 열려 있어 오른쪽 꼬리가 두껍다. 같은 평균과 표준편차를 가져도 3σ 밖의 비율이 0.3%보다 훨씬 크다.

  2. 표준편차를 구할 때 ddof를 지정하지 않아 값이 작게 나왔다.

    ddof 차이는 √(n/(n-1))배라 표본이 수백 개면 0.1% 수준이다. 초과 빈도가 열 배 넘게 벌어지는 것을 설명하지 못한다.

  3. 3σ가 아니라 2σ를 임계값으로 잡았어야 한다.

    임계값을 낮추면 초과가 더 자주 일어난다. 예상보다 자주 넘는 상황에서 문턱을 낮추자는 것은 방향이 반대다.

  4. 평균과 표준편차를 같은 데이터에서 추정해 임계값이 편향됐다.

    같은 데이터에서 추정하면 임계값이 조금 안쪽으로 당겨지는 것은 맞지만 그 효과는 표본이 커질수록 사라진다. 여기서 벌어진 간격을 만들어낼 만한 크기가 아니다.

해설

68-95-99.7 법칙은 정규분포에서만 성립하는 수치다. 응답 시간, 소득, 파일 크기처럼 아래로는 0에서 막히고 위로는 열려 있는 값은 오른쪽으로 길게 늘어져 정규분포보다 꼬리가 두껍다. 3σ 밖이 0.3%라는 계산은 이런 분포에서 통하지 않고, 실제 초과 빈도가 예상의 열 배를 넘는 일이 흔하다. 대안은 두 갈래다. 로그를 취해 대칭에 가깝게 만든 뒤 다루거나, 아예 분포를 가정하지 않고 관측된 분위수를 임계값으로 쓰는 것이다. 응답 시간 지표에서 평균과 표준편차 대신 p95와 p99를 쓰는 관행이 후자를 택한 결과다.

이 내용 다시 읽기 →
상황 적용구조
새 광고 소재의 CTR을 추정한다. 기존 소재들이 5% 근처였다는 것을 알고 사전분포로 Beta(2, 38)을 놓았다. 노출 200회에 클릭 15회가 나와 사후분포는 Beta(17, 223)이고 평균은 7.08%다.

데이터만 보면 7.5%인데 사후 평균이 7.08%로 내려앉은 이유는 무엇인가?

  1. 베타 분포가 0과 1 사이에 갇혀 있어 큰 값이 눌리기 때문이다.

    0.075는 구간 한복판에서 한참 떨어진 작은 값이라 경계에 눌릴 일이 없다. 구간 제약이 작동하는 것은 값이 0이나 1에 바짝 붙었을 때다.

  2. 베타 분포에서는 평균이 최빈값보다 항상 작기 때문이다.

    여기서는 반대다. Beta(17, 223)의 최빈값은 16/238 = 0.0672로 평균 0.0708보다 작다. 오른쪽으로 늘어진 분포에서는 평균이 최빈값보다 크다.

  3. 노출과 클릭을 이항이 아니라 초기하로 봤기 때문이다.

    베타는 이항의 켤레 사전분포이고 여기서도 이항 우도를 쓴다. 초기하로 바꾼 적이 없으므로 값의 이동과 무관하다.

  4. 정답사전분포가 가상 시행 40회의 무게를 갖고 데이터와 함께 평균되기 때문이다.

    Beta(α, β)에서 α + β가 곧 가상 시행 횟수라 여기서는 40회다. (40/240) × 0.05 + (200/240) × 0.075를 계산하면 정확히 0.0708이 나온다. 사후 평균이 사전과 데이터의 가중평균으로 깔끔하게 떨어지는 것이 켤레 관계의 성질이다.

해설

켤레 사전분포에서 사후 평균은 사전과 데이터의 가중평균으로 정확히 떨어진다. Beta(α, β)의 α + β가 가상 시행 횟수이므로 여기서는 40회의 사전 지식과 200회의 실제 관측이 40 대 200으로 섞인다. 이 구조에서 실무적 판단이 하나 나온다. 사전분포의 세기는 α + β로 조절하는 것이지 α와 β의 비율로 조절하는 것이 아니다. Beta(20, 380)도 평균은 똑같은 5%지만 가상 시행이 400회라 데이터 200개로는 거의 움직이지 않는다. 데이터가 적은 실험 초기에 사전 지식을 얼마나 반영할지는 결국 이 합을 몇으로 두느냐의 문제이고, 이 값을 크게 잡으면 실험이 사전 믿음을 뒤집기 어려워진다.

이 내용 다시 읽기 →
상황 적용구조
장애가 시간당 평균 3건 발생하는 포아송 과정이 있다. 앞으로 30분 동안 장애가 한 건도 없을 확률을 두 가지로 계산했다. 하나는 Poisson(1.5)에서 0건이 나올 확률, 다른 하나는 Exp(3)에서 대기가 0.5시간을 넘을 확률이다. 둘 다 0.223이 나왔다.

두 계산이 같은 값을 주는 이유는 무엇인가?

  1. 우연히 일치했을 뿐이고 시간 구간을 바꾸면 어긋난다.

    어떤 구간을 잡아도 두 값은 항상 같다. 포아송 쪽은 e^(-λt)이고 지수 쪽 생존함수도 e^(-λt)라 t가 무엇이든 같은 식이 나온다.

  2. 정답두 문장이 사실은 같은 사건을 가리키기 때문이다.

    30분 안에 아무 일도 없었다는 말과 첫 사건이 30분 뒤에 온다는 말은 표현만 다를 뿐 같은 상황을 가리킨다. 같은 사건이니 확률도 같을 수밖에 없다. 포아송과 지수가 같은 포아송 과정을 횟수와 대기 시간이라는 두 각도에서 본 것이라는 관계가 여기서 드러난다.

  3. 지수 분포가 포아송 분포의 켤레 사전분포이기 때문이다.

    포아송의 켤레 사전분포는 감마 분포다. 게다가 켤레 관계는 베이지안 갱신을 편하게 하는 성질이지 두 확률값을 같게 만드는 성질이 아니다.

  4. λ가 작아 포아송을 지수로 근사할 수 있는 구간이기 때문이다.

    근사가 아니라 정확한 일치다. 두 분포는 서로 다른 대상을 재므로 근사 관계로 이어질 수 있는 사이도 아니다.

해설

포아송과 지수는 같은 과정을 다른 각도에서 본 것이다. 포아송은 정해진 구간에서 몇 건이 일어나는지를 세고, 지수는 다음 사건까지 얼마나 걸리는지를 잰다. 30분 동안 0건이라는 사건과 첫 사건까지의 대기가 30분을 넘는다는 사건은 글자만 다를 뿐 같은 사건이라 확률이 같을 수밖에 없고, 식으로도 양쪽 모두 e^(-λt)로 떨어진다. 이 관계가 실무에서 쓸모 있는 지점은 데이터 형태다. 로그에 타임스탬프만 있으면 간격을 계산해 지수 모형을 세우고, 시간당 집계만 있으면 포아송으로 다루면 된다. 어느 쪽을 택하든 추정하는 것은 같은 λ이므로 결론이 갈리지 않는다.

이 내용 다시 읽기 →
분석과 판단적용
장애가 시간당 평균 2건 발생하는 포아송 과정이다. 온콜 담당자는 장애 5건을 처리하면 교대한다.

교대까지 걸리는 시간의 분포와 그 평균, 표준편차는 무엇인가?

  1. Poisson(10)이고 평균 10건, 표준편차 √10건이다.

    포아송은 정해진 시간에 몇 건이 일어나는지를 세는 분포다. 여기서 묻는 것은 건수가 아니라 시간이라 단위부터 맞지 않는다.

  2. Exp(2/5)이고 평균 2.5시간, 표준편차 2.5시간이다.

    평균은 맞지만 분포가 틀렸다. 지수 분포는 평균과 표준편차가 같아 변동계수가 항상 1인데, 다섯 번의 대기를 합치면 그 값이 내려가야 한다.

  3. Exp(2)를 다섯 번 더한 것이므로 평균 2.5시간, 표준편차는 다섯 배인 2.5시간이다.

    앞 절반은 맞고 뒤 절반이 틀렸다. 독립인 값을 더하면 표준편차가 아니라 분산이 더해지므로, 표준편차는 5배가 아니라 √5배로 늘어난다.

  4. 정답Gamma(5, 1/2)이고 평균 2.5시간, 표준편차는 약 1.12시간이다.

    지수 분포 α개의 합이 감마 분포다. 평균은 5 × 0.5 = 2.5시간으로 그냥 더해지지만 분산이 5 × 0.25 = 1.25라 표준편차는 √1.25 = 1.12시간이다. 변동계수가 1에서 1/√5인 0.45로 내려간다.

해설

지수 분포의 합이 감마 분포다. 사건 하나까지의 대기가 Exp(λ)이면 α개까지의 대기는 형태 파라미터 α를 갖는 감마 분포이고, 평균은 그냥 α배가 된다. 함정은 표준편차 쪽에 있다. 독립인 값을 더하면 표준편차가 아니라 분산이 더해지므로 표준편차는 √α배로만 늘어난다. 여기서는 각각 0.5시간이던 것이 합쳐서 2.5시간이 아니라 1.12시간이다. 변동계수로 보면 지수 하나에서 1이던 값이 5건을 모으면 0.45로 내려간다. 여러 건을 묶어 처리하는 배치가 개별 처리보다 소요 시간을 예측하기 쉬운 이유가 이 계산에 있고, 같은 성질이 표본 평균이 개별 관측보다 안정적인 이유로도 이어진다.

이 내용 다시 읽기 →
분석과 판단확장적용
디스크 고장까지의 시간을 지수 분포로 모델링해 평균 수명 5년을 얻었다. 3년 동안 쓴 디스크의 남은 수명 기댓값을 묻자 모형은 여전히 5년이라고 답한다.

이 모형을 하드웨어 수명에 그대로 쓰는 것이 위험한 이유는 무엇인가?

  1. 평균 5년은 기댓값일 뿐이므로 중앙값으로 바꿔 보고해야 한다.

    지수 분포에서 중앙값은 평균의 약 0.69배라 값은 달라지지만, 3년 쓴 디스크와 새 디스크의 남은 수명이 같다는 결론은 그대로다. 요약값을 바꾸는 것으로는 문제가 사라지지 않는다.

  2. 정답지수 분포는 고장률이 시간에 따라 일정하다고 놓아 마모를 담지 못한다.

    무기억성은 곧 고장률이 상수라는 뜻이다. 실제 부품은 쓸수록 마모되어 고장률이 올라가므로 3년 쓴 디스크의 남은 수명은 새것보다 짧아야 한다. 모형이 이 사실을 표현할 수단 자체를 갖고 있지 않다.

  3. 지수 분포는 분산이 평균의 제곱이라 추정이 불안정하다.

    변동이 크다는 지적은 맞지만 그것은 추정의 정밀도 문제다. 여기서 어긋난 것은 정밀도가 아니라 시간에 따라 위험이 변한다는 구조를 아예 담지 못한다는 점이다.

  4. 고장 시점은 이산적으로 관측되므로 기하 분포를 써야 한다.

    관측을 일 단위로 기록한다고 해서 기하 분포로 바꿀 이유는 없다. 게다가 기하 분포도 무기억성을 갖고 있어 같은 한계를 그대로 물려받는다.

해설

무기억성은 지수 분포를 다루기 쉽게 만드는 성질이지만 동시에 이 분포가 표현할 수 없는 것을 알려준다. 고장률이 시간에 따라 일정하다는 뜻이므로 마모나 노화를 담을 수 없다. 하드웨어의 실제 고장률은 초기에 높다가 안정기를 거쳐 말년에 다시 오르는 욕조 곡선을 그리는데, 지수 분포는 가운데 평평한 구간만 흉내 낸다. 그래서 신뢰성 분석에서는 형태 파라미터를 갖는 와이불 분포를 쓴다. 그 값이 1이면 지수와 같아지고, 1보다 크면 노화, 1보다 작으면 초기 불량을 나타낸다. 3년 쓴 디스크의 남은 기대 수명이 새 디스크와 같다는 결론이 이상하게 느껴진다면, 직관이 틀린 것이 아니라 모형이 현상과 맞지 않는 것이다.

이 내용 다시 읽기 →

큰 수의 법칙과 중심극한정리: 통계학이 작동하는 이유

원문 읽기 →
개념 확인구조

큰 수의 법칙과 중심극한정리는 각각 어떤 질문에 답하는가?

  1. 큰 수의 법칙은 표본이 작을 때, 중심극한정리는 클 때 쓰는 정리다.

    둘 다 표본이 커질 때 무엇이 일어나는지를 말하는 정리다. 표본 크기에 따라 갈라 쓰는 관계가 아니라 같은 상황을 두 각도에서 본 것이다.

  2. 정답큰 수의 법칙은 표본 평균이 어디로 가는지를, 중심극한정리는 그 주변에 어떻게 퍼지는지를 답한다.

    큰 수의 법칙은 표본 평균이 모평균 μ로 수렴한다는 도착점을 말한다. 중심극한정리는 도착하기 전 표본 평균이 N(μ, σ²/n)이라는 종 모양으로 흩어져 있다고 말한다. 활로 비유하면 앞은 중심을 맞힌다는 보장이고 뒤는 화살들이 퍼지는 모양이다.

  3. 큰 수의 법칙은 데이터가 정규분포에 수렴한다고 말하고, 중심극한정리는 그 속도를 준다.

    정규분포가 등장하는 쪽은 중심극한정리뿐이고, 그마저도 데이터가 아니라 표본 평균의 분포에 관한 이야기다. 큰 수의 법칙은 어떤 분포로 가는지를 아예 말하지 않는다.

  4. 큰 수의 법칙은 이산분포에, 중심극한정리는 연속분포에 적용된다.

    두 정리 모두 원래 분포의 종류를 가리지 않는다. 중심극한정리의 위력이 드러나는 대표적인 예가 0과 1만 갖는 베르누이에서도 표본 평균이 정규로 수렴한다는 것이다.

해설

두 정리는 같은 대상을 다른 각도에서 본다. 큰 수의 법칙은 표본 평균이 결국 어디에 가서 서는지를 말하고, 중심극한정리는 도착하기 전 그 값이 어떻게 흩어져 있는지를 말한다. 실무에서는 뒤쪽이 훨씬 자주 쓰인다. 추정값이 참값에 가까워진다는 사실만으로는 오차 범위를 말할 수 없고, 흩어짐의 모양을 알아야 신뢰구간과 p값이 나오기 때문이다. 큰 수의 법칙이 없으면 추정 자체가 근거를 잃고, 중심극한정리가 없으면 추정에 불확실성을 붙일 수 없다. 신뢰구간, z 검정, A/B 테스트가 모두 뒤쪽 정리 위에 올라가 있다.

이 내용 다시 읽기 →
상황 적용함정
지수분포에서 뽑은 데이터 1만 개의 왜도가 1.99다. 같은 분포에서 50개씩 뽑아 평균 낸 값 1만 개의 왜도는 0.26이다. 한 동료가 데이터가 1만 개나 되니 중심극한정리에 따라 원자료도 정규분포로 봐도 된다고 말한다.

이 주장의 무엇이 틀렸는가?

  1. n = 10,000은 중심극한정리를 적용하기에 아직 부족하다.

    표본을 100만 개로 늘려도 원자료의 왜도는 2 근처에 그대로 머문다. 크기 문제가 아니라 정리가 말하는 대상이 다르다.

  2. 지수분포는 유한 분산을 갖지 않아 중심극한정리의 사정권 밖이다.

    지수분포의 분산은 1/λ²으로 유한하다. 조건을 깨뜨리는 것은 파레토처럼 꼬리 지수가 2 이하인 분포이고, 지수분포는 오히려 표본 평균이 잘 수렴하는 예로 쓰인다.

  3. 왜도 1.99는 정규분포의 왜도 범위 안이므로 주장 자체는 맞다.

    정규분포의 왜도는 정확히 0이다. 1.99는 강한 오른쪽 비대칭을 뜻하고, 정규성과는 거리가 멀다.

  4. 정답정규에 가까워지는 대상은 원자료의 분포가 아니라 표본 평균의 분포다.

    데이터 자체는 몇 개를 뽑든 원래 분포를 그대로 따른다. 두 왜도가 나란히 제시된 것이 그 증거다. 원자료는 1.99로 남아 있고 50개씩 묶은 평균만 0.26으로 내려왔다.

해설

중심극한정리는 표본 평균의 분포에 대한 정리이지 데이터 자체에 대한 정리가 아니다. 지수분포에서 데이터를 백만 개 뽑아도 왜도는 여전히 2이고 히스토그램은 오른쪽으로 길게 늘어진 그대로다. 달라지는 것은 그 데이터를 50개씩 묶어 평균 낸 값들의 분포이고, 왜도가 2/√50인 0.28로 줄어든다. 이 구분을 놓치면 정규성을 요구하는 기법을 엉뚱한 대상에 얹게 된다. 표본이 크다는 이유로 평균에 대한 t 검정을 쓰는 것은 정당하지만, 같은 이유로 원자료에 3σ 이상치 규칙을 적용하는 것은 정당하지 않다. 정규성이 필요한 대상이 데이터인지 통계량인지를 매번 짚어야 한다.

이 내용 다시 읽기 →
상황 적용판단
표본 500명으로 진행한 설문의 오차 범위가 ±4.4%p로 나왔다. 이를 ±2.2%p로 줄이라는 요청을 받았다.

표본을 몇 명으로 늘려야 하는가?

  1. 정답2,000명이다. 표준오차가 √n에 반비례하므로 절반으로 줄이려면 네 배가 필요하다.

    표본 평균의 표준편차는 σ/√n이다. 이 값을 1/2로 만들려면 √n이 두 배여야 하고, 따라서 n은 네 배가 되어야 한다. 500의 네 배인 2,000명이다.

  2. 1,000명이다. 오차 범위와 표본 크기가 반비례한다.

    반비례하는 것은 n이 아니라 √n이다. 두 배로 늘리면 오차는 절반이 아니라 1/√2인 약 71%로 줄어 ±3.1%p가 된다.

  3. 4,000명이다. 오차를 절반으로 줄이려면 네 배의 제곱인 여덟 배가 필요하다.

    제곱이 붙는 자리를 한 번 더 적용했다. σ/√n에서 √n을 두 배로 만드는 데 필요한 배수는 4이고 그 이상은 과잉이다.

  4. 표본 크기와 무관하다. 오차 범위는 모집단 크기가 결정한다.

    모집단 크기는 이 식에 들어오지 않는다. 표본 비중이 모집단의 5%를 넘어 유한 모집단 보정이 필요한 경우가 아니면 전국 조사든 한 도시 조사든 같은 표본 크기가 같은 오차를 준다.

해설

표준오차가 σ/√n이라는 한 줄이 표본 설계의 비용 구조를 결정한다. 오차를 절반으로 줄이려면 표본을 네 배로 늘려야 하고, 10분의 1로 줄이려면 백 배가 필요하다. 수확 체감이 가파르기 때문에 정밀도를 조금 더 얻는 비용이 급격히 오른다. 여론조사의 표본이 대개 1,000명 근처에서 멈추는 것도 이 계산 때문이다. 그 지점에서 오차 범위가 ±3%p 정도인데 이를 ±1.5%p로 줄이려면 4,000명을 조사해야 하고, 그만큼의 값어치가 잘 나오지 않는다. 함께 짚어둘 것은 모집단 크기가 이 식에 등장하지 않는다는 점이다. 5천만 명을 대상으로 하든 5만 명을 대상으로 하든 필요한 표본 크기는 거의 같다.

이 내용 다시 읽기 →
상황 적용구조
n, p = 30, 0.4
mu, sigma = 12.0, 2.683

stats.binom.cdf(15, n, p)         # 0.902943  정확값
stats.norm.cdf(15, mu, sigma)     # 0.868224  보정 없음
stats.norm.cdf(15.5, mu, sigma)   # 0.903947  보정 있음

0.5를 더하는 연속성 보정이 하는 일은 무엇인가?

  1. 정규 근사의 분산 np(1-p)를 표본분산으로 바꿔 편향을 없앤다.

    보정은 분산을 건드리지 않는다. 손대는 것은 확률을 읽어낼 경계선의 위치뿐이고, μ와 σ는 그대로 쓴다.

  2. 이항 분포의 왜도를 보정해 좌우 대칭으로 만든다.

    왜도 보정은 별개의 기법이고 여기서는 쓰지 않는다. p = 0.4라 약간 비대칭하지만, 보정이 메우는 것은 비대칭이 아니라 이산과 연속의 경계 차이다.

  3. 정답이산값 k에 폭 1의 구간을 배정해 계단과 곡선이 어긋나는 만큼을 메운다.

    이항의 확률은 정수 위에 막대로 서 있고 정규 곡선은 그 사이를 매끄럽게 지나가므로, 경계를 정수에 맞추면 막대 하나 분량의 절반이 잘려 나간다. 경계를 15.5로 밀면 그 손실이 사라져 오차가 3.47%p에서 0.10%p로 줄어든다.

  4. np가 5보다 작은 경우에도 근사를 쓸 수 있도록 조건을 완화한다.

    보정은 근사가 이미 쓸 만한 구간에서 남은 오차를 다듬는 장치다. np가 5에 못 미치면 분포 모양 자체가 정규와 달라서 0.5를 옮기는 것으로 해결되지 않는다.

해설

이산 분포를 연속 분포로 근사하면 계단과 곡선이 어긋난다. 이항의 확률은 정수 위에 막대로 서 있는데 정규 곡선은 그 사이를 매끄럽게 지나가므로, 경계를 정수에 맞추면 막대 하나 분량의 절반이 잘려 나간다. 이산값 k에 폭 1의 구간을 배정해 경계를 0.5만큼 미는 것이 연속성 보정이고, 이 한 번의 조정으로 오차가 서른 배 넘게 줄어든다. 보정의 효과는 n이 작을수록 크다. n이 커지면 막대 하나의 높이가 얇아져 잘려 나가는 양 자체가 줄기 때문이다. 방향을 헷갈리지 않으려면 구하려는 사건이 포함하는 정수를 전부 덮도록 경계를 밀면 된다. P(X ≤ 15)에는 15.5를, P(X ≥ 15)에는 14.5를 쓴다.

이 내용 다시 읽기 →
분석과 판단진단
어떤 지표의 표본 평균을 표본 크기별로 그렸다. n을 10배씩 키워도 표본 평균의 흩어짐이 √n에 맞춰 줄지 않고, 가끔 관측치 하나가 평균을 통째로 끌고 간다. 원자료는 파레토 분포에 가깝고 꼬리 지수는 1.5로 추정된다.

무엇이 깨진 상황인가?

  1. 표본이 서로 독립이 아니어서 큰 수의 법칙이 깨졌다.

    종속이 있으면 수렴이 느려지는 것은 맞지만, 관측치 하나가 평균을 끌고 가는 증상은 종속이 아니라 꼬리 두께에서 나온다. 게다가 꼬리 지수 1.5라는 단서가 원인을 분포 쪽으로 가리킨다.

  2. 정답분산이 무한해서 중심극한정리의 전제가 깨졌다. 평균은 존재하지만 √n 수렴이 성립하지 않는다.

    파레토는 꼬리 지수가 1보다 크면 평균이 존재하고 2보다 커야 분산이 유한하다. 1.5는 그 사이라 평균은 있지만 분산이 무한하고, 중심극한정리가 요구하는 두 조건 중 하나가 무너진다. 표본 평균은 정규가 아니라 안정 분포로 수렴하며 수렴 속도도 1/√n이 아니다.

  3. n이 아직 30에 못 미쳐 중심극한정리가 작동하지 않았다.

    n을 10배씩 키우며 관찰한 상황이므로 크기는 문제가 아니다. 30이라는 숫자 자체도 정리의 조건이 아니라 경험 법칙일 뿐이다.

  4. 파레토 분포는 기댓값이 정의되지 않으므로 큰 수의 법칙부터 성립하지 않는다.

    기댓값이 없는 것은 꼬리 지수가 1 이하일 때이고 대표적인 예가 코시 분포다. 1.5에서는 기댓값이 존재하므로 큰 수의 법칙은 여전히 성립하고, 표본 평균은 느리게나마 참 평균으로 간다.

해설

중심극한정리가 요구하는 조건은 독립 동일 분포와 유한 분산 두 가지다. 꼬리 지수가 1.5인 파레토는 평균은 존재하지만 분산이 무한하므로 두 번째 조건이 깨진다. 이 경우 표본 평균이 정규분포가 아니라 안정 분포로 수렴하고 수렴 속도도 1/√n이 아니다. 겉으로 드러나는 증상이 문제의 서술 그대로다. 표본을 늘려도 흩어짐이 기대만큼 줄지 않고 극단값 하나가 평균을 좌우한다. 소득, 도시 인구, 파일 크기, 네트워크 트래픽처럼 두꺼운 꼬리를 가진 데이터에서 흔한 상황이라 평균과 그 신뢰구간을 그대로 보고하면 안 된다. 중앙값이나 절사 평균처럼 꼬리에 둔감한 통계량으로 갈아타거나 로그를 취해 꼬리를 눌러야 한다.

이 내용 다시 읽기 →
분석과 판단적용
미니배치 크기를 32에서 512로 올렸다. 학습 곡선이 눈에 띄게 매끄러워졌는데 검증 정확도는 오히려 조금 떨어졌다.

이 현상에서 중심극한정리가 설명해주는 범위는 어디까지인가?

  1. 노이즈가 16분의 1로 줄고 그만큼 일반화가 나빠진다는 것까지 예측한다.

    배치 크기에 반비례하는 것은 분산이고 표준편차는 그 제곱근이라 4분의 1로 준다. 일반화 쪽은 정리가 아예 다루지 않는 영역이다.

  2. 배치가 커지면 그래디언트가 편향되므로 검증 성능이 떨어진다는 것까지 설명한다.

    미니배치 그래디언트는 배치 크기와 무관하게 전체 그래디언트의 불편 추정량이다. 배치를 키워 달라지는 것은 편향이 아니라 흩어짐뿐이다.

  3. 중심극한정리는 배치 크기와 무관하므로 이 현상 전체가 정리와 관계없다.

    미니배치 그래디언트는 개별 샘플 그래디언트의 평균이므로 정확히 표본 평균이다. 그 흩어짐이 배치 크기에 따라 어떻게 변하는지가 바로 정리가 답하는 부분이다.

  4. 정답노이즈가 √B에 반비례해 4분의 1로 준다는 데까지다. 일반화에 미치는 영향은 그 밖이다.

    미니배치 그래디언트는 표본 평균이므로 표준편차가 σ/√B로 줄어든다. 배치가 16배면 노이즈는 4분의 1이고 학습 곡선이 매끄러워지는 것이 그 결과다. 줄어든 노이즈가 왜 일반화를 나쁘게 만드는지는 정리 바깥의 가설이다.

해설

중심극한정리가 알려주는 것은 미니배치 그래디언트가 전체 그래디언트를 중심으로 표준편차 σ/√B로 흩어진다는 사실까지다. 배치를 16배로 키우면 노이즈의 표준편차는 4분의 1이 되고 학습 곡선이 매끄러워지는 것이 그 직접적인 결과다. 여기서 멈춰야 한다. 노이즈가 줄어드는 것이 왜 일반화를 나쁘게 만드는지는 정리가 다루는 영역이 아니고, 적당한 노이즈가 평평한 최소점으로 이끈다는 것도 널리 받아들여지는 가설이지 증명된 사실이 아니다. 실무에서 쓸모 있는 부분은 앞쪽이다. 배치를 키우면 계산량은 선형으로 늘지만 노이즈 감소는 제곱근에 그치므로, 배치를 키워 얻는 안정성은 갈수록 비싸진다.

이 내용 다시 읽기 →

정보이론으로 보는 DL 손실함수: 엔트로피, KL 발산, 교차 엔트로피

원문 읽기 →
개념 확인구조

정보량을 I(x) = -log p(x)로 정의할 때, 다른 함수가 아니라 로그를 쓰도록 강제하는 조건은 무엇인가?

  1. 확률이 낮을수록 정보가 커야 한다는 조건이다.

    이 조건만으로는 함수가 정해지지 않는다. 1/p나 1 - p처럼 감소하기만 하면 되는 함수가 얼마든지 있다.

  2. 확실한 사건의 정보량이 0이어야 한다는 조건이다.

    p = 1에서 0이 되는 함수도 하나가 아니다. 1/p - 1도 이 조건을 만족하지만 로그가 아니다.

  3. 정답독립 사건의 정보량이 더해져야 한다는 조건이다.

    독립이면 확률은 곱해지는데 정보는 합쳐져야 한다. 곱을 합으로 옮기는 연속 함수는 로그뿐이므로 이 조건 하나가 함수 형태를 통째로 결정한다. 동전을 두 번 던진 정보량이 한 번의 두 배라는 요구가 그것이다.

  4. 정보량이 항상 0 이상이어야 한다는 조건이다.

    확률이 1을 넘지 않으므로 -log p는 자동으로 0 이상이 된다. 조건이 아니라 결과에 가깝고, 함수 형태를 좁혀주지도 않는다.

해설

정보량이 갖춰야 할 세 조건 가운데 로그를 강제하는 것은 가법성이다. 확률이 낮을수록 커지고 확실한 사건에서 0이 된다는 두 조건은 다른 함수로도 채울 수 있지만, 독립 사건의 정보가 더해지려면 곱을 합으로 옮기는 함수여야 하고 그런 연속 함수는 로그뿐이다. 로그의 밑은 단위만 정한다. 2면 비트, e면 냇이고 둘은 상수배 관계라 어느 쪽으로 재도 대소 관계가 바뀌지 않는다. 딥러닝의 손실 함수가 자연로그를 쓰는 것은 미분이 깔끔해서이지 정보이론적으로 다른 의미가 있어서가 아니다.

이 내용 다시 읽기 →
상황 적용구조
P = (0.5, 0.3, 0.2)와 Q = (0.3, 0.4, 0.3)에 대해 계산하면 H(P) = 1.485, D_KL(P||Q) = 0.127, H(P, Q) = 1.612비트다.

교차 엔트로피를 최소화하는 일이 KL 발산을 최소화하는 일과 같아지는 이유는 무엇인가?

  1. 정답H(P)가 데이터 분포 자체의 성질이라 모델이 바꿀 수 없는 상수이기 때문이다.

    H(P, Q) = H(P) + D_KL(P||Q)에서 앞항은 모델과 무관하게 고정된다. 따라서 교차 엔트로피를 내리는 것은 뒷항을 내리는 것과 정확히 같고, 그것이 모델 분포 Q를 진짜 분포 P에 붙이는 일이다.

  2. 두 값이 언제나 같은 수이기 때문이다.

    여기서도 1.612와 0.127로 다르다. 두 값이 같아지는 것은 H(P)가 0일 때, 즉 정답이 한 클래스로 확정된 경우에 한한다.

  3. KL 발산이 항상 0 이상이라 교차 엔트로피의 하한이 되기 때문이다.

    0 이상이라는 성질에서 나오는 결론은 H(P, Q)가 H(P) 밑으로 내려갈 수 없다는 것이다. 두 최소화가 같아지는 근거는 부등호가 아니라 H(P)가 상수라는 사실이다.

  4. 교차 엔트로피가 KL 발산의 지수 변환이기 때문이다.

    지수 변환으로 얻는 것은 퍼플렉시티이고 그 대상도 KL 발산이 아니라 교차 엔트로피다. 두 양은 지수가 아니라 덧셈으로 이어져 있다.

해설

교차 엔트로피는 엔트로피와 KL 발산의 합으로 정확히 분해된다. 앞항 H(P)는 데이터 분포 자체의 불확실성이라 모델이 무엇을 하든 변하지 않으므로, 교차 엔트로피를 낮추는 일이 곧 KL 발산을 낮추는 일이 된다. 여기서 실무적 함의가 하나 나온다. 학습 손실이 0으로 내려가지 않는다고 해서 반드시 모델이 나쁜 것은 아니다. 데이터에 본질적인 모호함이 있으면 H(P)가 0보다 크고 손실은 그 값 밑으로 내려갈 수 없다. 레이블에 잡음이 섞인 데이터셋에서 손실이 어느 선에서 멈추는 것도 같은 이유이고, 그 하한을 모델의 결함으로 오해하면 엉뚱한 곳을 손보게 된다.

이 내용 다시 읽기 →
상황 적용함정
P = (0.5, 0.3, 0.2), Q = (0.5, 0.5, 0.0)으로 D_KL(P||Q)를 계산했더니 무한대가 나왔다. 두 벡터 모두 합은 1이다.

무한대가 나온 이유는 무엇인가?

  1. Q의 어떤 성분이 0이면 확률분포로 성립하지 않는다.

    확률이 0인 결과가 있는 것은 아무 문제가 없다. 합이 1이고 모든 성분이 0 이상이면 정당한 분포다. 문제는 Q 자체가 아니라 P와 겹치는 방식에 있다.

  2. 정답P가 양의 확률을 주는 자리에 Q가 0을 줬기 때문이다.

    세 번째 항에서 0.2 × log(0.2/0)이 되어 발산한다. 의미로 읽으면 절대 일어나지 않는다고 모델이 단언한 사건이 실제로 일어난 것이라 벌점이 무한하다. Q에 아주 작은 값을 더해 P의 support를 덮어주는 것이 표준적인 대처다.

  3. 반대 방향인 D_KL(Q||P)로 계산하면 언제나 유한하므로 방향을 바꾸면 된다.

    이 예에서는 P가 모든 자리에 양수를 주기 때문에 반대 방향이 유한할 뿐이다. P에 0이 있고 그 자리에 Q가 양수라면 반대 방향도 똑같이 발산한다.

  4. 로그의 밑이 2라서 그렇고, 자연로그로 바꾸면 유한한 값이 나온다.

    밑을 바꾸는 것은 상수를 곱하는 것이라 무한대는 무한대로 남는다. 단위가 비트에서 냇으로 바뀔 뿐이다.

해설

KL 발산에서 Q가 0인 자리에 P가 양의 확률을 주면 그 항이 무한대로 발산한다. 식으로는 분모가 0으로 가기 때문이고, 뜻으로는 모델이 불가능하다고 단언한 사건이 관측된 것이라 벌점이 끝없이 커진다. 이 성질이 KL 발산의 비대칭을 만드는 근원이기도 하다. 실무에서는 확률에 작은 값을 더하는 평활을 넣거나 로그 안에 엡실론을 두어 막는다. 언어 모델이 어휘 밖 토큰에도 최소 확률을 남겨두는 것, 나이브 베이즈가 라플라스 평활을 기본으로 쓰는 것이 모두 같은 문제를 다루는 장치다. 확률을 0으로 못박는 일은 모델이 되돌릴 수 없는 단언을 하는 것과 같다.

이 내용 다시 읽기 →
상황 적용진단
시그모이드 출력층에 MSE 손실을 붙여 이진 분류를 학습했다. 전체 손실은 조금씩 내려가는데, 정답이 1인데 0.02를 내놓는 것처럼 확신을 갖고 틀린 샘플에서는 가중치가 거의 움직이지 않는다.

이 정체의 원인은 무엇인가?

  1. MSE의 손실값이 0.5를 넘지 못해 그래디언트도 그만큼 작아진다.

    상한이 있다는 지적 자체는 맞지만 손실값의 크기와 그래디언트의 크기는 다른 이야기다. 여기서 학습을 막는 것은 손실의 천장이 아니라 미분에 곱해진 항이다.

  2. 시그모이드 대신 소프트맥스를 쓰면 해결된다.

    이진 분류에서 소프트맥스는 시그모이드와 사실상 같은 함수이고, 포화 구간에서 미분이 0으로 가는 성질도 그대로다. 손을 대야 할 곳은 활성화가 아니라 손실이다.

  3. 정답MSE의 그래디언트에 곱해진 σ'(z)가 출력이 0이나 1에 붙으면 죽는다.

    ∂L/∂w = (a - y)σ'(z)x에서 a가 0.02이면 σ'(z)가 0에 가까워 오차 (a - y)가 아무리 커도 곱이 0으로 눌린다. 가장 크게 고쳐야 할 때 가장 적게 고치는 구조다. 교차 엔트로피를 쓰면 이 항이 소거되어 (a - y)x만 남는다.

  4. 학습률이 낮아서 생긴 현상이고 MSE 자체에는 문제가 없다.

    학습률을 올리면 잘 학습되던 샘플까지 함께 흔들린다. 특정 구간에서만 신호가 죽는 것은 전역 배율이 아니라 그 구간의 미분이 0에 가깝다는 뜻이다.

해설

시그모이드에 MSE를 붙이면 그래디언트에 σ'(z)가 곱해진 채로 남는다. 이 값은 출력이 0이나 1에 붙을수록 0에 수렴하므로, 모델이 확신을 갖고 틀린 순간에 학습 신호가 가장 약해진다. 교차 엔트로피를 쓰면 이 항이 정확히 소거되어 그래디언트가 (a - y)x로 떨어지고, 예측이 극단적이어도 오차 크기에 비례하는 신호가 살아 있다. 이 소거는 우연이 아니다. 교차 엔트로피가 시그모이드로 정의된 베르누이 분포의 음의 로그 우도이기 때문에 생기는 결과다. 활성화와 손실을 따로 고르지 않고 짝으로 고르는 편이 나은 이유가 여기 있고, 소프트맥스와 교차 엔트로피의 조합에서도 같은 소거가 일어난다.

이 내용 다시 읽기 →
분석과 판단판단
두 팀이 각자 학습한 한국어 언어 모델의 퍼플렉시티를 보고했다. A팀은 12.2, B팀은 24.5다. A팀은 자모 단위 토크나이저를, B팀은 서브워드 토크나이저를 썼다.

이 두 숫자를 근거로 A가 더 좋은 모델이라고 말할 수 있는가?

  1. 정답말할 수 없다. 퍼플렉시티는 토큰당 값이라 토큰의 단위가 다르면 견줄 수 없다.

    자모로 쪼개면 토큰 하나가 결정하는 것이 적어 퍼플렉시티가 자연히 낮게 나오고, 서브워드로 묶으면 한 토큰이 더 많은 것을 담아 값이 올라간다. 모델의 우열과 무관하게 토크나이저만으로 두 배 차이가 만들어진다.

  2. 말할 수 있다. 퍼플렉시티는 토크나이저와 무관한 절대 지표다.

    퍼플렉시티는 토큰당 교차 엔트로피의 지수라 정의 자체에 토큰 단위가 들어 있다. 절대 지표가 되려면 문자나 바이트처럼 공통 단위로 정규화해야 한다.

  3. 말할 수 없다. 퍼플렉시티는 코퍼스 크기에 비례하므로 크기를 맞춰야 한다.

    퍼플렉시티는 토큰당 평균값이라 코퍼스가 길어진다고 커지지 않는다. 문제가 되는 것은 코퍼스의 크기가 아니라 도메인과 토큰 단위다.

  4. 말할 수 있다. 로그를 취해 교차 엔트로피로 되돌리면 단위가 통일된다.

    로그를 취해도 여전히 토큰당 값이다. 지수를 벗기는 것과 토큰 단위를 맞추는 것은 다른 작업이다.

해설

퍼플렉시티는 토큰 하나당 평균 선택지 수라서 토큰의 단위가 달라지면 같은 자로 잴 수 없다. 잘게 쪼갤수록 토큰 하나가 담는 정보가 줄어 값이 내려가므로, 토크나이저를 바꾸는 것만으로 지표를 개선한 것처럼 보이게 만들 수 있다. 조건이 다른 모델을 견주려면 문자당 비트처럼 토큰에 의존하지 않는 단위로 정규화해야 한다. 평가 코퍼스도 같아야 한다. 도메인이 다르면 같은 모델의 퍼플렉시티가 크게 달라지므로 논문의 수치를 그대로 옮겨와 비교하는 것은 대개 근거가 없다. 지표를 볼 때는 값 자체보다 그 값이 무엇으로 나눠졌는지를 먼저 확인해야 한다.

이 내용 다시 읽기 →
분석과 판단확장진단
진짜 분포 P는 봉우리가 두 개인데 이를 단봉 가우시안 Q로 근사한다. D_KL(P||Q)를 최소화한 Q와 D_KL(Q||P)를 최소화한 Q가 눈에 띄게 다른 모양으로 나왔다.

각 방향이 어떤 해로 이어지는가?

  1. 정답P||Q는 두 봉우리를 다 덮으려 넓게 퍼지고, Q||P는 한 봉우리에 좁게 붙는다.

    P||Q는 P가 확률을 주는 자리에서 Q가 0에 가까우면 큰 벌점을 받으므로 P의 영역을 빠짐없이 덮으려 한다. Q||P는 반대로 Q가 확률을 주는 자리에서 P가 작으면 벌점을 받으므로 P가 얕은 골짜기를 피해 한 봉우리에 머문다.

  2. P||Q가 한 봉우리를 고르고, Q||P가 두 봉우리를 덮는다.

    방향이 반대다. 어느 쪽 분포가 기댓값의 기준이 되는지를 보면 갈린다. 기댓값을 취하는 분포가 확률을 주는 자리에서 상대가 0에 가까운 것이 벌점이 된다.

  3. 둘 다 두 봉우리 사이 골짜기에 중심을 두고 같은 해로 수렴한다.

    골짜기에 중심을 두는 것은 넓게 덮는 쪽 해의 모습에 가깝다. 좁게 붙는 쪽은 오히려 골짜기를 적극적으로 피하므로 두 해가 같아질 수 없다.

  4. 두 방향의 차이는 값의 크기뿐이고 최소화된 해는 같다.

    비대칭이 값에만 나타난다면 KL을 거리로 써도 문제가 없었을 것이다. 최적해 자체가 달라지기 때문에 어느 방향을 쓰느냐가 모델링 선택이 된다.

해설

KL 발산의 두 방향은 값만이 아니라 최적해의 성격을 다르게 만든다. D_KL(P||Q)는 P가 확률을 주는 곳에서 Q가 비면 무한대에 가까운 벌점을 받으므로 Q가 P의 영역을 모두 덮으려 넓게 퍼진다. D_KL(Q||P)는 Q가 확률을 주는 곳만 따지므로 P가 얕은 영역을 피해 한 봉우리에 좁게 붙는다. 변분추론과 VAE가 뒤쪽 방향을 쓰는 것은 기댓값을 근사 분포에서 취할 수 있어 계산이 가능하기 때문이지 그 성질이 더 나아서가 아니고, 그 대가로 나타나는 사후분포 과소 추정은 이 방법의 알려진 한계다. 어느 방향을 최소화할지는 곧 어떤 종류의 오차를 감수할지를 정하는 선택이다.

이 내용 다시 읽기 →

점추정(Point Estimation): 데이터에서 모수를 추정하는 첫 번째 원리

원문 읽기 →
개념 확인구조

추정량과 추정값을 굳이 구분해서 부르는 이유는 무엇인가?

  1. 추정량은 모집단에서, 추정값은 표본에서 계산하는 값이다.

    둘 다 표본에서 나온다. 모집단에서 계산되는 것은 모수이고, 그 값은 애초에 알 수 없어서 추정하는 것이다.

  2. 추정량은 점추정에, 추정값은 구간추정에 쓰이는 용어다.

    구간추정에도 추정량과 추정값의 구분이 그대로 있다. 구간의 양 끝을 만드는 규칙이 추정량이고, 그 규칙에 데이터를 넣어 얻은 숫자가 추정값이다.

  3. 추정량에는 편향이 있고 추정값에는 없다.

    편향이 있고 없고는 추정량마다 다르다. 추정값에 편향을 말할 수 없는 것은 편향이 0이어서가 아니라 이미 정해진 숫자 하나에 기댓값을 물을 수 없어서다.

  4. 정답추정량은 확률변수라 편향과 분산을 따질 수 있다.

    추정량은 데이터를 넣기 전의 규칙이므로 표본이 달라지면 값이 달라지는 확률변수다. 그래서 기댓값과 분산을 물을 수 있다. 관측된 숫자 5.8961 하나에는 물어볼 분포가 없다.

해설

추정량은 데이터를 넣기 전의 규칙이라 확률변수이고, 추정값은 특정 표본을 넣어 나온 하나의 숫자다. 이 구분이 없으면 편향이나 분산 같은 말을 할 자리가 사라진다. 숫자 하나에는 기댓값도 분산도 없고 그 값을 만들어낸 규칙에만 있기 때문이다. 같은 규칙에 다른 표본을 넣으면 다른 값이 나오는데 그 흔들림의 크기가 곧 추정량의 분산이다. 실무에서는 이 구분이 결과를 보고하는 방식으로 이어진다. 관측된 값 하나만 내놓는 것과 그 값이 표본에 따라 얼마나 움직이는지를 함께 내놓는 것의 차이이고, 신뢰구간이 존재하는 이유가 뒤쪽을 요구하기 때문이다.

이 내용 다시 읽기 →
상황 적용구조

표본 분산을 계산할 때 n이 아니라 n-1로 나누는 근거는 무엇인가?

  1. 표본이 모집단보다 작으므로 그 크기 차이를 보정하는 것이다.

    모집단 크기는 이 계산에 등장하지 않는다. 100만 명 중 10명을 뽑든 20명 중 10명을 뽑든 나누는 수는 똑같이 9다.

  2. 정답편차의 합이 0으로 묶여 있어 자유롭게 변하는 값이 n-1개뿐이다.

    편차를 표본 평균 기준으로 재기 때문에 합이 반드시 0이 되고, n-1개를 알면 마지막 하나가 자동으로 정해진다. 자유롭게 움직이는 정보의 개수가 그만큼이라 n-1로 나눈다. 계산으로도 n으로 나누면 기댓값이 (n-1)/n × σ²이라 체계적으로 작다.

  3. 이상치 하나가 분산을 부풀리는 것을 막기 위한 장치다.

    이상치의 영향은 나누는 수가 아니라 제곱된 편차 자체에서 온다. 분모를 1 줄이면 값이 오히려 커지므로 방향도 반대다.

  4. n으로 나눈 값은 일치추정량이 아니어서 표본이 커져도 참값에 가지 않는다.

    n으로 나눈 값도 일치추정량이다. 편향이 -σ²/n이라 표본이 커지면 0으로 사라지고 참값으로 수렴한다. 문제는 수렴 여부가 아니라 유한한 표본에서의 치우침이다.

해설

n개의 편차는 서로 독립이 아니다. 표본 평균을 기준으로 잰 편차라 합이 반드시 0이고, n-1개를 알면 마지막 하나가 정해진다. 자유롭게 움직이는 정보가 n-1개뿐이므로 그 수로 나누는 것이고, 이 조정이 기댓값을 정확히 σ²으로 맞춰준다. 이 보정이 실질적으로 중요한 것은 표본이 작을 때다. n = 10이면 10% 과소추정이지만 n = 1,000이면 0.1%라 사실상 차이가 없다. 라이브러리마다 기본값이 다르다는 점도 실무에서 실제로 문제가 된다. numpy의 var와 std는 n으로 나누고 pandas의 var와 std는 n-1로 나누므로, 두 도구를 섞어 쓰면 같은 데이터에서 다른 값이 나온다.

이 내용 다시 읽기 →
상황 적용판단
모평균 μ를 추정하는 두 규칙이 있다. A는 첫 관측값 X₁ 하나만 쓰고, B는 표본 전체의 평균을 쓴다. 둘 다 기댓값이 정확히 μ라 비편향이다.

표본을 100개에서 10,000개로 늘리면 두 규칙의 품질은 어떻게 갈리는가?

  1. 정답B의 분산은 100분의 1이 되지만 A는 σ² 그대로다.

    표본 평균의 분산은 σ²/n이므로 n이 100배가 되면 100분의 1로 줄어든다. A는 나머지 관측값을 버리므로 표본 크기와 무관하게 σ²에 머문다. 비편향이지만 일치추정량이 아닌 대표적인 예다.

  2. 둘 다 비편향이므로 표본이 늘어도 품질 차이가 없다.

    비편향은 기댓값이 참값과 같다는 뜻일 뿐 한 번의 추정이 얼마나 정확한지는 말해주지 않는다. 품질을 가르는 것은 그 기댓값 주위로 얼마나 흩어지는가이고, 두 규칙은 여기서 크게 갈린다.

  3. A는 편향이 생기고 B는 비편향으로 남는다.

    A의 기댓값은 표본 크기와 무관하게 μ다. 데이터를 버리는 것과 편향이 생기는 것은 다른 이야기다.

  4. A의 분산도 100분의 1로 줄지만 수렴 속도가 B보다 느리다.

    A는 X₁ 하나만 보므로 나머지 9,999개는 계산에 아예 들어가지 않는다. 속도가 느린 것이 아니라 줄어들지 않는다.

해설

비편향성과 일치성은 서로를 함의하지 않는다. 첫 관측값만 쓰는 규칙은 기댓값이 정확히 μ라 비편향이지만, 표본을 아무리 늘려도 분산이 σ²에 머물러 참값으로 수렴하지 않는다. 반대로 n으로 나눈 표본분산은 편향이 있지만 그 편향이 -σ²/n이라 표본이 커지면 사라져 일치추정량이 된다. 실무에서는 대개 일치성이 더 중요하다. 데이터를 더 모으면 결국 정답에 도달한다는 보장이 있는지가 관건이고, 평균적으로 맞다는 성질은 표본을 한 번만 뽑는 상황에서 큰 위안이 되지 못한다. 표본 평균이 좋은 추정량인 것도 비편향이라서가 아니라 분산이 σ²/n으로 줄어들기 때문이다.

이 내용 다시 읽기 →
상황 적용함정
표본 분산 S²이 σ²에 비편향이라는 것을 확인한 뒤, 그 제곱근인 표본 표준편차 S도 σ에 비편향일 것이라고 결론지었다.

이 추론의 무엇이 틀렸는가?

  1. S²의 비편향성은 정규분포에서만 성립하므로 전제부터 틀렸다.

    S²은 분산이 유한한 어떤 분포에서도 σ²에 비편향이다. 정규성이 필요한 것은 S²의 분포를 카이제곱으로 특정할 때이지 비편향성 자체에는 필요하지 않다.

  2. S는 항상 σ보다 작은 값이 나오므로 애초에 비편향일 수 없다.

    개별 표본에서는 S가 σ를 넘는 경우도 흔하다. 치우치는 것은 여러 번 반복했을 때의 평균이지 매번의 값이 아니다.

  3. 정답비편향성은 비선형 변환을 통과하지 못한다. 제곱근이 오목이라 E[S]가 σ보다 작다.

    기댓값은 상수배와 덧셈은 통과하지만 제곱근 같은 비선형 변환은 통과하지 못한다. 젠슨 부등식에 의해 E[√S²] < √E[S²] = σ가 되어 표본 표준편차는 평균적으로 모표준편차를 밑돈다. 표본이 작을수록 이 치우침이 크다.

  4. ddof=1을 지정하지 않아 생긴 문제이고, 지정하면 S도 비편향이 된다.

    ddof=1은 S²을 비편향으로 만드는 설정이다. 그 값의 제곱근을 취하는 순간 젠슨 부등식이 다시 작동하므로 어떤 설정으로도 S를 비편향으로 만들 수는 없다.

해설

기댓값은 선형 연산이라 상수배와 덧셈은 통과하지만 제곱근이나 로그 같은 비선형 변환은 통과하지 못한다. 제곱근이 오목 함수이므로 젠슨 부등식에 의해 표본 표준편차는 평균적으로 모표준편차를 밑돈다. 개별 표본의 S가 늘 작다는 뜻이 아니라 반복했을 때 평균이 한쪽으로 치우친다는 뜻이고, 이 치우침은 표본이 커지면 사라진다. 같은 논리가 다른 곳에서도 반복된다. 로그 스케일에서 비편향인 추정량을 지수로 되돌리면 편향이 생기고, 비율이나 오즈처럼 변환을 거친 지표도 마찬가지다. 변환한 값의 기댓값과 기댓값을 변환한 값은 다른 수라는 것을 기억해야 한다.

이 내용 다시 읽기 →
분석과 판단진단
n = 5, σ² = 4에서 두 표본분산 추정량을 10만 번 시뮬레이션했다. n으로 나눔 E = 3.206 Bias² = 0.630 Var = 5.159 MSE = 5.790 n-1로 나눔 E = 4.008 Bias² = 0.000 Var = 8.061 MSE = 8.062

편향이 있는 쪽의 MSE가 더 작게 나왔다. 이것이 가능한 이유는 무엇인가?

  1. n = 5로 표본이 작아 생긴 시뮬레이션 오차이고, 반복을 늘리면 순서가 뒤집힌다.

    반복 10만 번이면 표본오차는 소수점 둘째 자리 수준이다. 5.79와 8.06의 간격은 그 오차로 설명되지 않고, 이론적으로도 계산해보면 5.76과 8.00으로 같은 순서가 나온다.

  2. 정답MSE는 편향의 제곱과 분산의 합이라, 편향을 조금 키워 분산을 크게 줄이면 합이 작아진다.

    여기서는 편향의 제곱 0.63을 감수하는 대가로 분산이 8.06에서 5.16으로 떨어졌다. 0.63 + 5.16 = 5.79가 8.06보다 작으므로 전체 오차 기준으로는 편향된 쪽이 이긴다. 비편향이 언제나 좋은 것은 아니라는 말의 구체적인 모습이다.

  3. MSE는 편향과 분산의 곱이므로 편향이 0이면 오히려 값이 커진다.

    곱이라면 편향이 0일 때 MSE도 0이 되어 말이 되지 않는다. 분해식은 합이고, 편향이 0이면 MSE가 분산과 정확히 같아진다.

  4. n으로 나눈 추정량은 비편향이 아니므로 MSE 분해 공식을 적용할 수 없다.

    분해는 편향이 있든 없든 항등식으로 성립한다. 오히려 편향이 있을 때 두 항이 어떻게 맞바뀌는지를 보여주는 것이 이 식의 쓸모다.

해설

MSE는 편향의 제곱과 분산의 합이므로 두 항을 맞바꿀 여지가 있다. 여기서는 편향을 감수한 대가로 분산이 크게 떨어져 합이 줄었고, 비편향이 언제나 좋은 것은 아니라는 말이 숫자로 드러난다. 다만 이 역전은 표본이 작을 때 두드러지고 n이 커지면 편향이 0으로 가면서 두 MSE가 붙는다. 같은 구조가 머신러닝의 규제에서 그대로 반복된다. Ridge가 가중치를 0 쪽으로 당기면 추정에 편향이 생기지만 분산이 크게 줄어 테스트 오차가 내려간다. 무엇을 최소화할지 정하지 않은 채 비편향성만 좇으면 정작 오차가 더 큰 추정량을 고르게 된다.

이 내용 다시 읽기 →
분석과 판단적용
동전을 100번 던진 결과를 저장한다. 순서를 그대로 담은 HHTHT 같은 기록을 남길지, 앞면 횟수 62만 남길지 고민 중이다.

앞면 확률 p를 추정하는 목적에 한해 62만 남겨도 되는 근거는 무엇인가?

  1. 순서 정보는 무작위로 나온 것이라 어떤 분석에도 쓸모가 없다.

    순서에는 p에 대한 정보가 없을 뿐 다른 정보는 들어 있다. 앞면 뒤에 앞면이 더 자주 나오는지, 후반부에 확률이 달라졌는지 같은 것은 순서를 봐야 알 수 있다.

  2. 표본이 100개로 충분히 커서 요약해도 손실이 무시할 만하다.

    표본이 10개여도 성공 횟수만 남기면 p 추정에 필요한 정보는 온전히 보존된다. 손실이 작은 것이 아니라 아예 없다는 점이 이 성질의 요점이다.

  3. 베르누이 시행에서는 어떤 통계량이든 충분 통계량이 된다.

    첫 관측값만 남기는 통계량은 나머지 99개의 정보를 통째로 버리므로 충분하지 않다. 충분한 통계량은 따로 찾아야 하고, 그 도구가 Fisher-Neyman 분해다.

  4. 정답성공 횟수가 p에 대한 충분 통계량이기 때문이다.

    결합 확률이 p의 62제곱 곱하기 (1-p)의 38제곱으로 정리되어 p에 오직 합을 통해서만 의존한다. Fisher-Neyman 분해가 성립하므로 성공 횟수가 충분 통계량이고, 100개의 값을 하나로 압축해도 p 추정에는 잃는 것이 없다.

해설

충분 통계량은 모수 추정에 필요한 정보를 하나도 잃지 않고 데이터를 압축한 것이다. 베르누이 시행에서 성공 횟수가 주어지면 그 조건 아래 순서의 분포가 p와 무관해지므로, 순서에는 p에 대한 정보가 남아 있지 않다. Fisher-Neyman 분해로 확인하면 결합 확률이 성공 횟수를 통해서만 p에 의존한다. 여기에 반드시 붙여야 할 단서가 있다. 충분하다는 것은 독립 동일 분포라는 모형이 옳다는 전제 아래에서만 성립한다. 순서를 버리면 연속된 결과가 서로 얽혀 있는지, 중간에 확률이 바뀌었는지를 검증할 방법 자체가 사라진다. 모형이 맞는지 확인하는 데 필요한 정보와 모수를 추정하는 데 필요한 정보가 다르다는 것이 요점이다.

이 내용 다시 읽기 →

최대우도추정(MLE)과 적률법(MoM): 추정량을 체계적으로 찾는 두 가지 방법

원문 읽기 →
개념 확인구조

우도 함수는 확률밀도함수와 식이 똑같다. 두 함수는 무엇이 다른가?

  1. 우도 함수는 로그를 취한 형태이고 확률밀도함수는 그렇지 않다.

    로그를 취한 것은 로그우도라는 별도의 이름을 갖는다. 로그는 계산 편의를 위한 변환이지 두 함수를 가르는 기준이 아니다.

  2. 우도 함수는 모수에 대해 적분하면 1이 된다.

    1이 되는 것은 확률밀도함수를 데이터에 대해 적분했을 때다. 우도를 모수에 대해 적분한 값에는 아무 제약이 없고, 그래서 우도는 확률이 아니다.

  3. 정답우도는 데이터를 고정하고 모수의 함수로 읽는다.

    확률밀도함수는 모수를 고정하고 데이터가 어떻게 나올지를 말한다. 우도는 이미 관측된 데이터를 고정한 채 어떤 모수가 그 데이터를 잘 설명하는지를 잰다. 같은 식을 어느 축에서 읽느냐의 차이다.

  4. 우도 함수는 이산분포에만 쓰고 확률밀도함수는 연속분포에만 쓴다.

    우도는 이산과 연속을 가리지 않는다. 연속분포에서는 밀도값의 곱으로, 이산분포에서는 확률의 곱으로 만들어질 뿐 개념은 같다.

해설

우도 함수와 확률밀도함수는 같은 식을 어느 쪽에서 읽느냐의 차이다. 확률밀도함수는 모수를 고정하고 데이터의 함수로 보므로 데이터에 대해 적분하면 1이 된다. 우도 함수는 관측된 데이터를 고정하고 모수의 함수로 보므로 모수에 대해 적분해도 1이 되지 않고 값 자체도 확률이 아니다. 이 구분이 중요한 이유는 우도값을 확률처럼 읽으려는 유혹이 계속 생기기 때문이다. 연속분포에서는 우도가 1을 넘을 수 있고, 관측이 늘수록 곱이 급격히 작아져 언더플로가 난다. 우도에서 의미가 있는 것은 절대값이 아니라 서로 다른 모수 값 사이의 비이고, 그래서 로그를 취해 차이로 다루는 편이 자연스럽다.

이 내용 다시 읽기 →
상황 적용함정

정규분포에서 σ²의 MLE는 n으로 나눈 값이라 비편향 추정량이 아니다. 이 사실이 알려주는 것은 무엇인가?

  1. 정답MLE가 언제나 비편향인 것은 아니다. 최적성은 표본이 커질 때의 성질이다.

    MLE가 보장하는 일치성, 점근 정규성, 점근 효율성은 모두 n이 커질 때의 이야기다. 유한 표본에서 비편향이라는 약속은 어디에도 없고, 지수분포의 λ 추정도 같은 예다.

  2. 유도 과정에 실수가 있었고 올바른 MLE는 n-1로 나눈 값이다.

    로그우도를 σ²으로 편미분해 0으로 놓으면 n으로 나눈 값이 정확한 해다. n-1로 나눈 값은 우도를 최대화하지 않으며, 비편향성이라는 다른 기준에서 나온 추정량이다.

  3. 정규분포에서는 MLE와 적률법이 서로 다른 답을 준다는 뜻이다.

    정규분포에서는 두 방법이 정확히 같은 추정량을 준다. 둘 다 n으로 나눈 값이라 편향도 같이 가진다.

  4. MLE가 일치추정량이 아니라는 뜻이다.

    편향이 -σ²/n이라 표본이 커지면 0으로 사라지므로 일치성은 온전하다. 편향이 있다는 것과 수렴하지 않는다는 것은 다른 이야기다.

해설

MLE의 강점인 일치성, 점근 정규성, 점근 효율성은 모두 표본이 커질 때 성립하는 성질이다. 유한 표본에서 비편향이라는 보장은 없고 정규분포의 σ² 추정이 그 반례다. 지수분포의 λ 추정도 마찬가지로 편향이 있다. 실무에서 이 사실이 중요해지는 지점은 표본이 작은 경우다. n이 10 안팎이면 편향이 10% 수준이라 무시하기 어렵고, 이때는 보정을 넣거나 유한 표본 성질을 직접 확인해야 한다. 다만 편향을 없애는 것이 언제나 이득은 아니다. 편향된 MLE의 MSE가 비편향 추정량보다 작은 경우도 흔하므로, 무엇을 최소화할지 정하고 나서 고르는 것이 순서다.

이 내용 다시 읽기 →
상황 적용구조
정규분포에서 σ²의 MLE를 이미 구해두었다. 이번에는 표준편차 σ의 MLE가 필요해졌다.

무엇을 하면 되는가?

  1. σ를 모수로 삼아 로그우도를 다시 세우고 최대화해야 한다.

    다시 풀어도 같은 답이 나온다. 단조 변환은 최댓값의 위치를 옮기지 않으므로 σ²에서 최대이던 지점의 제곱근이 σ에서도 최대다. 계산만 두 번 하는 셈이다.

  2. 정답이미 구한 값의 제곱근을 취하면 된다. MLE는 함수 변환을 그대로 통과한다.

    불변성이라 부르는 성질이고, θ의 MLE가 있으면 g(θ)의 MLE는 g를 그대로 씌운 값이 된다. 우도를 다시 최대화할 필요가 없다. MLE의 성질 가운데 표본 크기와 무관하게 성립하는 유일한 것이기도 하다.

  3. 제곱근을 취한 뒤 젠슨 부등식만큼 보정해야 한다.

    그 보정은 비편향성을 유지하려 할 때 필요한 것이다. MLE는 비편향성을 목표로 하지 않으므로 보정 없이 제곱근만 취하는 것이 정확히 MLE다.

  4. σ의 MLE는 존재하지 않으므로 모수화를 σ²으로 고정해야 한다.

    모수를 어떻게 표기하든 같은 분포족이라 MLE는 항상 존재한다. 불변성이 보장하는 것이 바로 모수화를 바꿔도 결과가 일관된다는 점이다.

해설

불변성은 MLE의 성질 가운데 실무에서 가장 자주 쓰이면서 표본 크기와 무관하게 성립하는 유일한 것이다. σ²의 MLE를 구했으면 σ의 MLE는 그 제곱근이고, 오즈나 로그오즈가 필요하면 p의 MLE를 그 식에 넣으면 된다. 다시 최대화할 필요가 없는 이유는 단조 변환이 최댓값의 위치를 옮기지 않기 때문이다. 여기서 비편향성과의 대조가 선명해진다. 비편향성은 비선형 변환을 통과하지 못해 S²이 비편향이어도 S는 아니지만 MLE는 통과한다. 변환된 값을 다뤄야 하는 상황이라면 MLE 쪽이 훨씬 다루기 편하고, 로지스틱 회귀의 계수를 오즈비로 바꿔 보고하는 것도 이 성질에 기대고 있다.

이 내용 다시 읽기 →
상황 적용판단
전환율 p를 추정하려 한다. 사전 정보로는 p가 0.5 근처일 수도 있고 0.02 근처일 수도 있다. 두 경우 모두 추정량의 표준오차를 같은 절대값으로 맞추려 한다.

어느 쪽이 표본을 더 많이 필요로 하는가?

  1. p가 0.02인 쪽이다. 희귀한 사건일수록 관측이 적어 추정이 어렵다.

    상대 정밀도를 기준으로 하면 맞는 이야기지만 여기서는 절대 정밀도를 맞추려 한다. 표준오차의 절대값만 놓고 보면 분자인 p(1-p)가 작은 쪽이 유리하다.

  2. 표본 크기는 p와 무관하게 목표 정밀도만으로 정해진다.

    베르누이의 분산이 p(1-p)라 p가 계산에 직접 들어간다. 표본 크기 산정에서 예상 전환율을 먼저 묻는 이유가 이것이다.

  3. 둘 다 같다. 피셔 정보량은 표본 크기에만 의존한다.

    피셔 정보량은 관측 하나가 담는 정보라 모수 값에 따라 달라진다. 표본 크기는 그 값을 n배 하는 역할만 한다.

  4. 정답p가 0.5인 쪽이다. p(1-p)가 최대라 표본이 약 13배 필요하다.

    표준오차의 제곱이 p(1-p)/n이고 p = 0.5에서 0.25, p = 0.02에서 0.0196이다. 같은 값으로 맞추려면 n의 비가 0.25/0.0196 = 12.8이 된다. 피셔 정보 1/(p(1-p))가 p = 0.5에서 최소가 된다는 사실의 다른 표현이다.

해설

피셔 정보량은 관측 하나가 모수에 대해 담고 있는 정보의 양이고 그 역수가 필요한 표본 크기를 정한다. 베르누이에서 정보량이 p = 0.5일 때 가장 적고 극단으로 갈수록 많아지므로, 절대 정밀도를 기준으로 하면 공정한 동전 쪽이 표본을 훨씬 많이 요구한다. 다만 실무에서 관심 있는 것이 절대 오차가 아니라 상대 오차인 경우가 많고 그러면 결론이 뒤집힌다. 변동계수는 √((1-p)/(np))라 p가 작을수록 커지므로, 전환율 2%를 상대오차 5%로 재려면 오히려 표본이 수십 배 더 필요하다. 표본 크기를 정하기 전에 절대 정밀도와 상대 정밀도 가운데 무엇을 목표로 하는지 못박아야 하는 이유가 여기 있다.

이 내용 다시 읽기 →
분석과 판단진단
Uniform(0, θ)에서 표본 5개를 뽑아 0.3, 0.5, 0.6, 0.9, 2.4를 얻었다. 적률법은 E[X] = θ/2에서 출발하므로 추정값이 2 × 0.94 = 1.88이다.

이 추정값의 문제는 무엇인가?

  1. 표본이 5개로 너무 작아 적률법을 적용할 수 없다.

    표본 크기와 무관하게 같은 모순이 생길 수 있다. 최댓값이 2X̄를 넘는 표본은 n이 얼마든 나올 수 있고, 문제는 크기가 아니라 방법이 제약을 보지 않는다는 데 있다.

  2. θ̂이 표본 평균의 두 배라 항상 과대추정하는 구조다.

    적률법 추정량은 기댓값이 정확히 θ라 비편향이다. 여기서 드러난 것은 치우침이 아니라 개별 표본에서 데이터와 모순될 수 있다는 성질이다.

  3. 정답관측된 2.4가 추정된 분포에서는 나올 수 없는 값이다.

    θ = 1.88이라면 이 분포의 최댓값은 1.88이므로 2.4는 발생할 수 없는 관측이다. 적률법은 평균만 맞출 뿐 데이터가 θ에 거는 제약, 즉 θ가 최댓값 이상이어야 한다는 사실을 전혀 보지 않는다.

  4. 균일분포에는 적률이 존재하지 않아 적률법이 정의되지 않는다.

    균일분포의 적률은 모두 유한하고 계산도 간단하다. 적률법이 적용되지 않는 것이 아니라 적용한 결과가 데이터와 어긋나는 것이다.

해설

적률법은 적률을 맞추기만 할 뿐 데이터가 모수에 거는 제약을 보지 않는다. 표본 최댓값 2.4는 θ가 적어도 2.4 이상이라는 정보를 담고 있는데, 평균만 보는 추정량은 이를 통째로 무시한다. MLE는 같은 자리에서 우도가 최대가 되는 최댓값 2.4를 주므로 이런 모순이 없다. 다만 MLE도 완벽하지는 않다. 표본 최댓값은 언제나 θ 이하라 체계적으로 과소추정하고, 그래서 (n+1)/n을 곱해 보정한다. 적률법의 값어치는 정확성이 아니라 닫힌 해가 곧바로 나온다는 데 있으므로, 반복 최적화가 필요한 MLE의 초기값으로 쓰는 것이 실용적인 용법이다.

이 내용 다시 읽기 →
분석과 판단진단
Uniform(0, θ)의 MLE는 표본 최댓값이다. 이 추정량은 표준적인 1/√n이 아니라 1/n 속도로 θ에 다가가고, 그 분포도 정규분포와 닮지 않았다.

여기서 무너진 것은 무엇인가?

  1. 일치성이 무너져 표본을 늘려도 참값에 다가가지 않는다.

    1/n 속도로 수렴한다는 서술 자체가 일치성이 살아 있다는 뜻이다. 오히려 표준적인 경우보다 빠르게 수렴한다.

  2. 정답점근 정규성이 무너졌다. 서포트가 θ에 의존해 정규 조건을 만족하지 못한다.

    MLE의 점근 성질은 서포트가 모수에 의존하지 않고 로그우도가 충분히 미분 가능하다는 조건 위에 서 있다. 균일분포는 θ가 곧 값의 상한이라 첫 조건부터 깨진다. 무너지는 것은 분포의 모양이지 수렴 자체가 아니다.

  3. 크래머-라오 하한에 도달하지 못해 비효율적인 추정량이 되었다.

    도달하지 못하는 것이 아니라 하한이 무의미해진다. 하한을 유도할 때 쓰는 미분과 적분의 교환이 성립하지 않기 때문이고, 실제로 보정한 추정량의 분산은 형식적으로 계산한 하한보다 훨씬 작다.

  4. MLE가 존재하지 않아 표본 최댓값을 임시 대안으로 쓴 것이다.

    표본 최댓값은 임시방편이 아니라 우도를 정확히 최대화하는 값이다. θ가 최댓값보다 작으면 우도가 0이고 클수록 우도가 줄어들므로 최댓값에서 정확히 최대가 된다.

해설

균일분포는 서포트가 모수에 의존해 정규 조건을 깨뜨린다. 그 결과 무너지는 것은 점근 정규성이지 일치성이 아니다. 표본 최댓값은 여전히 θ로 수렴하고 오히려 표준적인 1/√n보다 빠른 1/n 속도로 간다. 크래머-라오 하한도 도달하지 못하는 것이 아니라 아예 무의미해지며, 보정한 추정량의 분산은 형식적으로 계산한 하한보다 작다. 여기서 얻을 교훈은 점근 결과를 조건 확인 없이 가져다 쓰면 안 된다는 것이다. 표준오차를 피셔 정보로 계산하거나 신뢰구간을 정규 근사로 만드는 관행은 이런 모형에서 통하지 않고, 경계에 놓인 모수를 다루는 문제에서 같은 함정이 반복된다.

이 내용 다시 읽기 →

신뢰구간(Confidence Interval): 추정의 불확실성을 수량화하는 방법

원문 읽기 →
개념 확인함정

어떤 모평균의 95% 신뢰구간으로 [3.2, 5.8]을 얻었다. 이 결과를 정확히 옮긴 문장은 무엇인가?

  1. 참 모수가 이 구간 안에 있을 확률이 95%다.

    빈도주의에서 모수는 미지이지만 고정된 상수라 확률변수가 아니다. 이미 계산된 구간에 대해 참값은 안에 있거나 없거나 둘 중 하나이고 그 사이에 확률이 들어설 자리가 없다. 모수에 확률을 부여하려면 베이지안의 신용구간이 필요하다.

  2. 정답같은 방식으로 표본을 반복해 구간을 만들면 그중 약 95%가 참값을 담는다.

    확률이 걸리는 대상은 표본에 따라 움직이는 구간의 양 끝이다. 95%는 이 구간을 만들어낸 절차의 장기 성공률을 가리키고, 개별 구간 하나에 대한 진술이 아니다.

  3. 표본 관측값의 95%가 3.2와 5.8 사이에 들어 있다.

    그것은 데이터의 분포를 말하는 구간이고 이름도 다르다. 신뢰구간은 개별 관측이 아니라 모평균이라는 하나의 값을 겨냥한다.

  4. 같은 표본으로 다시 계산하면 95% 확률로 같은 구간이 나온다.

    같은 표본에 같은 공식을 적용하면 언제나 똑같은 구간이 나온다. 흔들리는 것은 계산이 아니라 어떤 표본이 뽑히느냐다.

해설

신뢰구간에서 확률이 걸리는 대상은 구간이지 모수가 아니다. 빈도주의에서 모수는 고정된 상수이고 표본에 따라 움직이는 것은 구간의 양 끝뿐이다. 95%가 가리키는 것은 이 구간을 만들어낸 절차의 장기 성공률이다. 모수 자체에 확률을 부여하고 싶다면 베이지안의 신용구간을 써야 하고, 그 값은 사전분포를 무엇으로 두느냐에 따라 달라진다. 실무 보고에서 이 둘을 섞어 말하는 일이 잦은데 계산 방식도 다르고 답하는 질문도 다르다. 다만 표본이 크고 사전분포가 약하면 두 구간의 수치가 거의 같아지므로, 실용적인 차이보다 해석의 차이가 크다.

이 내용 다시 읽기 →
상황 적용구조
n = 12, 표본평균 104.44, 표본표준편차 11.16인 데이터로 95% 구간을 두 방식으로 구했다. t 기준 (df = 11, 임계값 2.201) [97.35, 111.53] 폭 14.19 z 기준 (임계값 1.960) [98.12, 110.76] 폭 12.63

t 구간이 12% 더 넓은 이유는 무엇인가?

  1. t 분포의 중심이 0이 아니라 구간의 위치가 옮겨졌기 때문이다.

    t 분포도 0을 중심으로 좌우 대칭이다. 두 구간의 중심은 104.44로 같고 달라진 것은 폭뿐이다.

  2. 표본이 12개로 작아 중심극한정리가 성립하지 않기 때문이다.

    모집단이 정규라면 표본이 작아도 표본평균이 정확히 정규를 따르므로 중심극한정리가 필요하지도 않다. t를 써야 하는 이유는 분자가 아니라 분모에 있다.

  3. t 분포를 쓰면 신뢰 수준이 자동으로 더 높게 잡히기 때문이다.

    두 구간 모두 95% 수준으로 계산했다. 같은 수준에서 임계값이 다른 것이지 수준이 달라진 것이 아니다.

  4. 정답σ를 모르고 표본표준편차로 대체했기 때문이다.

    분모가 상수 σ일 때는 표준정규를 따르지만 확률변수 S로 바뀌면 꼬리가 더 두꺼운 t 분포가 된다. 같은 95%를 담으려면 더 멀리까지 가야 하므로 임계값이 1.960에서 2.201로 커진다. 그 차이가 구간 폭 12%로 나타난다.

해설

σ를 모르면 표본 표준편차로 대체해야 하고, 그 값 자체가 표본마다 흔들리는 확률변수라 불확실성이 하나 더 얹힌다. 그래서 통계량이 표준정규가 아니라 꼬리가 두꺼운 t 분포를 따르고 같은 신뢰 수준에서 임계값이 커진다. 이 차이는 표본이 작을수록 크다. n = 5면 임계값이 2.776까지 올라가지만 n = 100이면 1.984로 z와 거의 같아진다. 자유도가 30을 넘으면 z를 써도 무방하다는 것이 흔한 실무 규칙이지만, 계산 비용이 다르지 않으므로 σ를 모르는 상황에서는 그냥 t를 쓰는 편이 안전하다. 자유도가 1이면 t가 코시 분포가 되어 평균조차 존재하지 않는다는 점도 이 분포가 얼마나 무거운 꼬리를 갖는지 보여준다.

이 내용 다시 읽기 →
상황 적용판단
새 기능의 오류율을 보려고 요청 200건을 표본으로 뽑았더니 오류가 1건이다. p̂ = 0.005이고 Wald 공식으로 95% 구간을 계산하면 [-0.0048, 0.0148]이 나온다. 음수를 0으로 자르면 [0, 0.015]다.

이 구간을 그대로 보고하면 안 되는 이유는 무엇인가?

  1. 표본 200건이 너무 적어 어떤 방법으로도 구간을 만들 수 없다.

    200건으로도 Wilson이나 Clopper-Pearson은 정상적인 구간을 준다. 문제는 표본 크기가 아니라 p̂이 경계에 붙었을 때 Wald의 근사가 무너진다는 데 있다.

  2. 정답정규 근사가 p̂이 0에 가까울 때 무너지기 때문이다.

    Wald는 p̂ 주위의 정규 근사에 기대는데 p̂이 0 근처면 그 근사가 나쁘다. 하한이 모수 공간을 벗어나는 것이 그 증상이고, 잘라낸다고 해서 커버리지가 회복되지 않는다. Wilson은 분모에 p̂ 대신 p를 두고 풀어 경계 근처에서도 안쪽에 머문다.

  3. 하한을 0으로 자르면 신뢰 수준이 오히려 97.5%로 올라가 지나치게 보수적이 된다.

    자른다고 신뢰 수준이 올라가지 않는다. 구간이 애초에 잘못된 위치에 놓여 있어서 실제 커버리지는 명목 95%에 오히려 못 미친다.

  4. 음수가 나온 것은 반올림 탓이고 정밀도를 높여 계산하면 양수가 된다.

    p̂ = 0.005에 표준오차의 1.96배인 0.0098을 빼면 정확히 계산해도 음수다. 수치 문제가 아니라 공식 자체가 이 영역에서 맞지 않는다.

해설

Wald 구간은 정규 근사에 기대므로 p̂이 0이나 1에 가까우면 무너진다. 여기서는 하한이 모수 공간을 벗어났고, 이를 0으로 자른다고 해서 실제 커버리지가 회복되지는 않는다. 구간이 잘못된 위치에 놓여 있기 때문이다. Wilson 구간은 분모에 추정값 대신 모수를 두고 이차방정식을 풀어 얻으므로 경계 근처에서도 안쪽에 머물고, Clopper-Pearson은 이항분포의 정확한 분위수를 써서 커버리지를 보장한다. 전환율이나 오류율처럼 비율이 극단적으로 작은 지표를 다룬다면 Wilson을 기본으로 두는 편이 낫고, statsmodels의 proportion_confint에 method 인자로 wilson을 넘기면 된다.

이 내용 다시 읽기 →
상황 적용구조
정규 모집단에서 20개를 뽑아 표본분산 23.04를 얻었다. 모분산의 95% 신뢰구간은 [13.33, 49.15]다. 점추정값에서 아래로 9.7, 위로 26.1만큼 뻗어 있다.

이 구간이 점추정값을 중심으로 대칭이 아닌 이유는 무엇인가?

  1. 정답피벗으로 쓰는 카이제곱 분포 자체가 비대칭이기 때문이다.

    (n-1)S²/σ²이 카이제곱 분포를 따르는데 이 분포는 오른쪽으로 길게 늘어져 있다. 양쪽 꼬리에서 잘라낸 분위수의 크기가 다르므로 그것을 뒤집어 얻은 구간도 대칭이 되지 않는다.

  2. 표본분산 23.04가 참값보다 작게 나와 구간이 한쪽으로 밀렸기 때문이다.

    표본분산이 얼마든 구간은 그 값에 비례해 늘어날 뿐이라 비대칭의 정도는 그대로다. 값이 아니라 분포의 모양이 원인이다.

  3. 신뢰 수준을 양쪽 꼬리에 균등하게 나누지 않았기 때문이다.

    양쪽에 2.5%씩 균등하게 나눴다. 확률을 같게 나눠도 비대칭 분포에서는 잘라낸 지점까지의 거리가 서로 다르다.

  4. 분산은 음수가 될 수 없어 하한이 0에서 막혔기 때문이다.

    하한 13.33은 0에서 한참 떨어져 있어 경계에 걸린 것이 아니다. 경계 제약이 없어도 이 구간은 비대칭이다.

해설

카이제곱 분포는 오른쪽으로 길게 늘어진 비대칭 분포다. 피벗이 이 분포를 따르므로 양쪽 꼬리에서 잘라낸 분위수의 크기가 서로 다르고, 그 결과 구간도 점추정값을 중심으로 대칭이 되지 않는다. 폭 자체도 눈여겨볼 만하다. 참값의 절반에서 두 배에 걸쳐 있어 분산 추정이 평균 추정보다 훨씬 어렵다는 것을 보여주는데, 편차를 제곱해 다루므로 극단값 하나가 크게 영향을 주기 때문이다. 게다가 이 구간은 정규성 가정에 매우 민감하다. 모집단이 정규가 아니면 커버리지가 크게 어긋나므로, 분포를 확신할 수 없다면 부트스트랩으로 구간을 만드는 편이 안전하다.

이 내용 다시 읽기 →
분석과 판단진단
일별 활성 사용자 수 90일치로 평균의 95% 신뢰구간을 만드는 절차를 여러 기간에 반복 적용해 커버리지를 재봤다. 명목은 95%인데 실측은 62%였다.

가장 그럴듯한 원인은 무엇인가?

  1. 정답관측이 서로 이어져 있어 유효 표본 크기가 90보다 훨씬 작다.

    일별 사용자 수는 어제 값과 강하게 붙어 있어 90개가 담은 정보가 독립인 90개보다 적다. 표준오차를 S/√90으로 잡으면 실제보다 작게 나와 구간이 좁아지고 커버리지가 무너진다. 커버리지가 명목보다 크게 낮으면 독립성부터 의심하는 것이 순서다.

  2. 표본 90개는 중심극한정리를 적용하기에 부족하다.

    부족했다면 커버리지가 조금 어긋나는 수준이지 33%p나 벌어지지 않는다. 게다가 일별 집계값 자체가 이미 많은 개별 이벤트의 합이라 정규에 가깝다.

  3. t 대신 z를 써서 임계값이 작아졌다.

    자유도 89에서 t 임계값은 1.987로 z의 1.960과 1.4%밖에 차이 나지 않는다. 이 정도로는 커버리지가 62%까지 내려가지 않는다.

  4. 분포가 오른쪽으로 치우쳐 있어 구간의 중심이 밀렸다.

    치우침은 구간을 좌우로 조금 어긋나게 만들지만 폭을 절반으로 줄이지는 않는다. 커버리지가 이만큼 무너지는 것은 폭 자체가 잘못 계산됐다는 신호다.

해설

모든 표준 신뢰구간 공식은 관측이 서로 독립이라는 전제 위에 서 있다. 시계열은 오늘 값이 어제 값과 강하게 이어져 있어 90개의 관측이 담은 정보가 독립인 90개보다 훨씬 적다. 표준오차를 √90으로 나눠 계산하면 실제보다 작게 나오고 구간이 그만큼 좁아지므로 커버리지가 명목 수준에 한참 못 미친다. 대처는 두 갈래다. 자기상관을 반영한 표준오차를 쓰거나, 블록 부트스트랩처럼 연속된 덩어리를 통째로 재표집해 의존 구조를 보존하는 것이다. 같은 함정이 실험 분석에서도 반복된다. 사용자 단위가 아니라 요청 단위로 표본을 세면 한 사용자의 여러 요청이 독립으로 취급되어 구간이 실제보다 좁아진다.

이 내용 다시 읽기 →
분석과 판단판단
두 실험의 전환율 개선 추정과 95% 신뢰구간이 이렇다. 실험 A 추정 +0.4%p CI [-0.1%p, +0.9%p] 실험 B 추정 +0.4%p CI [-4.6%p, +5.4%p] 두 구간 모두 0을 포함한다. 의미 있는 개선의 기준은 +1.0%p로 정해져 있다.

두 결과를 같은 결론으로 묶어도 되는가?

  1. 묶어도 된다. 둘 다 0을 포함하므로 효과가 없다는 결론이 같다.

    0을 포함한다는 것은 효과가 0일 가능성을 배제하지 못했다는 뜻이지 효과가 없다는 증거가 아니다. 두 실험은 배제한 범위가 전혀 다르므로 같은 문장으로 요약할 수 없다.

  2. 묶어도 된다. 점추정이 둘 다 +0.4%p로 같으므로 효과 크기가 같다.

    점추정이 같아도 그 값을 얼마나 믿을 수 있는지가 다르다. 구간의 폭이 바로 그 정보를 담고 있고, 여기서는 열 배 넘게 차이 난다.

  3. 안 된다. B의 구간이 넓으므로 효과가 없다는 결론이 더 강하다.

    방향이 반대다. 구간이 넓다는 것은 아는 것이 적다는 뜻이라 어떤 결론도 강하게 내릴 수 없다.

  4. 정답안 된다. A는 기준인 +1.0%p를 배제했고 B는 어떤 효과도 배제하지 못했다.

    A의 상한 +0.9%p는 의미 있는 개선의 기준선 아래라 실질적으로 효과가 없다고 말할 수 있다. B의 상한 +5.4%p는 큰 개선까지 열어두므로 실험이 아직 답을 주지 못한 상태다. 같은 유의하지 않음이라도 하나는 효과 없음이고 다른 하나는 정보 없음이다.

해설

구간이 0을 포함한다는 것은 효과가 0일 가능성을 배제하지 못했다는 뜻이지 효과가 없다는 증거가 아니다. 두 실험의 차이는 무엇을 배제했는가에 있다. A는 효과가 아무리 커도 0.9%p를 넘지 않는다고 말하므로, 1.0%p 이상이어야 의미가 있는 상황에서는 사실상 결론을 내린 셈이다. B는 5.4%p까지 열어두었으므로 큰 효과도 배제하지 못했고, 실험이 답을 주지 못했다는 뜻이다. p값만 보고하면 두 상황이 유의하지 않음이라는 한 단어로 뭉개진다. 결과를 구간으로 보고해야 하는 실질적인 이유가 여기 있고, 실험을 더 돌릴지 접을지를 가르는 판단도 이 구분에서 나온다.

이 내용 다시 읽기 →

가설검정(Hypothesis Testing): 데이터로 주장을 검증하는 체계적 프레임워크

원문 읽기 →
개념 확인함정

어떤 검정에서 p = 0.03을 얻었다. 이 값이 정확히 뜻하는 것은 무엇인가?

  1. 귀무가설이 참일 확률이 3%다.

    p값은 데이터에 걸린 확률이지 가설에 걸린 확률이 아니다. 가설이 참일 확률을 구하려면 사전확률이 필요하고 그것은 베이즈 정리의 영역이다.

  2. 정답귀무가설이 참이라면 이 정도로 극단적인 데이터가 나올 확률이 3%다.

    귀무가설을 조건으로 두고 관측된 것만큼 또는 그보다 더 극단적인 결과가 나올 확률이 정의다. 조건이 가설이고 확률이 걸린 대상은 데이터다.

  3. 대립가설이 참일 확률이 97%다.

    앞의 오해를 뒤집어 말한 것이라 같은 오류다. p값에서 어느 가설의 확률도 곧바로 읽어낼 수 없다.

  4. 같은 실험을 반복하면 97%에서 같은 결론이 나온다.

    재현 확률은 p값이 아니라 검정력이 결정한다. p = 0.03인 결과를 그대로 재현할 확률은 대개 50%대에 머문다.

해설

p값은 데이터에 대한 확률이지 가설에 대한 확률이 아니다. 정확히는 귀무가설이 참이라는 조건 아래에서 관측된 것만큼 극단적인 결과가 나올 확률이고, 조건과 결과를 뒤집어 읽는 것이 이 지표를 둘러싼 모든 오해의 출발점이다. 가설이 참일 확률을 알고 싶다면 사전확률이 필요하며 그것이 베이지안의 영역이다. 같은 p값이라도 검정한 가설이 애초에 얼마나 그럴듯했느냐에 따라 사후확률이 크게 달라진다. 사전확률이 매우 낮은 가설에서는 p = 0.03이 나와도 그 발견이 진짜일 확률이 절반에 못 미칠 수 있고, 이것이 재현성 위기의 통계적 배경이다.

이 내용 다시 읽기 →
상황 적용판단
각 그룹 30명으로 A/B 테스트를 돌려 p = 0.42를 얻었다. 팀은 새 버전이 기존과 차이가 없음이 확인됐다고 결론지었다. 목표로 삼은 효과 크기에 대해 이 설계의 검정력을 계산하니 0.19였다.

이 결론의 문제는 무엇인가?

  1. p = 0.42는 0.5보다 작으므로 오히려 차이가 있다는 증거다.

    0.5는 아무 기준도 아니다. p값은 유의수준과 견주는 것이고 0.42는 0.05를 한참 넘으므로 기각할 근거가 없다.

  2. 유의수준을 0.10으로 올렸다면 기각됐을 것이므로 수준 설정이 문제다.

    0.42는 0.10으로 올려도 기각되지 않는다. 게다가 결과를 본 뒤 유의수준을 조정하는 것은 그 자체로 절차 위반이다.

  3. 정답기각하지 못한 것과 차이가 없는 것은 다르다. 검정력 0.19면 효과가 있어도 대부분 놓친다.

    검정력 0.19는 실제로 효과가 있어도 다섯 번 중 네 번은 잡아내지 못하는 설계라는 뜻이다. 이런 실험에서 유의하지 않다는 결과는 정보를 거의 담고 있지 않다. 증거 불충분으로 무죄가 결백의 증명이 아닌 것과 같다.

  4. 표본 30명이면 중심극한정리가 성립하므로 검정 자체에는 문제가 없다.

    검정 절차가 유효한 것과 그 결과에서 결론을 끌어낼 수 있는 것은 다른 문제다. 계산은 정당해도 설계가 효과를 잡아낼 힘이 없으면 결론을 지탱하지 못한다.

해설

기각하지 못했다는 것은 기각할 만큼의 증거가 없다는 뜻이지 귀무가설이 참이라는 증거가 아니다. 검정력이 0.19라면 실제로 효과가 있어도 다섯 번 중 네 번은 놓치는 설계이므로 유의하지 않다는 결과에서 얻을 정보가 거의 없다. 차이가 없다고 말하려면 애초에 그렇게 설계했어야 한다. 검출하고 싶은 최소 효과 크기를 먼저 정하고 그것을 80% 이상으로 잡아낼 표본을 확보한 뒤에야, 유의하지 않다는 결과가 효과가 그 크기보다 작다는 뜻을 갖는다. 실무에서는 신뢰구간을 함께 보는 것이 이 판단을 훨씬 쉽게 만든다. 구간의 폭이 곧 이 실험이 무엇을 배제할 수 있었는지를 보여주기 때문이다.

이 내용 다시 읽기 →
상황 적용구조
볼트 길이 표본에서 표본평균 10.77과 95% 신뢰구간 [10.11, 11.42]를 얻었다. 이제 H₀: μ = 10을 유의수준 0.05의 양측검정으로 판정하려 한다.

이 구간만 보고 검정 결과를 알 수 있는가?

  1. 정답알 수 있다. 10이 구간 밖에 있으므로 기각된다.

    95% 신뢰구간 밖의 값을 귀무가설로 세우면 유의수준 0.05에서 반드시 기각된다. 두 절차가 같은 계산을 다르게 표현한 것이기 때문이다. 실제로 p값을 구하면 0.022가 나와 결론이 일치한다.

  2. 알 수 없다. 검정 통계량과 p값을 따로 계산해야 한다.

    기각 여부만 알면 되는 상황에서는 다시 계산할 필요가 없다. p값이 정확히 얼마인지를 알고 싶다면 계산이 필요하지만 기각 여부는 구간으로 결정된다.

  3. 알 수 있다. 10이 하한 10.11에 가까우므로 기각되지 않는다.

    가깝다는 것은 판정 기준이 아니다. 구간 안이냐 밖이냐만이 기준이고 10은 밖이다. 가까운 만큼 p값이 0.05에 근접할 뿐이다.

  4. 알 수 없다. 구간은 양측인데 검정은 단측일 수 있어 서로 대응하지 않는다.

    형태가 맞아야 한다는 지적은 옳지만 여기서는 둘 다 양측이라 문제가 없다. 단측 검정에는 단측 구간이 대응한다.

해설

신뢰구간과 가설검정은 같은 계산을 다르게 표현한 것이다. 95% 구간 밖의 값을 귀무가설로 세우면 유의수준 0.05에서 반드시 기각되고, 안에 있는 값은 반드시 기각되지 않는다. 대응이 성립하려면 양쪽이 같은 형태여야 한다는 단서가 붙어서, 양측 구간은 양측 검정에 단측 구간은 단측 검정에 짝지어진다. 이 관계에서 실용적으로 얻는 것은 구간 하나로 무한히 많은 귀무가설을 한꺼번에 판정할 수 있다는 점이다. p값은 미리 정한 기준값 하나에 대한 답만 주지만 구간을 보고하면 읽는 사람이 자기 기준으로 판단할 수 있다. 결과를 구간으로 내놓는 편이 정보량에서 앞서는 이유가 여기 있다.

이 내용 다시 읽기 →
상황 적용함정
A/B 테스트를 양측으로 검정해 p = 0.078을 얻었다. 담당자가 어차피 새 버전이 더 좋을 것이라 예상했으니 단측으로 바꾸면 p = 0.039가 되어 유의해진다고 제안한다.

이 제안의 문제는 무엇인가?

  1. 단측으로 바꾼다고 p값이 정확히 절반이 되지는 않으므로 계산이 틀렸다.

    귀무분포가 대칭이고 관측된 방향으로 단측을 잡으면 p값은 정확히 절반이 된다. 산술은 맞고 문제는 그 방향을 언제 정했느냐에 있다.

  2. 단측 검정은 표본이 일정 크기 이상일 때만 쓸 수 있다.

    단측과 양측을 가르는 것은 표본 크기가 아니라 대립가설의 형태다. 표본이 작아도 방향이 사전에 정해져 있으면 단측을 쓸 수 있다.

  3. 단측으로 바꾸면 신뢰 수준이 90%로 떨어져 결론을 믿을 수 없다.

    단측 검정에 대응하는 것은 한쪽만 막힌 90% 구간이 아니라 단측 신뢰한계다. 수준이 낮아지는 것이 아니라 관심의 방향이 하나로 좁혀지는 것이다.

  4. 정답방향은 데이터를 보기 전에 정해야 한다.

    결과를 본 뒤 유리한 쪽으로 단측을 고르면 사실상 양쪽 꼬리를 다 열어둔 채 각각 5%를 쓰는 셈이라 실제 위험이 10%가 된다. 선언한 유의수준과 실제 위험이 어긋나므로 검정의 보장이 사라진다.

해설

단측 검정 자체가 잘못된 것은 아니다. 문제는 결과를 보고 나서 방향을 정하는 데 있다. 데이터를 본 뒤 유리한 쪽으로 단측을 고르면 양쪽 꼬리를 모두 열어둔 채 각각 5%를 쓰는 것과 같아 실제 1종 오류율이 두 배가 된다. 선언한 5%와 실제 위험이 어긋나면 검정이 보장하던 것이 사라진다. 이것은 p해킹의 전형적인 형태이고, 유의수준을 나중에 올리거나 유의해질 때까지 표본을 더 모으며 들여다보는 것도 같은 종류다. 방어책은 통계가 아니라 절차에 있다. 가설의 방향, 유의수준, 표본 크기, 중단 규칙을 데이터를 보기 전에 문서로 남겨두는 것이다.

이 내용 다시 읽기 →
분석과 판단판단
사용자 200만 명을 대상으로 한 A/B 테스트에서 전환율이 2.001%에서 2.003%로 올랐다. p = 0.011이고 개선 폭의 95% 신뢰구간은 [+0.0005%p, +0.0035%p]다.

이 결과를 어떻게 읽어야 하는가?

  1. p < 0.05이므로 통계적으로 확인된 개선이니 전면 적용해야 한다.

    p값은 효과가 0이 아닌지만 말해주고 그 크기가 쓸모 있는지는 말해주지 않는다. 배포 여부를 정하는 자리에서 물어야 할 것은 효과가 사업적 기준선을 넘느냐다.

  2. 표본이 너무 커서 p값을 믿을 수 없으니 표본을 줄여 다시 검정해야 한다.

    표본이 크다고 p값이 틀리는 것이 아니라 오히려 더 정확해진다. 표본을 일부러 줄이는 것은 정보를 버려 유의하지 않게 만드는 조작에 가깝다.

  3. 정답효과가 0이 아니라는 것은 확인됐지만 그 크기가 사업적으로 무의미할 만큼 작다.

    표준오차가 √n에 반비례해 줄어들므로 200만 명이면 0.002%p 차이도 잡아낸다. 신뢰구간의 상한이 0.0035%p라 최선의 경우에도 개선 폭이 무시할 만하다는 것이 드러난다. 통계적 유의성과 실질적 유의성은 다른 질문이다.

  4. 구간이 0을 포함하지 않으므로 효과 크기가 크다는 뜻이다.

    0을 포함하지 않는다는 것은 방향이 확실하다는 뜻일 뿐이다. 크기는 구간이 놓인 위치가 말해주고, 여기서는 상한마저 0.0035%p에 그친다.

해설

표본이 충분히 크면 아무리 작은 차이도 통계적으로 유의해진다. 표준오차가 √n에 반비례해 줄어들기 때문이고, 200만 명이면 0.002%p 차이도 잡아낸다. 그래서 p값은 효과가 0이 아닌지를 말해줄 뿐 그 크기가 쓸모 있는지를 말해주지 않는다. 여기서는 신뢰구간이 결정적인 정보를 준다. 상한이 0.0035%p라 최선의 경우에도 개선 폭이 무의미하게 작다는 것이 드러난다. 결과를 보고할 때 p값, 효과 크기, 신뢰구간 셋을 함께 적어야 하는 이유가 이것이다. 배포를 결정하는 자리에서는 유의성이 아니라 효과 크기가 미리 정한 기준선을 넘는지를 물어야 하고, 그 기준선은 통계가 아니라 사업이 정한다.

이 내용 다시 읽기 →
분석과 판단진단
실험 결과를 분석하며 지표 20개를 각각 유의수준 0.05로 검정했다. 그중 하나가 p = 0.03으로 유의하게 나왔고, 보고서에는 그 지표 하나만 담았다.

이 보고의 문제는 무엇인가?

  1. 20개 지표의 p값을 평균 내어 보고해야 한다.

    p값은 평균을 낼 수 있는 종류의 수가 아니다. 각각이 서로 다른 가설에 대한 답이라 평균에는 해석할 의미가 없다.

  2. 정답20번 중 적어도 하나가 유의할 확률이 64%다. 아무 효과가 없어도 이런 결과는 흔하다.

    유의수준 0.05는 검정 하나에 대한 약속이다. 독립인 검정 20번이면 하나도 유의하지 않을 확률이 0.95의 20제곱인 36%뿐이라, 전부 헛것이어도 뭔가 걸릴 확률이 64%다. 유의한 하나만 골라 보고하면 독자는 5% 위험을 감수한 결과로 읽게 된다.

  3. 표본 크기를 20배로 늘리면 이 문제가 사라진다.

    표본을 늘리면 검정력이 오를 뿐 1종 오류율은 유의수준에 고정되어 있다. 여러 번 검정해서 생기는 누적 위험은 표본 크기와 무관하다.

  4. 유의한 것만 고른 것은 문제지만 20개를 검정한 것 자체는 오류율에 영향이 없다.

    누적 위험을 만들어내는 것이 바로 검정 횟수다. 20개를 모두 보고하더라도 그 안에서 유의한 하나를 발견으로 읽는 순간 같은 함정에 빠진다.

해설

유의수준 0.05는 검정 하나에 대한 약속이다. 20번을 검정하면 아무 효과가 없어도 적어도 하나가 유의할 확률이 64%까지 오른다. 유의한 하나만 골라 보고하면 이 사실이 감춰지고 독자는 5% 위험만 감수한 결과로 오해한다. 대처는 두 갈래다. 본페로니처럼 유의수준을 검정 횟수로 나누거나 벤야미니-호흐베르크처럼 거짓 발견 비율을 통제하는 방법을 쓰는 것, 그리고 검정할 지표와 개수를 데이터를 보기 전에 정해두는 것이다. 후자가 더 근본적이다. 사전에 정한 주요 지표 하나와 탐색적으로 훑어본 열아홉 개는 같은 무게로 읽혀서는 안 되고, 후자에서 나온 발견은 확증이 아니라 다음 실험의 가설로 취급해야 한다.

이 내용 다시 읽기 →

t-검정, ANOVA, 카이제곱 검정: 상황별 검정 방법 선택 가이드

원문 읽기 →
개념 확인구조
참가자 15명의 12주 운동 프로그램 참여 전 혈압과 참여 후 혈압을 각각 측정했다. 프로그램에 효과가 있었는지 보려 한다.

어느 검정을 써야 하는가?

  1. 독립 표본 t-검정이다. 전과 후는 서로 다른 시점의 측정이라 독립이다.

    같은 사람의 두 측정은 강하게 연결되어 있어 독립이 될 수 없다. 원래 혈압이 높은 사람은 프로그램 뒤에도 상대적으로 높다.

  2. 일원 ANOVA다. 시점이 두 개이므로 비교할 집단도 두 개다.

    ANOVA는 집단이 셋 이상일 때 쓰는 도구이고, 두 집단에서는 t-검정과 같은 결론을 준다. 게다가 대응 구조를 반영하지 못한다는 문제가 그대로 남는다.

  3. 카이제곱 검정이다. 개선과 미개선으로 나누면 범주형 데이터가 된다.

    연속형 값을 범주로 뭉개면 얼마나 개선됐는지가 통째로 사라진다. 원자료가 연속이면 연속으로 다루는 쪽이 검정력에서 앞선다.

  4. 정답대응 표본 t-검정이다. 같은 사람의 두 측정이라 쌍별 차이를 봐야 한다.

    각 사람의 전후 차이를 구한 뒤 그 평균이 0인지를 보면 개인 간 변동이 계산에서 빠진다. 사람마다 기저 혈압이 다르다는 사실이 잡음으로 들어오지 않으므로 처치 효과를 훨씬 민감하게 잡아낸다.

해설

같은 대상을 두 번 잰 데이터에 독립 표본 검정을 쓰면 사람마다 혈압이 다르다는 사실이 통째로 잡음으로 들어간다. 원래 120인 사람과 160인 사람이 섞여 있으면 그 40의 차이가 집단 내 변동으로 잡혀 처치 효과를 덮어버린다. 대응 검정은 각 사람의 전후 차이만 보므로 개인 간 변동이 빠지고 그만큼 검정력이 오른다. 판단 기준은 관측치를 짝지을 수 있느냐다. 짝을 지을 수 있는데 독립으로 다루면 검정력을 버리는 것이고, 짝이 없는데 대응으로 다루면 계산 자체가 성립하지 않는다. 실험 설계에서 같은 대상을 반복 측정할지 정하는 순간 어느 검정을 쓸지도 함께 정해지는 셈이다.

이 내용 다시 읽기 →
상황 적용함정
# 두 그룹의 표본 표준편차가 크게 다르다 (4.2 vs 18.7)

stats.ttest_ind(a, b)                    # p = 0.031
stats.ttest_ind(a, b, equal_var=False)   # p = 0.094

어느 결과를 보고해야 하는가?

  1. 0.031이다. scipy의 기본값이 곧 표준적인 방법이므로 그것을 따른다.

    기본값은 역사적 관행일 뿐 권장 설정이 아니다. equal_var=True는 두 집단의 분산이 같다고 선언하는 것인데, 표준편차가 4.2와 18.7이면 그 선언이 명백히 사실과 어긋난다.

  2. 정답Welch 쪽인 0.094다. 분산이 크게 다르므로 등분산을 가정한 결과는 믿을 수 없다.

    등분산 가정이 깨지면 합동 분산과 자유도가 모두 왜곡되어 p값이 실제보다 작게 나온다. Welch는 두 집단의 분산을 따로 쓰고 자유도를 근사해 이 문제를 피한다. 여기서는 결론이 뒤집힐 만큼 차이가 벌어졌다.

  3. 두 값의 중간인 0.06 근처로 보고한다.

    p값은 평균을 낼 수 있는 종류의 수가 아니다. 어느 가정 위에서 계산했는지를 정하고 그 하나를 보고해야 한다.

  4. 분산이 다르면 t-검정 자체를 쓸 수 없으므로 둘 다 버려야 한다.

    Welch 방식이 정확히 이 상황을 위해 만들어졌다. 등분산을 요구하는 것은 고전적 Student 방식뿐이다.

해설

scipy의 ttest_ind는 기본값이 등분산을 가정하는 Student 방식이라, 인자를 넘기지 않으면 두 집단의 분산이 같다고 선언한 셈이 된다. 분산이 크게 다르면 이 가정이 표준오차와 자유도를 모두 왜곡해 p값이 실제보다 작아진다. 여기서는 0.031과 0.094로 결론이 갈릴 만큼 벌어졌다. Welch 방식은 두 분산을 따로 쓰고 자유도를 근사해 이 문제를 피하며, 등분산이 실제로 성립하는 경우에도 손실이 무시할 만한 수준이다. 특별한 이유가 없으면 equal_var=False를 기본으로 두는 편이 안전하고, 두 그룹의 크기까지 다르면 차이가 가장 크게 벌어진다.

이 내용 다시 읽기 →
상황 적용판단
비료 세 종류의 수확량을 각 25개 표본으로 비교했다. 평균은 A가 19.5, B가 21.1, C가 24.3이고 일원 ANOVA 결과는 F = 18.15, p = 4.1e-07이다.

이 결과에서 곧바로 내릴 수 있는 결론은 무엇인가?

  1. 정답적어도 한 쌍의 평균이 다르다는 것까지다.

    ANOVA의 귀무가설은 모든 평균이 같다는 것이라, 기각은 그 등식이 어딘가에서 깨졌다는 뜻일 뿐이다. 실제로 Tukey HSD를 돌리면 A와 C, B와 C는 유의하지만 A와 B는 유의하지 않다.

  2. 세 집단의 평균이 모두 서로 다르다.

    F값이 크다고 모든 쌍이 다른 것은 아니다. 한 집단만 크게 벗어나 있어도 F는 충분히 커진다.

  3. 평균이 가장 높은 C가 나머지 둘보다 유의하게 낫다.

    결과적으로는 맞는 진술이지만 ANOVA 하나로는 알 수 없다. 순위는 표본 평균이 알려줄 뿐이고 그 차이가 유의한지는 별도의 절차가 판정한다.

  4. 세 집단의 분산이 서로 다르다.

    ANOVA는 분산을 재료로 쓸 뿐 검정하는 대상은 평균이다. 오히려 등분산은 이 검정이 요구하는 가정 쪽에 속한다.

해설

ANOVA의 귀무가설은 모든 집단의 평균이 같다는 것이므로, 기각은 그 등식이 어딘가에서 깨졌다는 뜻일 뿐 어느 쌍인지는 알려주지 않는다. 실제로 이 데이터에 Tukey HSD를 돌리면 A와 C, B와 C는 유의하지만 A와 B는 그렇지 않다. 사후 검정에 쌍별 t-검정을 그대로 쓰면 안 되는 이유는 검정 횟수만큼 1종 오류가 누적되기 때문이고, Tukey HSD는 모든 쌍을 비교하면서 전체 오류율을 유의수준으로 묶어둔다. 다만 이 방법은 등분산을 전제한다. 집단별 분산이 크게 달라 Welch ANOVA로 갔다면 사후검정도 Games-Howell처럼 등분산을 요구하지 않는 것으로 맞춰야 앞뒤가 맞는다.

이 내용 다시 읽기 →
상황 적용구조
성별과 선호 음료의 분할표에 카이제곱 독립성 검정을 돌렸다. 관측 커피 90 차 60 주스 30 (남성, 합 180) 커피 60 차 80 주스 40 (여성, 합 180) 열 합 커피 150 차 140 주스 70 (전체 360) 기대 커피 75 차 70 주스 35 (두 행 모두 동일)

기대 빈도 75, 70, 35는 어떻게 계산된 값인가?

  1. 각 셀의 관측값을 같은 열의 평균으로 바꾼 값이다.

    이 표에서는 열 평균과 우연히 값이 같지만 행 합이 서로 다르면 어긋난다. 기대 빈도는 행과 열 정보를 모두 써서 만든다.

  2. 전체 합 360을 셀 개수 6으로 나눈 값이다.

    그러면 모든 셀이 60이 되어 표의 값과 맞지 않는다. 균등하게 나누는 것은 주변 합의 차이를 무시하는 계산이다.

  3. 정답행 합과 열 합을 곱해 전체 합으로 나눈 값이다.

    독립이면 결합확률이 주변확률의 곱이므로 행 비율에 열 비율과 전체 수를 곱하면 된다. 정리하면 180 곱하기 150 나누기 360으로 75가 나온다. 관측이 이 값에서 얼마나 벗어났는지를 재는 것이 카이제곱 통계량이다.

  4. 이론적으로 정해둔 비율에 전체 합을 곱한 값이다.

    그 방식은 적합도 검정에서 쓴다. 독립성 검정은 바깥에서 비율을 가져오지 않고 데이터의 주변 합에서 기대 빈도를 만들어낸다.

해설

독립성 검정의 기대 빈도는 두 변수가 독립이라면 각 셀에 몇 개가 들어와야 하는지를 계산한 값이다. 독립이면 결합확률이 주변확률의 곱이므로 행 비율과 열 비율에 전체 수를 곱하면 되고, 정리하면 행 합 곱하기 열 합 나누기 전체 합이다. 적합도 검정과의 차이가 여기서 갈린다. 적합도는 기대 비율을 바깥에서 가져오지만 독립성은 데이터 자체의 주변 합에서 만들어낸다. 자유도도 그래서 달라져 적합도는 범주 수에서 1을 빼고 독립성은 행에서 1을 뺀 값과 열에서 1을 뺀 값의 곱이 된다. 주변 합을 데이터에서 추정하느라 자유도를 더 쓰기 때문이다.

이 내용 다시 읽기 →
분석과 판단함정
두 그룹의 중앙값이 모두 50으로 같은데 한쪽은 40에서 60 사이에 몰려 있고 다른 쪽은 10에서 90까지 넓게 퍼져 있다. Mann-Whitney U 검정 결과는 p = 0.003이다.

이 결과를 어떻게 읽어야 하는가?

  1. 계산이 잘못됐다. 중앙값이 같으면 이 검정이 유의하게 나올 수 없다.

    이 검정이 재는 것이 중앙값이 아니므로 계산에 문제가 없다. 중앙값이 같아도 산포가 다르면 기각될 수 있다.

  2. 정답두 분포의 형태가 같을 때만 위치 차이 검정이 된다.

    Mann-Whitney U가 실제로 판정하는 것은 한 집단에서 뽑은 값이 다른 집단에서 뽑은 값보다 클 확률이 1/2에서 벗어나는지다. 형태가 같다는 조건이 붙어야 이것이 중앙값 비교로 번역된다. 산포가 다르면 그 조건이 깨져 다른 것을 재게 된다.

  3. 비모수 검정이라 중앙값이 아니라 평균을 비교한 것이다.

    이 검정은 원자료를 순위로 바꿔 다루므로 평균도 비교 대상이 아니다. 순위의 합을 통해 확률적 우위를 재는 구조다.

  4. 산포가 다르면 이 검정을 쓸 수 없으므로 t-검정으로 바꿔야 한다.

    t-검정은 평균을 비교하므로 여기서는 다른 질문에 답하게 된다. 위치만 보고 싶다면 검정을 바꾸기보다 중앙값 차이의 구간을 부트스트랩으로 직접 만드는 편이 낫다.

해설

Mann-Whitney U가 실제로 판정하는 것은 한 집단에서 뽑은 값이 다른 집단에서 뽑은 값보다 클 확률이 1/2에서 벗어나는지다. 두 분포의 형태가 같다는 조건이 붙어야 이것이 위치의 차이, 즉 중앙값 비교로 번역된다. 형태가 다르면 중앙값이 같아도 이 확률이 1/2에서 벗어날 수 있고, 산포 차이만으로 기각되는 상황이 그렇게 생긴다. 이 검정을 중앙값 검정이라 부르는 관행이 널리 퍼져 있지만 정확하지 않다. 결과를 중앙값 차이로 보고하려면 두 분포의 모양이 비슷한지를 먼저 확인해야 하고, 위치만 알고 싶다면 부트스트랩으로 중앙값 차이의 구간을 직접 만드는 편이 오해가 없다.

이 내용 다시 읽기 →
분석과 판단진단
표본 12개에 Shapiro-Wilk 검정을 돌려 W = 0.975, p = 0.687을 얻었다. 분석가는 정규성이 확인됐으니 t-검정을 써도 된다고 판단했다.

이 판단의 문제는 무엇인가?

  1. Shapiro-Wilk는 표본 50개 이상에서만 유효하다.

    이 검정은 오히려 소표본을 위해 설계된 편이고 3개부터 쓸 수 있다. 문제는 적용 가능 여부가 아니라 결과를 읽는 방식이다.

  2. p = 0.687은 0.5를 넘으므로 오히려 정규성이 깨졌다는 증거다.

    0.5는 아무 기준도 아니고 방향도 반대다. p가 클수록 정규성과 어긋난 증거가 약하다는 뜻이다.

  3. 정규성 검정 결과와 무관하게 t-검정은 언제나 쓸 수 있다.

    표본이 크면 중심극한정리 덕에 평균에 대한 검정이 정규성 이탈에 꽤 견디지만, 12개라면 그 보호를 기대하기 어렵다.

  4. 정답기각하지 못한 것이지 정규성이 확인된 것이 아니다. 표본 12개면 어긋난 분포도 통과한다.

    가설검정은 귀무가설을 지지하는 증거를 주지 않는다. 표본이 12개면 검정력이 낮아 상당히 치우친 분포도 무난히 p > 0.05로 통과한다. 정규성을 확인했다고 말하려면 검정이 아니라 다른 근거가 필요하다.

해설

정규성 검정에서 기각하지 못한 것은 정규성이 확인된 것이 아니라 어긋났다는 증거를 찾지 못한 것이다. 표본이 12개면 검정력이 낮아 꽤 치우친 분포도 무난히 통과한다. 역설적으로 표본이 커지면 반대 문제가 생긴다. 실무적으로 무시해도 좋을 만한 작은 이탈까지 잡아내 기각해버리기 때문에, 정작 정규성이 필요 없을 만큼 표본이 큰 상황에서 정규성 검정이 기각된다. 그래서 정규성 판단을 검정 하나에 맡기는 것 자체가 권장되지 않는다. Q-Q plot으로 이탈의 방향과 크기를 눈으로 확인하고, 소표본이라면 비모수 대안이나 부트스트랩을 함께 고려하는 편이 낫다.

이 내용 다시 읽기 →

부트스트랩(Bootstrap): 분포를 모를 때, 데이터가 스스로 답한다

원문 읽기 →
개념 확인연결 문항구조

부트스트랩이 재표본을 만들 때 비복원이 아니라 복원 추출을 쓰는 이유는 무엇인가?

  1. 복원 추출이 비복원보다 계산이 빠르기 때문이다.

    두 방식의 계산 비용은 사실상 같다. 방식을 가르는 것은 속도가 아니라 재표본에 변동이 생기느냐다.

  2. 원래 표본보다 큰 재표본을 만들어야 하기 때문이다.

    표준 부트스트랩은 원래 표본과 같은 크기 n으로 뽑는다. 크기를 키우면 추정량의 변동이 실제보다 작게 나와 구간이 좁아진다.

  3. 정답비복원으로 n개를 뽑으면 원래 표본과 똑같은 집합이 된다.

    n개짜리 표본에서 비복원으로 n개를 고르는 방법은 순서를 무시하면 하나뿐이다. 복원으로 뽑아야 어떤 값은 여러 번 들어가고 어떤 값은 빠지면서 매번 다른 구성이 만들어지고, 그 변동이 통계량의 흔들림을 흉내 낸다.

  4. 복원 추출이 표본 분포를 정규분포로 만들어주기 때문이다.

    부트스트랩 분포의 모양은 통계량과 원자료가 정한다. 오히려 정규 근사를 거치지 않고 분포를 직접 근사하는 것이 이 방법의 장점이다.

해설

부트스트랩의 전제는 관측된 표본을 모집단처럼 취급하는 것이다. 그 표본에서 n개를 비복원으로 뽑으면 언제나 원래 표본 그대로가 나와 재표본 사이에 아무 변동이 생기지 않는다. 복원으로 뽑아야 매번 다른 구성이 만들어지고, 그 변동이 곧 통계량이 표본에 따라 얼마나 흔들리는지를 흉내 낸다. 이 흉내가 정당한 근거는 경험적 분포가 표본이 커질수록 참 분포에 수렴한다는 정리에 있다. 다만 흉내에 그친다는 점도 잊으면 안 된다. 정확도의 상한은 원래 표본 크기가 정하므로, 재표본 횟수를 10만으로 올리는 것이 데이터를 더 모으는 것을 대신하지는 않는다.

이 내용 다시 읽기 →
상황 적용연결 문항적용
부트스트랩 표본 하나에는 원래 관측값의 약 63.2%만 들어간다. 나머지 36.8%는 그 재표본에 한 번도 뽑히지 않는다.

이 성질이 배깅에서 어떤 쓸모를 갖는가?

  1. 정답빠진 36.8%를 그 모델의 검증 데이터로 쓸 수 있다.

    각 모델이 학습 중에 본 적 없는 데이터가 자동으로 남으므로 별도의 홀드아웃이나 교차검증 없이 일반화 오차를 추정할 수 있다. 랜덤 포레스트의 OOB 점수가 정확히 이것이다.

  2. 각 모델이 데이터의 63.2%만 보므로 학습 시간이 그만큼 줄어든다.

    재표본의 크기는 여전히 n이고 중복이 섞였을 뿐이라 학습 시간은 줄지 않는다. 고유한 값의 개수가 줄어드는 것과 처리할 행 수가 줄어드는 것은 다른 이야기다.

  3. 36.8%를 일부러 버려 과적합을 막는 효과가 있다.

    버려지는 데이터가 모델마다 다르고 전체를 놓고 보면 모든 관측이 여러 모델에 쓰인다. 배깅이 과적합을 줄이는 것은 데이터를 버려서가 아니라 여러 모델의 예측을 평균 내기 때문이다.

  4. 63.2%가 넘으면 모델끼리 상관이 커지므로 이 값이 상한 역할을 한다.

    63.2%는 복원 추출에서 자동으로 따라 나오는 수학적 결과이지 조절할 수 있는 설정값이 아니다. 모델 간 상관을 낮추는 장치는 따로 있고, 랜덤 포레스트의 특성 무작위 선택이 그것이다.

해설

복원 추출로 n개를 뽑으면 특정 관측이 한 번도 뽑히지 않을 확률이 e의 -1제곱인 0.368로 수렴한다. 그래서 재표본 하나에는 원본의 약 63.2%만 들어가고 나머지는 그 모델이 본 적 없는 데이터가 된다. 배깅은 이 빠진 부분을 검증 데이터로 써서 별도의 홀드아웃 없이 일반화 오차를 추정하고, 그것이 랜덤 포레스트의 OOB 점수다. 같은 재표본 기법이지만 통계와 머신러닝에서 목적이 정반대라는 점도 눈여겨볼 만하다. 통계에서는 추정의 불확실성을 재려고 쓰고, 배깅에서는 여러 모델을 만들어 분산을 줄이려고 쓴다.

이 내용 다시 읽기 →
상황 적용진단
n = 50에서 실제 피복률을 재봤다. 명목은 95%다. 통계량 왜도 백분위 기본 정규 표본의 중앙값 -0.02 94.0% 86.2% 지수 표본의 중앙값 +0.43 95.2% 85.1% 정규 표본의 평균 +0.00 94.0% 93.9% 로그정규 표본의 평균 +0.37 90.6% 88.1%

기본 방법의 피복률이 중앙값에서 무너지는 원인은 무엇인가?

  1. 원자료 분포가 비대칭이기 때문이다.

    표가 이 설명을 반박한다. 대칭인 정규 표본의 중앙값에서도 86.2%로 떨어지고, 왜도가 가장 큰 로그정규 평균에서는 두 방법의 차이가 2.5%p뿐이다.

  2. 중앙값은 이론적 표준오차 공식이 없어 피벗을 만들 수 없다.

    부트스트랩은 이론 공식 없이도 피벗 구조를 흉내 낼 수 있고 그래서 중앙값에도 적용된다. 문제는 만들 수 있느냐가 아니라 만든 뒤 중심이 맞느냐다.

  3. 재표본 횟수가 부족해 분위수 추정이 불안정하기 때문이다.

    재표본이 부족하면 두 방법이 함께 흔들려야 하는데 백분위는 94%를 유지한다. 한쪽만 무너지는 것은 계산 정밀도가 아니라 구조의 문제다.

  4. 정답부트스트랩 분포의 중심이 관측 추정값에서 밀려 있기 때문이다.

    기본 방법은 부트스트랩 분포를 관측값 기준으로 뒤집어 구간을 만든다. 평균은 중심 어긋남이 0.03 표준오차뿐이지만 중앙값은 0.20이라, 그 밀림이 부호가 바뀐 채 구간에 실린다.

해설

기본 방법은 부트스트랩 분포를 관측 추정값 기준으로 뒤집어 구간을 만들기 때문에, 분포의 중심이 그 값에서 밀려 있으면 어긋남이 반대 부호로 구간에 실린다. 표에서 갈림을 만드는 것이 원자료의 비대칭이 아니라는 점이 중요하다. 대칭인 정규 표본의 중앙값에서도 피복률이 86%로 떨어지고, 왜도가 가장 큰 로그정규 평균에서는 두 방법이 거의 같다. 기준은 통계량 쪽에 있다. 평균은 부트스트랩 분포가 관측값에 정확히 중심을 잡지만, 재표본에서 값이 띄엄띄엄 튀는 분위수 계열은 중심이 밀린다. 이런 통계량에는 편향을 직접 보정하는 BCa를 쓰는 편이 낫다.

이 내용 다시 읽기 →
상황 적용함정
일별 최대 응답 시간의 신뢰구간을 부트스트랩으로 만들려 한다. 재표본을 10만 번 돌렸는데 결과 분포가 몇 개의 값에 계단처럼 뭉쳐 있다.

이 통계량에 부트스트랩이 잘 듣지 않는 이유는 무엇인가?

  1. 최댓값은 확률변수가 아니라 관측된 상수이므로 분포를 논할 수 없다.

    표본이 달라지면 최댓값도 달라지므로 어엿한 확률변수이고 표집 분포도 존재한다. 부트스트랩이 그 분포를 흉내 내지 못하는 것이 문제다.

  2. 정답재표본의 약 63.2%가 원본의 최댓값을 그대로 담아 분포가 그 한 점에 몰린다.

    복원 추출로 n개를 뽑을 때 특정 값이 적어도 한 번 뽑힐 확률이 약 63.2%다. 그래서 부트스트랩 분포의 3분의 2가량이 정확히 그 한 값에 쌓이고 나머지가 그보다 작은 값들에 흩어진다. 진짜 표집 분포와 닮은 데가 없다.

  3. 재표본을 10만 번으로 늘려도 부족해서 생긴 정밀도 문제다.

    재표본을 100만 번 돌려도 같은 계단 모양이 나온다. 횟수가 아니라 원본에 최댓값이 하나뿐이라는 구조가 원인이다.

  4. 최댓값은 정규분포를 따르지 않아 신뢰구간을 만들 수 없다.

    부트스트랩은 정규성을 요구하지 않는 방법이라 이 이유는 성립하지 않는다. 극값에는 극값 이론이라는 별도의 분포족이 마련되어 있다.

해설

복원 추출로 n개를 뽑을 때 원본의 최댓값이 적어도 한 번 뽑힐 확률이 약 63.2%다. 그래서 부트스트랩 분포의 3분의 2가량이 정확히 그 한 값에 쌓이고, 계단처럼 뭉친 이 분포는 진짜 표집 분포와 닮은 데가 없다. 재표본을 아무리 늘려도 모양이 그대로이므로 계산량 문제가 아니라 방법의 구조적 한계다. 같은 이유로 최솟값이나 극단 분위수에도 표준 부트스트랩을 쓰면 안 된다. 이 영역은 극값 이론이 다루는 자리이고, 일반화 극값 분포나 임계값 초과분에 대한 일반화 파레토 분포를 적합하는 것이 정공법이다. 응답 시간의 p999처럼 꼬리 끝을 다루는 지표에서 실제로 부딪히는 문제다.

이 내용 다시 읽기 →
분석과 판단구조
# H0: 모집단 중앙값 = 1.5.  관측된 중앙값은 1.1456이다.
theta_0 = 1.5
observed_stat = observed_median - theta_0

data_shifted = data - observed_median + theta_0   # <- 이 줄

for b in range(B):
    boot_sample = np.random.choice(data_shifted, size=n, replace=True)
    boot_stats[b] = np.median(boot_sample) - theta_0

검정을 위해 데이터를 통째로 옮기는 이 줄이 필요한 이유는 무엇인가?

  1. 정답귀무가설이 참인 세계를 만들어야 그 아래에서의 통계량 분포를 얻을 수 있다.

    p값은 귀무가설이 참일 때 관측된 것만큼 극단적인 결과가 나올 확률이다. 원자료를 그대로 재표집하면 중앙값이 1.1456인 세계의 분포가 나와 답해야 할 질문과 어긋난다. 위치만 1.5로 옮기고 형태는 그대로 두면 원하는 세계가 된다.

  2. 데이터의 중심을 0으로 맞추는 표준적인 전처리 절차다.

    중심을 0이 아니라 1.5로 옮기고 있으므로 표준화와는 다른 작업이다. 옮기는 목표값이 귀무가설에서 온다는 점이 이 조작의 성격을 말해준다.

  3. 이동하지 않으면 재표본에 음수가 섞여 중앙값 계산이 깨지기 때문이다.

    중앙값은 음수가 있어도 문제없이 계산된다. 오히려 이 이동은 값을 위로 옮기는 방향이라 음수를 만들 일이 없다.

  4. 이동은 선택 사항이고 최종 p값에는 영향을 주지 않는다.

    이동을 빼면 귀무분포의 중심이 관측값과 겹쳐 통계량이 0 근처에 몰린다. 그러면 p값이 늘 크게 나와 어떤 귀무가설도 기각하지 못한다.

해설

가설검정의 p값은 귀무가설이 참인 세계에서 관측된 것만큼 극단적인 결과가 나올 확률이다. 그러니 그 세계를 먼저 재현해야 하고, 원자료를 그대로 재표집하면 관측 중앙값이 중심인 분포가 나와 질문과 어긋난다. 데이터를 통째로 옮겨 중앙값이 정확히 1.5가 되게 만들면 분포의 형태는 그대로 두고 위치만 귀무가설에 맞춘 세계가 되고, 여기서 재표집한 통계량들이 귀무분포 역할을 한다. 이 이동을 빼먹으면 p값이 늘 크게 나와 어떤 가설도 기각하지 못한다. 신뢰구간을 구할 때는 이동이 필요 없다는 점도 함께 기억할 만하다. 그때는 귀무가설을 세우지 않고 추정량의 흔들림만 보기 때문이다.

이 내용 다시 읽기 →
분석과 판단판단
표본 200개의 평균에 대해 t 기반 신뢰구간과 부트스트랩 BCa 구간을 각각 만들었더니 소수점 둘째 자리까지 거의 같았다. 같은 데이터의 90분위수에 대해서는 두 방법의 결과가 눈에 띄게 달랐다.

이 차이가 말해주는 것은 무엇인가?

  1. 정답부트스트랩의 값어치는 중심극한정리를 적용하기 어려운 통계량에서 드러난다.

    중심극한정리는 평균이나 합에 대해서만 분포를 보장하므로 평균에서는 두 방법이 같은 답에 이른다. 분위수, 중앙값, 상관계수처럼 이론적 표집 분포를 유도하기 어려운 자리에서 부트스트랩이 새로운 정보를 준다.

  2. 표본 200개는 분위수 추정에 부족하므로 두 방법 모두 믿을 수 없다.

    200개면 90분위수 근처에 20개가량이 놓여 추정이 불가능한 수준은 아니다. 두 방법이 갈리는 것은 데이터가 모자라서가 아니라 정규 근사가 이 통계량에 잘 맞지 않아서다.

  3. BCa는 평균에는 적용할 수 없고 분위수에만 쓰는 방법이다.

    BCa는 통계량을 가리지 않는다. 평균에 적용해도 정상적으로 작동하며, 다만 정규 근사가 이미 잘 듣는 자리라 얻는 것이 적을 뿐이다.

  4. 두 방법의 결과가 갈리면 이론에 근거한 t 구간을 택하는 것이 원칙이다.

    t 구간의 이론은 정규성 또는 중심극한정리를 전제한다. 그 전제가 성립하지 않는 통계량에서는 근거 자체가 사라지므로 자동으로 우선하지 않는다.

해설

부트스트랩과 중심극한정리는 겨루는 관계가 아니라 적용 범위가 다르다. 중심극한정리는 표본 평균이나 합에 대해서만 분포를 알려주고, 그 조건이 잘 맞는 자리에서는 부트스트랩이 사실상 같은 답을 낸다. 평균의 두 구간이 거의 같았던 것이 그 확인이다. 분위수, 중앙값, 상관계수, 두 통계량의 비처럼 이론적 표집 분포를 유도하기 어려운 자리에서 부트스트랩의 값어치가 드러난다. 그래서 실무의 판단 기준은 단순하다. 평균에 대한 추론이라면 표준 방법으로 충분하고, 그 밖의 통계량이라면 부트스트랩을 먼저 떠올리면 된다. 다만 극값이나 강한 의존 구조가 있는 데이터는 여전히 예외로 남는다.

이 내용 다시 읽기 →

베이지안 추론(Bayesian Inference): 사전 지식과 데이터를 결합하는 통계적 사고

원문 읽기 →
개념 확인구조

베이지안 95% 신용구간에는 모수가 이 구간에 있을 확률이 95%라는 해석이 허용된다. 그 근거는 무엇인가?

  1. 신용구간이 신뢰구간보다 넓게 계산되어 더 안전하기 때문이다.

    넓이는 사전분포와 데이터가 정하는 것이라 신용구간이 더 좁게 나오는 경우도 흔하다. 해석의 근거는 폭이 아니라 모수를 무엇으로 보느냐에 있다.

  2. 정답베이지안에서는 모수를 확률변수로 두므로 모수에 확률을 부여할 수 있다.

    빈도주의에서 모수는 미지의 상수라 확률을 걸 대상이 아니고, 확률이 걸리는 것은 표본에 따라 움직이는 구간뿐이다. 베이지안은 모수 자체에 분포를 주므로 사후분포에서 곧바로 확률을 읽어낼 수 있다.

  3. MCMC 샘플에서 직접 세어 만든 구간이기 때문이다.

    켤레 관계가 있으면 MCMC 없이 해석적으로 구해도 같은 해석이 성립한다. 계산 방법이 아니라 모수를 확률변수로 두었다는 전제가 근거다.

  4. 사전분포를 균일로 두면 두 구간이 같은 값이 되기 때문이다.

    수치가 같아지는 경우가 있어도 해석이 같아지지는 않는다. 같은 숫자를 놓고도 한쪽은 절차의 성공률을, 다른 쪽은 모수의 확률을 말한다.

해설

두 구간이 서로 다른 문장을 허용하는 이유는 계산이 아니라 모수를 무엇으로 보느냐에 있다. 빈도주의에서 모수는 미지의 상수라 확률을 부여할 대상이 아니고, 그래서 확률이 걸리는 것은 표본에 따라 움직이는 구간뿐이다. 베이지안은 모수를 확률변수로 두므로 사후분포에서 곧바로 확률을 읽을 수 있다. 사람들이 신뢰구간에 대해 자연스럽게 떠올리는 해석이 사실은 신용구간의 것이라는 점이 이 대비를 잘 보여준다. 다만 이 편의에는 대가가 있다. 사후분포는 사전분포에 의존하므로 그 확률값도 사전분포를 무엇으로 두었느냐에 따라 달라지고, 표본이 작을수록 영향이 커진다.

이 내용 다시 읽기 →
상황 적용구조

MLE와 MAP의 관계를 정확히 옮긴 것은 무엇인가?

  1. MLE는 사후 평균이고 MAP는 사후 최빈값이라 같은 사후분포의 두 요약이다.

    MLE는 사후분포에서 나온 값이 아니라 우도만 최대화한 값이다. 사후 평균과 사후 최빈값은 둘 다 베이지안 쪽 요약이고 MLE와는 다른 계보에 있다.

  2. MAP는 표본이 커지면 MLE로 수렴하므로 두 값은 언제나 같다.

    수렴한다는 것과 언제나 같다는 것은 다르다. 표본이 작으면 사전분포의 영향으로 두 값이 눈에 띄게 벌어지고, 그 벌어짐이 규제 효과의 실체다.

  3. MLE는 빈도주의, MAP는 베이지안 방법이라 수학적으로 이어지지 않는다.

    철학은 다르지만 식은 이어져 있다. MAP의 목적함수에서 사전분포 항을 상수로 만들면 그대로 MLE의 목적함수가 된다.

  4. 정답MAP에서 사전분포가 균일이면 MLE와 같아진다. MLE는 MAP의 특수한 경우다.

    MAP는 우도에 사전분포를 곱한 값을 최대화하는데, 사전분포가 균일이면 곱해지는 것이 상수라 최댓값의 위치가 우도만 최대화한 지점과 같아진다. 이 관계 덕분에 규제를 사전분포로 번역해 읽을 수 있다.

해설

MAP는 우도에 사전분포를 곱한 것을 최대화한다. 사전분포가 균일이면 곱해지는 값이 상수라 최댓값의 위치가 우도만 최대화한 지점과 같아지고, 그래서 MLE가 MAP의 특수한 경우가 된다. 이 관계가 실용적으로 중요해지는 자리는 정규화다. 가중치에 정규 사전분포를 얹은 MAP가 L2 규제를 넣은 최적화와 같은 식이 되고, 라플라스 사전분포를 얹으면 L1이 된다. 규제 강도가 곧 사전분포의 세기라는 해석이 여기서 나온다. 다만 MAP는 사후분포에서 한 점만 취하므로 불확실성을 버린다는 한계가 있고, 사후분포가 여러 봉우리를 갖거나 크게 비대칭이면 최빈값 하나가 분포를 대표하지 못한다.

이 내용 다시 읽기 →
상황 적용진단
참 앞면 확률이 0.65인 동전을 50번 던져 37번 앞면을 얻었다. Beta(2, 2) 사전분포로 갱신하니 사후분포는 Beta(39, 15)이고 사후평균은 0.722, 95% 신용구간은 [0.597, 0.832]다.

사후평균이 참값 0.65가 아니라 0.72에 놓인 것은 문제인가?

  1. 정답문제가 아니다. 사후분포는 데이터가 가리키는 곳으로 가고 이 표본은 50번 중 37번이 앞면이었다.

    표본 비율이 0.74이므로 사후평균 0.722는 그 값과 사전평균 0.5 사이에 정확히 놓인다. 참값 0.65는 신용구간 안에 들어 있고, 구간이 약속하는 것은 딱 거기까지다.

  2. 문제다. 사전분포 Beta(2, 2)가 너무 약해 추정이 데이터에 끌려갔다.

    사전분포를 세게 잡으면 이 표본에서는 참값에 가까워지겠지만, 표본이 반대로 치우친 경우에는 오히려 멀어진다. 결과를 알고 나서 사전분포를 조정하는 것은 추론이 아니다.

  3. 문제다. 켤레 관계를 잘못 적용해 하이퍼파라미터 갱신이 어긋났다.

    Beta(2, 2)에 성공 37과 실패 13을 더하면 정확히 Beta(39, 15)다. 갱신은 규칙대로 이뤄졌다.

  4. 문제가 아니다. 신용구간이 참값을 포함하므로 사후평균도 참값과 같다고 봐야 한다.

    구간이 참값을 담는 것과 점추정이 참값과 일치하는 것은 별개다. 사후평균은 0.722이고 참값은 0.65로 명백히 다른 수다.

해설

사후분포는 참값이 아니라 관측된 데이터가 가리키는 곳으로 끌려간다. 이 표본은 표본 비율이 0.74였고, 사전분포의 영향이 조금 남아 사후평균이 0.722에 자리잡았다. 참값은 신용구간 안에 들어 있으며 이 구간이 약속하는 것은 딱 거기까지다. 추정이 매번 참값을 맞히는 것이 아니라 참값을 담을 확률이 95%라는 뜻이다. 만약 사후분포가 언제나 참값 쪽으로 간다면 그것은 추론이 아니라 정답을 이미 아는 것이다. 표본이 우연히 한쪽으로 치우쳤을 때 그 치우침이 결과에 반영되는 것이 정상적인 동작이고, 표본을 더 모으면 줄어든다.

이 내용 다시 읽기 →
상황 적용구조

Metropolis-Hastings가 정규화 상수 P(X)를 계산하지 않고도 사후분포에서 샘플을 뽑을 수 있는 이유는 무엇인가?

  1. P(X)가 대개 1에 가까워 무시해도 되기 때문이다.

    P(X)는 데이터와 모델에 따라 아주 작은 값이 되기도 한다. 크기와 무관하게 계산에서 사라지는 것이 요점이다.

  2. 제안 분포를 대칭으로 잡으면 P(X)가 식에서 빠지기 때문이다.

    대칭 제안 분포가 지워주는 것은 제안 분포의 비대칭 보정항이다. P(X)는 제안 분포와 무관하게 비를 취하는 순간 사라진다.

  3. 정답수용 확률이 사후 밀도의 비율이라 분자와 분모의 P(X)가 상쇄된다.

    사후 밀도는 우도 곱하기 사전분포를 P(X)로 나눈 값이므로, 두 지점의 비를 취하면 같은 상수가 위아래에서 지워진다. 남는 것은 계산할 수 있는 우도와 사전분포뿐이다.

  4. 샘플이 충분히 많아지면 정규화가 자동으로 이뤄지기 때문이다.

    샘플 개수는 분포의 근사 정밀도를 높일 뿐 정규화 상수를 만들어내지 않는다. 상수를 몰라도 되는 것은 알고리즘의 구조 덕분이다.

해설

MCMC가 다루는 근본적인 어려움은 정규화 상수를 계산할 수 없다는 데 있다. 그 값은 모수 공간 전체에 대한 적분이라 차원이 조금만 커져도 손댈 수 없다. Metropolis-Hastings는 이 문제를 우회한다. 수용 확률이 두 지점의 사후 밀도 비율이고, 사후 밀도는 우도 곱하기 사전분포를 상수로 나눈 값이라 비를 취하는 순간 그 상수가 지워진다. 이 착상 덕분에 켤레 관계가 없는 모델, 계층 구조를 가진 모델, 모수가 수백 개인 모델까지 다룰 수 있게 됐다. 실무에서 직접 구현할 일은 드물고, PyMC나 Stan이 기울기를 활용하는 더 정교한 변형을 제공한다.

이 내용 다시 읽기 →
분석과 판단판단
동전 30번 중 21번이 앞면이다. 빈도주의 Wald 95% 신뢰구간은 [0.536, 0.864]이고, Beta(2, 2) 사전분포로 얻은 95% 신용구간은 [0.513, 0.820]이다. 신용구간이 더 좁다.

이 차이를 사전분포의 기여로만 설명하면 무엇을 놓치는가?

  1. 사전분포가 정보를 더하므로 구간이 좁아지는 것이 설명의 전부다.

    사전분포가 폭을 줄이는 방향으로 작용하는 것은 맞지만 비교 대상 쪽에도 사정이 있다. 한쪽 요인만 보면 사전분포의 영향을 실제보다 크게 잡게 된다.

  2. 정답Wald 구간이 이항 비율에서 조악한 근사라는 사정이 겹쳐 있다.

    Wald는 추정값 주위의 정규 근사에 기대므로 표본이 30개이고 비율이 0.7이면 근사가 거칠다. 사전분포 효과만 떼어내려면 같은 데이터에 Wilson 구간을 계산해 견주는 것이 순서다.

  3. 신용구간은 등꼬리 방식이라 구조적으로 언제나 더 좁게 나온다.

    등꼬리는 오히려 HPD보다 넓거나 같은 구간을 준다. 방식이 폭의 우열을 자동으로 정하지 않는다.

  4. 표본 30개는 두 방법을 견주기에 부족하므로 비교 자체가 성립하지 않는다.

    표본이 작을수록 두 방법의 차이가 드러나므로 오히려 비교할 만한 상황이다. 문제는 비교 가능성이 아니라 차이의 원인을 하나로 돌린 데 있다.

해설

신용구간이 더 좁게 나온 것을 사전분포의 기여로만 읽으면 절반만 본 것이다. 여기서 쓰인 Wald 구간은 이항 비율에 정규 근사를 그대로 얹은 방식이라 표본이 30개일 때 근사가 거칠고, 그 자체로 실제와 어긋난 폭을 낼 수 있다. 두 효과를 분리하려면 같은 데이터에 Wilson 구간을 계산해 견주는 것이 순서다. 이런 비교에서 조심할 점이 하나 더 있다. 서로 다른 철학의 두 구간은 애초에 다른 것을 약속하므로 폭만 놓고 우열을 가릴 수 없다. 폭이 좁다는 것은 정보가 더 많다는 뜻일 수도 있고 가정을 더 많이 넣었다는 뜻일 수도 있다.

이 내용 다시 읽기 →
분석과 판단진단
계층 모델을 MCMC로 10만 샘플 돌려 사후 요약을 뽑았다. 진단값을 보니 R-hat이 1.34이고 유효 표본 크기는 47이다.

이 결과를 어떻게 다뤄야 하는가?

  1. 샘플이 10만 개이므로 R-hat이 다소 커도 큰 수의 법칙으로 상쇄된다.

    큰 수의 법칙은 표본이 목표 분포에서 나왔을 때 작동한다. 체인이 수렴하지 않았다면 뽑힌 값들이 애초에 사후분포에서 온 것이 아니라 개수가 늘어도 소용이 없다.

  2. 유효 표본 크기 47이면 t 검정을 쓸 만한 크기이므로 그대로 보고해도 된다.

    47이라는 숫자는 자기상관 때문에 실질적으로 독립인 샘플이 그만큼뿐이라는 경고다. 명목상 10만 개를 뽑고 47개를 얻은 상태에서 사후 분위수는 매우 불안정하다.

  3. R-hat이 1보다 크면 과도하게 수렴했다는 뜻이므로 샘플 수를 줄여야 한다.

    R-hat은 체인 사이 분산과 체인 안 분산의 비라 수렴하면 1에 가까워지고 어긋날수록 커진다. 1보다 크다는 것은 덜 수렴했다는 뜻이지 과하다는 뜻이 아니다.

  4. 정답샘플 수와 무관하게 결과를 쓸 수 없다. 수렴하지 않았고 실질 독립 표본도 47개뿐이다.

    R-hat 1.34는 체인들이 서로 다른 영역에 머물고 있다는 신호로, 흔히 쓰는 기준선 1.01을 크게 벗어난다. 이 상태에서 사후 평균이나 신용구간을 보고하는 것은 근거 없는 숫자를 내놓는 일이다.

해설

MCMC 결과를 읽기 전에 반드시 확인해야 할 것이 수렴이다. R-hat은 여러 체인 사이의 분산과 체인 안의 분산을 견주는 값이고, 1.01을 넘으면 체인들이 서로 다른 영역을 헤매고 있다는 신호다. 1.34는 그 기준을 크게 벗어난다. 유효 표본 크기 47은 자기상관을 걷어내고 남은 실질적 독립 표본이 그만큼뿐이라는 뜻이라, 명목상 10만이라는 숫자에 의미가 없다. 대처는 체인을 더 길게 돌리는 것으로 끝나지 않는다. 사후분포에 봉우리가 여럿이거나 모수끼리 강하게 얽혀 있는 것이 원인인 경우가 많아, 모수화를 바꾸거나 사전분포의 스케일을 데이터에 맞추는 등 모델 쪽을 손봐야 한다.

이 내용 다시 읽기 →

기술통계와 EDA(Descriptive Statistics & EDA): 데이터를 모델에 넣기 전에 할 일

원문 읽기 →
개념 확인판단
팀 10명의 연봉이 3,000 / 3,200 / 3,500 / 3,800 / 4,000 / 4,200 / 4,500 / 5,000 / 12,000 / 50,000만원이다. 평균은 9,320만원, 중앙값은 4,100만원이다.

이 팀의 대표 연봉으로 무엇을 보고해야 하는가?

  1. 평균 9,320만원이다. 모든 값을 반영하므로 정보 손실이 없다.

    모든 값을 반영한다는 것이 곧 이상치에 무방비하다는 뜻이기도 하다. 9,320만원은 열 명 중 아무도 받지 않는 액수라 대표값 구실을 못 한다.

  2. 둘의 중간인 6,710만원으로 절충해 보고한다.

    두 지표는 서로 다른 질문에 답하는 값이라 평균을 내면 어느 질문에도 답하지 못한다. 절충이 아니라 무엇을 묻는지를 정하는 것이 순서다.

  3. 정답중앙값 4,100만원이다. 열 명 중 여덟 명이 5,000만원 이하다.

    상위 두 명이 평균을 끌어올렸을 뿐 대다수의 실제 경험은 4,000만원 안팎이다. 오른쪽으로 길게 늘어진 분포에서는 중앙값이 훨씬 정직한 대표값이 된다.

  4. 최빈값이다. 가장 자주 나오는 값이 곧 대표값의 정의다.

    이 데이터는 값이 모두 달라 최빈값을 정할 수 없다. 연속형에 가까운 데이터에서 최빈값이 잘 쓰이지 않는 이유가 이것이다.

해설

평균은 모든 값을 반영하지만 그 반영이 이상치에 무방비하다. 여기서는 상위 두 명이 평균을 9,320만원까지 끌어올렸고 그 값은 아무도 받지 않는 액수다. 오른쪽으로 길게 늘어진 분포에서는 중앙값이 훨씬 정직한 대표값이 되며, 소득과 부동산 가격, 페이지뷰, 응답 시간이 모두 이 성질을 갖는다. 다만 중앙값이 언제나 낫다는 뜻은 아니다. 인건비 총액을 알고 싶다면 평균에 인원을 곱해야 하고 그 계산에 중앙값은 쓸모가 없다. 판단 기준은 무엇을 묻느냐다. 전형적인 한 사람을 알고 싶으면 중앙값, 전체 규모를 알고 싶으면 평균이다.

이 내용 다시 읽기 →
상황 적용함정
일별 수익률의 표준편차가 1.2%이고 초과 첨도는 6.8이다. 리스크 모델은 정규분포를 가정해 3σ를 넘는 날이 1년에 한 번쯤일 것으로 잡았는데 실제로는 훨씬 잦았다.

초과 첨도 6.8이 이 어긋남에 대해 알려주는 것은 무엇인가?

  1. 정답꼬리가 정규분포보다 훨씬 두껍다. 3σ 밖의 사건이 예상보다 자주 일어난다.

    초과 첨도는 정규분포를 0으로 놓고 꼬리의 두께를 재는 값이다. 6.8이면 극단값이 정규분포에서 계산한 빈도보다 여러 배 자주 나타나므로 3σ 규칙이 통하지 않는다.

  2. 중심 봉우리가 뾰족해져 값들이 3σ 안쪽에 더 몰린다.

    첨도를 뾰족함으로 설명하는 관행이 널리 퍼져 있지만 정확하지 않다. 첨도가 재는 것은 봉우리가 아니라 꼬리이고, 방향도 반대다.

  3. 표준편차 1.2%가 과소추정되어 임계값이 낮게 잡혔다.

    표준편차를 올려 잡으면 임계값이 함께 올라가 초과가 줄어드는 방향이다. 문제는 σ의 크기가 아니라 σ를 기준으로 확률을 읽는 정규분포 가정 자체에 있다.

  4. 첨도는 왜도와 함께 봐야 의미가 있으므로 이 값만으로는 판단할 수 없다.

    왜도는 비대칭을, 첨도는 꼬리 두께를 재는 별개의 지표다. 좌우 대칭인 분포여도 첨도가 크면 양쪽 꼬리가 함께 두꺼워진다.

해설

첨도를 분포의 뾰족함으로 설명하는 교재가 많지만 정확하지 않다. 첨도가 재는 것은 꼬리의 두께이고, 값이 크다는 것은 극단값이 정규분포보다 자주 나타난다는 뜻이다. 초과 첨도 6.8이면 정규분포에 기댄 3σ 규칙이 크게 어긋나 실제 초과 빈도가 예상의 여러 배가 된다. 금융에서 두꺼운 꼬리라고 부르는 현상이 이것이고, 정규분포를 가정한 리스크 모델이 극단적 사건을 과소평가하는 이유도 여기 있다. 대처는 두 갈래다. 두꺼운 꼬리를 담을 수 있는 분포를 쓰거나, 분포를 가정하지 않고 관측된 분위수를 그대로 기준으로 삼는 것이다.

이 내용 다시 읽기 →
상황 적용진단
타이타닉 데이터의 운임 열을 요약했다. 평균 32.20, 표준편차 49.69, 최솟값 0.00, 최댓값 512.33이다.

표준편차가 평균보다 크다는 사실에서 곧바로 읽어낼 수 있는 것은 무엇인가?

  1. 데이터에 음수가 섞여 있다.

    최솟값이 0.00이므로 음수는 없다. 오히려 0에서 막혀 있다는 사실이 다음 결론을 강제한다.

  2. 계산이 잘못됐다. 표준편차는 평균을 넘을 수 없다.

    그런 제약은 없다. 값이 모두 양수여도 위쪽으로 크게 벌어진 관측이 있으면 표준편차가 평균을 얼마든지 넘어선다.

  3. 분포가 좌우 대칭이면서 매우 넓게 퍼져 있다.

    대칭이라면 평균에서 표준편차만큼 아래로 간 지점이 음수가 되어야 하는데 운임은 0 미만이 될 수 없다. 대칭 가정이 데이터의 하한과 충돌한다.

  4. 정답분포가 오른쪽으로 크게 늘어져 있다.

    값이 0 아래로 갈 수 없으므로 변동계수가 1을 넘으려면 위쪽으로 크게 벌어진 관측이 있어야 한다. 최댓값 512는 평균의 열여섯 배다. 요약값 두 개만으로 로그 변환이 필요한 열을 골라낼 수 있다.

해설

표준편차가 평균보다 크다는 것은 변동계수가 1을 넘는다는 뜻이고, 값이 0 아래로 내려갈 수 없는 데이터에서는 곧 강한 오른쪽 비대칭을 뜻한다. 좌우 대칭이면서 이런 값이 나오려면 평균에서 표준편차만큼 아래로 간 지점이 음수여야 하는데 운임은 그럴 수 없으므로 흔들림은 전부 위쪽 꼬리에서 온다. 실제로 최댓값은 평균의 열여섯 배다. 요약 통계 두 개만으로 분포의 성격을 짚어낼 수 있는 드문 경우이고, 새 데이터를 받았을 때 평균과 표준편차를 나란히 보는 것만으로 로그 변환이 필요한 열을 미리 골라낼 수 있다.

이 내용 다시 읽기 →
상황 적용판단
타이타닉 데이터에는 survived와 alive, pclass와 class, embarked와 embark_town이 함께 들어 있다. alive는 survived를 yes와 no로 옮긴 열이고, class는 pclass를 First, Second, Third로 옮긴 열이다.

이 열들을 그대로 모델에 넣으면 무엇이 문제인가?

  1. 열이 늘어 학습 시간이 길어진다는 점 외에는 문제가 없다.

    alive는 예측하려는 값 그 자체를 다른 표기로 담고 있다. 시간 문제가 아니라 결과를 통째로 무의미하게 만드는 문제다.

  2. 정답같은 정보가 중복으로 들어간다. 특히 alive는 타깃을 그대로 입력에 넣는 셈이 된다.

    모델이 alive만 보고 완벽한 정확도를 내면서 아무것도 학습하지 않는 전형적인 누출이다. class와 pclass처럼 값만 옮긴 쌍도 계수를 나눠 가져 해석을 무너뜨리고 트리 계열에서는 중요도를 분산시킨다.

  3. 문자열 열은 인코딩만 거치면 되므로 중복 자체는 문제가 되지 않는다.

    인코딩은 형식을 바꿀 뿐 정보가 겹친다는 사실을 없애지 못한다. 오히려 인코딩 뒤에는 원래 열의 복제라는 것이 눈에 덜 띈다.

  4. 중복 열은 상관계수가 1이라 상관 히트맵에서 자동으로 걸러진다.

    문자열 열은 수치 상관 계산에 아예 들어가지 않으므로 히트맵에 나타나지도 않는다. 자동으로 걸러진다는 기대 자체가 위험하다.

해설

파생 열을 걸러내지 않으면 같은 정보가 여러 번 들어간다. 가장 위험한 것은 타깃을 문자열로 옮긴 열이다. 모델이 그 열만 보고 완벽한 정확도를 내면서 실제로는 아무것도 배우지 않는다. 나머지 중복도 문제를 만든다. 같은 값을 두 번 넣으면 선형 모델에서 계수가 나뉘어 해석이 무너지고 트리 계열에서는 중요도가 분산된다. 상관 히트맵으로 자동 검출되지도 않는데, 문자열 열은 수치 상관 계산에 들어가지 않기 때문이다. EDA 단계에서 열의 의미를 하나씩 확인하는 작업이 필요한 이유가 여기 있고, 이 확인은 자동화 도구가 대신해주지 못한다.

이 내용 다시 읽기 →
분석과 판단진단
두 피처의 상관계수가 0.82로 나왔다. 산점도를 그려보니 점 열 개가 왼쪽 아래에 뭉쳐 있고 나머지 하나가 오른쪽 위 멀리 떨어져 있다.

이 상관계수를 어떻게 읽어야 하는가?

  1. 0.82는 강한 상관이므로 두 피처 중 하나를 중복으로 보고 제거해야 한다.

    그 판단의 근거가 되는 상관이 관측 하나에서 나왔다. 그 점을 빼면 상관이 사라질 수 있으므로 제거 결정의 근거가 무너진다.

  2. 표본이 열한 개로 작아 상관계수를 계산할 수 없다.

    열한 개로도 계산은 된다. 문제는 계산 가능성이 아니라 그 값이 관측 하나에 좌우된다는 데 있다.

  3. 정답관측 하나가 만들어낸 값이다. 그 점을 빼면 상관이 거의 사라질 수 있다.

    멀리 떨어진 점 하나가 직선의 기울기를 혼자 결정하는 상황이다. 뭉친 열 개 안에서는 아무 관계가 없어도 상관계수가 0.8을 넘길 수 있으므로, 값 하나로 관계를 주장할 수 없다.

  4. 떨어진 점이 있으면 상관계수가 오히려 작아지므로 실제 상관은 0.82보다 강하다.

    방향은 그 점이 어디에 놓였느냐가 정한다. 여기서는 직선의 연장선 위에 있어 상관을 키우는 쪽으로 작용했다.

해설

상관계수는 관측 하나에도 크게 흔들리는 값이다. 뭉친 점들과 멀리 떨어진 점 하나가 있으면 그 점이 직선을 혼자 정의하고, 상관계수가 0.8을 넘어도 그 점을 빼면 0 근처로 내려앉는 일이 흔하다. Anscombe의 quartet이 겨냥한 것이 정확히 이 지점이다. 평균과 분산, 상관계수, 회귀직선이 소수점 둘째 자리까지 같은 네 데이터셋이 그림으로는 완전히 다른 모양이었다. 요약값의 조합이 분포를 결정하지 못한다는 뜻이다. 실무 규율은 단순하다. 상관 히트맵에서 눈에 띈 쌍은 반드시 산점도로 확인하고, 필요하면 그 관측을 뺀 값을 함께 보는 것이다.

이 내용 다시 읽기 →
분석과 판단판단
웹 로그에서 세션당 페이지뷰의 이상치를 찾았더니 세 갈래로 나뉘었다. (1) 페이지뷰가 -3인 레코드 12건 (2) 한 시간에 4,000페이지를 본 세션 40건 (3) 하루에 60페이지를 본 세션 300건

각각을 어떻게 다뤄야 하는가?

  1. 1.5×IQR 규칙 바깥에 있으므로 셋 다 제거하는 것이 표준 절차다.

    그 규칙은 살펴볼 후보를 뽑아주는 장치이지 판정을 대신하지 않는다. 셋을 뭉뚱그려 지우면 봇 트래픽이라는 발견과 열성 사용자라는 정보가 함께 사라진다.

  2. 정답(1)은 입력 오류, (2)는 다른 모집단, (3)은 자연 극단값이라 대처가 각각 다르다.

    음수 페이지뷰는 물리적으로 불가능하니 고치거나 버린다. 한 시간에 4,000페이지는 사람의 행동으로 보기 어려워 봇으로 분리해 따로 분석하는 편이 정보를 남긴다. 하루 60페이지는 열성 사용자로 충분히 가능하므로 그대로 둔다.

  3. 셋 다 남겨야 한다. 이상치를 지우는 것은 정보 손실이므로 언제나 피한다.

    음수 페이지뷰는 정보가 아니라 오류다. 남겨두면 평균과 분산이 오염되고 그 위에 올라간 모든 계산이 어긋난다.

  4. (1)과 (2)는 남기고 (3)만 제거한다. 건수가 많을수록 왜곡이 크기 때문이다.

    건수는 판단 기준이 아니다. 300건이 자연스러운 사용자 행동이라면 그것이 오히려 지켜야 할 데이터이고, 12건의 음수는 적어도 여전히 오류다.

해설

이상치를 발견하면 반사적으로 지우는 것이 가장 흔한 실수다. 발생 원인에 따라 대처가 갈린다. 음수 페이지뷰처럼 물리적으로 불가능한 값은 입력이나 파이프라인 오류이므로 고치거나 버린다. 한 시간에 4,000페이지는 사람의 행동으로 보기 어려우니 봇이라는 다른 모집단이 섞인 것이고, 지우기보다 분리해 따로 분석하는 편이 정보를 남긴다. 하루 60페이지는 열성 사용자로 충분히 가능하므로 그대로 두어야 한다. 이 셋을 규칙 하나로 뭉뚱그리면 진짜 발견을 지우게 된다. 통계적 규칙은 후보를 뽑아주는 장치이고 판정은 도메인 지식이 한다.

이 내용 다시 읽기 →

표본 추출과 편향(Sampling and Bias): 240만 명이 틀리고 5만 명이 맞은 이유

원문 읽기 →
개념 확인구조

표본 크기를 늘리면 줄어드는 것과 줄어들지 않는 것은 각각 무엇인가?

  1. 둘 다 √n에 반비례해 줄어든다.

    √n에 반비례하는 것은 표준오차뿐이다. 편향은 추출 방식에서 오므로 같은 방식으로 표본을 늘리면 그대로 따라 늘어난다.

  2. 편향은 줄지만 표준오차는 그대로다.

    방향이 정확히 반대다. 표본을 늘릴수록 표본 평균의 흔들림은 줄어들고 치우침은 남는다.

  3. 정답표준오차는 줄지만 편향은 줄지 않는다.

    무작위 오차는 표본마다 값이 흔들리는 것이라 표본을 늘리면 σ/√n으로 줄어든다. 편향은 추출 방식이 모집단의 특정 부분을 체계적으로 더 담거나 덜 담아서 생기므로, 표본을 백 배 늘려도 어긋난 값 주위에서 더 정밀해질 뿐이다.

  4. 표본이 모집단의 절반을 넘으면 둘 다 0이 된다.

    표본 비중이 커지면 유한 모집단 보정으로 표준오차가 추가로 줄어드는 것은 맞지만 0이 되지는 않는다. 편향은 비중과 아무 관계가 없다.

해설

편향과 무작위 오차는 성격이 다르다. 무작위 오차는 표본마다 값이 흔들리는 것이라 표본을 늘리면 줄어든다. 편향은 추출 방식이 모집단의 특정 부분을 체계적으로 더 담거나 덜 담아서 생기므로, 같은 방식으로 표본을 늘리면 어긋난 값 주위에서 더 정밀해질 뿐이다. 이 구분이 실무에서 중요한 이유는 대처가 완전히 다르기 때문이다. 흔들림이 문제면 데이터를 더 모으면 되지만 치우침이 문제면 표집틀과 추출 절차를 고쳐야 한다. 1936년 여론조사의 실패가 바로 후자를 전자로 착각한 결과였고, 오늘날 온라인 설문에서도 같은 착각이 반복된다.

이 내용 다시 읽기 →
상황 적용진단
1936년 미국 대선에서 한 잡지사는 구독자 명부와 전화번호부, 자동차 등록부에서 뽑은 1,000만 명에게 설문지를 보내 240만 통을 회신받았고 공화당 후보의 압승을 예측했다. 같은 해 갤럽은 5만 명 표본으로 루스벨트의 승리를 맞혔다.

240만 명 쪽이 틀린 이유로 가장 정확한 것은 무엇인가?

  1. 우편 설문이라 응답까지 시차가 길어 그 사이 여론이 뒤집혔다.

    여론이 뒤집혔다면 갤럽의 예측도 함께 어긋났어야 한다. 같은 시기에 같은 선거를 대상으로 한 두 조사가 갈렸으므로 원인은 시점이 아니라 방법에 있다.

  2. 정답표집틀이 부유층에 치우쳤고 회신마저 무작위가 아니어서 두 편향이 겹쳤다.

    대공황 한복판에 전화와 자동차를 가진 사람은 상대적으로 부유했고 지지 성향이 한쪽으로 기울어 있었다. 여기에 회신율 24%마저 무작위가 아니어서 같은 집단 안에서도 한쪽 지지자가 훨씬 자주 답장했다. 두 편향이 같은 방향으로 겹쳐 오차를 키웠다.

  3. 240만도 미국 유권자 수에 비하면 여전히 작은 표본이었다.

    5만 명으로 맞힌 조사가 있었으므로 크기가 부족했다는 설명은 성립하지 않는다. 표본 비중은 표준오차에 거의 영향을 주지 않는다.

  4. 회신율 24%가 낮아 표준오차가 커졌다.

    240만 통이 회신됐으므로 표준오차는 극히 작았다. 낮은 회신율이 문제가 되는 것은 개수가 줄어서가 아니라 응답한 사람과 응답하지 않은 사람이 다르기 때문이다.

해설

실패의 원인은 두 겹이었다. 첫째, 표집틀이 잡지 구독자와 전화번호부, 자동차 등록부였다. 대공황 한복판에 전화와 자동차를 가진 사람은 상대적으로 부유했고 지지 성향이 한쪽으로 기울어 있었다. 둘째, 회신율이 24%에 그쳤고 그 회신마저 무작위가 아니어서 같은 집단 안에서도 한쪽 지지자가 훨씬 자주 답장을 보냈다. 두 편향이 같은 방향으로 겹쳐 오차를 키웠다. 여기서 얻을 교훈은 표본 크기가 대표성을 대신하지 못한다는 것이다. 오늘날의 웹 팝업 설문과 앱 내 만족도 조사가 정확히 같은 구조의 위험을 안고 있고, 응답자가 그 서비스를 계속 쓰는 사람으로 한정된다는 점에서 더 좁다.

이 내용 다시 읽기 →
상황 적용진단
오른쪽 꼬리가 긴 연봉 분포에서 표본 200개를 1,000번 뽑아 비교했다. 모집단 평균은 3,572다. 무작위 추출 표본평균의 평균 3,575 편향 3.5 표준오차 166.9 상위 50%에서만 추출 표본평균의 평균 5,188 편향 1616.4 표준오차 160.5

두 방법의 표준오차가 거의 같다는 사실이 뜻하는 것은 무엇인가?

  1. 정답편향된 표본도 정밀하기는 매한가지다. 다만 엉뚱한 값 주위에서 정밀할 뿐이다.

    표준오차는 표본마다 값이 얼마나 흔들리는지만 재고 그 중심이 어디인지는 재지 않는다. 편향된 추출도 표본을 늘릴수록 값이 안정되므로 정밀도만 보면 흠잡을 데가 없다.

  2. 표준오차가 같으므로 두 추정의 품질도 같다고 봐야 한다.

    품질은 정밀도와 정확도를 함께 봐야 한다. 편향 1,616은 표준오차 160의 열 배라 이 추정은 참값 근처에 얼씬도 하지 않는다.

  3. 편향된 추출이 표준오차가 조금 더 작으므로 그쪽이 나은 방법이다.

    상위 절반만 뽑으면 값의 범위가 좁아져 표준오차가 살짝 줄어든다. 흩어짐이 작아진 것을 추정이 좋아진 것으로 읽으면 정확히 반대의 결론에 도달한다.

  4. 시뮬레이션 반복이 1,000번으로 부족해 차이가 드러나지 않았다.

    반복을 늘려도 두 표준오차는 계속 비슷하게 나온다. 이것은 오차가 아니라 표준오차가 편향을 담지 못한다는 성질이 그대로 드러난 결과다.

해설

이 시뮬레이션의 핵심은 두 표준오차가 거의 같다는 데 있다. 편향된 추출도 표본을 늘릴수록 값이 안정되므로 정밀도만 보면 흠잡을 데가 없고, 다만 엉뚱한 값 주위에서 정밀할 뿐이다. 여기서 곧장 실무적 경고가 나온다. 신뢰구간이 좁다는 것은 추정이 정확하다는 증거가 아니다. 구간의 폭은 무작위 흔들림만 반영하고 표집 방식에서 온 치우침은 계산에 아예 들어가지 않는다. 표본을 200에서 2,000으로 늘리면 상황이 오히려 나빠진다. 구간은 더 좁아지고 편향은 그대로여서, 참값을 담지 못하는 구간을 더 자신 있게 제시하게 된다.

이 내용 다시 읽기 →
상황 적용확장적용
이탈률을 낮추려고 현재 활성 사용자 5,000명에게 어떤 기능이 가장 불편한지 물었다. 로그인 절차에 대한 불만이 가장 낮게 나와 그 항목을 개선 목록에서 뺐다.

이 판단의 문제는 무엇인가?

  1. 표본 5,000명은 통계적으로 충분하므로 판단 자체에는 문제가 없다.

    크기가 문제가 아니라 누가 표본에 들어 있느냐가 문제다. 5만 명에게 물어도 같은 집단에서 뽑는 한 결과는 달라지지 않는다.

  2. 설문에는 응답 편향이 있으므로 로그 데이터만 보고 판단해야 한다.

    설문을 로그로 바꿔도 활성 사용자만 남아 있다는 사실은 그대로다. 문제는 측정 방식이 아니라 누구를 측정하고 있느냐다.

  3. 불만이 낮게 나온 항목은 우선순위가 낮은 것이 맞으므로 결론은 옳다.

    여기서는 낮게 나온 것 자체가 신호일 수 있다. 그 기능 때문에 떠난 사람이 응답자에서 빠져 있으면 불만이 과소 집계된다.

  4. 정답로그인 때문에 떠난 사람은 활성 사용자에 남아 있지 않다.

    귀환한 비행기의 총알 구멍을 세는 것과 같은 구조다. 치명적인 문제일수록 그 문제를 겪은 사람이 표본에서 사라지므로 불만이 낮게 관측된다. 이탈 원인을 알려면 이탈자에게 묻거나 이탈 직전의 행동 기록을 봐야 한다.

해설

관측된 데이터에서 무엇이 빠졌는지를 묻는 것이 생존자 편향을 간파하는 열쇠다. 귀환한 비행기의 총알 구멍은 그 부위에 맞고도 돌아올 수 있었다는 뜻이고, 구멍이 관측되지 않는 부위는 맞으면 돌아오지 못한다는 뜻이다. 활성 사용자 설문도 구조가 같다. 특정 기능 때문에 이탈한 사람은 설문 대상에 없으므로 그 항목의 불만이 낮게 나오는 것이 오히려 심각하다는 신호일 수 있다. 이탈 원인을 알고 싶으면 이탈자에게 묻고, 그것이 어렵다면 이탈 직전의 행동 로그처럼 남아 있는 흔적을 봐야 한다. 남아 있는 사람에게 왜 남아 있는지 물어서는 떠난 이유를 알 수 없다.

이 내용 다시 읽기 →
분석과 판단진단
입원 환자 데이터에서 질환 A와 질환 B가 뚜렷한 음의 상관을 보인다. 두 질환은 각각 독립적으로 입원 확률을 높이며, 일반 인구에서는 서로 아무 관계가 없다.

입원 집단에서만 나타나는 이 음의 상관을 어떻게 읽어야 하는가?

  1. 질환 A가 질환 B를 막는 보호 효과가 있다는 증거다.

    일반 인구에서 두 질환이 무관하다는 것이 이미 주어져 있다. 보호 효과가 있었다면 인구 전체에서도 음의 상관이 나타났어야 한다.

  2. 정답표본을 두 원인의 공통 결과인 입원으로 골랐기 때문에 없던 상관이 만들어졌다.

    입원했다는 조건 아래에서 A가 없는 환자는 B 때문에 왔을 가능성이 높아진다. 두 원인이 하나의 결과를 함께 설명하므로 한쪽이 없으면 다른 쪽이 있어야 하고, 그 관계가 음의 상관으로 나타난다.

  3. 입원 환자 수가 적어 우연히 나타난 상관이다.

    표본을 늘려도 이 상관은 사라지지 않고 오히려 더 뚜렷해진다. 우연이 아니라 선택 기준이 만들어낸 구조적 결과이기 때문이다.

  4. 두 질환의 진단 기준이 겹쳐 한쪽을 진단하면 다른 쪽을 배제하기 때문이다.

    진단 기준이 겹치는 경우에도 비슷한 현상이 생길 수 있지만 여기서는 그런 조건이 주어지지 않았다. 두 질환이 독립적으로 입원 확률을 올린다는 사실만으로 이미 설명된다.

해설

버크슨 편향은 표본을 고른 기준이 두 원인의 공통 결과일 때 생긴다. 질환 A와 B가 각각 입원 확률을 올린다면 입원한 환자 가운데 A가 없는 사람은 B 때문에 왔을 가능성이 커지고, 그래서 모집단에서 무관한 두 질환이 입원 집단 안에서만 음의 연관을 보인다. 데이터의 오류가 아니라 조건부로 보면 실제로 나타나는 상관이라 더 위험하다. 같은 구조가 의료 밖에서도 반복된다. 채용된 사람만 놓고 보면 학력과 경력이 음의 상관을 보이고, 출시된 제품만 보면 성능과 가격이 그렇게 보인다. 어떤 기준으로 표본이 걸러졌는지를 확인하지 않으면 걸러짐이 만들어낸 상관을 인과로 읽게 된다.

이 내용 다시 읽기 →
분석과 판단구조
직원 10,000명 가운데 관리직이 2,000명, 실무직이 8,000명이다. 만족도를 표본 100명으로 추정하려는데, 단순 무작위로 뽑으면 관리직이 평균 20명이지만 표본에 따라 10명이 되기도 하고 32명이 되기도 한다.

층화 추출이 여기서 개선하는 것은 무엇인가?

  1. 각 개인이 뽑힐 확률을 같게 만들어 편향을 없앤다.

    단순 무작위 추출에서도 각 개인의 확률은 이미 같다. 비례 배분 층화도 그 확률을 그대로 유지하므로 이 점에서는 두 방법이 다르지 않다.

  2. 관리직 표본을 늘려 소수 집단의 추정 정밀도를 높이는 것이 유일한 목적이다.

    그것은 비례를 깨고 배분할 때 얻는 효과이고, 대신 전체 추정에서 가중치를 되돌려야 한다. 비례대로 뽑아도 전체 분산이 줄어드는 이득이 따로 있다.

  3. 정답층별 인원을 고정해 표본 구성의 흔들림을 없앤다. 층 안이 균질할수록 이득이 크다.

    관리직 20명과 실무직 80명으로 미리 못박으면 구성이 표본마다 흔들리던 부분이 사라지고 그 흔들림이 만들던 분산이 통째로 빠진다. 두 직군의 만족도가 서로 다르고 각 직군 안에서는 비슷할수록 이 이득이 커진다.

  4. 층 사이의 차이가 클수록 층화의 이득이 줄어든다.

    방향이 반대다. 층 사이 차이가 크고 층 안이 비슷할 때 이득이 가장 크고, 층 사이에 차이가 없으면 단순 무작위와 같아진다.

해설

층화 추출의 이득은 층 안이 균질할수록 커진다. 층별 인원을 미리 정해두면 표본 구성이 흔들리던 부분이 사라지고 그 흔들림이 만들던 분산이 통째로 빠진다. 관리직과 실무직의 만족도가 서로 크게 다르고 각 직군 안에서는 비슷하다면 이 이득이 특히 크고, 반대로 층 사이에 차이가 없으면 층화를 해도 단순 무작위와 같아진다. 비례 배분으로 뽑으면 각 개인이 뽑힐 확률은 단순 무작위와 똑같이 유지되므로 편향이 새로 생기지도 않는다. 소수 집단의 추정 정밀도를 따로 확보하고 싶다면 비례를 깨고 더 많이 뽑을 수도 있는데, 그때는 전체 추정에서 가중치를 되돌려 계산해야 한다.

이 내용 다시 읽기 →

A/B 테스트 설계와 분석: 가설 수립부터 의사결정까지

원문 읽기 →
개념 확인구조

A/B 테스트가 단순한 출시 전후 비교와 근본적으로 다른 지점은 무엇인가?

  1. 표본 크기가 훨씬 커서 통계적 검정력이 높다.

    전후 비교도 오래 돌리면 표본이 커진다. 크기를 아무리 키워도 무엇이 원인인지 가려낼 수 없다는 문제는 그대로 남는다.

  2. 가설검정 대신 신뢰구간으로 결론을 내리기 때문이다.

    두 방법 모두 신뢰구간과 검정을 쓸 수 있다. 분석 도구가 아니라 데이터를 만드는 방식이 다르다.

  3. 정답무작위 배정이 관측되지 않은 교란 변수까지 고르게 나눠준다.

    사용자를 무작위로 나누면 나이나 기기처럼 아는 변수는 물론 아예 측정하지 않은 변수까지 두 그룹에 흩어진다. 그래서 결과의 차이를 처리 효과로 귀인할 수 있다. 전후 비교에는 이 보장이 없다.

  4. 두 그룹을 동시에 측정하므로 계절 효과가 사라진다.

    동시에 측정하는 것도 이점이지만 그것만으로는 부족하다. 같은 기간에 두 그룹을 봐도 그룹 구성이 다르면 차이가 무엇에서 왔는지 알 수 없고, 그 구성을 맞춰주는 것이 무작위 배정이다.

해설

A/B 테스트의 힘은 통계 기법이 아니라 무작위 배정에서 나온다. 사용자를 무작위로 나누면 우리가 아는 변수는 물론이고 아예 측정하지 않은 변수까지 두 그룹에 고르게 흩어지므로, 결과의 차이를 처리 효과로 귀인할 수 있다. 전후 비교에는 이 보장이 없다. 새 UI를 주말에 출시했다면 UI 때문인지 주말 때문인지 구분할 방법이 없고, 관측하지 못한 요인이 얼마든지 더 있을 수 있다. 한 사용자가 두 버전을 동시에 경험할 수 없다는 것이 인과 추론의 근본 문제이고, 무작위 배정은 이를 개인이 아니라 집단 수준에서 우회한다.

이 내용 다시 읽기 →
상황 적용판단
현재 전환율 10%에서 최소 감지 효과 크기에 따라 그룹당 필요 표본이 이렇게 달라진다. MDE 0.5%p 57,756명 MDE 1%p 14,744명 MDE 2%p 3,835명 MDE 3%p 1,768명 MDE 5%p 680명

MDE를 얼마로 잡을지는 무엇이 정해야 하는가?

  1. 확보 가능한 트래픽이다. 트래픽에 맞춰 MDE를 역산하는 것이 순서다.

    실무에서 흔히 벌어지는 일이지만 순서가 뒤집혀 있다. 트래픽에 맞춰 MDE를 키우면 그보다 작지만 의미 있는 개선을 놓치고도 효과가 없다고 결론짓게 된다.

  2. 정답비즈니스 맥락이다. 얼마나 작은 변화까지 의미가 있는지는 통계가 답할 수 없다.

    1%p 개선이 연 매출 수십억을 좌우하는 서비스와 3%p는 되어야 개발 비용을 회수하는 서비스에서 답이 다르다. 이 값 하나가 실험 비용과 기간을 통째로 결정하므로 통계가 아니라 의사결정 기준에서 나와야 한다.

  3. 과거 실험들의 평균 p값이다. 그 수준을 MDE로 옮기면 된다.

    p값은 효과의 크기가 아니라 관측이 얼마나 극단적인지를 재는 값이다. 단위부터 달라 MDE로 옮길 수 없다.

  4. 유의수준과 검정력이다. 그 둘을 정하면 MDE가 따라 결정된다.

    네 값 가운데 셋을 정하면 나머지 하나가 결정되는 관계다. 유의수준과 검정력만으로는 MDE와 표본 크기 둘이 미정으로 남는다.

해설

최소 감지 효과 크기는 통계가 아니라 비즈니스가 답해야 할 질문이다. 0.5%p 개선에 그룹당 5만 8천 명이 필요하고 2%p에는 3천 8백 명이면 되므로, 이 숫자 하나가 실험 비용과 기간을 통째로 결정한다. 여기서 흔히 벌어지는 일이 순서를 뒤집는 것이다. 확보 가능한 트래픽에 맞춰 MDE를 역산해놓고 그 크기의 효과를 감지했다고 보고하면, 실제로는 그보다 작지만 의미 있는 개선을 놓치고도 효과가 없다고 결론짓게 된다. 트래픽이 모자라면 MDE를 키울 것이 아니라 실험 기간을 늘리거나 분산 축소 기법을 쓰거나, 애초에 더 큰 변화를 시도하는 쪽이 맞다.

이 내용 다시 읽기 →
상황 적용함정
각 그룹 4,000명 실험 결과다. 대조군 95% CI [0.0875, 0.1058] 실험군 95% CI [0.1091, 0.1291] 차이의 95% CI [0.0089, 0.0361] 두 그룹의 구간이 겹치지 않는다.

각 그룹의 구간이 겹치는지를 유의성 판정에 쓰면 안 되는 이유는 무엇인가?

  1. 각 구간을 Wilson 방식으로 계산해서 서로 비교할 수 없다.

    계산 방식이 문제가 아니다. 어떤 방식으로 구해도 개별 구간의 겹침은 차이의 유의성과 한 방향으로만 이어진다.

  2. 겹침 여부는 유의성과 아무 관계가 없어 어떤 정보도 주지 않는다.

    관계가 아예 없는 것은 아니다. 겹치지 않으면 유의하다는 것은 확실히 말할 수 있고, 다만 그 반대 방향이 성립하지 않을 뿐이다.

  3. 구간이 겹치지 않으면 오히려 유의하지 않다는 뜻이다.

    방향이 반대다. 겹치지 않는다는 것은 두 값이 확실히 다르다는 강한 증거이고, 실제로 여기서도 p는 0.0012다.

  4. 정답겹치지 않으면 유의한 것이 맞지만 역은 성립하지 않는다. 겹쳐도 유의한 경우가 흔하다.

    차이의 표준오차는 두 분산을 더한 뒤 제곱근을 거치므로 각 구간의 폭을 그냥 더한 것보다 작다. 그래서 개별 구간이 조금 겹치는 상황에서도 차이의 구간은 0을 넘지 않는 경우가 많다. 판정은 차이 자체의 구간으로 해야 한다.

해설

각 그룹의 신뢰구간이 겹치는지 보는 것은 편리하지만 한쪽으로만 성립하는 규칙이다. 겹치지 않으면 차이가 유의한 것이 맞지만 겹친다고 유의하지 않은 것은 아니다. 차이의 표준오차가 각 구간의 폭을 단순히 더한 것보다 작기 때문인데, 분산이 더해질 때 제곱근을 거치므로 합보다 작아진다. 그래서 판정은 차이 자체의 신뢰구간으로 해야 한다. 여기서는 그 구간이 0을 포함하지 않으므로 유의하고, 동시에 개선 폭이 0.9%p에서 3.6%p 사이라는 정보까지 준다. 보고할 값은 각 그룹의 구간이 아니라 차이의 구간이라는 것이 요점이다.

이 내용 다시 읽기 →
상황 적용진단
사용자당 매출에 실제로 5% 차이를 넣고 각 2,000명으로 t-검정을 돌렸다. 대조군 평균 34.48 표준편차 46.29 실험군 평균 34.96 표준편차 49.15 p = 0.7515, 차이의 95% CI [-2.48, 3.44]

실제로 존재하는 차이를 잡아내지 못한 이유는 무엇인가?

  1. 정답표준편차가 평균보다 커서 2,000명으로는 5% 차이를 잡을 수 없다.

    변동계수가 1.3을 넘는 분포에서 평균의 5% 차이를 잡으려면 표본이 수만 명 단위로 필요하다. 매출이 오른쪽으로 길게 늘어진 로그정규에 가깝기 때문에 생기는 구조적 어려움이다.

  2. Welch 방식을 써서 검정력이 떨어졌다.

    Welch가 등분산 방식보다 잃는 검정력은 무시할 만한 수준이다. 두 표준편차가 46과 49로 비슷하므로 어느 쪽을 써도 결과가 거의 같다.

  3. t-검정은 로그정규 데이터에 쓸 수 없다.

    표본이 2,000개면 중심극한정리 덕에 평균에 대한 t-검정이 작동한다. 검정이 무효인 것이 아니라 감지할 힘이 모자란 것이다.

  4. 5% 차이는 애초에 통계적으로 감지할 수 없는 크기다.

    표본을 충분히 늘리면 감지된다. 감지 가능성은 효과 크기 하나가 아니라 효과 크기와 분산과 표본 크기의 관계가 정한다.

해설

매출 같은 연속형 지표는 오른쪽 꼬리가 길어 표준편차가 평균보다 큰 경우가 흔하다. 여기서도 평균 34에 표준편차 46이라 변동계수가 1.3을 넘고, 이런 분포에서 5% 차이를 감지하려면 전환율보다 훨씬 많은 표본이 필요하다. 실무에서 전환율 같은 이진 지표를 1차 지표로 두고 매출을 2차 지표로 두는 관행이 여기서 나온다. 필요 표본을 줄이는 방법도 있다. 실험 이전 데이터로 분산을 걷어내는 CUPED, 로그 변환, 상위 극단값을 잘라내는 캐핑이 대표적이다. 분포 가정이 불안하면 부트스트랩으로 구간을 만들어 교차 확인하는 것도 방법이다.

이 내용 다시 읽기 →
분석과 판단연결 문항진단
두 그룹의 전환율을 똑같이 10%로 놓고, 즉 효과가 전혀 없는 상태로 5,000번 시뮬레이션했다. 마지막 날에만 한 번 확인 거짓 양성률 4.4% 매주 확인하고 유의하면 즉시 종료 거짓 양성률 12.4%

효과가 없는데도 거짓 양성률이 세 배 가까이 오른 이유는 무엇인가?

  1. 중간 시점에는 표본이 적어 검정 자체가 부정확하기 때문이다.

    각 시점의 검정은 저마다 정확하고 그 시점의 유의수준도 5%로 지켜진다. 문제는 개별 검정이 아니라 언제 멈출지를 결과를 보고 정한다는 데 있다.

  2. 정답유의수준 5%는 한 번 검정할 때의 약속이라 확인 횟수만큼 기회가 늘어난다.

    네 번 들여다보고 그중 한 번이라도 유의하면 멈추는 전략은 사실상 네 번의 기회를 쓰는 것이다. 효과가 전혀 없어도 어느 시점에는 p가 0.05 아래로 내려갈 확률이 크게 오르고, 매일 확인하면 더 올라간다.

  3. 5,000번 시뮬레이션이 부족해 생긴 몬테카를로 오차다.

    5,000번이면 비율 추정의 표준오차가 0.5%p 수준이다. 4.4%와 12.4%의 간격은 그 오차로 설명되지 않는다.

  4. 유의해지면 즉시 종료하므로 마지막 날 데이터가 빠졌기 때문이다.

    데이터가 빠진 것이 손실이라면 검정력이 떨어져야 하는데 실제로는 거짓 양성이 늘었다. 방향이 반대이므로 다른 설명이 필요하다.

해설

유의수준 5%는 검정을 한 번 할 때의 약속이다. 실험 도중 네 번 들여다보고 그중 한 번이라도 유의하면 멈추는 전략은 네 번의 기회를 쓰는 것이라, 효과가 전혀 없어도 어느 시점에는 p가 0.05 아래로 내려갈 확률이 크게 오른다. 눈여겨볼 점은 이것이 데이터나 검정 방법의 결함이 아니라는 것이다. 각 시점의 검정은 저마다 정확하고 문제는 멈출 시점을 결과를 보고 정한다는 데 있다. 중간 점검이 꼭 필요하다면 순차 검정처럼 확인 횟수를 미리 계산에 넣은 절차를 써야 하고, 그렇지 않다면 대시보드에서 p값을 아예 감추는 편이 안전하다.

이 내용 다시 읽기 →
분석과 판단연결 문항구조
네 번 분석하는 O'Brien-Fleming 경계다. 양측 유의수준은 0.05다. 1/4차 z 4.049 p 0.00005 2/4차 z 2.863 p 0.00420 3/4차 z 2.337 p 0.01944 4/4차 z 2.024 p 0.04297

중간 분석을 세 번 하고 마지막에는 평소대로 1.96을 쓰면 무엇이 어긋나는가?

  1. 최종 분석은 전체 데이터를 쓰므로 1.96을 그대로 쓰는 것이 맞다.

    데이터가 전부 모였다는 것과 그동안 몇 번 판정 기회를 썼는지는 다른 문제다. 앞선 세 번에서 이미 기각할 기회가 있었으므로 그만큼을 최종 경계에서 갚아야 한다.

  2. 1차 경계가 4.049로 매우 엄격했으므로 최종에서 완화해도 균형이 맞는다.

    표의 경계들이 이미 그 균형을 계산해 나온 값이다. 초기를 엄격하게 잡은 덕분에 최종이 2.024까지 내려온 것이지 1.96까지 내려오지는 않는다.

  3. 순차 검정은 최종 임계값을 오히려 1.96보다 낮춰준다.

    표의 마지막 줄이 2.024로 1.96보다 높다. 중간 확인의 대가는 어디선가 치러야 하고 그 자리가 최종 경계다.

  4. 정답최종 경계도 2.024로 엄격해져야 하는데 1.96을 쓰면 전체 오류율이 5.6%로 샌다.

    표의 경계를 그대로 지켰을 때만 전체 1종 오류율이 5.0%로 유지된다. 마지막에만 평소 기준으로 돌아가면 5.6%가 되고, 아무 보정 없이 네 번 확인하는 12.6%보다는 낫지만 선언한 값과 어긋나기는 마찬가지다.

해설

순차 검정은 중간 확인을 허용하는 대신 그 대가를 임계값에 미리 반영한다. O'Brien-Fleming 경계는 초기에 매우 엄격하게 시작해 후반으로 갈수록 완화되는데, 여기서 놓치기 쉬운 것이 최종 경계다. 네 번 들여다본 대가로 마지막 임계값도 1.96이 아니라 2.024가 되어야 전체 1종 오류율이 5%로 유지된다. 마지막에만 평소 기준으로 돌아가면 5.6%로 새어 나간다. 순차 검정이 공짜가 아니라는 점도 함께 기억할 만하다. 중간 분석이 늘수록 최대 필요 표본이 몇 퍼센트 늘어나고, 대신 효과가 뚜렷할 때 일찍 끝낼 수 있어 기대 표본은 줄어드는 거래다.

이 내용 다시 읽기 →

통계적 함정: 다중 검정, p-hacking, 심슨의 역설, 상관 ≠ 인과

원문 읽기 →
개념 확인구조

본페로니 보정과 벤야미니-호흐베르크 절차가 제어하는 대상은 각각 무엇인가?

  1. 본페로니는 1종 오류를, 벤야미니-호흐베르크는 2종 오류를 제어한다.

    둘 다 거짓 양성 쪽을 다루는 방법이다. 다만 그 거짓 양성을 개수로 보느냐 비율로 보느냐가 다르고, 2종 오류는 어느 쪽도 직접 제어하지 않는다.

  2. 둘 다 같은 대상을 제어하고 계산 방식만 다르다.

    제어 대상이 다르기 때문에 결과도 갈린다. 같은 데이터에서 본페로니가 셋을 잡을 때 BH가 넷을 잡는 것이 그 차이의 실질적 모습이다.

  3. 정답본페로니는 하나라도 거짓 양성이 날 확률을, BH는 기각 중 거짓 양성 비율을 제어한다.

    본페로니는 검정 묶음 전체에서 거짓 양성이 하나라도 나올 확률을 유의수준 아래로 누른다. BH는 기각한 것 가운데 거짓이 섞이는 비율을 정해둔 수준으로 묶고, 대신 훨씬 많은 진짜를 잡아낸다.

  4. 본페로니는 검정 횟수를, BH는 표본 크기를 조정한다.

    둘 다 표본 크기를 건드리지 않는다. 조정하는 것은 각 검정의 판정 문턱이고, 데이터를 다시 모으는 일과는 무관하다.

해설

두 방법은 계산이 아니라 목표가 다르다. 본페로니는 가족단위 오류율을 제어해 검정 묶음 전체에서 거짓 양성이 하나라도 나올 확률을 눌러두므로 아주 엄격하고, 검정이 늘수록 문턱이 급격히 높아져 진짜 효과까지 놓친다. BH는 거짓 발견 비율을 제어해 기각한 것 가운데 일정 비율의 거짓을 허용하는 대신 훨씬 많은 진짜를 잡아낸다. 어느 쪽이 맞는지는 상황이 정한다. 오탐 하나도 치명적인 확증 연구에는 본페로니가, 수천 개 후보를 훑어 추리는 탐색적 분석에는 BH가 어울린다. 유전체학에서 BH가 사실상 표준이 된 것도 그 때문이다.

이 내용 다시 읽기 →
상황 적용진단
1973년 버클리 대학원 입학 데이터 중 네 학과다. 학과 남성 지원/합격 합격률 여성 지원/합격 합격률 A 825 / 512 62.1% 108 / 89 82.4% B 560 / 353 63.0% 25 / 17 68.0% C 325 / 120 36.9% 593 / 202 34.1% D 417 / 138 33.1% 375 / 131 34.9% 소계 2127 / 1123 52.8% 1101 / 439 39.9%

학과별로는 여성이 유리한데 합치면 남성이 13%p 높아지는 역전을 만든 것은 무엇인가?

  1. 정답지원 학과가 교란 변수다. 남녀가 지원한 학과의 합격률이 서로 달랐다.

    남성 지원자 2,127명 중 1,385명이 합격률 60%대인 A와 B에 지원한 반면, 여성은 1,101명 중 968명이 30%대인 C와 D에 몰렸다. 학과별 합격률이 아니라 지원 분포가 전체 격차를 만들어냈다.

  2. 여성 지원자 수가 남성의 절반이라 표본이 작아 생긴 우연이다.

    1,101명이면 합격률 추정이 흔들릴 크기가 아니다. 게다가 역전은 우연이 아니라 지원 분포가 만들어낸 구조적 결과라 표본을 늘려도 그대로 남는다.

  3. 합격률을 학과별로 나눈 계산 자체에 오류가 있다.

    각 칸의 비율은 모두 정확하고 소계도 맞다. 두 층위의 결론이 다른 것은 계산 오류가 아니라 심슨의 역설이라 부르는 현상 그 자체다.

  4. 학과 C에서 남성 합격률이 높아 그 학과 하나가 전체를 뒤집었다.

    C의 격차는 2.8%p로 미미하다. 전체를 뒤집은 것은 어느 한 학과의 격차가 아니라 각 학과에 얼마나 지원했는가라는 가중치다.

해설

역전을 만든 것은 지원 학과라는 교란 변수다. 남성은 합격률이 60%대인 학과에 대거 지원했고 여성은 30%대인 학과에 몰렸다. 학과별 합격률이 아니라 지원 분포가 전체 격차를 만들어낸 것이다. 여기서 배울 것은 합산하기 전에 합쳐도 되는지를 먼저 물어야 한다는 점이다. 하위 그룹 사이에 구성 비율이 크게 다르면 단순 합산이 방향까지 뒤집을 수 있다. 다만 층을 나눈 쪽이 언제나 옳은 것도 아니다. 학과 선택 자체가 차별의 결과라면 학과로 통제하는 것이 진짜 효과를 가려버린다. 무엇을 통제할지는 데이터가 아니라 인과 구조에 대한 판단이 정한다.

이 내용 다시 읽기 →
상황 적용진단
완전히 같은 분포에서 뽑은 두 데이터로 분석을 이어갔다. 진짜 차이는 0이다. 전체 데이터 (200 대 200) p = 0.2351 상위 50%만 (100 대 100) p = 0.0150 구간을 열 가지로 나눠 최소값 p = 0.0024

진짜 차이가 0인데 p가 0.0024까지 내려간 이유는 무엇인가?

  1. 상위 50%만 남기면 분산이 줄어 검정력이 올라간 정당한 결과다.

    정당한 검정력 향상이라면 진짜 차이가 있을 때만 p가 내려가야 한다. 여기서는 차이가 0인데 내려갔으므로 얻은 것은 검정력이 아니라 거짓 양성의 기회다.

  2. 난수 시드를 고정해 우연히 극단적인 표본이 뽑혔다.

    시드를 바꿔도 같은 절차를 반복하면 비슷한 일이 벌어진다. 특정 표본의 문제가 아니라 여러 번 시도해 최소값을 고르는 절차 자체가 만들어내는 결과다.

  3. 표본 200개는 t-검정에 부족해 p값이 불안정하다.

    각 그룹 200개면 t-검정에 충분하고 전체 분석의 p = 0.2351도 정직한 값이다. 값이 불안정한 것이 아니라 여러 값 중 가장 작은 것만 골라낸 것이 문제다.

  4. 정답구간을 열 개 시도해 최소값만 골랐으므로 사실상 열 번 검정하고 보정을 생략했다.

    독립인 검정 열 번이면 아무 효과가 없어도 적어도 하나가 유의할 확률이 40%에 이른다. 그중 가장 작은 값 하나만 보고하면 나머지 아홉 번의 시도가 감춰진다.

해설

정직하게 전체를 분석하면 아무것도 나오지 않는데, 상위 절반만 떼어내고 구간을 열 가지로 나눠 최소값만 고르면 p가 0.0024까지 내려간다. 진짜 차이가 0인데도 그렇다. 열 번 시도해 하나만 보고하는 것은 검정을 열 번 하고 보정을 생략하는 것과 같다. 특히 곤란한 점은 각 단계가 그 자리에서는 합리적으로 보인다는 것이다. 이상치를 걸러내고, 관심 구간에 집중하고, 하위 그룹을 들여다보는 일은 모두 정당한 분석 행위처럼 보인다. 그래서 본인조차 조작하고 있다는 자각이 없는 경우가 많고, 가설과 분석 방법을 데이터 수집 전에 문서로 못박아두는 사전 등록이 필요한 근본 이유가 여기 있다.

이 내용 다시 읽기 →
상황 적용판단
Z에 잡음을 더해 X = 2Z + 오차, Y = 3Z + 오차로 만든 데이터 50개다. X와 Y 사이에는 직접적인 연결이 없다. X와 Y의 상관 r = 0.824, p < 0.0001 Z를 통제한 편상관 r = -0.220, p = 0.1242

이 두 숫자가 함께 알려주는 것은 무엇인가?

  1. Z를 통제하면 상관이 음수가 되므로 X가 Y를 억제하는 관계다.

    -0.220은 표본 50개에서 나오는 잡음 수준이고 p = 0.1242로 유의하지도 않다. 부호를 읽을 값이 아니다.

  2. 정답X와 Y 사이에는 직접적 관계가 없고 공통 원인 Z가 둘을 함께 움직인 것이다.

    Z가 설명하는 부분을 걷어내자 남는 관계가 사실상 0이 되었다. 강한 상관 0.824가 두 변수 사이의 연결이 아니라 공통 원인에서 나왔다는 뜻이고, 아이스크림 판매와 범죄율이 기온으로 이어지는 구조와 같다.

  3. 편상관이 유의하지 않으므로 원래 상관 0.824도 우연이었다.

    0.824는 우연이 아니라 실제로 관측되는 관계다. 다만 그 관계가 인과가 아니라 공통 원인을 거쳐 만들어진 것일 뿐이다.

  4. 표본 50개로는 편상관을 신뢰할 수 없어 판단을 보류해야 한다.

    50개면 0.8 수준의 상관이 사라진 것을 확인하기에 충분하다. 0.824가 -0.220으로 떨어진 것은 표본 크기로 설명될 만한 변화가 아니다.

해설

편상관은 교란 변수를 통제한 뒤 남는 관계를 재는 도구다. X와 Y를 각각 Z로 회귀한 잔차 사이의 상관을 구하면 Z가 설명하는 부분이 걷히고, 여기서는 0.824가 사실상 0으로 떨어지면서 유의성도 사라진다. 두 변수 사이에 직접적인 연결이 없고 공통 원인이 둘을 함께 움직였다는 뜻이다. 이 방법의 한계도 분명하다. 통제할 수 있는 것은 우리가 측정한 변수뿐이고 관측하지 못한 교란 변수는 그대로 남는다. 무작위 배정이 강력한 이유가 여기 있다. 알려지지 않은 교란까지 한꺼번에 균형을 맞추는 유일한 방법이기 때문이다.

이 내용 다시 읽기 →
분석과 판단진단
실제 평균 차이를 0.02로 고정하고 표본 크기만 바꿔 검정했다. 표본 평균 차이 p-value Cohen d 판정 1,000 0.0715 0.105889 0.0724 비유의 10,000 0.0551 0.000103 0.0549 유의 100,000 0.0183 0.000043 0.0183 유의 1,000,000 0.0210 0.000000 0.0210 유의

n = 1,000 행을 보고 차이가 없다고 결론 내리면 무엇이 틀리는가?

  1. p = 0.106은 0.05에 가까우므로 사실상 유의하다고 봐야 한다.

    가깝다는 이유로 기준을 넘겨주면 유의수준을 정한 의미가 사라진다. 문제는 판정 자체가 아니라 판정 결과를 효과가 없다는 진술로 옮기는 데 있다.

  2. 표본이 1,000개면 충분하므로 그 결론이 맞다.

    충분한지는 감지하려는 효과 크기가 정한다. 여기서 진짜 차이는 0.02이고 그 크기를 잡아내려면 훨씬 큰 표본이 필요하다는 것이 아래 행들이 보여주는 사실이다.

  3. 정답기각하지 못한 것과 귀무가설이 참인 것은 다르다. 신뢰구간의 폭을 봐야 갈린다.

    유의하지 않다는 결과는 효과가 없을 때와 표본이 모자랄 때 모두 나온다. 여기서는 데이터에 0.02의 차이를 실제로 넣었으므로 후자다. 구간이 0을 좁게 감싸면 효과 없음의 근거가 되지만 넓게 벌어져 있으면 아직 모른다는 뜻이다.

  4. 효과 크기 0.0724가 Cohen 기준의 작은 효과에 못 미치므로 결론이 맞다.

    효과가 실질적으로 작다는 것과 효과가 없다는 것은 다른 진술이다. 게다가 0.0724는 표본에서 관측된 값이고 진짜 값은 0.02라 표본 잡음이 섞여 있다.

해설

유의하지 않다는 결과는 전혀 다른 두 상황에서 나온다. 효과가 실제로 없거나, 효과는 있는데 표본이 모자라 잡아내지 못했거나다. 여기서는 후자로, 데이터에 0.02의 차이를 실제로 넣었는데도 표본 1,000개에서는 비유의 판정이 났다. 두 상황을 가르는 것이 신뢰구간의 폭이다. 구간이 0을 좁게 감싸고 있으면 효과가 있더라도 무시할 만큼 작다는 근거가 되지만, 넓게 벌어져 있으면 아직 아무것도 모른다는 뜻이다. 그래서 유의하지 않은 결과를 보고할 때일수록 구간을 함께 내야 한다. p값만 적으면 두 상황이 같은 문장으로 뭉개지고, 읽는 사람은 대개 효과가 없다는 쪽으로 해석한다.

이 내용 다시 읽기 →
분석과 판단판단
국가별로 집계한 데이터에서 1인당 초콜릿 소비량과 인구당 노벨상 수상자 수가 강한 양의 상관을 보인다.

이 상관에서 개인 수준의 결론을 끌어내면 안 되는 이유는 무엇인가?

  1. 국가 수가 수십 개뿐이라 상관계수가 불안정하기 때문이다.

    국가를 수백 개로 늘려도 같은 문제가 남는다. 표본 크기가 아니라 분석한 단위와 결론을 적용하려는 단위가 어긋난 것이 원인이다.

  2. 정답집단 평균 사이의 상관은 집단 간 변동만 반영하므로 개인 수준의 관계와 다를 수 있다.

    국가 평균끼리의 관계는 국가 사이의 차이만 담고 각 나라 안에서 개인들이 어떻게 다른지는 담지 않는다. 그래서 개인 수준으로 옮기면 크기는 물론 방향까지 뒤집힐 수 있고, 이를 생태학적 오류라 부른다.

  3. 초콜릿 소비와 노벨상 사이에는 시차가 커서 어떤 결론도 낼 수 없기 때문이다.

    시차는 인과를 논할 때 따져볼 요소이지만 여기서 문제 삼는 것은 시간이 아니라 단위다. 시차를 맞춰 다시 계산해도 집단 상관을 개인에 옮길 수는 없다.

  4. 상관계수는 인과를 증명하지 못하므로 어떤 수준의 결론도 낼 수 없기 때문이다.

    인과가 아니어도 집단 수준의 연관 자체는 정당한 관찰이고 가설의 출발점이 된다. 금지되는 것은 그 관찰을 다른 단위로 옮기는 일이다.

해설

집단 단위로 계산한 상관은 집단 사이의 변동만 반영한다. 국가 평균끼리의 관계가 그 안의 개인들 사이 관계와 같으리라는 보장이 없고, 실제로 크기는 물론 방향까지 뒤집히는 경우가 있다. 초콜릿과 노벨상의 상관도 국가의 경제 수준이라는 공통 요인으로 대부분 설명된다. 반대 방향의 오류도 있다. 한 환자에게 효과가 있었다고 그 약이 모든 환자에게 듣는다고 말하는 식으로 개인에게서 관찰한 것을 집단에 옮기는 것이다. 방어책은 단순하다. 분석한 단위와 결론을 적용할 단위를 일치시키고, 어긋난다면 그 어긋남을 명시하는 것이다. 사용자 단위로 집계해놓고 요청 단위의 결론을 내리는 실수도 같은 종류다.

이 내용 다시 읽기 →

이 페이지는 문항 품질을 점검하는 용도로도 씁니다. 한 화면에서 전부 훑어야 중복된 문항, 쏠린 난이도, 소거법으로 풀리는 선택지가 보입니다.

Thank You for Visiting My Blog, Have a Good Day 😆