128강 심화 2에서 예고를 하나 남겼습니다. 포아송 과정에서 첫 사건까지의 시간을 물으면
이며 포아송의 항이 그대로 답이라고 했습니다. 이 분포가 지수분포입니다.
그리고 이산과 연속의 대응이 완성됩니다.
| 이산 | 연속 | 무엇을 세는가 |
|---|---|---|
| 이항 | 포아송 | 정해진 범위의 횟수 |
| 기하 | 지수 | 첫 사건까지의 기다림 |
| 음이항 | 감마 | 번째 사건까지의 기다림 |
셋째 줄이 이 강의의 후반부입니다. 지수분포를 개 더하면 감마분포가 되며, 그 과정에서 감마함수라는 새 도구가 등장합니다.
팩토리얼을 실수로 확장한 함수이며, 입니다. 그리고 인데, 130강 문제 1의 가우스 적분과 같은 값인 것이 우연이 아닙니다.
이것으로 02단원이 마무리되며, 여섯 개의 분포가 모두 하나의 그림 안에 놓입니다.
문제. 인 포아송 과정에서 첫 사건까지의 시간 를 봅니다.
(1) 를 포아송의 항으로 구하세요.
(2) 평균과 분산을 쓰세요.
(3) 위험률 를 여러 에서 구하세요.
생각의 실마리. "까지 기다렸다"는 것은 **"구간 에 사건이 한 번도 없었다"**와 같은 말입니다. 그 확률은 이미 128강에서 계산했습니다.
풀이. (1) 검산 결과입니다.
| (구간에 회)=e^ | 차이 | ||
|---|---|---|---|
**같은 식이므로 분포함수가 **입니다.
(2) 평균이 , 분산이 입니다.
(3) 검산 결과입니다.
| 와의 차이 | ||||
|---|---|---|---|---|
위험률이 와 무관하게 정확히 입니다. 에서 와 가 표시상 으로 보여도 비는 정확히 입니다.
이 문제에서 배우는 것: 지수분포.
지수분포. 이면
모수 가 발생률이고 평균이 그 역수입니다. 시간당 두 번 일어나면 평균 대기시간이 반 시간입니다.
위험률이 상수인 것이 지수분포를 특징짓습니다. 129강 심화 4에서 정의한 가 로 일정합니다.
128강의 무기억성이 이것의 다른 표현입니다. 세 진술이 모두 같은 말입니다.
| 진술 | 형태 |
|---|---|
| 무기억성 | |
| 위험률 상수 | |
| 생존함수가 지수 |
셋째 줄이 함수방정식이며, 128강 문제 5에서 이산 버전을 다뤘습니다. 연속에서도 해가 지수함수뿐이므로 무기억성을 갖는 연속분포는 지수분포뿐입니다.
실무의 함의가 분명합니다. 지수분포를 쓴다는 것은 **"부품이 늙지 않는다"**고 가정하는 것입니다. 마모가 있으면 위험률이 오르므로 다른 분포가 필요하며, 심화 6에서 와이불분포를 봅니다.
바로 확인 1.
확인 1-1. 지수분포의 밀도와 생존함수를 쓰세요.
답. 와 입니다.
확인 1-2. 평균과 분산을 쓰세요.
답. 와 입니다.
확인 1-3. 위험률을 쓰고 그 의미를 쓰세요.
답. 로 상수이며 무기억성과 같은 말입니다.
문제. 독립 지수분포 개의 합을 봅니다.
(1) 에서 합성곱으로 밀도를 계산하세요.
(2) 이론 밀도와 비교하세요.
(3) 평균과 분산을 확인하세요.
생각의 실마리. 번째 사건까지의 시간은 각 사건 사이의 간격을 개 더한 것입니다. 128강 문제 5에서 무기억성 덕분에 각 간격이 독립 지수분포입니다.
풀이. (1)(2) 검산 결과입니다.
| 격자점 | 합성곱 | 차이 | ||
|---|---|---|---|---|
| 1.35\times10^ | ||||
| 5.50\times10^ | ||||
| 3.38\times10^ | ||||
| 1.47\times10^ | ||||
| 3.61\times10^ | ||||
| 1.59\times10^ |
차이가 모두 이하이며 격자 간격에서 오는 이산화 오차입니다.
(3) 평균과 분산도 배가 됩니다.
| 평균 | 분산 r/\lambda^ | 수치 평균 | 수치 분산 | |
|---|---|---|---|---|
이 문제에서 배우는 것: 감마분포.
감마분포. 이면
가 정수 이면 지수분포 개의 합이며 이를 얼랑분포라 부릅니다. 이므로 밀도가
입니다.
가 정수가 아니어도 정의됩니다. 합의 해석은 사라지지만 분포는 여전히 유효하며, 실무에서 자주 씁니다.
평균과 분산이 배인 것은 127강 문제 3의 관찰 그대로입니다. 기댓값은 언제나 더해지고 분산은 독립이라 더해집니다.
모수화에 주의가 필요합니다.
| 모수화 | 밀도 | 평균 |
|---|---|---|
| 비율 | ||
| 척도 |
라이브러리마다 다르므로 반드시 확인해야 합니다. 128강 문제 4에서 기하분포의 두 판본을 짚은 것과 같은 주의입니다.
바로 확인 2.
확인 2-1. 감마분포의 밀도를 쓰세요.
답. 입니다.
확인 2-2. 평균과 분산을 쓰세요.
답. 와 입니다.
확인 2-3. 가 정수일 때의 이름과 의미를 쓰세요.
답. 얼랑분포이며 지수분포 개의 합입니다.
문제. 를 봅니다.
(1) 여러 에서 수치로 계산하고 알려진 값과 비교하세요.
(2) 치환 없이 격자로 적분할 때의 문제를 확인하세요.
(3) 재귀 를 확인하세요.
생각의 실마리. 이면 피적분함수가 라 에서 발산합니다. 129강 심화 2에서 본 대로 적분은 수렴하지만, 수치 적분이 잘 될지는 다른 문제입니다.
풀이. (1) 치환 을 써서 계산한 결과입니다.
| 수치 | 알려진 값 | 차이 | |
|---|---|---|---|
| 3.33\times10^ | |||
| 3.55\times10^ | |||
| 2.22\times10^ |
이 확인되고 도 정확합니다.
(2) 치환의 효과가 극적입니다.
| 치환 없음 | 치환 후 | 참값 | 오차 비교 | |
|---|---|---|---|---|
| 대 2.2\times10^ | ||||
| 대 |
에서 열세 자릿수가 좋아집니다. 특이점을 격자로 다루면 발산하는 구간을 유한한 값으로 대체하게 되어 오차가 큽니다.
(3) 재귀도 확인됩니다.
| 차이 | |||
|---|---|---|---|
| 1.11\times10^ | |||
| 1.78\times10^ |
이 문제에서 배우는 것: 감마함수.
감마함수.
재귀는 부분적분에서 나옵니다. 50강의 도구입니다.
**에서 시작해 재귀를 쓰면 **이 나옵니다. 팩토리얼을 실수로 잇는 함수이며, 지수가 정수가 아닌 경우를 다룰 수 있게 합니다.
의 정체. 치환 을 넣으면
이고 이면 이므로 130강 문제 1의 가우스 적분입니다.
두 상수가 같은 곳에서 온 것입니다. 정규분포의 와 감마함수의 가 같은 적분의 두 얼굴이며, 145강에서 카이제곱분포를 다룰 때 이 연결이 다시 쓰입니다.
검산이 준 교훈도 있습니다. 수치 적분에서 피적분함수의 특이점을 그대로 두면 정확도가 크게 떨어집니다. 변수변환으로 특이점을 없애는 것이 표준 대응이며, 129강 문제 4의 야코비 인자가 여기서 실무 도구가 됩니다.
바로 확인 3.
확인 3-1. 감마함수의 정의와 재귀를 쓰세요.
답. 이고 입니다.
확인 3-2. 과 를 쓰세요.
답. 과 입니다.
확인 3-3. 가 가우스 적분과 같은 이유를 쓰세요.
답. 치환 을 넣으면 그 적분이 되기 때문입니다.
문제. 의 모수를 바꿔 가며 익숙한 분포가 나오는지 봅니다.
(1) 일 때를 확인하세요.
(2) 가 정수일 때를 확인하세요.
(3) 이고 일 때를 확인하세요.
생각의 실마리. 밀도 에서 가 모양을 정하고 가 척도를 정합니다. 특정 값에서 익숙한 꼴이 나올 것입니다.
풀이. 검산 결과입니다.
| 모수 | 분포 이름 | 에서의 밀도 | 대조 밀도 |
|---|---|---|---|
| , | 지수 | ||
| , | 얼랑 | ||
| , | 카이제곱 | ||
| , | 카이제곱 |
네 줄 모두 완전히 일치합니다.
마지막 줄이 특히 의미 있습니다. 129강 심화 3에서 표준정규의 제곱 의 밀도를 변환 공식으로 유도했는데
이었고, 이것이 와 같은 수를 줍니다. 가 그 일치를 만듭니다.
이 문제에서 배우는 것: 감마분포족.
감마분포가 품는 분포들.
| 특수 경우 | 모수 | 의미 |
|---|---|---|
| 지수분포 | 첫 사건까지의 시간 | |
| 얼랑분포 | 가 정수 | 번째 사건까지의 시간 |
| 카이제곱 \chi^{2}_ | , | 표준정규 개 제곱의 합 |
셋째 줄이 통계학의 중심으로 이어집니다. 145강에서 표본분산의 분포가 카이제곱임을 보이고, 그것으로 분포와 분포를 만듭니다. 감마족 하나가 추론 전체의 재료가 됩니다.
감마족이 닫혀 있는 성질도 있습니다.
가 같아야 합니다. 128강 문제 3의 포아송 가법성, 130강 문제 4의 정규 가법성과 나란한 성질이며, 문제 2의 합성곱이 그 특수한 경우입니다.
척도 변환에도 닫혀 있습니다. 이므로 모양 모수 는 변하지 않습니다. 그래서 를 모양 모수, 를 비율 모수라 부릅니다.
바로 확인 4.
확인 4-1. 인 감마분포를 쓰세요.
답. 지수분포입니다.
확인 4-2. 카이제곱 를 감마로 쓰세요.
답. 입니다.
확인 4-3. 감마의 합 성질과 그 조건을 쓰세요.
답. 비율 모수가 같으면 모양 모수가 더해집니다.
문제. 포아송 관측 개의 합이 일 때 를 추정합니다.
(1) 에 사전을 주고 사후를 구하세요.
(2) 여러 사전과 표본 크기에서 사후 평균을 구하세요.
(3) 최대우도와 비교하세요.
생각의 실마리. 127강 심화 4에서 이항의 켤레 사전이 베타였습니다. 포아송에도 켤레 사전이 있는지 봅니다. 가능도가 꼴이므로 사전도 같은 꼴이면 좋습니다.
풀이. (1) 가능도가
이고 사전이 이면 이므로 곱하면
이며 **이것이 **입니다.
(2)(3) 검산 결과입니다.
| 사전 | 관측 | 합 | 사후 | 사후 평균 | 최대우도 |
|---|---|---|---|---|---|
첫 줄과 둘째 줄을 비교하면 관측이 열 배 늘 때 사후 평균이 최대우도에 가까워집니다. 에서 입니다.
셋째 줄은 거의 정보가 없는 사전이라 처음부터 최대우도에 가깝습니다.
넷째 줄은 강한 사전이라 데이터를 까지만 끌어당깁니다.
이 문제에서 배우는 것: 감마는 포아송의 켤레 사전이다.
켤레 갱신. 사전 에 포아송 관측 개를 반영하면
이며 덧셈 두 번뿐입니다.
모수의 해석이 명확합니다.
| 모수 | 해석 |
|---|---|
| 사전에 관측했다고 치는 사건의 총 개수 | |
| 사전에 관측했다고 치는 시간의 길이 | |
| 사전 평균 발생률 |
사전의 강도를 관측량으로 환산할 수 있습니다. 은 "단위 시간 동안 번을 이미 봤다"는 믿음이며, 표에서 인 데이터보다 무겁게 작용합니다.
사후 평균이 가중평균입니다.
**사전 평균과 최대우도의 가중평균이며 가중치가 와 **입니다. 125강 심화 3의 "데이터가 많으면 사전의 영향이 사라진다"가 이 식으로 정량화됩니다.
02단원의 여섯 분포가 여기서 한 그림으로 묶입니다.
| 분포 | 켤레 사전 | 무엇의 모수인가 |
|---|---|---|
| 베르누이, 이항 | 베타 | 성공확률 |
| 포아송 | 감마 | 발생률 |
| 정규(분산 고정) | 정규 | 평균 |
| 정규(평균 고정) | 역감마 | 분산 \sigma^ |
모두 지수족이며, 지수족에는 언제나 켤레 사전이 있습니다. 149강에서 이 일반론을 다룹니다.
바로 확인 5.
확인 5-1. 포아송의 켤레 사전을 쓰세요.
답. 감마분포입니다.
확인 5-2. 켤레 갱신 규칙을 쓰세요.
답. 에 관측 합을 더하고 에 관측 수를 더합니다.
확인 5-3. 사후 평균이 무엇의 가중평균인지 쓰세요.
답. 사전 평균과 최대우도의 가중평균이며 가중치가 와 입니다.
| 분포 | 밀도 | 평균 | 분산 |
|---|---|---|---|
| 지수 | \lambda e^ | 1/\lambda^ | |
| 감마 | a/\lambda^ | ||
| 얼랑 | r/\lambda^ | ||
| 카이제곱 |
| 감마함수 | 성질 |
|---|---|
| 정의 | |
| 재귀 | |
| 정수 | |
| 반정수 | \Gamma(1/2)=\sqrt |
| 무기억성의 세 얼굴 | 형태 |
|---|---|
| 조건부확률 | |
| 위험률 | 상수 |
| 함수방정식 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 비율과 척도 모수를 혼동합니다 | 인지 인지 확인합니다 |
| 특이점을 그대로 수치 적분합니다 | 변수변환으로 없앱니다 |
| 지수분포를 마모 고장에 씁니다 | 위험률이 오르면 와이불입니다 |
| 감마 합에서 가 달라도 더합니다 | 비율이 같아야 합니다 |
문제 6. 지수분포의 밀도와 생존함수를 쓰세요.
답. 와 입니다.
문제 7. 지수분포가 포아송 과정에서 나오는 이유를 쓰세요.
답. 가 구간에 사건이 회일 확률이라 이기 때문입니다.
문제 8. 지수분포의 위험률과 그 의미를 쓰세요.
답. 로 상수이며 무기억성과 같은 말입니다.
문제 9. 무기억성의 세 가지 동치 표현을 쓰세요.
답. 조건부확률 형태, 위험률 상수, 생존함수의 함수방정식입니다.
문제 10. 감마분포의 밀도와 평균, 분산을 쓰세요.
답. 이고 , 입니다.
문제 11. 가 정수일 때의 이름과 의미를 쓰세요.
답. 얼랑분포이며 지수분포 개의 합입니다.
문제 12. 감마함수의 정의와 재귀를 쓰세요.
답. 이고 입니다.
문제 13. 재귀의 유도 방법을 쓰세요.
답. 부분적분입니다.
문제 14. 과 를 쓰세요.
답. 과 입니다.
문제 15. 가 가우스 적분과 같은 이유를 쓰세요.
답. 치환 을 넣으면 그 적분이 되기 때문입니다.
문제 16. 카이제곱분포를 감마로 쓰세요.
답. 입니다.
문제 17. 포아송의 켤레 사전과 갱신 규칙을 쓰세요.
답. 감마이며 에 관측 합을, 에 관측 수를 더합니다.
문제 18. 사후 평균이 무엇의 가중평균인지 쓰세요.
답. 사전 평균과 최대우도의 가중평균이며 가중치가 와 입니다.
심화 1. 대기시간의 역설을 설명하세요.
버스가 평균 분 간격으로 포아송 과정을 따라 온다고 합니다. 무작위 시각에 정류장에 도착하면 평균 몇 분을 기다립니까.
직관은 분이라 답합니다. 평균 간격 분의 절반이기 때문입니다. 그런데 답은 분입니다.
무기억성 때문입니다. 언제 도착하든 **그 순간부터 다음 버스까지의 대기가 다시 **이므로 평균이 분입니다.
더 이상한 것은 앞뒤를 합친 간격입니다. 내가 도착한 시점이 속한 간격의 길이는 평균 분이며, 실제 간격의 평균 분의 두 배입니다.
이유는 크기 편향 표집입니다. 무작위 시점은 긴 간격에 떨어질 확률이 높습니다. 길이 인 간격에 떨어질 확률이 에 비례하므로
이를 검사 역설이라 합니다.
실무에서 같은 함정이 반복됩니다.
| 상황 | 편향 |
|---|---|
| 평균 학급 인원 | 학생에게 물으면 큰 반이 과대 표집됩니다 |
| 평균 대기 시간 | 대기 중인 사람을 표집하면 긴 대기가 뽑힙니다 |
| 서버 응답 시간 | 진행 중인 요청을 보면 느린 것이 많습니다 |
| 부품 수명 조사 | 현재 가동 중인 것은 오래 가는 쪽입니다 |
123강 심화 3의 선택 편향과 같은 구조이며, 어떻게 표집했는지가 결과를 바꿉니다.
심화 2. 스털링 근사를 개관하세요.
나 을 큰 에서 계산하려면 근사가 필요합니다.
스털링 근사.
가 또 나옵니다. 감마 적분의 최대점 근처를 이차식으로 근사하면 가우스 적분이 나오기 때문이며, 100강의 이차 근사와 130강 문제 1이 결합한 결과입니다.
| 스털링 | 상대오차 | ||
|---|---|---|---|
| \approx9.33\times10^ |
상대오차가 으로 줄어듭니다.
실무에서 로그 형태를 씁니다. 은 부터 배정밀도 부동소수점의 범위를 넘지만 은 안전합니다. 이항계수를 계산할 때도 로그로 다루는 것이 표준이며, 127강 심화 2에서 점화식을 권한 이유와 같습니다.
이 근사가 정보이론에서도 쓰입니다. 이라는 근사가 스털링에서 나오며, 부호화 이론과 대편차 이론의 출발점입니다.
심화 3. 베타분포와 감마분포의 관계를 밝히세요.
127강 심화 4에서 베타분포가 이항의 켤레 사전이라 했습니다. 베타와 감마가 직접 이어집니다.
관계. 와 가 독립이면
이며 이 비는 와 독립입니다.
베타함수도 감마로 표현됩니다.
따라서 베타분포의 정규화 상수가 감마함수로 쓰입니다.
와 가 정수면 이항계수가 됩니다. 이므로
베타분포와 이항분포가 같은 조합 구조를 공유하며, 이것이 켤레 관계의 대수적 근거입니다.
디리클레분포가 다변량 확장입니다. 감마 여러 개를 합으로 정규화하면 디리클레가 되며, 다항분포의 켤레 사전이 됩니다. 토픽 모형의 표준 재료입니다.
심화 4. 지수족과 켤레 사전의 일반론을 개관하세요.
문제 5에서 갱신이 덧셈 두 번이었습니다. 왜 그렇게 단순한지를 봅니다.
지수족. 밀도가
꼴이면 지수족에 속하며 를 충분통계량이라 합니다.
개 관측의 가능도가 에만 의존합니다. 지수 안에서 합이 되기 때문입니다.
| 분포 | 충분통계량 |
|---|---|
| 베르누이 | |
| 포아송 | |
| 정규(둘 다 미지) | |
| 감마 |
켤레 사전을 지수족과 같은 꼴로 두면 곱해도 꼴이 유지되고, 갱신이 충분통계량의 덧셈이 됩니다. 문제 5에서 포아송의 충분통계량이 라 가 더해진 것입니다.
148강의 충분통계량이 여기서 예고됩니다. 개의 관측을 몇 개의 수로 요약해도 정보를 잃지 않는다는 뜻이며, **126강 문제 5에서 "관심 없는 정보를 버리는 것이 통계량의 본질"**이라 한 말이 정확해집니다.
지수족이 아닌 분포도 많습니다. 균등분포는 지지집합이 모수에 의존해 지수족이 아니며, 켤레 사전도 단순하지 않습니다.
심화 5. 대기행렬 이론을 개관하세요.
지수분포와 포아송이 만나면 대기행렬 모형이 됩니다.
M/M/1 대기행렬은 도착이 포아송 , 서비스 시간이 지수 , 서버가 하나인 계입니다. 두 M이 마르코프를 뜻하며 무기억성 덕분에 상태가 대기 인원 하나로 요약됩니다.
이용률 가 핵심 지표입니다.
| 지표 | 값 |
|---|---|
| 정상상태 존재 조건 | |
| 평균 대기 인원 | |
| 평균 체류 시간 |
에서 발산합니다.
| 평균 대기 인원 | |
|---|---|
이용률 에서 로 올리면 대기가 다섯 배가 됩니다. 서버를 꽉 채워 쓰면 지연이 폭증한다는 것이 이 표이며, 용량 계획의 근본 근거입니다.
리틀의 법칙이 일반적으로 성립합니다.
평균 인원은 도착률 곱하기 평균 체류 시간이며, 분포 가정 없이 성립합니다. 시스템 성능 분석의 기본 항등식입니다.
154강의 마르코프 연쇄에서 이 계를 정식으로 다룹니다.
심화 6. 지수분포를 넘어서는 수명 모형을 정리하세요.
문제 1에서 지수분포의 위험률이 상수라고 했습니다. 실제 수명은 대개 그렇지 않습니다.
와이불분포. 위험률이 시간의 거듭제곱으로 변합니다.
| 위험률 | 해석 | |
|---|---|---|
| 감소 | 초기 결함이 걸러집니다 | |
| 상수 | 지수분포입니다 | |
| 증가 | 마모가 진행됩니다 |
에서 지수분포가 되므로 와이불이 지수의 일반화입니다.
실제 부품은 욕조 곡선을 그립니다. 초기 고장률이 높다가 안정기를 거쳐 말기에 다시 오릅니다. 세 구간을 각각 다른 로 모형화하거나 혼합 모형을 씁니다.
기계학습에서 생존분석이 쓰이는 자리가 있습니다.
| 문제 | 사건 |
|---|---|
| 고객 이탈 예측 | 해지 시점 |
| 장비 예지 보전 | 고장 시점 |
| 임상 결과 | 재발 시점 |
| 사용자 잔존 | 마지막 활동 |
공통점은 중도 절단입니다. 아직 사건이 일어나지 않은 관측이 많으며, ""라는 부분 정보만 있습니다. 이 정보를 버리면 편향이 생기고, 생존함수를 쓰면 그대로 가능도에 넣을 수 있습니다.
125강 문제 5의 교훈이 여기서 다시 나타납니다. 관측이 어떻게 이루어졌는지를 가능도에 넣지 않으면 결론이 틀립니다.
import numpy as np, math
# --- 문제 1: 포아송의 대기시간이 지수분포다 -----------------------------
lam = 2.0
print(" 포아송 과정 lam = %.1f. 첫 사건까지의 시간 T 를 봅니다" % lam)
print(" t P(구간에 0회) = e^{-lam t} 1 - F(t) 차이")
for t in [0.1, 0.5, 1.0, 2.0, 3.0]:
p0 = np.exp(-lam*t) # 포아송 k=0
surv = np.exp(-lam*t) # 지수분포 생존함수
print(" %9.1f %26.12f %14.12f %12.2e" % (t, p0, surv, abs(p0-surv)))
print(" 둘이 같은 식이므로 T 의 분포함수는 F(t) = 1 - e^{-lam t} 입니다")
print(" 평균 %.6f = 1/lam, 분산 %.6f = 1/lam^2" % (1/lam, 1/lam**2))
print(" 위험률 h(t) = f(t)/S(t) 가 상수인지 확인합니다")
print(" t f(t) S(t) h(t) lam 과의 차이")
for t in [0.1, 1.0, 5.0, 20.0]:
f = lam*np.exp(-lam*t); S = np.exp(-lam*t)
print(" %9.1f %13.8f %13.8f %11.8f %13.2e" % (t, f, S, f/S, abs(f/S - lam)))
print(" 위험률이 상수인 것이 무기억성의 정체입니다")
# 포아송 과정 lam = 2.0. 첫 사건까지의 시간 T 를 봅니다
# t P(구간에 0회) = e^{-lam t} 1 - F(t) 차이
# 0.1 0.818730753078 0.818730753078 0.00e+00
# 0.5 0.367879441171 0.367879441171 0.00e+00
# 1.0 0.135335283237 0.135335283237 0.00e+00
# 2.0 0.018315638889 0.018315638889 0.00e+00
# 3.0 0.002478752177 0.002478752177 0.00e+00
# 둘이 같은 식이므로 T 의 분포함수는 F(t) = 1 - e^{-lam t} 입니다
# 평균 0.500000 = 1/lam, 분산 0.250000 = 1/lam^2
# 위험률 h(t) = f(t)/S(t) 가 상수인지 확인합니다
# t f(t) S(t) h(t) lam 과의 차이
# 0.1 1.63746151 0.81873075 2.00000000 0.00e+00
# 1.0 0.27067057 0.13533528 2.00000000 0.00e+00
# 5.0 0.00009080 0.00004540 2.00000000 0.00e+00
# 20.0 0.00000000 0.00000000 2.00000000 0.00e+00
# 위험률이 상수인 것이 무기억성의 정체입니다
# --- 문제 2: 지수 r 개를 더하면 감마가 된다 -----------------------------
print(" 독립 지수 r 개의 합을 합성곱으로 계산합니다")
L, M = 20.0, 40000
xs = (np.arange(M) + 0.5)*(L/M); dx = L/M
expd = lam*np.exp(-lam*xs)
gam = lambda t, r: lam**r * t**(r-1) * np.exp(-lam*t) / math.factorial(r-1)
print(" r 격자점 t 합성곱 Gamma(r,lam) 차이")
cur = expd.copy()
for r in range(2, 6):
cur = np.convolve(cur, expd)[:M]*dx
if r in (2, 3, 5):
for t in [1.0, 2.0]:
i = int(np.argmin(np.abs(xs - t)))
print(" %5d %12.6f %14.10f %16.10f %12.2e"
% (r, xs[i], cur[i], gam(xs[i], r), abs(cur[i]-gam(xs[i], r))))
print(" 평균과 분산도 r 배가 됩니다")
print(" r 평균 r/lam 분산 r/lam^2 수치 평균 수치 분산")
for r in [1, 2, 5, 10]:
g = gam(xs, r); w = g*dx; tot = w.sum()
m = float(xs @ w)/tot; v = float(((xs-m)**2) @ w)/tot
print(" %5d %13.6f %14.6f %13.6f %13.6f" % (r, r/lam, r/lam**2, m, v))
# 독립 지수 r 개의 합을 합성곱으로 계산합니다
# r 격자점 t 합성곱 Gamma(r,lam) 차이
# 2 0.999750 0.5413411329 0.5414764682 1.35e-04
# 2 1.999750 0.1465251111 0.1465800672 5.50e-05
# 3 0.999750 0.5413410653 0.5413410991 3.38e-08
# 3 1.999750 0.2929769597 0.2931234894 1.47e-04
# 5 0.999750 0.1807176020 0.1803568208 3.61e-04
# 5 1.999750 0.3907334588 0.3907336174 1.59e-07
# 평균과 분산도 r 배가 됩니다
# r 평균 r/lam 분산 r/lam^2 수치 평균 수치 분산
# 1 0.500000 0.250000 0.500000 0.250000
# 2 1.000000 0.500000 1.000000 0.500000
# 5 2.500000 1.250000 2.500000 1.250000
# 10 5.000000 2.500000 5.000000 2.499999
# --- 문제 3: 감마함수가 팩토리얼을 잇는다 -------------------------------
print(" Gamma(a) = 적분 t^{a-1} e^{-t} dt 를 수치로 계산합니다")
def Gnaive(a, hi=200.0, M=8000000):
ts = (np.arange(M) + 0.5)*(hi/M)
return float((ts**(a-1)*np.exp(-ts)).sum()*(hi/M))
def G(a, hi=16.0, M=8000000): # t = u^2 치환으로 t=0 특이점을 없앱니다
us = (np.arange(M) + 0.5)*(hi/M)
return float(2*(us**(2*a-1)*np.exp(-us*us)).sum()*(hi/M))
print(" a Gamma(a) 수치 알려진 값 차이")
known = {1.0: 1.0, 2.0: 1.0, 3.0: 2.0, 4.0: 6.0, 5.0: 24.0, 0.5: np.sqrt(np.pi)}
for a in [1.0, 2.0, 3.0, 4.0, 5.0, 0.5]:
v = G(a)
print(" %9.1f %18.8f %17.8f %14.2e" % (a, v, known[a], abs(v-known[a])))
print(" Gamma(n) = (n-1)! 이고 Gamma(1/2) = sqrt(pi) = %.8f 입니다" % np.sqrt(np.pi))
print(" Gamma(1/2) 가 가우스 적분과 같은 값인 것은 우연이 아닙니다")
print(" 치환 t = u^2 을 넣으면 Gamma(a) = 2 적분 u^{2a-1} e^{-u^2} du 이고")
print(" a = 1/2 이면 2 적분 e^{-u^2} du 라 130강 문제 1 의 적분이 그대로 나옵니다")
print(" 치환 없이 격자로 적분하면 t^{-1/2} 특이점 때문에 정확도가 떨어집니다")
print(" a 치환 없음 치환 후 참값 오차 비교")
for a in [0.5, 1.5]:
kn = np.sqrt(np.pi) if a == 0.5 else 0.5*np.sqrt(np.pi)
print(" %9.1f %14.8f %14.8f %13.8f %.1e 대 %.1e"
% (a, Gnaive(a), G(a), kn, abs(Gnaive(a)-kn), abs(G(a)-kn)))
print(" 재귀 Gamma(a+1) = a*Gamma(a) 를 확인합니다")
print(" a Gamma(a+1) a*Gamma(a) 차이")
for a in [0.5, 1.5, 2.5, 3.7]:
print(" %9.1f %14.8f %14.8f %14.2e" % (a, G(a+1), a*G(a), abs(G(a+1) - a*G(a))))
# Gamma(a) = 적분 t^{a-1} e^{-t} dt 를 수치로 계산합니다
# a Gamma(a) 수치 알려진 값 차이
# 1.0 1.00000000 1.00000000 3.33e-13
# 2.0 1.00000000 1.00000000 0.00e+00
# 3.0 2.00000000 2.00000000 0.00e+00
# 4.0 6.00000000 6.00000000 0.00e+00
# 5.0 24.00000000 24.00000000 3.55e-15
# 0.5 1.77245385 1.77245385 2.22e-16
# Gamma(n) = (n-1)! 이고 Gamma(1/2) = sqrt(pi) = 1.77245385 입니다
# Gamma(1/2) 가 가우스 적분과 같은 값인 것은 우연이 아닙니다
# 치환 t = u^2 을 넣으면 Gamma(a) = 2 적분 u^{2a-1} e^{-u^2} du 이고
# a = 1/2 이면 2 적분 e^{-u^2} du 라 130강 문제 1 의 적분이 그대로 나옵니다
# 치환 없이 격자로 적분하면 t^{-1/2} 특이점 때문에 정확도가 떨어집니다
# a 치환 없음 치환 후 참값 오차 비교
# 0.5 1.76942935 1.77245385 1.77245385 3.0e-03 대 2.2e-16
# 1.5 0.88622693 0.88622693 0.88622693 7.6e-09 대 0.0e+00
# 재귀 Gamma(a+1) = a*Gamma(a) 를 확인합니다
# a Gamma(a+1) a*Gamma(a) 차이
# 0.5 0.88622693 0.88622693 1.11e-16
# 1.5 1.32934039 1.32934039 0.00e+00
# 2.5 3.32335097 3.32335097 0.00e+00
# 3.7 15.43141160 15.43141160 1.78e-15
# --- 문제 4: 감마는 여러 분포를 품는다 ----------------------------------
print(" Gamma(a, rate=b) 의 특수 경우들을 확인합니다")
def gpdf(t, a, b):
return b**a * t**(a-1) * np.exp(-b*t) / G(a)
print(" 모수 분포 이름 t=1 에서의 밀도 대조 밀도")
print(" %-22s %-18s %16.8f %13.8f"
% ("a=1, b=2", "지수 lam=2", gpdf(1.0, 1.0, 2.0), 2*np.exp(-2.0)))
print(" %-22s %-18s %16.8f %13.8f"
% ("a=3, b=2", "얼랑 r=3", gpdf(1.0, 3.0, 2.0), gam(1.0, 3)))
chi = lambda t, k: t**(k/2-1)*np.exp(-t/2)/(2**(k/2)*G(k/2))
print(" %-22s %-18s %16.8f %13.8f"
% ("a=k/2, b=1/2 (k=3)", "카이제곱 k=3", gpdf(1.0, 1.5, 0.5), chi(1.0, 3)))
print(" %-22s %-18s %16.8f %13.8f"
% ("a=1/2, b=1/2", "카이제곱 k=1", gpdf(1.0, 0.5, 0.5),
np.exp(-0.5)/np.sqrt(2*np.pi*1.0)))
print(" 마지막 줄은 129강 심화 3 에서 Z^2 의 밀도로 유도한 것과 같습니다")
# Gamma(a, rate=b) 의 특수 경우들을 확인합니다
# 모수 분포 이름 t=1 에서의 밀도 대조 밀도
# a=1, b=2 지수 lam=2 0.27067057 0.27067057
# a=3, b=2 얼랑 r=3 0.54134113 0.54134113
# a=k/2, b=1/2 (k=3) 카이제곱 k=3 0.24197072 0.24197072
# a=1/2, b=1/2 카이제곱 k=1 0.24197072 0.24197072
# 마지막 줄은 129강 심화 3 에서 Z^2 의 밀도로 유도한 것과 같습니다
# --- 문제 5: 감마는 포아송의 켤레 사전이다 ------------------------------
print(" lam 에 Gamma(a, b) 사전을 주고 포아송 관측 n 개를 봅니다")
print(" 사전 (a,b) 관측 n 합 sum(x) 사후 (a', b') 사후 평균 최대우도")
for (a0, b0), n, s in [((2.0, 1.0), 5, 12), ((2.0, 1.0), 50, 120),
((0.001, 0.001), 5, 12), ((20.0, 10.0), 5, 12)]:
a1, b1 = a0 + s, b0 + n
print(" (%6.3f,%6.3f) %6d %9d (%8.3f,%8.3f) %12.6f %10.4f"
% (a0, b0, n, s, a1, b1, a1/b1, s/n))
print(" 갱신은 a <- a + sum(x), b <- b + n 으로 덧셈 두 번뿐입니다")
print(" 관측이 늘면 사후 평균이 최대우도 %.4f 로 수렴합니다" % (120/50))
print(" 사전 (0.001, 0.001) 은 거의 정보가 없어 처음부터 최대우도에 가깝습니다")
# lam 에 Gamma(a, b) 사전을 주고 포아송 관측 n 개를 봅니다
# 사전 (a,b) 관측 n 합 sum(x) 사후 (a', b') 사후 평균 최대우도
# ( 2.000, 1.000) 5 12 ( 14.000, 6.000) 2.333333 2.4000
# ( 2.000, 1.000) 50 120 ( 122.000, 51.000) 2.392157 2.4000
# ( 0.001, 0.001) 5 12 ( 12.001, 5.001) 2.399720 2.4000
# (20.000,10.000) 5 12 ( 32.000, 15.000) 2.133333 2.4000
# 갱신은 a <- a + sum(x), b <- b + n 으로 덧셈 두 번뿐입니다
# 관측이 늘면 사후 평균이 최대우도 2.4000 로 수렴합니다
# 사전 (0.001, 0.001) 은 거의 정보가 없어 처음부터 최대우도에 가깝습니다
문제 1의 첫 표가 이 강의의 출발점입니다. 왼쪽은 포아송의 항이고 오른쪽은 지수분포의 생존함수인데 **차이가 정확히 **입니다. 두 분포가 같은 과정의 두 얼굴임이 수치로 확인됩니다.
문제 3의 치환 비교표가 검산 자체의 교훈입니다. 에서 치환 없이 적분하면 오차가 인데 치환 후에는 입니다. 열세 자릿수 차이이며, 129강 심화 2에서 본 적분 가능한 특이점이 수치적으로는 함정이 된다는 뜻입니다. 이 오차를 고치지 않았다면 문제 4의 마지막 줄도 어긋났을 것입니다.
문제 4의 마지막 두 줄을 함께 보십시오. 의 밀도와 129강 심화 3에서 의 밀도로 유도한 값이 소수점 여덟 자리까지 같습니다. 가 그 일치를 만듭니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 지수분포 | 첫 사건까지의 시간입니다 | |
| 감마분포 | 번째 사건까지의 시간입니다 | |
| 감마함수 | 팩토리얼의 실수 확장입니다 | |
| 모양 모수 | 척도 변환에 불변입니다 | |
| 비율 모수 | 발생률입니다 | |
| 얼랑분포 | Erlang | 가 정수인 감마입니다 |
| \chi^{2}_ | 카이제곱 | 입니다 |
| 켤레 사전 | conjugate prior | 사후가 같은 족에 남습니다 |
| 충분통계량 | sufficient statistic | 정보를 잃지 않는 요약입니다 |
| 검사 역설 | inspection paradox | 크기 편향 표집의 결과입니다 |
| 와이불분포 | Weibull | 위험률이 거듭제곱으로 변합니다 |
| 스털링 근사 | Stirling's approximation | n!\approx\sqrt{2\pi n}(n/e)^ |
여기서 02단원 확률변수와 분포가 끝납니다. 126강에서 확률을 수직선 위로 옮기는 틀을 세우고, 127강부터 131강까지 여섯 개의 분포를 채웠습니다. 모두 이어져 있습니다.
세 갈래가 모두 감마에서 만납니다.
다음 132강부터 03단원 기댓값과 적률이 시작됩니다. 지금까지는 분포 전체를 다뤘는데, 몇 개의 수로 요약하는 방법을 세웁니다. 127강 문제 1에서 를 계산 없이 쓴 것과 129강 문제 5에서 평균을 적분으로 정의한 것을 정식화하고, 그 위에 분산과 적률생성함수를 올립니다. 135강의 부등식들이 146강 집중 현상의 재료가 됩니다.