Missing Data Imputation

Worked Example · Exploration

Worked Example: Missing Data Imputation

12 sections

01예제로 들어가기

오존 농도가 비어 있는 날은 어떻게 처리해야 할까?

매일 기온과 풍속은 기록됐지만 일부 날짜의 오존 농도와 태양복사량이 비어 있다고 가정해 보겠습니다. 결측값이 있는 행을 모두 삭제하면 사용할 수 있는 날짜가 줄어들고, 남은 날짜만으로 계산한 결과가 원래 계절 패턴을 제대로 대표하지 못할 수도 있습니다. 그렇다고 빈칸을 아무 값으로 채우면 분포와 변수 사이의 관계가 왜곡될 수 있습니다.

결측치 대체는 단순히 빈칸을 없애는 작업이 아닙니다. 왜 값이 빠졌는지 확인하고, 관측된 데이터가 제공하는 정보를 이용해 불확실성을 가능한 한 보존하는 과정입니다.

이번 예제에서 확인할 질문은 다음과 같습니다.

airquality의 결측값은 어디에 얼마나 있으며, 평균 대체를 적용했을 때 분포와 변수 사이의 관계는 얼마나 달라질까? 이후 분석에 그대로 사용해도 괜찮을까?

예제 데이터: airquality

분석에는 R의 datasets::airquality 데이터를 사용했습니다. 1973년 5월부터 9월까지 153일의 대기질과 기상 측정값이 들어 있습니다.

변수의미결측 수
Ozone평균 오존 농도(ppb)37
Solar.R태양복사량(Langley)7
Wind평균 풍속(mph)0
Temp일 최고기온(°F)0
Month관측 월(5~9월)0
Day관측일0

전체 데이터는 153행 × 6열이며 총 918개 셀 가운데 44개가 비어 있습니다. 결측률은 전체 셀 기준 4.8%이지만, 변수별로 보면 Ozone의 결측률이 24.2%로 훨씬 높습니다.

02요약: 핵심 발견

결과 요약: 관측값 153개, 결측 셀 44개, 결측률 4.8%, 완전성 95.2% (실제 결과 화면)
결과 요약: 관측값 153개, 결측 셀 44개, 결측률 4.8%, 완전성 95.2% (실제 결과 화면)
  • 전체 결측: 918개 셀 가운데 44개가 결측이어서 데이터 완전성은 95.2%입니다.
  • 결측 변수: Ozone 37개(24.2%), Solar.R 7개(4.6%)에만 결측값이 있습니다.
  • 결측 행: 42행(27.5%)에 하나 이상의 결측값이 있으며 완전한 행은 111개입니다.
  • 결측 메커니즘: Little의 MCAR 검정은 χ² = 35.06, df = 14, p = .0014로 MCAR 가정을 기각했습니다.
  • 현재 대체 방법: 두 변수 모두 관측값의 평균으로 결측값을 채웠습니다.
  • Ozone 변화: 평균은 42.129로 유지됐지만 중앙값은 31.5에서 42.129로 이동하고 SD는 13.0% 감소했습니다.
  • Solar.R 변화: 평균은 185.932로 유지됐고 SD는 90.058에서 87.960으로 2.3% 감소했습니다.
  • 최종 판단: Solar.R에는 영향이 비교적 작지만, 결측률이 높은 Ozone에 단일 평균 대체를 사용하는 것은 권장하기 어렵습니다.

전체 결측률 4.8%만 보면 문제가 작아 보이지만, 이 값은 결측이 없는 네 변수까지 분모에 포함한 평균입니다. 실제로 분석에서 중요한 Ozone은 거의 네 값 중 하나가 비어 있으므로 변수별 결측률과 결측 패턴을 따로 봐야 합니다.

03결과 1. 결측값은 어디에 얼마나 있었을까?

열별 결측 현황: Ozone 37개·24.2%, Solar.R 7개·4.6%, 나머지 변수 0개 (실제 결과 화면)
열별 결측 현황: Ozone 37개·24.2%, Solar.R 7개·4.6%, 나머지 변수 0개 (실제 결과 화면)

결측값 44개는 Ozone과 Solar.R 두 열에만 집중되어 있습니다.

결측 패턴행 수전체 행 대비
결측 없음11172.5%
Ozone만 결측3522.9%
Solar.R만 결측53.3%
두 변수 모두 결측21.3%
하나 이상 결측4227.5%

셀 기준 결측률은 4.8%지만 행 기준으로는 27.5%입니다. 완전 사례만 사용하면 153일 중 42일이 제외되고 111일만 남습니다. 이는 단순히 표본 수가 줄어드는 문제를 넘어, 결측이 특정 월에 집중되어 있다면 계절 구성이 달라질 수 있다는 뜻입니다.

04결과 2. 결측은 완전히 무작위로 발생했을까?

결측 패턴과 Little의 MCAR 검정: 완전 사례 111개, 결측 행 42개 (실제 결과 화면)
결측 패턴과 Little의 MCAR 검정: 완전 사례 111개, 결측 행 42개 (실제 결과 화면)

Little의 MCAR 검정은 결측 여부가 관측된 값과 관련 없이 완전히 무작위로 발생했다는 가정을 확인합니다.

통계량결과
χ²35.06
자유도14
p값.0014
판단MCAR 가정 기각

p = .0014이므로 이 데이터의 결측 패턴은 완전무작위 결측과 양립하기 어렵습니다. 실제로 Ozone 결측률은 6월에 70.0%로 매우 높았습니다.

Month관측일Ozone 결측결측률
5월31516.1%
6월302170.0%
7월31516.1%
8월31516.1%
9월3013.3%

이는 결측이 관측된 Month 정보와 관련될 가능성을 보여줍니다. 따라서 월·기온·풍속 같은 관측 정보를 활용하는 MAR 기반 방법이 단순 평균보다 적절할 수 있습니다.

다만 Little 검정의 기각만으로 결측이 MAR라고 확정할 수는 없습니다. 관측되지 않은 실제 오존 농도 자체가 결측 가능성과 관련된 MNAR일 수도 있으므로, MAR와 MNAR는 연구 맥락과 민감도 분석을 통해 구분해야 합니다.

05결과 3. 평균 대체는 어떤 방식으로 이루어졌을까?

현재 설정은 각 변수에서 관측된 값의 평균을 계산한 뒤 모든 결측 위치에 같은 평균을 넣는 단일 대체입니다.

xi,missingxˉobservedx_{i,\text{missing}} \leftarrow \bar{x}_{\text{observed}}
결측 위치마다 관측값의 평균을 대신 채워 넣습니다

따라서 Ozone의 37개 빈칸에는 모두 42.129가, Solar.R의 7개 빈칸에는 모두 185.932가 들어갑니다.

평균 대체의 장점은 계산이 단순하고 모든 행을 유지할 수 있다는 것입니다. 그러나 같은 값을 반복해서 넣기 때문에 다음 문제가 생깁니다.

  • 대체 후 평균은 원래 관측 평균과 동일하게 유지됩니다.
  • 평균 주변에 인위적인 관측값이 몰립니다.
  • 표준편차와 분산이 작아집니다.
  • 다른 변수와의 공분산·상관이 약해질 수 있습니다.
  • 대체값의 불확실성을 0으로 취급해 표준오차가 과소평가될 수 있습니다.

평균이 바뀌지 않았다는 사실은 대체가 잘됐다는 증거가 아닙니다. 평균 대체는 원래부터 평균을 보존하도록 만들어진 방법이기 때문입니다.

06결과 4. 대체 전후 분포는 얼마나 달라졌을까?

대체 전후 평균·SD·중앙값 비교 (실제 결과 화면)
대체 전후 평균·SD·중앙값 비교 (실제 결과 화면)
변수대체 수이전 평균이후 평균이전 SD이후 SD이전 중앙값이후 중앙값
Ozone3742.12942.12932.98828.69331.50042.129
Solar.R7185.932185.93290.05887.960205.000194.000

Solar.R은 결측률이 4.6%로 낮아 평균 대체 후 SD가 2.3% 감소했습니다. 영향이 비교적 작지만, 대체값의 불확실성을 반영하지 못한다는 문제는 남습니다.

Ozone은 결측률이 24.2%이므로 영향이 훨씬 큽니다. SD가 13.0% 감소했고, 중앙값은 31.5에서 대체 평균인 42.129로 이동했습니다. 관측된 Ozone 분포는 오른쪽으로 긴 형태인데 평균값 37개가 추가되면서 중심부에 인위적인 봉우리가 만들어진 결과입니다.

화면의 안정성 기준을 통과하더라도 분포가 보존됐다고 단정할 수 없습니다. 평균 변화율과 SD 변화율만으로는 중앙값 이동, 왜도 변화, 인위적인 값의 집중을 확인할 수 없기 때문입니다.

07결과 5. 그래프에서는 어떤 문제가 보일까?

열별 결측률과 Ozone 대체 전후 분포 (실제 결과 화면)
열별 결측률과 Ozone 대체 전후 분포 (실제 결과 화면)

결측률 그래프에서는 Ozone만 20%를 크게 넘고 Solar.R은 5% 미만입니다. 두 변수에 같은 대체 방법을 일괄 적용하기보다 결측률과 분포에 따라 방법을 달리 검토해야 합니다.

대체 후 Ozone 히스토그램에서는 평균 42.129 부근의 막대가 갑자기 높아집니다. 이는 실제로 그 농도가 반복 측정된 것이 아니라 37개 결측값을 모두 같은 값으로 채운 결과입니다.

좋은 대체 결과는 단순히 원래 히스토그램과 완전히 같아야 한다는 뜻은 아닙니다. 결측값에는 실제로 알 수 없는 불확실성이 있기 때문입니다. 그러나 한 값에 과도하게 몰리거나 원래 산포가 크게 줄어드는 현상은 단일 평균 대체가 정보를 과도하게 단순화했다는 경고입니다.

08결과 6. 평균 대체는 변수 사이의 관계에도 영향을 줄까?

평균 대체는 대체된 행에서 Ozone의 편차를 0으로 만듭니다. 그 결과 Temp, Wind, Solar.R처럼 오존과 관련된 변수와의 상관이 원점 쪽으로 약해졌습니다.

관계관측값 기준 상관평균 대체 후 상관
Ozone–Temp0.6980.609
Ozone–Wind−0.602−0.531
Ozone–Solar.R0.3480.303

평균 대체 후에도 관계의 방향은 같지만 절댓값이 작아졌습니다. 이후 회귀분석이나 상관분석에서는 효과가 실제보다 약하게 보일 수 있으며, 표준오차도 적절히 반영되지 않습니다.

따라서 결측치 대체의 품질은 평균과 분산뿐 아니라 주요 변수 사이의 관계가 얼마나 보존되는지까지 확인해야 합니다.

09결과 7. 이 데이터에는 어떤 대체 방법이 더 적절할까?

Solar.R은 결측률이 낮기 때문에 분석 목적에 따라 중앙값·회귀·다중대체 등 여러 방법에서 결과 차이가 작을 수 있습니다. 그러나 Ozone은 결측률이 높고 결측이 월별로 불균형하게 나타나므로 평균 대체를 최종 분석용으로 사용하기 어렵습니다.

분석 목적권장 접근
빠른 화면 미리보기평균 또는 중앙값 대체를 임시 표시하되 경고 제공
기술통계·상관·회귀 추론MICE 또는 예측평균매칭(PMM) 다중대체
예측모형학습 데이터 안에서 k-NN·회귀·반복 대체를 적합하고 검증 데이터에 적용
Ozone이 결과변수인 분석단순 평균으로 결과값을 채우지 말고 관측 결과 분석 또는 다중대체 검토
MNAR 가능성이 중요한 분석결측값 시나리오를 바꾼 민감도 분석

airquality에서는 Temp, Wind, Solar.R, Month, Day를 대체모형의 예측 정보로 사용할 수 있습니다. 특히 Ozone 결측이 6월에 집중되어 있으므로 Month를 무시한 전체 평균 대체보다 월과 기상 조건을 반영하는 방법이 적절합니다.

다중대체는 여러 개의 가능한 완성 데이터셋을 만들고 각각 분석한 뒤 결과를 통합합니다. 이 방식은 하나의 대체값을 사실처럼 취급하지 않고 결측값의 불확실성을 분석 결과에 반영할 수 있습니다.

10이 예제의 결론

airquality에는 총 44개의 결측 셀이 있으며 Ozone 37개와 Solar.R 7개에 집중되어 있습니다. 전체 셀 기준 결측률은 4.8%지만 Ozone만 보면 24.2%이며, 결측 행은 전체의 27.5%입니다.

Little의 MCAR 검정이 유의했고 6월 Ozone 관측치의 70.0%가 결측인 것은 결측이 완전히 무작위가 아닐 가능성을 보여줍니다. 평균 대체는 두 변수의 평균을 유지했지만 Ozone의 중앙값을 31.5에서 42.129로 바꾸고 SD를 13.0% 줄였으며, 기온·풍속과의 상관도 약화시켰습니다.

한 문장으로 정리하면

airquality의 평균 대체는 빈칸을 제거했지만 결측률이 높은 Ozone의 분포와 변수 관계를 왜곡하므로, 월과 기상 정보를 활용한 다중대체 또는 예측 기반 대체가 더 적절합니다.

11다음으로 확인하면 좋은 것

  • 월별 결측 패턴 — Ozone 결측이 6월에 집중된 이유를 자료 수집 과정과 함께 확인합니다.
  • 대체 방법 비교 — 평균·중앙값·k-NN·MICE 결과의 분포와 상관을 비교합니다.
  • 다중대체 진단 — 대체값과 관측값의 분포, 반복 간 수렴과 Monte Carlo 오차를 확인합니다.
  • 민감도 분석 — MAR와 MNAR 시나리오에서 결론이 유지되는지 비교합니다.
  • 후속 분석 재실행 — 각 대체 방법으로 상관·회귀 결과가 얼마나 달라지는지 확인합니다.
  • 재현 가능한 기록 — 대체 변수·방법·반복 수·시드와 제외 기준을 보고서에 남깁니다.

12출처

  • 데이터: airquality_statistica.csv
  • 원자료: datasets::airquality
  • 분석 범위: 153행 × 6열, 결측 셀 44개, 평균 대체 변수 2개
    Skari — AI Statistical Analysis Platform