158강부터 160강까지가 자료를 꺼내고 잇는 일이었습니다. 이제 꺼낸 자료가 성한지 봅니다.
실무에서 자료가 그대로인 경우는 없습니다. 칸이 비어 있거나, 있어도 말이 안 되는 값이 섞여 있습니다. 그리고 둘 다 조용히 결론을 바꿉니다.
이 강의는 세 번째 만남입니다.
| 강의 | 결측을 무엇으로 보았는가 |
|---|---|
| 158강 문제 4 | 어떻게 표현할 것인가. 표식을 쓰면 계산에 섞입니다 |
| 159강 문제 3 | 논리를 어떻게 바꾸는가. 참도 거짓도 아닌 세 번째 값입니다 |
| 161강 | 어떻게 다룰 것인가. 지울지 채울지 정합니다 |
핵심 질문은 하나입니다.
없어진 이유를 모르면 어떤 처리도 옳은지 알 수 없습니다. 무작위로 빠진 값과 큰 값이라서 빠진 값은 겉보기에 똑같이 빈 칸인데, 전자는 지워도 되고 후자는 지우면 안 됩니다.
이상치도 같습니다. 튀는 값을 지우는 것은 자료를 고치는 일이 아니라 결론을 고르는 일이며, 그래서 지우기 전에 왜 튀는지를 먼저 물어야 합니다.
문제. 는 언제나 관측되고 입니다. 의 퍼센트가 빕니다.
(1) 결측이 생기는 방식 셋을 나누고 각각에서 남은 값의 평균을 구하세요.
(2) 어느 것이 편향을 만드는지 판정하세요.
(3) 로 보정하면 무엇이 되살아나는지 확인하세요.
생각의 실마리. 빈 칸만 보면 셋이 다 똑같습니다. 다른 것은 빈 칸이 아니라 빈 칸이 생긴 방식입니다. 동전을 던져 지웠는지, 다른 변수를 보고 지웠는지, 지워질 값 자체를 보고 지웠는지에 따라 남은 것의 성질이 달라집니다.
풀이. (1)(2) 검산 결과입니다. 참 평균은 입니다.
| 결측 방식 | 결측 비율 | 남은 값의 평균 | 참값과의 차이 |
|---|---|---|---|
| 완전 무작위 MCAR | |||
| 조건부 무작위 MAR | |||
| 무작위 아님 MNAR |
세 방식의 결측 비율이 모두 퍼센트인데 결과가 다릅니다.
| 이름 | 무엇에 달려 있는가 |
|---|---|
| MCAR | 아무것에도 달려 있지 않습니다 |
| MAR | 관측된 다른 변수 에 달려 있습니다 |
| MNAR | 지워질 값 자체에 달려 있습니다 |
MCAR만 편향이 없습니다. 남은 것이 여전히 무작위 표본이므로 평균이 그대로이고, 잃는 것은 표본 크기뿐입니다.
MAR과 MNAR은 지우는 순간 평균이 이상 움직입니다. 인 행이 더 많이 지워졌는데 는 가 클수록 커지므로, 남은 것은 작은 값 쪽에 몰려 있습니다.
(3) 는 언제나 관측되므로 로 회귀해 보정해 봅니다.
| 보정 방법 | MAR 추정 평균 | MNAR 추정 평균 |
|---|---|---|
| 그냥 평균 | ||
| 로 회귀해 보정 | ||
| 참값 |
MAR은 거의 완전히 되살아납니다. 오차가 에서 로 줄었습니다.
MNAR은 절반쯤만 줄어듭니다. 오차가 에서 으로 작아졌을 뿐 사라지지 않았습니다. 가 와 상관이 있어 우연히 일부가 보정된 것이며, 자체를 보고 지운 몫은 로 설명되지 않습니다.
이 문제에서 배우는 것. MNAR은 관측된 자료만으로는 판정할 수 없습니다. 지워진 값을 봐야 지워진 이유를 아는데, 그 값이 바로 없는 것입니다. 자료 안에 답이 없는 문제이며, 그래서 결측 처리는 자료를 어떻게 모았는지 아는 사람에게 물어야 합니다. 설문에서 고소득자가 소득을 적지 않는 것, 부작용이 심한 환자가 추적에서 빠지는 것이 모두 MNAR입니다. 통계로 고칠 수 없고 수집 설계로만 막을 수 있습니다.
바로 확인 1.
확인 1-1. MCAR, MAR, MNAR을 무엇에 달려 있는지로 구분하세요.
답. 아무것에도, 관측된 다른 변수에, 지워질 값 자체에 각각 달려 있습니다.
확인 1-2. 검산에서 MCAR만 편향이 없는 이유를 쓰세요.
답. 남은 것이 여전히 무작위 표본이라 평균이 그대로이고 표본 크기만 줄기 때문입니다.
확인 1-3. MNAR을 자료만으로 판정할 수 없는 이유를 쓰세요.
답. 지워진 이유를 알려면 지워진 값을 봐야 하는데 그 값이 없기 때문입니다.
문제. 변수마다 결측률이 퍼센트씩 독립으로 있습니다.
(1) 변수 개수에 따라 완전한 행이 얼마나 남는지 구하세요.
(2) 쌍별 제거로 상관행렬을 구하면 무엇이 깨지는지 보이세요.
생각의 실마리. 완전 제거는 한 칸이라도 비면 그 행 전체를 버립니다. 변수 하나만 보면 퍼센트가 남는데, 변수가 여럿이면 모든 변수가 동시에 성해야 살아남습니다. 확률의 곱이 나올 자리입니다.
풀이. (1) 검산 결과입니다.
| 변수 개수 | 완전한 행의 비율 | 이론 0.95^ |
|---|---|---|
변수 하나마다 퍼센트만 비어도 개면 완전한 행이 퍼센트도 남지 않습니다. 각 변수는 거의 성한데 합쳐 놓으면 대부분이 버려집니다.
표본이 분의 로 줄면 표준오차가 배가 됩니다. 142강에서 표준오차가 로 줄어든다고 한 것을 거꾸로 읽은 것입니다.
그래서 쌍별 제거라는 우회로가 나옵니다. 상관을 구할 때 그 두 변수만 성하면 쓰자는 것인데, 행을 훨씬 많이 살립니다.
(2) 그런데 문제가 생깁니다. 쌍마다 관측되는 행이 다를 때의 상관행렬입니다.
| 상관 | x_ | x_ | x_ |
|---|---|---|---|
| x_ | |||
| x_ | |||
| x_ |
이 행렬은 존재할 수 없습니다. 고윳값이 , , 인데, 상관행렬의 고윳값은 음수가 될 수 없기 때문입니다.
말로 읽으면 더 분명합니다. 과 가 거의 같이 움직이고 과 도 거의 같이 움직이는데, 와 이 반대로 움직인다는 것은 모순입니다.
쌍별 제거는 각 쌍을 서로 다른 표본에서 잽니다. 표본이 다르면 답도 다를 수 있고, 그렇게 모은 답들은 어떤 하나의 자료에서도 동시에 성립하지 않습니다.
이 문제에서 배우는 것. 완전 제거는 정직하지만 비싸고, 쌍별 제거는 싸지만 일관되지 않습니다. 그리고 쌍별 제거의 대가는 나중에 치릅니다. 상관행렬 자체는 계산되고 표로도 잘 보이지만, 주성분분석이나 회귀에 넣는 순간 음수 고윳값 때문에 계산이 깨지거나 말이 안 되는 답이 나옵니다. 오류가 원인에서 멀리 떨어져 나타나는 것이 이 방법의 가장 나쁜 점입니다.
바로 확인 2.
확인 2-1. 완전한 행의 비율을 식으로 쓰세요.
답. 결측률이 이고 변수가 개일 때 입니다.
확인 2-2. 검산에서 변수 개일 때 남는 비율을 쓰세요.
답. 이며 이론값 와 맞습니다.
확인 2-3. 쌍별 제거로 얻은 상관행렬이 왜 모순될 수 있는지 쓰세요.
답. 각 쌍을 다른 표본에서 재므로 동시에 성립할 수 없는 값들을 모으기 때문입니다.
문제. 상관 인 두 변수에서 의 퍼센트를 무작위로 지웁니다.
(1) 대치 방법 넷의 평균, 분산, 상관을 각각 구하세요.
(2) 어느 방법이 무엇을 망가뜨리는지 판정하세요.
(3) 모두 되살린 방법에도 남는 문제가 있는지 확인하세요.
생각의 실마리. 빈 칸을 무엇으로 채우든 채운 값에는 원래 있던 흩어짐이 없습니다. 평균으로 채우면 그 자리의 분산이 이고, 회귀로 채우면 예측선 위에 정확히 놓입니다. 없는 것을 만들어 넣으면 반드시 무언가가 줄어듭니다.
풀이. (1)(2) 검산 결과입니다.
| 방법 | 표본 크기 | 평균 | 분산 | 와의 상관 |
|---|---|---|---|---|
| 참값 (결측 없음) | ||||
| 완전 제거 | ||||
| 평균 대치 | ||||
| 회귀 대치 | ||||
| 확률적 회귀 대치 |
평균 대치는 평균만 지킵니다. 분산이 배로 줄었는데, 결측 비율 만큼 그대로 깎인 값입니다. 채운 퍼센트가 전부 한 점에 모여 있으니 흩어짐이 그만큼 사라집니다. 상관도 에서 으로 떨어집니다.
회귀 대치는 반대 방향으로 틀립니다. 상관이 에서 로 올라갔습니다. 채운 점이 모두 예측 직선 위에 정확히 놓이므로, 그 부분만 보면 상관이 입니다.
둘 다 틀렸는데 방향이 반대입니다. 그래서 "대치하면 상관이 어떻게 된다"는 한마디 규칙은 없고, 어떤 대치인지 알아야 방향을 압니다.
확률적 회귀 대치가 셋을 모두 되살립니다. 예측값에 잔차와 같은 흩어짐을 가진 잡음을 더해 채우면 분산 , 상관 로 참값에 돌아옵니다.
(3) 그런데 아직 하나가 남습니다.
| 평균의 표준오차 | 값 | 실제 정보량 |
|---|---|---|
| 결측이 없었다면 | ||
| 완전 제거 | ||
| 대치 뒤 으로 계산 |
대치 뒤에 표준오차를 으로 계산하면 완전 제거의 배가 됩니다. 실제로 관측한 값은 개뿐인데 개를 관측한 것처럼 계산한 것입니다.
없던 정보가 생겼습니다. 신뢰구간이 좁아지고 가설검정의 값이 작아지므로, 틀린 결론을 자신 있게 내놓게 됩니다.
다중 대치가 이 문제를 풉니다. 한 번이 아니라 여러 번 서로 다르게 채워서 각각 분석한 뒤, 결과가 서로 얼마나 흩어지는지를 불확실성에 더합니다. 채운 값이 얼마나 불확실한지가 그 흩어짐에 들어 있습니다.
이 문제에서 배우는 것. 대치는 값을 채우는 일이 아니라 불확실성을 다루는 일입니다. 값 하나를 잘 채우는 것은 절반이고, 나머지 절반은 그 값이 추측이라는 사실을 뒤의 계산에 알리는 것입니다. 이것을 빠뜨리면 149강에서 다룬 편향은 없어도 분산을 과소평가하게 되며, 점추정은 맞는데 구간이 틀리는 상태가 됩니다.
바로 확인 3.
확인 3-1. 평균 대치가 분산을 얼마나 줄이는지 쓰세요.
답. 결측 비율만큼 줄이며 검산에서는 배가 되었습니다.
확인 3-2. 회귀 대치가 상관을 부풀리는 이유를 쓰세요.
답. 채운 점이 모두 예측 직선 위에 정확히 놓이기 때문입니다.
확인 3-3. 대치 뒤 표준오차를 으로 계산하면 무엇이 잘못되는지 쓰세요.
답. 관측하지 않은 값을 관측한 것처럼 세어 불확실성을 과소평가합니다.
문제. 표준정규 자료에 값이 인 점을 섞습니다.
(1) 오염 비율을 바꿔 가며 시그마 규칙이 얼마나 잡는지 구하세요.
(2) 중앙값과 MAD로 같은 일을 해서 비교하세요.
(3) 붕괴점으로 정리하세요.
생각의 실마리. 시그마 규칙은 평균에서 표준편차의 세 배보다 먼 점을 이상치로 봅니다. 그런데 평균과 표준편차를 무엇으로 계산하는지 생각해 봅니다. 이상치를 포함한 자료 전체로 계산합니다. 그러면 이상치가 자기를 재는 자를 움직입니다.
풀이. (1)(2) 검산 결과입니다.
| 오염 비율 | 평균 | 표준편차 | 시그마가 잡은 비율 | MAD가 잡은 비율 |
|---|---|---|---|---|
오염이 퍼센트에서 퍼센트로 늘자 탐지율이 에서 으로 떨어집니다.
계산해 보면 이유가 분명합니다. 오염이 퍼센트일 때 판정 기준은 다음과 같습니다.
기준선이 이상치보다 위로 올라갔습니다. 이상치가 표준편차를 키워서 자기가 이상치가 아니게 만든 것입니다. 이것을 **가림 현상(masking)**이라 부릅니다.
MAD는 모든 오염 비율에서 전부 잡습니다.
중앙값은 값이 얼마나 큰지가 아니라 몇 번째인지만 보므로, 이든 이든 순위가 같아 결과가 같습니다. 앞의 은 정규분포에서 표준편차와 눈금을 맞추는 상수입니다.
(3) 이것을 재는 말이 붕괴점입니다.
| 추정량 | 붕괴점 | 뜻 |
|---|---|---|
| 평균 | 한 점이 끌고 갈 수 있습니다 | |
| 표준편차 | 한 점이 끌고 갈 수 있습니다 | |
| 퍼센트 절사평균 | 퍼센트까지 버팁니다 | |
| 중앙값 | 절반까지 버팁니다 | |
| MAD | 절반까지 버팁니다 |
붕괴점은 추정값을 마음대로 옮기려면 자료의 몇 할을 바꿔야 하는지입니다. 평균의 붕괴점이 인 것은 점 하나만 무한대로 보내도 평균이 무한대가 되기 때문입니다.
절반이 상한입니다. 자료의 절반 이상이 오염되면 어느 쪽이 진짜인지 구별할 방법이 없으므로, 보다 큰 붕괴점은 있을 수 없습니다.
이 문제에서 배우는 것. 오염된 자료로 오염의 기준을 만들면 안 됩니다. 시그마 규칙이 실패하는 것은 상수 이 작아서가 아니라 기준을 재는 도구가 이미 오염되어 있기 때문이며, 상수를 나 로 키워도 방향은 그대로입니다. 로버스트 통계의 발상이 여기 있습니다. 먼저 오염에 흔들리지 않는 중심과 퍼짐을 구하고, 그것을 자로 삼아 이상치를 찾습니다.
바로 확인 4.
확인 4-1. 가림 현상이 무엇인지 쓰세요.
답. 이상치가 평균과 표준편차를 끌어당겨 자기가 탐지되지 않게 만드는 현상입니다.
확인 4-2. 검산에서 오염 일 때 시그마가 아무것도 못 잡은 이유를 수치로 쓰세요.
답. 기준선이 로 이상치 값 보다 커졌기 때문입니다.
확인 4-3. 붕괴점의 정의와 상한을 쓰세요.
답. 추정값을 마음대로 옮기는 데 필요한 오염 비율이며 상한은 입니다.
문제. 퍼센트가 으로 오염된 자료에서 중심을 잽니다. 참 중심은 입니다.
(1) 네 가지 방법의 추정값을 구하고 비교하세요.
(2) 한 변수만 보면 안 보이는 이상치를 만들어 판정하세요.
생각의 실마리. 찾는 것과 다루는 것은 다른 문제입니다. 찾았다고 지워야 하는 것도 아니고, 못 찾았다고 손쓸 수 없는 것도 아닙니다. 이상치가 있어도 흔들리지 않는 추정량을 쓰면 찾지 않고도 옳은 답을 얻습니다.
풀이. (1) 검산 결과입니다.
| 방법 | 추정값 | 참값 과의 차이 |
|---|---|---|
| 평균 | ||
| 중앙값 | ||
| 퍼센트 절사평균 | ||
| 퍼센트 윈저화 평균 |
평균의 오차가 나머지 셋보다 배 이상 큽니다. 퍼센트가 이면 평균은 만큼 끌려가며, 검산의 이 그 값입니다.
절사와 윈저화의 차이가 보입니다.
| 방법 | 양끝을 어떻게 하는가 |
|---|---|
| 절사평균 | 버립니다 |
| 윈저화 평균 | 경계값으로 눌러 담습니다 |
윈저화가 절사보다 조금 더 끌려갑니다. 와 인데, 윈저화는 이상치를 버리지 않고 번째 백분위수 값으로 바꿔 넣기 때문에 그만큼 위로 밀립니다. 대신 표본 크기를 그대로 지킵니다.
중앙값이 가장 정확하지만 언제나 최선은 아닙니다. 오염이 없을 때 중앙값의 분산은 평균의 배라 정보를 그만큼 버립니다. 절사평균은 그 사이에서 타협한 것입니다.
(2) 한 변수만 보면 안 보이는 이상치를 봅니다. 상관 인 두 변수에서 점 입니다.
| 보는 방법 | 값 |
|---|---|
| 첫 변수만 보는 표준화 값 | |
| 둘째 변수만 보는 표준화 값 | |
| 마할라노비스 거리 | |
| 거리의 제곱 |
각 변수만 보면 라 흔한 편이고 넘길 만합니다. 그런데 **함께 보면 거리가 **입니다.
이유는 간단합니다. 상관이 인 자료에서는 두 값이 같은 방향으로 움직이는 것이 정상입니다. 하나가 인데 다른 하나가 인 점은 정상이 만드는 좁은 띠에서 아주 멀리 떨어져 있습니다.
이 문제에서 배우는 것. 이상치는 값의 성질이 아니라 자료 전체와의 관계입니다. 같은 도 두 변수가 무관하다면 전혀 이상하지 않습니다. 그래서 변수마다 따로 걸러내는 방식은 다변량 이상치를 놓칩니다. 다만 마할라노비스 거리도 를 보통의 공분산으로 재면 그 자체가 이상치에 오염되므로, 로버스트 공분산을 먼저 구하고 거리를 재는 순서를 씁니다. 문제 4의 교훈이 다변량으로 그대로 옮겨 옵니다.
그리고 마지막이 가장 중요합니다. 지울지 말지는 자료가 아니라 그 값이 생긴 이유가 정합니다. 단위를 잘못 적은 값은 고치고, 센서가 고장 난 값은 지우고, 드물지만 진짜인 값은 남깁니다. 마지막 것을 지우면 그 순간 자료는 깨끗해 보이지만 바로 그 드문 사건이 알고 싶었던 것인 경우가 많습니다.
바로 확인 5.
확인 5-1. 절사평균과 윈저화 평균의 차이를 쓰세요.
답. 절사는 양끝을 버리고 윈저화는 경계값으로 눌러 담아 표본 크기를 지킵니다.
확인 5-2. 검산에서 평균이 인 이유를 쓰세요.
답. 퍼센트가 이므로 만큼 끌려갔기 때문입니다.
확인 5-3. 다변량 이상치가 왜 변수별 검사로 안 잡히는지 쓰세요.
답. 각 변수 안에서는 흔한 값인데 변수들의 조합이 드문 경우이기 때문입니다.
| 결측 방식 | 무엇에 달렸는가 | 지우면 | 고칠 수 있는가 |
|---|---|---|---|
| MCAR | 아무것도 아님 | 편향 없음 | 표본만 줄어듭니다 |
| MAR | 관측된 변수 | 편향 생김 | 그 변수로 보정 가능합니다 |
| MNAR | 지워진 값 자체 | 편향 생김 | 자료만으로는 불가능합니다 |
| 대치 방법 | 평균 | 분산 | 상관 |
|---|---|---|---|
| 평균 대치 | 보존 | 줄어듭니다 | 줄어듭니다 |
| 회귀 대치 | 보존 | 줄어듭니다 | 늘어납니다 |
| 확률적 회귀 대치 | 보존 | 보존 | 보존 |
| 다중 대치 | 보존 | 보존 | 보존이며 불확실성도 반영 |
| 이상치 탐지 | 기준 | 붕괴점 |
|---|---|---|
| 시그마 | 평균과 표준편차 | |
| IQR 배 | 사분위수 | |
| MAD | 중앙값 | |
| 마할라노비스 거리 | 공분산 | 로버스트 공분산을 써야 합니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 결측을 무조건 지웁니다 | MCAR인지 먼저 확인합니다 |
| 결측을 으로 채웁니다 | 158강의 와 같은 실수입니다 |
| 평균으로 채우고 분산을 씁니다 | 분산이 결측 비율만큼 줄어 있습니다 |
| 대치 뒤 으로 표준오차를 냅니다 | 관측 수로 세거나 다중 대치를 씁니다 |
| 시그마로 이상치를 거릅니다 | 오염이 많으면 가림 현상으로 못 잡습니다 |
| 변수별로만 이상치를 봅니다 | 다변량 이상치를 놓칩니다 |
| 튀는 값을 다 지웁니다 | 진짜 드문 사건이 알고 싶던 것일 수 있습니다 |
문제 6. 결측 방식 셋을 무엇에 달려 있는지로 구분하세요.
답. 아무것에도, 관측된 다른 변수에, 지워질 값 자체에 각각 달려 있습니다.
문제 7. 검산에서 세 방식의 평균 편향을 쓰세요.
답. MCAR , MAR , MNAR 입니다.
문제 8. MAR을 보정한 결과를 검산 값으로 쓰세요.
답. 에서 으로 참값 에 거의 맞았습니다.
문제 9. MNAR이 보정되지 않는 이유를 쓰세요.
답. 결측 여부가 관측되지 않은 값 자체에 달려 있어 관측된 변수로 설명되지 않기 때문입니다.
문제 10. 완전한 행의 비율을 식으로 쓰고 일 때를 계산하세요.
답. 이며 입니다.
문제 11. 쌍별 제거가 만든 상관행렬이 왜 불가능한지 쓰세요.
답. 고윳값이 로 음수인데 상관행렬의 고윳값은 음수일 수 없기 때문입니다.
문제 12. 평균 대치의 분산과 상관을 검산 값으로 쓰세요.
답. 분산이 이고 상관이 으로 참값 과 보다 낮습니다.
문제 13. 회귀 대치가 상관을 어떻게 바꾸는지 검산 값으로 쓰세요.
답. 에서 로 올립니다.
문제 14. 확률적 회귀 대치가 무엇을 더하는지 쓰세요.
답. 예측값에 잔차와 같은 흩어짐의 잡음을 더합니다.
문제 15. 다중 대치가 필요한 이유를 쓰세요.
답. 채운 값이 추측이라는 불확실성을 여러 번 채운 결과의 흩어짐으로 반영하기 때문입니다.
문제 16. 검산에서 오염 일 때 시그마의 기준선을 계산하세요.
답. 이며 이상치 값 보다 큽니다.
문제 17. MAD의 정의와 상수 의 뜻을 쓰세요.
답. 중앙값에서의 절대편차의 중앙값이며 상수는 정규분포에서 표준편차와 눈금을 맞춥니다.
문제 18. 검산의 마할라노비스 거리와 주변 표준화 값을 견주세요.
답. 각 변수는 인데 거리는 이고 제곱은 입니다.
심화 1. 결측 지표 자체가 정보를 담는 경우를 정리하세요.
빈 칸이라는 사실 자체가 예측에 쓸모 있는 경우가 있습니다.
의료 기록에서 어떤 검사를 하지 않았다는 것은 의사가 그 검사가 필요 없다고 판단했다는 뜻입니다. 그 판단에는 환자 상태에 대한 정보가 들어 있습니다.
| 처리 | 무엇을 얻고 무엇을 잃는가 |
|---|---|
| 결측 지표를 특징으로 추가 | 예측력이 오르지만 인과 해석이 막힙니다 |
| 대치만 하고 지표를 버림 | 해석은 깨끗하지만 정보를 버립니다 |
목적에 따라 답이 갈립니다. 예측이 목적이면 지표를 넣는 것이 대개 이득입니다.
그런데 위험이 있습니다. 결측 패턴이 수집 시스템의 사정을 반영하는 경우, 시스템이 바뀌면 모델이 무너집니다. 예를 들어 특정 병원의 기록 방식 때문에 생긴 결측을 학습했다면, 다른 병원에서는 아무 의미도 없습니다.
그리고 결측 지표가 누출 통로가 되기도 합니다. 160강 심화 4에서 본 것과 같습니다. 결과를 안 뒤에야 기록되는 항목의 결측 지표를 넣으면 예측 시점에 알 수 없던 정보가 들어옵니다.
심화 2. 절사평균과 M추정량의 관계를 정리하세요.
로버스트 추정을 하나의 틀로 볼 수 있습니다. 중심 를 다음을 최소화하는 값으로 정의합니다.
를 무엇으로 두느냐가 방법을 정합니다.
| 추정량 | 성질 | |
|---|---|---|
| u^ | 평균 | 효율이 최고이나 붕괴점 |
| 중앙값 | 붕괴점 이나 효율 | |
| 후버 함수 | 후버 M추정량 | 가운데는 제곱, 바깥은 절댓값 |
후버 함수는 둘을 이어 붙인 것입니다. 이면 이고 그 밖이면 인데, 가운데에서는 평균처럼 효율적이고 바깥에서는 중앙값처럼 둔감합니다.
여기서 효율과 강건함의 맞바꿈이 보입니다.
| 성질 | |
|---|---|
| 크게 | 평균에 가까워 효율이 높고 강건함이 낮습니다 |
| 작게 | 중앙값에 가까워 강건하고 효율이 낮습니다 |
가 흔히 쓰입니다. 오염이 없는 정규분포에서 평균 대비 효율 퍼센트를 지키도록 고른 값입니다.
두 손실 함수의 차이는 미분에서 드러납니다. 제곱 손실의 도함수는 라서 먼 점일수록 더 세게 끌어당기고, 절댓값 손실의 도함수는 부호뿐이라 아무리 멀어도 같은 힘입니다. 붕괴점의 차이가 여기서 나옵니다.
심화 3. EM 알고리즘이 결측을 어떻게 다루는지 정리하세요.
문제 3의 대치는 채운 뒤 분석했습니다. 순서를 뒤집을 수도 있습니다.
모수를 알면 결측을 잘 채울 수 있고, 결측을 채우면 모수를 잘 추정할 수 있습니다. 둘 다 모르므로 번갈아 합니다.
| 단계 | 하는 일 |
|---|---|
| E 단계 | 지금 모수로 결측의 조건부 기댓값을 구합니다 |
| M 단계 | 채운 자료로 모수를 다시 추정합니다 |
이것을 수렴할 때까지 반복합니다. 각 반복에서 관측 자료의 가능도가 줄지 않는다는 것이 보장되어 있어 반드시 수렴합니다.
다만 전역 최대라는 보장은 없습니다. 시작점에 따라 다른 곳에 멈출 수 있어 여러 시작점에서 돌려 봅니다.
주의할 점이 하나 있습니다. E 단계가 채우는 것은 기댓값이라 분산이 없습니다. 그런데 M 단계의 분산 추정식이 그것을 보정하므로, 문제 3의 평균 대치와 달리 분산이 줄지 않습니다. 채운 값을 그대로 표본으로 쓰는 것과 EM은 다릅니다.
EM은 MAR을 가정합니다. MNAR이면 결측 방식 자체를 모형에 넣어야 하며, 그 모형은 자료로 검증할 수 없어 가정에 민감한 결과가 됩니다.
심화 4. 이상치와 영향점이 어떻게 다른지 정리하세요.
회귀에서 튀는 것과 결과를 바꾸는 것은 다릅니다.
| 이름 | 뜻 |
|---|---|
| 이상치 | 잔차가 큰 점입니다 |
| 지렛대 | 가 중심에서 먼 점입니다 |
| 영향점 | 빼면 계수가 크게 바뀌는 점입니다 |
셋이 따로 놉니다. 가 중심 근처인 점은 잔차가 아무리 커도 기울기를 별로 못 바꾸고, 반대로 가 아주 먼 점은 잔차가 작아도 직선 전체를 끌고 갑니다.
지렛대는 모자 행렬의 대각 원소 로 재고, 영향은 쿡 거리로 잽니다.
잔차와 지렛대의 곱이라는 것이 식에 그대로 보입니다. 둘 중 하나만 커서는 영향점이 되지 않습니다.
실무의 결론은 잔차만 보지 말라는 것입니다. 잔차 그림에서 멀쩡해 보이는 점이 직선을 끌고 가는 경우가 있으며, 그 점은 직선을 자기 쪽으로 당겨 자기 잔차를 작게 만들어 놓았습니다. 문제 4의 가림 현상이 회귀에서 나타난 모습입니다.
심화 5. 이상치 처리가 결과를 얼마나 바꾸는지 보고하는 방법을 정리하세요.
이상치를 지우면 결론이 바뀝니다. 그것이 지우는 이유이므로 당연한데, 문제는 어느 결론이 옳은지 자료가 말해 주지 않는다는 것입니다.
그래서 선택 하나를 보고하는 대신 선택에 따라 답이 얼마나 흔들리는지를 보고합니다.
| 방법 | 내용 |
|---|---|
| 민감도 분석 | 여러 처리 방식으로 각각 분석해 결과를 나란히 놓습니다 |
| 사전 등록 | 자료를 보기 전에 처리 규칙을 정해 둡니다 |
| 처리 이력 기록 | 몇 개를 어떤 규칙으로 뺐는지 남깁니다 |
둘째 줄이 가장 강합니다. 자료를 본 뒤에 규칙을 정하면 원하는 결론이 나오는 규칙을 고르게 되며, 본인이 의도하지 않아도 그렇게 됩니다.
결과가 처리 방식에 따라 크게 흔들린다면 그것 자체가 결과입니다. "이상치를 어떻게 다루든 결론이 같다"와 "이상치 세 개를 빼야만 유의해진다"는 전혀 다른 증거의 세기를 가지며, 뒤쪽을 앞쪽처럼 보고하는 것이 재현되지 않는 연구의 큰 원인입니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 정제 파이프라인 | 규칙을 코드로 고정합니다 | 162강 |
| 기술통계 | 로버스트 요약을 냅니다 | 163강 |
| 시각화 | 상자그림으로 이상치를 봅니다 | 165강 |
| 조사 설계 | 무응답을 다룹니다 | 176강 |
첫째 줄이 이 강의를 실행 가능하게 만듭니다. 결측과 이상치 처리는 한 번 하고 끝나는 일이 아니라 자료가 들어올 때마다 반복되는 일입니다. 사람이 눈으로 보고 그때그때 판단하면 같은 자료에 다른 처리가 적용됩니다.
규칙을 코드로 적어 두면 세 가지가 따라옵니다. 언제나 같은 처리가 적용되고, 무엇을 했는지 남고, 바꾸면 무엇이 달라지는지 다시 돌려 볼 수 있습니다. 심화 5의 민감도 분석이 가능해지는 조건이 바로 이것입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| MCAR | 완전 무작위 결측 | 결측이 아무것에도 달려 있지 않습니다 |
| MAR | 조건부 무작위 결측 | 관측된 변수에 달려 있습니다 |
| MNAR | 무작위가 아닌 결측 | 결측된 값 자체에 달려 있습니다 |
| 완전 제거 | listwise deletion | 한 칸이라도 비면 행을 버립니다 |
| 쌍별 제거 | pairwise deletion | 쌍마다 성한 행만 씁니다 |
| 대치 | imputation | 빈 칸을 값으로 채웁니다 |
| 다중 대치 | multiple imputation | 여러 번 채워 불확실성을 반영합니다 |
| MAD | 중앙값 절대편차 | 중앙값에서의 절대편차의 중앙값입니다 |
| 붕괴점 | breakdown point | 추정값을 무너뜨리는 오염 비율입니다 |
| 가림 현상 | masking | 이상치가 자기 탐지를 막습니다 |
| 절사평균 | trimmed mean | 양끝을 버리고 평균을 냅니다 |
| 윈저화 | winsorizing | 양끝을 경계값으로 눌러 담습니다 |
| 마할라노비스 거리 | Mahalanobis distance | 공분산을 반영한 거리입니다 |
| 지렛대 | leverage | 가 중심에서 얼마나 먼지입니다 |
| 쿡 거리 | Cook's distance | 그 점을 빼면 계수가 얼마나 바뀌는지입니다 |
| EM 알고리즘 | expectation-maximization | 채우기와 추정을 번갈아 합니다 |
다음은 162강 정제와 변환 파이프라인입니다. 이 강의까지가 무엇을 해야 하는지였고, 다음은 그것을 어떻게 반복 가능하게 만드는지입니다.
심화 6에서 본 것이 주제입니다. 결측과 이상치 처리는 한 번 하고 끝나지 않으므로, 사람의 판단이 아니라 코드로 고정된 규칙이 되어야 합니다.
그리고 새로운 함정이 하나 나옵니다. 문제 3의 대치나 표준화처럼 자료 전체를 보고 정하는 처리를 훈련과 검증을 나누기 전에 해 버리면, 검증 자료의 정보가 훈련에 새어 들어갑니다. 160강 심화 4의 누출이 시간이 아니라 분할을 넘어 일어나는 모습이며, 파이프라인의 순서가 그것을 막습니다.
import numpy as np
rng = np.random.default_rng(20260829)
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(" 결측이 생기는 방식을 셋으로 나눕니다. n = 20 만 입니다")
n1 = 200000
a = rng.normal(0, 1, n1)
y = 50 + 5 * a + rng.normal(0, 3, n1)
med = float(np.median(y))
mech = {
"완전 무작위 MCAR": rng.random(n1) < 0.30,
"조건부 무작위 MAR": rng.random(n1) < np.where(a > 0, 0.55, 0.05),
"무작위 아님 MNAR": rng.random(n1) < np.where(y > med, 0.55, 0.05),
}
print(" 참 평균은 %.4f 이고 결측을 지운 뒤의 평균과 견줍니다" % float(y.mean()))
print(" %s %s %s %s" % (pw("결측 방식", 20), rw("결측 비율", 10),
rw("남은 값의 평균", 16), rw("참값과의 차이", 16)))
for k, m in mech.items():
ob = y[~m]
print(" %s %10.4f %16.4f %16.4f"
% (pw(k, 20), float(m.mean()), float(ob.mean()), float(ob.mean() - y.mean())))
print(" MCAR 만 편향이 없습니다. 나머지 둘은 지우는 순간 평균이 움직입니다")
print(" MAR 은 관측된 변수로 조건을 걸면 되살릴 수 있습니다")
print(" %s %s %s" % (pw("보정 방법", 24), rw("MAR 추정 평균", 16), rw("MNAR 추정 평균", 16)))
est = []
for k in ["조건부 무작위 MAR", "무작위 아님 MNAR"]:
m = mech[k]
A = np.stack([np.ones(int((~m).sum())), a[~m]], axis=1)
co = np.linalg.lstsq(A, y[~m], rcond=None)[0]
est.append(float(co[0] + co[1] * a.mean()))
print(" %s %16.4f %16.4f" % (pw("그냥 평균", 24),
float(y[~mech["조건부 무작위 MAR"]].mean()),
float(y[~mech["무작위 아님 MNAR"]].mean())))
print(" %s %16.4f %16.4f" % (pw("a 로 회귀해 보정", 24), est[0], est[1]))
print(" %s %16.4f %16.4f" % (pw("참값", 24), float(y.mean()), float(y.mean())))
print(" a 는 언제나 관측되므로 MAR 은 보정됩니다. MNAR 은 보정 뒤에도 남습니다")
print(" 결측 여부가 결측된 값 자체에 달려 있으면 관측만으로는 알 길이 없습니다")
# --- 문제 2: 지우면 무슨 일이 생기는가 ----------------------------------
print(" 변수마다 결측이 조금씩 있을 때 완전한 행이 얼마나 남는지 봅니다")
print(" %s %s %s %s" % (pw("변수 개수", 12), rw("한 변수의 결측률", 18),
rw("완전한 행의 비율", 18), rw("이론 0.95^p", 14)))
n2 = 200000
for p in [1, 5, 10, 20, 50]:
M = rng.random((n2, p)) < 0.05
print(" %s %18.2f %18.6f %14.6f"
% (pw(str(p), 12), 0.05, float((~M.any(axis=1)).mean()), 0.95 ** p))
print(" 변수 하나마다 5 퍼센트만 비어도 50 개면 완전한 행이 8 퍼센트만 남습니다")
print(" 쌍별 제거는 행을 지키지만 상관행렬이 모순될 수 있습니다")
n3 = 60000
g = rng.integers(0, 3, n3)
x1 = rng.normal(0, 1, n3)
e = rng.normal(0, 1, (n3, 3))
s = np.sqrt(1 - 0.9 ** 2)
x2 = 0.9 * x1 + s * e[:, 0]
x3 = 0.9 * x1 + s * e[:, 1]
x3 = np.where(g == 2, -0.9 * x2 + s * e[:, 2], x3)
X = np.stack([x1, x2, x3], axis=1)
obs = np.stack([g != 2, g != 1, g != 0], axis=1)
R = np.eye(3)
for i in range(3):
for j in range(i + 1, 3):
m = obs[:, i] & obs[:, j]
R[i, j] = R[j, i] = float(np.corrcoef(X[m, i], X[m, j])[0, 1])
print(" 쌍마다 관측되는 행이 다를 때의 상관행렬입니다")
for i in range(3):
print(" %s" % " ".join("%8.4f" % R[i, j] for j in range(3)))
ev = np.linalg.eigvalsh(R)
print(" 고윳값은 %s 입니다" % ", ".join("%.4f" % v for v in ev))
print(" 가장 작은 고윳값이 %.4f 로 음수입니다. 이런 상관행렬은 존재할 수 없습니다"
% float(ev.min()))
print(" 쌍별 제거는 각 쌍을 다른 표본에서 재므로 서로 맞지 않는 답을 모읍니다")
print(" 주성분분석이나 회귀에 넣으면 그 자리에서 계산이 깨집니다")
# --- 문제 3: 채우면 무슨 일이 생기는가 ----------------------------------
print(" 상관 0.7 인 두 변수에서 y 의 30 퍼센트를 무작위로 지우고 채워 봅니다")
n4 = 300000
rho = 0.7
xv = rng.normal(0, 1, n4)
yv = rho * xv + np.sqrt(1 - rho ** 2) * rng.normal(0, 1, n4)
miss = rng.random(n4) < 0.30
ob = ~miss
A = np.stack([np.ones(int(ob.sum())), xv[ob]], axis=1)
co = np.linalg.lstsq(A, yv[ob], rcond=None)[0]
pred = co[0] + co[1] * xv
resid = yv[ob] - (co[0] + co[1] * xv[ob])
sr = float(resid.std())
fills = {
"참값 (결측 없음)": yv,
"완전 제거": yv[ob],
"평균 대치": np.where(miss, yv[ob].mean(), yv),
"회귀 대치": np.where(miss, pred, yv),
"확률적 회귀 대치": np.where(miss, pred + rng.normal(0, sr, n4), yv),
}
print(" %s %s %s %s %s" % (pw("방법", 20), rw("표본 크기", 10), rw("평균", 10),
rw("분산", 10), rw("x 와의 상관", 14)))
for k, v in fills.items():
if len(v) == n4:
c = float(np.corrcoef(xv, v)[0, 1])
else:
c = float(np.corrcoef(xv[ob], v)[0, 1])
print(" %s %10d %10.4f %10.4f %14.4f"
% (pw(k, 20), len(v), float(v.mean()), float(v.var()), c))
print(" 평균 대치는 평균만 지키고 분산과 상관을 함께 무너뜨립니다")
print(" 분산이 참값의 %.4f 배로 줄었습니다. 결측 비율 0.30 만큼 그대로 깎였습니다"
% (float(fills["평균 대치"].var()) / float(yv.var())))
print(" 회귀 대치는 반대로 상관을 부풀립니다. 채운 점이 모두 직선 위에 놓입니다")
print(" 상관이 참값 %.4f 에서 %.4f 로 올라갔습니다"
% (float(np.corrcoef(xv, yv)[0, 1]),
float(np.corrcoef(xv, fills["회귀 대치"])[0, 1])))
print(" 잔차를 다시 더하면 분산과 상관이 함께 돌아옵니다")
print(" 그래도 한 가지가 남습니다. 채운 값을 관측한 값처럼 세면 안 됩니다")
se_true = float(yv.std()) / np.sqrt(n4)
se_cc = float(yv[ob].std()) / np.sqrt(int(ob.sum()))
se_fake = float(fills["확률적 회귀 대치"].std()) / np.sqrt(n4)
print(" %s %s %s" % (pw("평균의 표준오차", 24), rw("값", 12), rw("실제 정보량", 14)))
print(" %s %12.6f %14d" % (pw("결측이 없었다면", 24), se_true, n4))
print(" %s %12.6f %14d" % (pw("완전 제거", 24), se_cc, int(ob.sum())))
print(" %s %12.6f %14d" % (pw("대치 뒤 n 으로 계산", 24), se_fake, int(ob.sum())))
print(" 대치 뒤 표준오차가 완전 제거의 %.4f 배로 줄었습니다. 없던 정보가 생긴 셈입니다"
% (se_fake / se_cc))
print(" 다중 대치는 여러 번 채워 그 흩어짐을 불확실성에 더합니다. 그래야 구간이 맞습니다")
# --- 문제 4: 이상치를 어떻게 찾는가 -------------------------------------
print(" 표준정규 자료에 값 10 인 점을 섞고 두 방법으로 찾아봅니다")
n5 = 20000
print(" %s %s %s %s %s" % (pw("오염 비율", 10), rw("평균", 9), rw("표준편차", 10),
rw("3 시그마가 잡은 비율", 22), rw("MAD 가 잡은 비율", 18)))
for eps in [0.00, 0.01, 0.05, 0.10, 0.20]:
v = rng.normal(0, 1, n5)
k = int(n5 * eps)
v[:k] = 10.0
mu, sd = float(v.mean()), float(v.std())
d1 = np.abs(v - mu) > 3 * sd
mo = float(np.median(v))
mad = float(np.median(np.abs(v - mo))) * 1.4826
d2 = np.abs(v - mo) > 3 * mad
r1 = float(d1[:k].mean()) if k else 0.0
r2 = float(d2[:k].mean()) if k else 0.0
print(" %s %9.4f %10.4f %22.4f %18.4f" % (pw("%.2f" % eps, 10), mu, sd, r1, r2))
print(" 오염이 늘수록 3 시그마는 오히려 못 잡습니다. 이상치가 자기 기준을 넓히기 때문입니다")
print(" 이것을 가림 현상이라 부릅니다. 평균과 표준편차가 이상치에 끌려갑니다")
print(" 중앙값과 MAD 는 끌려가지 않습니다. 절반이 오염되기 전까지 버팁니다")
print(" %s %s %s" % (pw("추정량", 18), rw("붕괴점", 10), "뜻"))
for nm, bp, ex in [("평균", 0.00, "한 점이 끌고 갈 수 있습니다"),
("표준편차", 0.00, "한 점이 끌고 갈 수 있습니다"),
("10 퍼센트 절사평균", 0.10, "10 퍼센트까지 버팁니다"),
("중앙값", 0.50, "절반까지 버팁니다"),
("MAD", 0.50, "절반까지 버팁니다")]:
print(" %s %10.2f %s" % (pw(nm, 18), bp, ex))
print(" 붕괴점은 추정값을 마음대로 옮기려면 자료의 몇 할을 바꿔야 하는지입니다")
# --- 문제 5: 이상치를 어떻게 다루는가 -----------------------------------
print(" 오염된 자료에서 중심을 재는 방법 넷을 견줍니다. 참 중심은 0 입니다")
n6 = 20000
w = rng.normal(0, 1, n6)
kk = int(n6 * 0.05)
w[:kk] = 10.0
srt = np.sort(w)
t10 = float(srt[int(n6 * 0.10):n6 - int(n6 * 0.10)].mean())
lo, hi = float(np.quantile(w, 0.10)), float(np.quantile(w, 0.90))
wz = float(np.clip(w, lo, hi).mean())
print(" %s %s %s" % (pw("방법", 22), rw("추정값", 12), rw("참값 0 과의 차이", 18)))
for nm, v in [("평균", float(w.mean())), ("중앙값", float(np.median(w))),
("10 퍼센트 절사평균", t10), ("10 퍼센트 윈저화 평균", wz)]:
print(" %s %12.6f %18.6f" % (pw(nm, 22), v, abs(v)))
print(" 절사는 양끝을 버리고 윈저화는 양끝을 경계값으로 눌러 담습니다")
print(" 이상치가 한 변수만 보면 안 보이는 경우도 있습니다")
S = np.array([[1.0, 0.9], [0.9, 1.0]])
Si = np.linalg.inv(S)
pt = np.array([2.5, -2.5])
d2 = float(pt @ Si @ pt)
print(" 상관 0.9 인 두 변수에서 점 (%.1f, %.1f) 을 봅니다" % (pt[0], pt[1]))
print(" %s %s" % (pw("보는 방법", 26), rw("값", 12)))
print(" %s %12.4f" % (pw("첫 변수만 보는 표준화 값", 26), pt[0]))
print(" %s %12.4f" % (pw("둘째 변수만 보는 표준화 값", 26), pt[1]))
print(" %s %12.4f" % (pw("마할라노비스 거리", 26), np.sqrt(d2)))
print(" %s %12.4f" % (pw("거리의 제곱", 26), d2))
print(" 각 변수만 보면 2.5 라 넘길 만한데 함께 보면 거리가 %.2f 입니다" % np.sqrt(d2))
print(" 두 변수가 같이 움직이는 자료에서 반대로 움직이는 점이라 드문 것입니다")
print(" 다만 마할라노비스 거리도 공분산을 평균과 분산으로 재므로 스스로 오염됩니다")
print(" 그래서 로버스트 공분산을 먼저 구하고 거리를 재는 순서를 씁니다")
print(" 이상치를 지울지 말지는 자료가 아니라 그 값이 생긴 이유가 정합니다")
# 결측이 생기는 방식을 셋으로 나눕니다. n = 20 만 입니다
# 참 평균은 50.0168 이고 결측을 지운 뒤의 평균과 견줍니다
# 결측 방식 결측 비율 남은 값의 평균 참값과의 차이
# 완전 무작위 MCAR 0.3008 50.0159 -0.0010
# 조건부 무작위 MAR 0.3004 48.6019 -1.4150
# 무작위 아님 MNAR 0.3022 48.3360 -1.6808
# MCAR 만 편향이 없습니다. 나머지 둘은 지우는 순간 평균이 움직입니다
# MAR 은 관측된 변수로 조건을 걸면 되살릴 수 있습니다
# 보정 방법 MAR 추정 평균 MNAR 추정 평균
# 그냥 평균 48.6019 48.3360
# a 로 회귀해 보정 50.0163 49.5492
# 참값 50.0168 50.0168
# a 는 언제나 관측되므로 MAR 은 보정됩니다. MNAR 은 보정 뒤에도 남습니다
# 결측 여부가 결측된 값 자체에 달려 있으면 관측만으로는 알 길이 없습니다
# 변수마다 결측이 조금씩 있을 때 완전한 행이 얼마나 남는지 봅니다
# 변수 개수 한 변수의 결측률 완전한 행의 비율 이론 0.95^p
# 1 0.05 0.949235 0.950000
# 5 0.05 0.773800 0.773781
# 10 0.05 0.599670 0.598737
# 20 0.05 0.358485 0.358486
# 50 0.05 0.076620 0.076945
# 변수 하나마다 5 퍼센트만 비어도 50 개면 완전한 행이 8 퍼센트만 남습니다
# 쌍별 제거는 행을 지키지만 상관행렬이 모순될 수 있습니다
# 쌍마다 관측되는 행이 다를 때의 상관행렬입니다
# 1.0000 0.9033 0.9024
# 0.9033 1.0000 -0.8994
# 0.9024 -0.8994 1.0000
# 고윳값은 -0.8034, 1.8993, 1.9041 입니다
# 가장 작은 고윳값이 -0.8034 로 음수입니다. 이런 상관행렬은 존재할 수 없습니다
# 쌍별 제거는 각 쌍을 다른 표본에서 재므로 서로 맞지 않는 답을 모읍니다
# 주성분분석이나 회귀에 넣으면 그 자리에서 계산이 깨집니다
# 상관 0.7 인 두 변수에서 y 의 30 퍼센트를 무작위로 지우고 채워 봅니다
# 방법 표본 크기 평균 분산 x 와의 상관
# 참값 (결측 없음) 300000 0.0018 0.9998 0.7014
# 완전 제거 209640 0.0005 1.0003 0.7016
# 평균 대치 300000 0.0005 0.6990 0.5870
# 회귀 대치 300000 0.0018 0.8465 0.7621
# 확률적 회귀 대치 300000 0.0030 1.0008 0.7011
# 평균 대치는 평균만 지키고 분산과 상관을 함께 무너뜨립니다
# 분산이 참값의 0.6992 배로 줄었습니다. 결측 비율 0.30 만큼 그대로 깎였습니다
# 회귀 대치는 반대로 상관을 부풀립니다. 채운 점이 모두 직선 위에 놓입니다
# 상관이 참값 0.7014 에서 0.7621 로 올라갔습니다
# 잔차를 다시 더하면 분산과 상관이 함께 돌아옵니다
# 그래도 한 가지가 남습니다. 채운 값을 관측한 값처럼 세면 안 됩니다
# 평균의 표준오차 값 실제 정보량
# 결측이 없었다면 0.001826 300000
# 완전 제거 0.002184 209640
# 대치 뒤 n 으로 계산 0.001826 209640
# 대치 뒤 표준오차가 완전 제거의 0.8361 배로 줄었습니다. 없던 정보가 생긴 셈입니다
# 다중 대치는 여러 번 채워 그 흩어짐을 불확실성에 더합니다. 그래야 구간이 맞습니다
# 표준정규 자료에 값 10 인 점을 섞고 두 방법으로 찾아봅니다
# 오염 비율 평균 표준편차 3 시그마가 잡은 비율 MAD 가 잡은 비율
# 0.00 -0.0051 1.0031 0.0000 0.0000
# 0.01 0.1040 1.4042 1.0000 1.0000
# 0.05 0.5049 2.3854 1.0000 1.0000
# 0.10 0.9942 3.1468 0.0000 1.0000
# 0.20 1.9905 4.1050 0.0000 1.0000
# 오염이 늘수록 3 시그마는 오히려 못 잡습니다. 이상치가 자기 기준을 넓히기 때문입니다
# 이것을 가림 현상이라 부릅니다. 평균과 표준편차가 이상치에 끌려갑니다
# 중앙값과 MAD 는 끌려가지 않습니다. 절반이 오염되기 전까지 버팁니다
# 추정량 붕괴점 뜻
# 평균 0.00 한 점이 끌고 갈 수 있습니다
# 표준편차 0.00 한 점이 끌고 갈 수 있습니다
# 10 퍼센트 절사평균 0.10 10 퍼센트까지 버팁니다
# 중앙값 0.50 절반까지 버팁니다
# MAD 0.50 절반까지 버팁니다
# 붕괴점은 추정값을 마음대로 옮기려면 자료의 몇 할을 바꿔야 하는지입니다
# 오염된 자료에서 중심을 재는 방법 넷을 견줍니다. 참 중심은 0 입니다
# 방법 추정값 참값 0 과의 차이
# 평균 0.507307 0.507307
# 중앙값 0.080307 0.080307
# 10 퍼센트 절사평균 0.097723 0.097723
# 10 퍼센트 윈저화 평균 0.116173 0.116173
# 절사는 양끝을 버리고 윈저화는 양끝을 경계값으로 눌러 담습니다
# 이상치가 한 변수만 보면 안 보이는 경우도 있습니다
# 상관 0.9 인 두 변수에서 점 (2.5, -2.5) 을 봅니다
# 보는 방법 값
# 첫 변수만 보는 표준화 값 2.5000
# 둘째 변수만 보는 표준화 값 -2.5000
# 마할라노비스 거리 11.1803
# 거리의 제곱 125.0000
# 각 변수만 보면 2.5 라 넘길 만한데 함께 보면 거리가 11.18 입니다
# 두 변수가 같이 움직이는 자료에서 반대로 움직이는 점이라 드문 것입니다
# 다만 마할라노비스 거리도 공분산을 평균과 분산으로 재므로 스스로 오염됩니다
# 그래서 로버스트 공분산을 먼저 구하고 거리를 재는 순서를 씁니다
# 이상치를 지울지 말지는 자료가 아니라 그 값이 생긴 이유가 정합니다