174강이 몇 개나 뽑을지를 다뤘습니다. 이제 뽑은 표본으로 어떻게 추정할지를 다룹니다.
173강에서 층마다 다른 비율로 뽑는 설계를 보았습니다. 그렇게 뽑아 놓고 그대로 평균을 내면 틀립니다. 검산에서 참값이 인데 단순평균이 으로 나 치우칩니다.
가중치가 두 가지 일을 합니다.
| 역할 | 무엇을 고치는가 |
|---|---|
| 설계 가중치 | 뽑힐 확률이 달라 생긴 불균등 |
| 보정 가중치 | 표집틀과 무응답이 만든 치우침 |
둘째 줄이 174강 문제 5의 답 중 하나입니다. 표본을 늘려도 안 줄어드는 치우침을 가중치로 일부 되돌릴 수 있습니다.
그런데 대가가 있습니다. 가중치가 고르지 않으면 유효 표본이 줄어들고, 검산에서 변동계수가 이면 절반이 됩니다.
문제. 층마다 다른 비율로 뽑은 표본이 있습니다.
(1) 층별 뽑힐 확률과 설계 가중치를 구하세요.
(2) 단순평균과 가중평균을 비교하세요.
생각의 실마리. 173강 문제 4에서 네이만 배분을 보았습니다. 흩어진 층에서 더 많이 뽑는데, 그러면 그 층의 사람이 표본에 과대 대표됩니다. 그대로 평균을 내면 그 층 쪽으로 끌려갈 것입니다.
풀이. (1) 층 크기가 이고 층 평균이 입니다. 참 평균은 입니다.
| 층 | 모집단 몫 | 표본 수 | 뽑힐 확률 | 설계 가중치 |
|---|---|---|---|---|
셋째 층은 뽑힐 확률이 첫째 층의 배라 과대 대표되어 있습니다.
(2) 두 추정량을 비교합니다.
| 추정 방법 | 평균 | 참값과의 차이 | 표준편차 |
|---|---|---|---|
| 그냥 평균 | |||
| 가중평균 |
그냥 평균은 만큼 치우칩니다. 값이 큰 셋째 층을 많이 뽑았기 때문입니다.
가중치는 뽑힐 확률의 역수이며, 한 사람이 몇 명을 대표하는지를 뜻합니다. 첫째 층의 한 명이 명을 대표하고 셋째 층의 한 명이 명을 대표합니다.
가중치의 합 이 모집단 크기 을 맞힙니다. 이것이 가중치가 옳게 만들어졌는지 확인하는 가장 간단한 검사입니다.
이 문제에서 배우는 것. 설계와 추정은 짝입니다. 173강에서 층화가 분산을 절반으로 줄인다고 했는데, 그 이득은 추정을 설계에 맞춰 했을 때만 나옵니다. 그러지 않으면 이득은커녕 나 치우친 답이 나옵니다. 그래서 자료를 받아 분석할 때 어떻게 뽑혔는지 모르면 평균조차 낼 수 없습니다. 공개 조사 자료가 가중치 열을 함께 주는 이유가 이것입니다.
바로 확인 1.
확인 1-1. 설계 가중치가 무엇인지 쓰세요.
답. 뽑힐 확률의 역수이며 한 사람이 몇 명을 대표하는지입니다.
확인 1-2. 검산에서 단순평균의 치우침을 쓰세요.
답. 이며 값이 큰 층을 많이 뽑았기 때문입니다.
확인 1-3. 가중치가 옳은지 확인하는 간단한 검사를 쓰세요.
답. 가중치의 합이 모집단 크기와 맞는지 봅니다.
문제. 가중치의 대가를 계산합니다.
(1) 유효 표본 크기를 가중치의 변동에 따라 구하세요.
(2) 실제로 분산이 그만큼 커지는지 확인하세요.
생각의 실마리. 가중치가 크면 그 한 사람의 값이 결과에 크게 들어갑니다. 극단적으로 한 사람의 가중치가 나머지를 합친 것만큼 크면, 표본이 몇 명이든 사실상 두 명짜리 추정입니다.
풀이. (1) 키시의 유효 표본 크기를 씁니다.
| 가중치의 변동계수 | 유효 표본 | 실제 표본 | 설계효과 | 이론 1+cv^ |
|---|---|---|---|---|
변동계수가 이면 유효 표본이 절반이 됩니다.
수치와 이론이 소수점 네 자리까지 같습니다. 이 식은 항등식이라 근사가 아닙니다.
(2) 실제 추정량의 분산도 그만큼 커지는지 봅니다.
| 가중치의 변동계수 | 추정량의 분산 | 가중치 없을 때 | 비 |
|---|---|---|---|
가중치가 값과 무관한데도 분산이 늘어납니다.
정보가 없는 가중은 손해뿐입니다. 그래서 가중치를 붙이는 것 자체가 좋은 일이 아니며, 무엇을 고치려고 붙이는지가 있어야 합니다.
이 문제에서 배우는 것. 가중치는 치우침과 분산을 맞바꾸는 도구입니다. 148강의 편향과 분산이 여기서도 나오며, 173강 문제 1에서 본 대로 치우침이 크면 바꿀 값어치가 있고 작으면 없습니다. 그리고 실무에서는 설계 가중치와 보정 가중치가 곱해지므로 변동이 쉽게 커집니다. 그래서 문제 5의 다듬기가 필요해집니다.
바로 확인 2.
확인 2-1. 키시의 유효 표본 크기를 식으로 쓰세요.
답. 입니다.
확인 2-2. 가중치의 설계효과를 변동계수로 쓰세요.
답. 이며 항등식이라 정확히 성립합니다.
확인 2-3. 값과 무관한 가중치를 붙이면 어떻게 되는지 쓰세요.
답. 치우침은 안 줄고 분산만 늘어 손해뿐입니다.
문제. 뽑을 때 몰랐던 정보로 맞춥니다.
(1) 사후층화 가중치를 구하세요.
(2) 칸을 못 쓸 때의 방법을 계산하세요.
생각의 실마리. 뽑힐 확률은 설계로 정해집니다. 그런데 다 모으고 나서 보니 표본의 성별 구성이 인구와 다를 수 있습니다. 그 정보를 쓰지 않을 이유가 없습니다.
풀이. (1) 성별 둘과 연령 둘로 나눈 네 칸입니다.
| 칸 | 모집단 몫 | 표본 몫 |
|---|---|---|
| 남 청년 | ||
| 남 장년 | ||
| 여 청년 | ||
| 여 장년 |
네 칸의 가중치가 이고 최대와 최소의 비가 입니다.
표본에 적게 들어온 칸일수록 가중치가 큽니다. 남자가 표본에 퍼센트뿐인데 인구는 퍼센트이므로 두 배로 세는 것입니다.
(2) 그런데 칸이 비거나 너무 작으면 이 방법을 못 씁니다. 성별 둘, 연령 다섯, 지역 열일곱이면 칸이 개라, 167강 문제 5에서 본 대로 빈 칸이 생깁니다.
그때는 주변합만 맞춥니다. 행과 열을 번갈아 맞추는 것을 되풀이합니다.
| 반복 | 행 주변합 오차 | 열 주변합 오차 | 최대 칸 변화 |
|---|---|---|---|
여섯 번 만에 소수점 열 자리까지 맞습니다. 이것을 레이킹이라 합니다.
맞춘 뒤의 네 칸이 입니다. 원래 모집단 칸 과는 다릅니다.
레이킹은 주변합만 맞추므로 칸 안의 구조는 표본의 것을 그대로 씁니다. 성별 구성과 연령 구성은 맞는데 성별과 연령의 결합 구조는 표본을 믿는 것입니다.
| 방법 | 필요한 것 | 맞추는 것 |
|---|---|---|
| 사후층화 | 칸별 인구 | 모든 칸 |
| 레이킹 | 주변 인구만 | 주변합만 |
둘째 줄이 실무에서 훨씬 많이 쓰입니다. 칸별 인구를 아는 경우가 드물고, 주변 분포는 인구조사에서 쉽게 얻기 때문입니다.
이 문제에서 배우는 것. 보정은 아는 만큼만 할 수 있습니다. 칸별 인구를 알면 칸을 맞추고, 주변만 알면 주변을 맞춥니다. 그리고 맞추지 못한 부분은 표본을 믿는 것이므로, 표본의 결합 구조가 인구와 다르면 그 차이는 남습니다. 162강 문제 4의 적합과 적용처럼, 어디까지 맞췄는지 기록해야 나중에 그 가정을 검토할 수 있습니다.
바로 확인 3.
확인 3-1. 사후층화 가중치를 식으로 쓰세요.
답. 모집단 몫을 표본 몫으로 나눈 값입니다.
확인 3-2. 레이킹이 무엇을 맞추는지 쓰세요.
답. 칸이 아니라 주변합만 맞추며 칸 안의 구조는 표본을 씁니다.
확인 3-3. 검산에서 레이킹이 몇 번 만에 수렴했는지 쓰세요.
답. 여섯 번 만에 소수점 열 자리까지 맞았습니다.
문제. 보정이 언제 효과가 있는지 봅니다.
(1) 세 가지 설정에서 보정 전후를 비교하세요.
(2) 조건을 정리하세요.
생각의 실마리. 보정 변수 로 맞춘다는 것은 가 같은 사람들끼리는 응답한 사람과 안 한 사람이 비슷하다고 가정하는 것입니다. 그 가정이 언제 쓸모 있는지 봅니다.
풀이. (1) 는 성별 같은 알려진 변수이고 인구 구성은 반반입니다.
| 설정 | 보정 전 치우침 | 보정 후 치우침 | 보정 전 표준편차 | 보정 후 표준편차 |
|---|---|---|---|---|
| 가 응답과 둘 다에 이어짐 | ||||
| 가 응답에만 이어짐 | ||||
| 가 에만 이어짐 |
| 설정 | 무엇이 일어났는가 |
|---|---|
| 가 응답과 둘 다에 이어짐 | 치우침 을 없앴습니다 |
| 가 응답에만 이어짐 | 고칠 것이 없는데 분산만 배 |
| 가 에만 이어짐 | 치우침이 없었고 분산이 배 |
첫째 줄만 고칠 것이 있었고 실제로 고쳐졌습니다. 치우침이 에서 로 사라집니다. 대신 표준편차가 에서 으로 늘었습니다.
둘째 줄은 가 와 무관해 애초에 치우침이 없었습니다. 응답률이 에 따라 네 배 달랐는데도 그렇습니다. 그런데 보정을 하면 분산만 배가 됩니다.
셋째 줄이 뜻밖입니다. 응답이 고르므로 치우침이 없었는데, 보정이 분산을 배로 줄였습니다. 가 와 이어져 있으면 사후층화가 층화추출과 같은 이득을 주기 때문입니다.
(2) 조건을 정리합니다.
| 가 응답과 | 가 와 | 결과 |
|---|---|---|
| 이어짐 | 이어짐 | 치우침이 줄고 분산이 늡니다 |
| 이어짐 | 안 이어짐 | 분산만 늡니다 |
| 안 이어짐 | 이어짐 | 분산이 줍니다 |
| 안 이어짐 | 안 이어짐 | 아무 일도 안 일어납니다 |
161강 문제 1의 MAR과 같은 조건입니다. 응답을 설명하는 변수를 관측해야 하며, 관측하지 않은 변수로 응답이 갈렸다면 어떤 가중치도 고치지 못합니다.
이 문제에서 배우는 것. 가중치는 아는 변수 안에서만 작동합니다. 성별과 연령으로 맞춰도, 응답 여부가 관심도나 정치 성향 같은 관측 안 된 것으로 갈렸다면 치우침이 그대로 남습니다. 그리고 그 사실을 자료로 확인할 방법이 없습니다. 161강 문제 1에서 MNAR을 판정할 수 없다고 한 것과 같으며, 보정한 뒤에도 "이 가정 아래에서"라는 단서가 붙습니다.
바로 확인 4.
확인 4-1. 보정이 치우침을 고칠 조건을 쓰세요.
답. 보정 변수가 응답과도 이어지고 와도 이어져 있어야 합니다.
확인 4-2. 검산에서 가 응답에만 이어진 경우의 결과를 쓰세요.
답. 고칠 치우침이 없는데 분산만 배가 되었습니다.
확인 4-3. 검산에서 가 에만 이어진 경우의 결과를 쓰세요.
답. 치우침이 없었고 분산이 배로 줄었습니다.
문제. 극단 가중치를 다룹니다.
(1) 상한을 두어 자르고 치우침과 분산을 구하세요.
(2) 가중치가 값과 무관할 때와 비교하세요.
(3) 다듬은 뒤의 절차를 정리하세요.
생각의 실마리. 문제 2에서 가중치의 변동이 유효 표본을 줄인다고 했습니다. 그러면 큰 가중치를 잘라 내면 변동이 줄어 유효 표본이 늘어날 것입니다. 그런데 자르는 것은 뽑힐 확률을 무시하는 것이라 치우침이 생깁니다.
풀이. (1) 가중치가 큰 사람일수록 도 커지도록 두었습니다. 참값은 입니다.
| 상한 | 잘린 비율 | 치우침 | 표준편차 | MSE |
|---|---|---|---|---|
| 무한 | ||||
상한을 낮추면 치우침이 늘고 흔들림이 줍니다.
그런데 이 설정에서는 자르지 않는 것이 가장 낫습니다. MSE가 에서 계속 커집니다. 가중치가 와 이어져 있어 자르는 순간 정보를 버리기 때문입니다.
(2) 가중치가 와 무관하면 반대가 됩니다.
| 상한 | 잘린 비율 | 치우침 | 표준편차 | MSE |
|---|---|---|---|---|
| 무한 | ||||
치우침이 생기지 않고 흔들림만 줄어 자를수록 좋아집니다.
자르기가 이득인지는 가중치가 정보를 담고 있는지에 달렸습니다. 그리고 실무에서는 그것을 알 수 없습니다. 그래서 여러 상한으로 돌려 보고 결과가 흔들리는지 봅니다. 161강 심화 5의 민감도 분석이 여기서도 답입니다.
(3) 다듬은 뒤에는 다시 맞춰야 합니다.
| 절차 | 무엇을 하는가 |
|---|---|
| 자르기 | 상한을 넘는 가중치를 상한으로 내립니다 |
| 다시 맞추기 | 주변합이 어긋났으므로 레이킹을 다시 합니다 |
| 되풀이 | 자르기와 맞추기가 수렴할 때까지 반복합니다 |
| 기록 | 상한과 반복 횟수를 남깁니다 |
자르면 문제 3에서 맞춘 주변합이 어긋납니다. 그래서 자르기와 레이킹을 번갈아 하며, 둘이 수렴할 때까지 되풀이합니다.
마지막으로 가중치가 무엇을 하는지 정리합니다.
| 가중치가 | 무엇을 하는가 |
|---|---|
| 고칩니다 | 설계로 생긴 불균등한 확률 |
| 고칩니다 | 보정 변수로 설명되는 무응답 |
| 못 고칩니다 | 보정 변수 밖의 무응답 |
| 못 고칩니다 | 표집틀에서 아예 빠진 사람 |
| 늘립니다 | 추정량의 분산 |
이 문제에서 배우는 것. 가중치는 만능이 아니고, 무엇을 고치고 무엇을 못 고치는지 적어야 합니다. 그리고 다듬기 같은 선택이 들어가면 그 선택도 결과를 바꿉니다. 172강에서 흔적이 남지 않는 조작을 이야기했는데, 가중치 만드는 과정이 정확히 그런 자리입니다. 최종 자료에는 가중치 열 하나만 남고, 어떤 상한으로 몇 번 다듬었는지는 안 적혀 있습니다.
바로 확인 5.
확인 5-1. 검산에서 가중치가 와 이어진 경우 자르기의 효과를 쓰세요.
답. 치우침이 늘어 MSE가 에서 계속 커지므로 자르지 않는 것이 낫습니다.
확인 5-2. 검산에서 가중치가 와 무관한 경우를 쓰세요.
답. 치우침이 안 생기고 흔들림만 줄어 자를수록 MSE가 작아집니다.
확인 5-3. 자른 뒤에 해야 하는 일을 쓰세요.
답. 주변합이 어긋나므로 레이킹을 다시 하고 수렴할 때까지 되풀이합니다.
| 가중치의 종류 | 어디서 오는가 |
|---|---|
| 설계 가중치 | 뽑힐 확률의 역수 |
| 무응답 보정 | 응답 확률의 역수 |
| 사후층화 | 모집단 몫 나누기 표본 몫 |
| 레이킹 | 주변합을 번갈아 맞춤 |
| 다듬기 | 상한을 두고 자름 |
| 핵심 식 | 내용 |
|---|---|
| 호비츠-톰프슨 | \sum y_{i}/\pi_{i}\big/\sum 1/\pi_ |
| 키시 유효 표본 | (\sum w)^{2}/\sum w^ |
| 가중치 설계효과 | 1+cv^ |
| 사후층화 가중치 | 모집단 몫 나누기 표본 몫 |
| 보정 변수 의 조건 | 결과 |
|---|---|
| 응답과 둘 다에 이어짐 | 치우침이 줄고 분산이 늡니다 |
| 응답에만 이어짐 | 분산만 늡니다 |
| 에만 이어짐 | 분산이 줍니다 |
| 둘 다 아님 | 아무 일도 안 일어납니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 가중치를 무시하고 평균을 냅니다 | 검산에서 나 치우쳤습니다 |
| 가중치를 많이 붙일수록 좋다고 봅니다 | 분산이 배가 됩니다 |
| 칸이 비었는데 사후층화를 씁니다 | 레이킹으로 주변합만 맞춥니다 |
| 레이킹이 칸까지 맞춘다고 봅니다 | 칸 안 구조는 표본을 씁니다 |
| 보정하면 무응답이 다 고쳐진다고 봅니다 | 보정 변수 밖은 못 고칩니다 |
| 극단 가중치를 무조건 자릅니다 | 정보를 담고 있으면 손해입니다 |
| 자른 뒤 다시 안 맞춥니다 | 주변합이 어긋납니다 |
문제 6. 설계 가중치가 무엇인지 쓰세요.
답. 뽑힐 확률의 역수이며 한 사람이 몇 명을 대표하는지입니다.
문제 7. 호비츠-톰프슨 추정량을 식으로 쓰세요.
답. 를 로 나눈 값입니다.
문제 8. 검산에서 단순평균과 가중평균의 치우침을 쓰세요.
답. 과 입니다.
문제 9. 키시의 유효 표본 크기를 식으로 쓰세요.
답. 입니다.
문제 10. 검산에서 변동계수 일 때 유효 표본과 설계효과를 쓰세요.
답. 과 입니다.
문제 11. 값과 무관한 가중치를 붙이면 어떻게 되는지 검산 값과 함께 쓰세요.
답. 변동계수 에서 분산이 배가 됩니다.
문제 12. 사후층화 가중치를 식으로 쓰세요.
답. 모집단 몫을 표본 몫으로 나눕니다.
문제 13. 레이킹이 사후층화와 다른 점을 쓰세요.
답. 칸이 아니라 주변합만 맞추며 칸 안 구조는 표본을 씁니다.
문제 14. 검산에서 레이킹의 수렴 속도를 쓰세요.
답. 여섯 번 만에 소수점 열 자리까지 맞았습니다.
문제 15. 보정이 치우침을 고칠 조건을 쓰세요.
답. 보정 변수가 응답과도 이어지고 와도 이어져 있어야 합니다.
문제 16. 검산에서 가 에만 이어진 경우의 분산 변화를 쓰세요.
답. 배로 줄어들며 사후층화의 부수적 이득입니다.
문제 17. 자르기가 이득인지 무엇에 달렸는지 쓰세요.
답. 가중치가 값에 대한 정보를 담고 있는지에 달렸습니다.
문제 18. 가중치가 못 고치는 것 둘을 쓰세요.
답. 보정 변수 밖의 무응답과 표집틀에서 아예 빠진 사람입니다.
심화 1. 가중치를 쓴 추정량의 분산을 정리하세요.
문제 2에서 유효 표본으로 어림했습니다. 정확한 분산은 설계에 달려 있습니다.
층화이면 층마다 따로 계산해 더하고, 군집이면 뭉치 사이 변동을 씁니다. 그래서 조사 자료를 분석하려면 가중치 열만으로는 부족하고 층과 뭉치를 나타내는 열도 필요합니다.
| 필요한 열 | 무엇에 쓰는가 |
|---|---|
| 가중치 | 점추정 |
| 층 | 층별로 나눠 분산 계산 |
| 뭉치 | 뭉치 사이 변동 계산 |
셋이 다 있어야 표준오차가 나옵니다. 하나라도 없으면 표준오차를 과소평가하게 되며, 대개 단순임의로 가정한 값이 나옵니다.
복제 가중치를 쓰는 방법도 있습니다. 표본을 여러 조각으로 나눠 각각을 뺀 가중치를 미리 만들어 두면, 설계를 공개하지 않고도 이용자가 분산을 계산할 수 있습니다. 개인정보 때문에 층과 뭉치를 공개할 수 없을 때 씁니다.
심화 2. 보정을 회귀로 보는 관점을 정리하세요.
문제 3의 사후층화를 회귀로 다시 쓸 수 있습니다.
표본의 평균이 인구의 평균과 어긋난 만큼 보정하는 것이며, 이것을 회귀 추정량이라 합니다.
| 의 종류 | 무엇이 되는가 |
|---|---|
| 층을 나타내는 더미 | 사후층화와 같아집니다 |
| 연속 변수 | 회귀 보정입니다 |
| 여러 변수 | 일반화 회귀 추정량 |
첫째 줄이 중요합니다. 사후층화가 특별한 방법이 아니라 회귀의 한 경우이며, 그래서 연속 변수로도 보정할 수 있습니다.
분산이 줄어드는 조건도 회귀에서 나옵니다. 와 의 상관이 클수록 이득이 크며, 상관이 이면 이득이 없고 오히려 손해입니다. 문제 4의 셋째 줄이 그 이야기였습니다.
보정 변수를 많이 넣으면 과적합합니다. 표본이 작은데 변수를 많이 넣으면 표본의 우연한 특징까지 맞추게 되며, 171강 문제 5의 다중성이 여기서도 나타납니다.
심화 3. 무응답을 두 단계로 보는 관점을 정리하세요.
가중치를 만들 때 뽑히는 단계와 응답하는 단계를 나눕니다.
| 항 | 무엇인가 |
|---|---|
| 1/\pi_ | 설계가 정한 확률의 역수, 알고 있습니다 |
| 1/\hat{p}_ | 응답 확률의 역수, 추정해야 합니다 |
둘째 항이 문제입니다. 응답 확률을 알 수 없으므로 모형으로 추정하는데, 그 모형이 틀리면 보정도 틀립니다.
응답 성향 층을 만드는 방법이 흔합니다. 관측된 변수로 응답 확률을 추정한 뒤, 비슷한 확률끼리 묶어 층으로 만들고 층 안에서 보정합니다. 모형을 그대로 쓰는 것보다 안정적입니다.
추정한 확률이 아주 작으면 가중치가 폭발합니다. 응답 확률 이면 가중치가 이라, 한 사람이 결과를 좌우합니다. 문제 5의 다듬기가 필요한 가장 흔한 이유입니다.
두 항을 곱하므로 변동이 곱해집니다. 설계 가중치의 변동계수가 이고 보정이 이면, 합쳐진 변동계수가 그보다 커집니다.
심화 4. 작은 지역 추정을 정리하세요.
174강 문제 4에서 전국 명으로 시도별 추정을 하면 오차가 배라고 했습니다. 더 작은 단위는 표본이 아예 없기도 합니다.
| 방법 | 성격 |
|---|---|
| 직접 추정 | 그 지역 표본만 씁니다 |
| 종합 추정 | 큰 지역의 값을 그대로 씁니다 |
| 합성 추정 | 둘을 무게로 섞습니다 |
| 모형 기반 | 지역을 임의효과로 두고 빌립니다 |
둘째 줄은 치우침이 크고 첫째 줄은 분산이 큽니다. 셋째 줄이 그 사이를 잇습니다.
넷째 줄이 표준적인 방법입니다. 지역마다 참값이 다르되 전체 분포에서 나온 것으로 보아, 표본이 적은 지역은 전체 평균 쪽으로 당깁니다. 이것을 축소라 하며, 150강의 사전분포와 같은 구조입니다.
축소가 얼마나 되는지는 그 지역의 표본 크기가 정합니다. 표본이 많으면 자기 값을 쓰고 적으면 전체를 씁니다. 그래서 표본이 아예 없는 지역도 추정값이 나오는데, 그 값은 자료가 아니라 모형이 만든 것입니다.
심화 5. 가중치를 보고하는 법을 정리하세요.
172강에서 흔적이 남지 않는 조작을 이야기했습니다. 가중치가 그런 자리입니다.
| 적어야 할 것 | 왜 |
|---|---|
| 어떤 변수로 맞췄는가 | 보정의 범위를 정합니다 |
| 어떤 인구 자료를 썼는가 | 기준이 다르면 값이 다릅니다 |
| 다듬기의 상한 | 결과를 바꾸는 선택입니다 |
| 최종 가중치의 분포 | 유효 표본을 계산할 수 있게 |
| 보정 전후의 값 | 보정이 얼마나 움직였는지 |
마지막 줄이 가장 유용합니다. 보정 전과 후가 크게 다르면 자료가 인구와 많이 어긋나 있다는 뜻이라, 보정하지 못한 부분도 클 가능성이 높습니다.
보정이 크게 움직였다는 것 자체가 경고입니다. 응답률이 낮고 구성이 많이 어긋난 조사에서 가중치로 맞춘 값은, 맞춰진 변수 밖에서는 여전히 어긋나 있습니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 무응답 | 응답 확률을 추정합니다 | 176강 |
| 관측 자료 | 성향 점수로 가중합니다 | 177강 |
| 인과추론 | 처치 확률의 역수로 가중 | S8 |
| 분포 이동 | 훈련과 배포의 차이를 보정 | S9 |
셋째 줄이 가장 멀리 갑니다. 관측 자료에서 처치 효과를 추정할 때 처치받을 확률의 역수로 가중하는데, 식이 문제 1의 호비츠-톰프슨과 같습니다. 뽑힐 확률이 처치받을 확률로 바뀐 것뿐입니다.
그래서 이 강의의 경고가 그대로 옮겨 갑니다. 관측 안 된 변수로 처치가 갈렸다면 어떤 가중치도 고치지 못하며, 극단 가중치가 추정을 흔듭니다. 177강이 그 이야기를 이어받습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| \pi_ | 파이 아이 | 가 뽑힐 확률입니다 |
| w_ | 더블유 아이 | 가중치이며 입니다 |
| 호비츠-톰프슨 | Horvitz-Thompson | 확률의 역수로 가중한 추정량입니다 |
| 설계 가중치 | design weight | 설계가 정한 확률의 역수입니다 |
| 사후층화 | post-stratification | 칸별 인구에 맞춥니다 |
| 레이킹 | raking | 주변합만 번갈아 맞춥니다 |
| 키시 유효 표본 | Kish effective sample size | 가중치 변동을 반영한 표본 크기입니다 |
| 변동계수 | coefficient of variation | 표준편차를 평균으로 나눈 값입니다 |
| 가중치 다듬기 | weight trimming | 상한을 두고 자릅니다 |
| 응답 성향 | response propensity | 응답할 확률입니다 |
| 회귀 추정량 | regression estimator | 의 어긋남으로 보정합니다 |
| 복제 가중치 | replicate weights | 분산 계산을 위해 미리 만든 가중치 집합입니다 |
| 작은 지역 추정 | small area estimation | 표본이 적은 단위를 모형으로 추정합니다 |
| 축소 | shrinkage | 표본이 적으면 전체 쪽으로 당깁니다 |
| 성향 점수 | propensity score | 처치받을 확률입니다 |
다음은 176강 측정 오차와 응답 편향입니다. 이 강의가 누가 답했는지를 다뤘고, 다음은 그 답이 정확한지를 다룹니다.
174강 문제 5에서 총오차를 나눴는데, 거기서 치우침이라 부른 것의 큰 몫이 측정에서 옵니다. 물음을 어떻게 적었는지, 누가 물었는지, 답하는 사람이 무엇을 신경 썼는지가 답을 바꿉니다.
그리고 이 강의가 못 고친다고 한 것이 다음 강의의 주제가 됩니다. 가중치는 누가 답했는지의 불균형만 고치고, 답 자체가 틀린 것은 고치지 못합니다. 응답하지 않은 사람과 잘못 응답한 사람은 다른 문제이며, 후자는 자료 안에서 정상으로 보입니다.
import numpy as np
rng = np.random.default_rng(20260912)
def pw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return str(s) + " " * max(k, 0)
def rw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return " " * max(k, 0) + str(s)
# --- 문제 1: 뽑힐 확률이 다르면 어떻게 추정하는가 -----------------------
print(" 층마다 다른 비율로 뽑았다면 그대로 평균을 내면 틀립니다")
Nh = np.array([600000.0, 300000.0, 100000.0])
muh = np.array([40.0, 55.0, 80.0])
sdh = np.array([6.0, 8.0, 12.0])
nh = np.array([300.0, 300.0, 400.0])
W = Nh / Nh.sum()
truth = float((W * muh).sum())
print(" 층 크기 %s, 층 평균 %s 입니다"
% (", ".join("%.0f" % t for t in Nh), ", ".join("%.0f" % t for t in muh)))
print(" 참 평균은 %.4f 입니다" % truth)
print(" %s %s %s %s %s" % (pw("층", 6), rw("모집단 몫", 12), rw("표본 수", 10),
rw("뽑힐 확률", 14), rw("설계 가중치", 14)))
pi = nh / Nh
for i in range(3):
print(" %s %12.6f %10.0f %14.8f %14.2f"
% (pw(str(i + 1), 6), W[i], nh[i], pi[i], 1.0 / pi[i]))
print(" 셋째 층은 뽑힐 확률이 첫째 층의 %.2f 배라 과대 대표되어 있습니다"
% (pi[2] / pi[0]))
M1 = 4000
sm = np.empty(M1)
wm = np.empty(M1)
for t in range(M1):
ys = [rng.normal(muh[i], sdh[i], int(nh[i])) for i in range(3)]
allv = np.concatenate(ys)
ww = np.concatenate([np.full(int(nh[i]), 1.0 / pi[i]) for i in range(3)])
sm[t] = float(allv.mean())
wm[t] = float((ww * allv).sum() / ww.sum())
print(" %s %s %s %s" % (pw("추정 방법", 22), rw("평균", 12),
rw("참값과의 차이", 16), rw("표준편차", 12)))
print(" %s %12.4f %16.4f %12.4f"
% (pw("그냥 평균", 22), float(sm.mean()), float(sm.mean() - truth), float(sm.std())))
print(" %s %12.4f %16.4f %12.4f"
% (pw("가중평균", 22), float(wm.mean()), float(wm.mean() - truth), float(wm.std())))
print(" 그냥 평균은 %.4f 만큼 치우칩니다. 큰 값을 가진 층을 많이 뽑았기 때문입니다"
% float(sm.mean() - truth))
print(" 가중치는 뽑힐 확률의 역수입니다. 한 사람이 몇 명을 대표하는지입니다")
print(" 추정량 = sum(w y) / sum(w) 이고 이것을 호비츠-톰프슨 추정량이라 합니다")
print(" 가중치의 합 %.0f 이 모집단 크기 %.0f 를 맞힙니다"
% (float((nh / pi).sum()), float(Nh.sum())))
# --- 문제 2: 가중치가 분산을 늘린다 -------------------------------------
print(" 가중치가 고르지 않으면 유효 표본이 줄어듭니다")
print(" 키시의 유효 표본 크기는 (sum w)^2 / sum(w^2) 입니다")
print(" %s %s %s %s %s" % (pw("가중치의 변동계수", 18), rw("유효 표본", 12),
rw("실제 표본", 12), rw("설계효과", 12),
rw("이론 1+cv^2", 14)))
n2 = 1000
for cv in [0.0, 0.3, 0.6, 1.0, 2.0]:
w = np.exp(rng.normal(0, np.sqrt(np.log(1 + cv ** 2)), n2)) if cv > 0 \
else np.ones(n2)
w = w / w.mean()
neff = float(w.sum() ** 2 / (w ** 2).sum())
print(" %s %12.2f %12d %12.4f %14.4f"
% (pw("%.1f" % cv, 18), neff, n2, n2 / neff, 1 + float(w.std()) ** 2))
print(" 변동계수가 1 이면 유효 표본이 절반이 됩니다")
print(" 가중치를 쓰면 치우침은 줄지만 흔들림이 늘어납니다")
print(" 실제로 분산이 그만큼 커지는지 확인합니다")
M2 = 4000
print(" %s %s %s %s" % (pw("가중치의 변동계수", 18), rw("추정량의 분산", 16),
rw("가중치 없을 때", 16), rw("비", 10)))
base2 = None
for cv in [0.0, 0.5, 1.0, 2.0]:
est = np.empty(M2)
for t in range(M2):
y = rng.normal(0, 1, n2)
w = np.exp(rng.normal(0, np.sqrt(np.log(1 + cv ** 2)), n2)) if cv > 0 \
else np.ones(n2)
est[t] = float((w * y).sum() / w.sum())
v = float(est.var())
if base2 is None:
base2 = v
print(" %s %16.8f %16.8f %10.4f"
% (pw("%.1f" % cv, 18), v, base2, v / base2))
print(" 가중치가 값과 무관한데도 분산이 늘어납니다. 정보가 없는 가중은 손해뿐입니다")
# --- 문제 3: 알려진 인구 구성에 맞추기 ----------------------------------
print(" 뽑을 때의 확률만이 아니라 나중에 안 것으로도 맞출 수 있습니다")
pop = np.array([[0.30, 0.20], [0.25, 0.25]])
samp = np.array([[0.15, 0.10], [0.35, 0.40]])
print(" 성별 두 개와 연령 두 개로 나눈 네 칸입니다")
print(" %s %s %s" % (pw("칸", 12), rw("모집단 몫", 14), rw("표본 몫", 12)))
lab = ["남 청년", "남 장년", "여 청년", "여 장년"]
for i in range(2):
for j in range(2):
print(" %s %14.4f %12.4f" % (pw(lab[i * 2 + j], 12), pop[i, j], samp[i, j]))
print(" %s %s %s" % (pw("사후층화 가중치", 16), rw("칸별 값", 12), rw("최대/최소", 12)))
wcell = pop / samp
print(" %s %12s %12.4f"
% (pw("네 칸", 16), rw(", ".join("%.3f" % t for t in wcell.ravel()), 12),
float(wcell.max() / wcell.min())))
print(" 표본에 적게 들어온 칸일수록 가중치가 큽니다")
print(" 칸이 비거나 너무 작으면 사후층화를 못 씁니다. 그때 주변합만 맞춥니다")
S = samp.copy()
rt = pop.sum(axis=1)
ct = pop.sum(axis=0)
print(" %s %s %s %s" % (pw("반복", 8), rw("행 주변합 오차", 18),
rw("열 주변합 오차", 18), rw("최대 칸 변화", 16)))
prev = S.copy()
for it in range(1, 7):
S = S * (rt / S.sum(axis=1))[:, None]
S = S * (ct / S.sum(axis=0))[None, :]
er = float(np.abs(S.sum(axis=1) - rt).max())
ec = float(np.abs(S.sum(axis=0) - ct).max())
print(" %s %18.10f %18.10f %16.10f"
% (pw(str(it), 8), er, ec, float(np.abs(S - prev).max())))
prev = S.copy()
print(" 행과 열을 번갈아 맞추면 몇 번 만에 둘 다 맞습니다. 레이킹이라 합니다")
print(" 맞춘 뒤의 네 칸은 %s 입니다" % ", ".join("%.4f" % t for t in S.ravel()))
print(" 원래 모집단 칸 %s 과는 다릅니다" % ", ".join("%.4f" % t for t in pop.ravel()))
print(" 레이킹은 주변합만 맞추므로 칸 안의 구조는 표본의 것을 그대로 씁니다")
# --- 문제 4: 가중치가 고치는 것과 못 고치는 것 --------------------------
print(" 보정이 치우침을 고치려면 보정 변수가 두 가지와 이어져 있어야 합니다")
N4 = 400000
z = (rng.random(N4) < 0.5).astype(float)
print(" z 는 성별 같은 알려진 변수입니다. 인구 구성은 반반입니다")
print(" %s %s %s %s %s" % (pw("설정", 26), rw("보정 전 치우침", 16),
rw("보정 후 치우침", 16), rw("보정 전 표준편차", 18),
rw("보정 후 표준편차", 18)))
M4 = 2000
verdict = []
for nm, ay, resp_dep in [("z 가 응답과 y 둘 다에 이어짐", 3.0, True),
("z 가 응답에만 이어짐", 0.0, True),
("z 가 y 에만 이어짐", 3.0, False)]:
y = 50.0 + ay * z + rng.normal(0, 5.0, N4)
tm = float(y.mean())
pr = np.where(z > 0.5, 0.08, 0.02) if resp_dep else np.full(N4, 0.05)
b0, b1, s0, s1 = [], [], [], []
for t in range(M4 // 100):
R = rng.random(N4) < pr
ys, zs = y[R], z[R]
raw = float(ys.mean())
w = np.where(zs > 0.5, 0.5 / max(float((zs > 0.5).mean()), 1e-9),
0.5 / max(float((zs <= 0.5).mean()), 1e-9))
adj = float((w * ys).sum() / w.sum())
b0.append(raw - tm)
b1.append(adj - tm)
s0.append(raw)
s1.append(adj)
print(" %s %16.6f %16.6f %18.6f %18.6f"
% (pw(nm, 26), float(np.mean(b0)), float(np.mean(b1)),
float(np.std(s0)), float(np.std(s1))))
verdict.append((nm, float(np.mean(b0)), float(np.mean(b1)),
float(np.std(s0)), float(np.std(s1))))
print(" %s %s" % (pw("설정", 26), rw("무엇이 일어났는가", 30)))
for nm, a0, a1, c0, c1 in verdict:
if abs(a0) > 0.05:
v = "치우침 %.4f 를 없앴습니다" % a0
elif c1 > c0 * 1.05:
v = "고칠 것이 없는데 분산만 %.2f 배" % (c1 / c0)
else:
v = "치우침이 없었고 분산이 %.2f 배" % (c1 / c0)
print(" %s %s" % (pw(nm, 26), rw(v, 30)))
print(" 첫째 줄만 고칠 것이 있었고 실제로 고쳐졌습니다")
print(" 둘째 줄은 z 가 y 와 무관해 고칠 치우침이 없는데 분산만 늘었습니다")
print(" 셋째 줄은 응답이 고르므로 치우침이 없었고 보정이 오히려 분산을 줄였습니다")
print(" 셋째 줄의 이득이 사후층화의 부수적 효과입니다. y 와 이어진 변수로 맞추면 분산이 줍니다")
print(" 161강 문제 1 의 MAR 과 같은 조건입니다. 응답을 설명하는 변수를 관측해야 합니다")
print(" 관측하지 않은 변수로 응답이 갈렸다면 어떤 가중치도 고치지 못합니다")
# --- 문제 5: 가중치를 다듬기 --------------------------------------------
print(" 극단 가중치 하나가 추정량을 흔듭니다")
n5 = 2000
M5 = 3000
sig5 = np.sqrt(np.log(1 + 1.5 ** 2))
print(" 가중치를 로그정규로 만들고 상한을 두어 잘라 봅니다")
print(" 가중치가 큰 사람일수록 y 도 커지도록 두었습니다. 참값은 %.4f 입니다"
% (50.0 + 2.0 * sig5 ** 2))
print(" %s %s %s %s %s" % (pw("상한", 12), rw("잘린 비율", 12), rw("치우침", 14),
rw("표준편차", 14), rw("MSE", 14)))
for cap in [np.inf, 5.0, 3.0, 2.0, 1.2]:
est = np.empty(M5)
cut = np.empty(M5)
for t in range(M5):
w0 = np.exp(rng.normal(0, sig5, n5))
w0 = w0 / w0.mean()
y = 50.0 + 4.0 * np.log(w0) + rng.normal(0, 5.0, n5)
w = np.minimum(w0, cap)
cut[t] = float((w0 > cap).mean())
est[t] = float((w * y).sum() / w.sum())
b = float(est.mean() - (50.0 + 2.0 * sig5 ** 2))
print(" %s %12.6f %14.6f %14.6f %14.6f"
% (pw("무한" if cap == np.inf else "%.1f" % cap, 12), float(cut.mean()),
b, float(est.std()), b ** 2 + float(est.var())))
print(" 상한을 낮추면 치우침이 늘고 흔들림이 줍니다")
print(" 그런데 이 설정에서는 자르지 않는 것이 가장 낫습니다. MSE 가 계속 커집니다")
print(" 가중치가 y 와 이어져 있어 자르는 순간 정보를 버리기 때문입니다")
print(" 가중치가 y 와 무관하면 반대가 됩니다")
print(" %s %s %s %s %s" % (pw("상한", 12), rw("잘린 비율", 12), rw("치우침", 14),
rw("표준편차", 14), rw("MSE", 14)))
for cap in [np.inf, 5.0, 3.0, 2.0, 1.2]:
est = np.empty(M5)
cut = np.empty(M5)
for t in range(M5):
w0 = np.exp(rng.normal(0, sig5, n5))
w0 = w0 / w0.mean()
y = 50.0 + rng.normal(0, 5.0, n5)
w = np.minimum(w0, cap)
cut[t] = float((w0 > cap).mean())
est[t] = float((w * y).sum() / w.sum())
b = float(est.mean() - 50.0)
print(" %s %12.6f %14.6f %14.6f %14.6f"
% (pw("무한" if cap == np.inf else "%.1f" % cap, 12), float(cut.mean()),
b, float(est.std()), b ** 2 + float(est.var())))
print(" 치우침이 생기지 않고 흔들림만 줄어 자를수록 좋아집니다")
print(" 148강의 편향과 분산 맞바꿈이 가중치 다듬기에서 나타난 것입니다")
print(" 자르기가 이득인지는 가중치가 정보를 담고 있는지에 달렸습니다")
print(" 실무에서는 알 수 없으므로 여러 상한으로 돌려 보고 결과가 흔들리는지 봅니다")
print(" 다듬은 뒤에는 다시 맞춰야 합니다")
print(" %s %s" % (pw("절차", 18), rw("무엇을 하는가", 28)))
for a, b in [("자르기", "상한을 넘는 가중치를 상한으로 내립니다"),
("다시 맞추기", "주변합이 어긋났으므로 레이킹을 다시 합니다"),
("되풀이", "자르기와 맞추기가 수렴할 때까지 반복합니다"),
("기록", "상한과 반복 횟수를 남깁니다")]:
print(" %s %s" % (pw(a, 18), rw(b, 28)))
print(" 가중치는 만능이 아닙니다. 무엇을 고치고 무엇을 못 고치는지 적어야 합니다")
print(" %s %s" % (pw("가중치가", 16), rw("무엇을 하는가", 30)))
for a, b in [("고칩니다", "설계로 생긴 불균등한 확률"),
("고칩니다", "보정 변수로 설명되는 무응답"),
("못 고칩니다", "보정 변수 밖의 무응답"),
("못 고칩니다", "표집틀에서 아예 빠진 사람"),
("늘립니다", "추정량의 분산")]:
print(" %s %s" % (pw(a, 16), rw(b, 30)))
# 층마다 다른 비율로 뽑았다면 그대로 평균을 내면 틀립니다
# 층 크기 600000, 300000, 100000, 층 평균 40, 55, 80 입니다
# 참 평균은 48.5000 입니다
# 층 모집단 몫 표본 수 뽑힐 확률 설계 가중치
# 1 0.600000 300 0.00050000 2000.00
# 2 0.300000 300 0.00100000 1000.00
# 3 0.100000 400 0.00400000 250.00
# 셋째 층은 뽑힐 확률이 첫째 층의 8.00 배라 과대 대표되어 있습니다
# 추정 방법 평균 참값과의 차이 표준편차
# 그냥 평균 60.4958 11.9958 0.2897
# 가중평균 48.4975 -0.0025 0.2534
# 그냥 평균은 11.9958 만큼 치우칩니다. 큰 값을 가진 층을 많이 뽑았기 때문입니다
# 가중치는 뽑힐 확률의 역수입니다. 한 사람이 몇 명을 대표하는지입니다
# 추정량 = sum(w y) / sum(w) 이고 이것을 호비츠-톰프슨 추정량이라 합니다
# 가중치의 합 1000000 이 모집단 크기 1000000 를 맞힙니다
# 가중치가 고르지 않으면 유효 표본이 줄어듭니다
# 키시의 유효 표본 크기는 (sum w)^2 / sum(w^2) 입니다
# 가중치의 변동계수 유효 표본 실제 표본 설계효과 이론 1+cv^2
# 0.0 1000.00 1000 1.0000 1.0000
# 0.3 917.03 1000 1.0905 1.0905
# 0.6 745.53 1000 1.3413 1.3413
# 1.0 549.76 1000 1.8190 1.8190
# 2.0 222.46 1000 4.4952 4.4952
# 변동계수가 1 이면 유효 표본이 절반이 됩니다
# 가중치를 쓰면 치우침은 줄지만 흔들림이 늘어납니다
# 실제로 분산이 그만큼 커지는지 확인합니다
# 가중치의 변동계수 추정량의 분산 가중치 없을 때 비
# 0.0 0.00097574 0.00097574 1.0000
# 0.5 0.00125003 0.00097574 1.2811
# 1.0 0.00190885 0.00097574 1.9563
# 2.0 0.00488467 0.00097574 5.0061
# 가중치가 값과 무관한데도 분산이 늘어납니다. 정보가 없는 가중은 손해뿐입니다
# 뽑을 때의 확률만이 아니라 나중에 안 것으로도 맞출 수 있습니다
# 성별 두 개와 연령 두 개로 나눈 네 칸입니다
# 칸 모집단 몫 표본 몫
# 남 청년 0.3000 0.1500
# 남 장년 0.2000 0.1000
# 여 청년 0.2500 0.3500
# 여 장년 0.2500 0.4000
# 사후층화 가중치 칸별 값 최대/최소
# 네 칸 2.000, 2.000, 0.714, 0.625 3.2000
# 표본에 적게 들어온 칸일수록 가중치가 큽니다
# 칸이 비거나 너무 작으면 사후층화를 못 씁니다. 그때 주변합만 맞춥니다
# 반복 행 주변합 오차 열 주변합 오차 최대 칸 변화
# 1 0.0022321429 0.0000000000 0.1593750000
# 2 0.0000396341 0.0000000000 0.0012091709
# 3 0.0000007037 0.0000000000 0.0000214819
# 4 0.0000000125 0.0000000000 0.0000003814
# 5 0.0000000002 0.0000000000 0.0000000068
# 6 0.0000000000 0.0000000000 0.0000000001
# 행과 열을 번갈아 맞추면 몇 번 만에 둘 다 맞습니다. 레이킹이라 합니다
# 맞춘 뒤의 네 칸은 0.3081, 0.1919, 0.2419, 0.2581 입니다
# 원래 모집단 칸 0.3000, 0.2000, 0.2500, 0.2500 과는 다릅니다
# 레이킹은 주변합만 맞추므로 칸 안의 구조는 표본의 것을 그대로 씁니다
# 보정이 치우침을 고치려면 보정 변수가 두 가지와 이어져 있어야 합니다
# z 는 성별 같은 알려진 변수입니다. 인구 구성은 반반입니다
# 설정 보정 전 치우침 보정 후 치우침 보정 전 표준편차 보정 후 표준편차
# z 가 응답과 y 둘 다에 이어짐 0.901327 0.000420 0.032707 0.042567
# z 가 응답에만 이어짐 0.003800 -0.001747 0.038622 0.047505
# z 가 y 에만 이어짐 -0.001025 0.004695 0.036170 0.031143
# 설정 무엇이 일어났는가
# z 가 응답과 y 둘 다에 이어짐 치우침 0.9013 를 없앴습니다
# z 가 응답에만 이어짐 고칠 것이 없는데 분산만 1.23 배
# z 가 y 에만 이어짐 치우침이 없었고 분산이 0.86 배
# 첫째 줄만 고칠 것이 있었고 실제로 고쳐졌습니다
# 둘째 줄은 z 가 y 와 무관해 고칠 치우침이 없는데 분산만 늘었습니다
# 셋째 줄은 응답이 고르므로 치우침이 없었고 보정이 오히려 분산을 줄였습니다
# 셋째 줄의 이득이 사후층화의 부수적 효과입니다. y 와 이어진 변수로 맞추면 분산이 줍니다
# 161강 문제 1 의 MAR 과 같은 조건입니다. 응답을 설명하는 변수를 관측해야 합니다
# 관측하지 않은 변수로 응답이 갈렸다면 어떤 가중치도 고치지 못합니다
# 극단 가중치 하나가 추정량을 흔듭니다
# 가중치를 로그정규로 만들고 상한을 두어 잘라 봅니다
# 가중치가 큰 사람일수록 y 도 커지도록 두었습니다. 참값은 52.3573 입니다
# 상한 잘린 비율 치우침 표준편차 MSE
# 무한 0.000000 -0.009862 0.251976 0.063589
# 5.0 0.021307 -0.539002 0.178409 0.322353
# 3.0 0.060089 -0.993367 0.158775 1.011989
# 2.0 0.119030 -1.441936 0.148296 2.101172
# 1.2 0.238969 -2.107117 0.135822 4.458388
# 상한을 낮추면 치우침이 늘고 흔들림이 줍니다
# 그런데 이 설정에서는 자르지 않는 것이 가장 낫습니다. MSE 가 계속 커집니다
# 가중치가 y 와 이어져 있어 자르는 순간 정보를 버리기 때문입니다
# 가중치가 y 와 무관하면 반대가 됩니다
# 상한 잘린 비율 치우침 표준편차 MSE
# 무한 0.000000 0.004672 0.198780 0.039535
# 5.0 0.021370 -0.005435 0.168505 0.028424
# 3.0 0.060151 0.002606 0.155575 0.024210
# 2.0 0.118781 0.002251 0.145671 0.021225
# 1.2 0.238758 0.001581 0.131801 0.017374
# 치우침이 생기지 않고 흔들림만 줄어 자를수록 좋아집니다
# 148강의 편향과 분산 맞바꿈이 가중치 다듬기에서 나타난 것입니다
# 자르기가 이득인지는 가중치가 정보를 담고 있는지에 달렸습니다
# 실무에서는 알 수 없으므로 여러 상한으로 돌려 보고 결과가 흔들리는지 봅니다
# 다듬은 뒤에는 다시 맞춰야 합니다
# 절차 무엇을 하는가
# 자르기 상한을 넘는 가중치를 상한으로 내립니다
# 다시 맞추기 주변합이 어긋났으므로 레이킹을 다시 합니다
# 되풀이 자르기와 맞추기가 수렴할 때까지 반복합니다
# 기록 상한과 반복 횟수를 남깁니다
# 가중치는 만능이 아닙니다. 무엇을 고치고 무엇을 못 고치는지 적어야 합니다
# 가중치가 무엇을 하는가
# 고칩니다 설계로 생긴 불균등한 확률
# 고칩니다 보정 변수로 설명되는 무응답
# 못 고칩니다 보정 변수 밖의 무응답
# 못 고칩니다 표집틀에서 아예 빠진 사람
# 늘립니다 추정량의 분산