결측·중복·변환의 판단
이 토픽을 마치면
결측값, 중복 행, 단위 변환을 서로 다른 데이터 품질 문제로 구분할 수 있습니다. 관측된 표만으로 MCAR·MAR·MNAR을 단정하지 않고, 어떤 처리 가정을 사용했는지 기록하는 방법을 익힙니다.
출발점: 빈칸 하나는 무엇을 뜻하는가
표의 빈칸은 측정 실패, 아직 측정하지 않음, 해당 없음, 입력 누락을 모두 표현할 수 있습니다. 숫자 0도 측정된 0일 수 있고, 측정하지 못한 값을 임의로 0으로 채운 것일 수 있습니다. 따라서 결측 처리는 빈칸을 없애는 작업이 아니라, 값이 없는 이유와 분석에서의 역할을 확인하는 작업입니다.
결측·중복·단위 오류를 분리하기
결측
결측은 기대한 값이 기록되지 않은 상태입니다. 결측의 발생 이유를 모르면 단순 대체가 연구 질문을 바꿀 수 있습니다. 관측된 데이터만으로 결측 메커니즘을 확정하지 않고, 측정 로그와 수집 절차를 확인합니다.
중복
중복은 같은 행이 반복됐다는 뜻일 수도 있지만, 같은 ID에 여러 시점의 정당한 관측이 들어간 것일 수도 있습니다. unit_id가 중복된다는 사실만으로 행을 삭제하지 않습니다. 예상되는 관측 단위·시점·반복 키를 기준으로 중복 여부를 정의합니다.
변환
변환은 단위 변경, 로그 변환, 정규화, 범주화처럼 값의 표현이나 스케일을 바꾸는 작업입니다. 변환 전후의 의미와 적용 시점을 기록하지 않으면, 결과를 원래 단위로 되돌리거나 다른 분석과 비교하기 어렵습니다.
Python으로 상태를 먼저 세기
import pandas as pd
missing = data.isna().sum()duplicate_key = data.duplicated( subset=["condition", "outcome"], keep=False)profile = pd.DataFrame({ "missing": missing, "dtype": data.dtypes.astype(str),})print(profile)print("candidate duplicate rows:", int(duplicate_key.sum()))isna()는 결측으로 표현된 값을 세지만, 결측이 왜 발생했는지는 알려주지 않습니다. duplicated() 역시 지정한 열 조합이 반복되는 후보를 표시할 뿐, 그 행이 잘못된 복제인지 정당한 반복인지 판정하지 않습니다. 분석 단위와 반복 키를 먼저 정의하고 subset을 선택해야 합니다.
결측 가정을 기록하기
결측을 처리할 때 다음을 구분합니다.
- 결측 비율: 어느 열과 단위에서 얼마나 비었는가
- 발생 과정: 측정·전송·필터링 중 어디에서 생겼는가
- 분석 가정: 어떤 값의 부재가 결과와 어떻게 연결될 수 있는가
- 처리 규칙: 제외, 대체, 별도 범주, 모델 기반 처리 중 무엇을 했는가
- 민감도: 다른 합리적 처리에서 결론이 얼마나 달라지는가
MCAR, MAR, MNAR이라는 이름을 붙이는 것만으로 가정이 증명되지는 않습니다. 데이터에 보이는 패턴과 수집 과정의 지식을 구분하고, 확인하지 못한 부분은 불확실성으로 남깁니다.
처리 전후를 비교하는 기록
결측이나 중복을 처리한 뒤에는 원자료의 행 수를 조용히 바꾸지 않고, 다음과 같은 요약을 남깁니다.
| 항목 | 처리 전 | 처리 후 | 판단 근거 |
|---|---|---|---|
| 전체 행 수 | schema의 분석 단위 | ||
| 결측 outcome | 측정 로그 확인 여부 | ||
| 중복 후보 | 중복 키 정의 | ||
| 제외 행 | 사전 규칙 또는 오류 기록 | ||
| 변환 열 | 변환식·단위·버전 |
처리 후 행 수가 줄었다면 어느 단위가 사라졌는지 확인합니다. 특정 조건이나 batch에서 결측이 더 많이 줄었다면, 제외가 결과의 비교 구조를 바꿀 수 있습니다. 이때 “결측을 제거했으니 깨끗해졌다”고 표현하지 않고, 어떤 관측이 어떤 이유로 분석에서 빠졌는지 보고합니다.
하나의 처리법을 정답으로 만들지 않기
결측을 제외할지 대체할지, 중복 후보를 유지할지 제거할지는 데이터 생성 과정과 질문에 따라 달라집니다. 처리 규칙을 결정하기 전에 최소한 다음 두 가지를 구분합니다.
- 데이터 오류를 수정하는 규칙: 입력·단위·ID의 잘못을 바로잡는 일
- 분석 가정을 추가하는 규칙: 관측되지 않은 값을 특정 방식으로 다루는 일
첫 번째도 근거와 원본 보존이 필요하고, 두 번째는 결과의 불확실성에 영향을 줄 수 있으므로 더 명시적인 가정 기록이 필요합니다. 같은 데이터에 서로 다른 합리적 처리 규칙을 적용했을 때 해석이 달라진다면, 그 차이를 숨기지 않고 민감도 결과로 남깁니다.
변환은 provenance의 일부다
예를 들어 밀리미터를 마이크로미터로 바꿨다면 변환식, 원 단위, 새 단위, 적용 열과 버전을 기록합니다. 로그 변환처럼 값의 해석과 분포를 바꾸는 작업은 0 처리 규칙과 역변환 가능성도 함께 남겨야 합니다.
원본 열을 덮어쓰지 않고 value_raw, value_transformed처럼 분리하면, 계산 오류를 추적하고 변환 전후를 비교할 수 있습니다. 어떤 변환을 선택했다는 사실 자체가 연구 질문과 데이터 생성 과정에 대한 판단이므로, 결과만 남기지 않습니다.
처리 규칙을 코드와 함께 고정하기
판단을 문장으로만 남기면 나중에 같은 규칙을 다시 적용하기 어렵습니다. 코드에서는 처리 전 행 수와 처리 후 행 수, 열별 결측 수, 중복 후보의 기준을 명시적으로 출력합니다. 처리 결과를 원본 파일에 덮어쓰지 않고 새 산출물로 저장하면, 오류가 생겼을 때 어느 단계에서 값이 달라졌는지 비교할 수 있습니다.
예를 들어 outcome 결측을 제외한다고 해도, 다음 두 문장은 서로 다른 작업입니다.
drop rows where outcome is missing
drop rows where any field is missing첫 번째는 outcome을 계산할 수 없는 행만 제외하지만, 두 번째는 분석에 필요한 맥락 열이 비어 있는 행까지 제거합니다. 어떤 규칙을 적용했는지 쓰지 않으면 결과 표의 행 수만으로 처리 내용을 재구성할 수 없습니다.
변환 전후의 단위와 해석
단위 변환은 숫자만 바꾸는 것이 아니라 결과가 읽히는 단위를 바꿉니다. 로그 변환은 값의 차이를 원래 단위의 차이와 같은 방식으로 읽지 않게 만들 수 있습니다. 따라서 변환 후 평균이나 산포를 보고할 때는 “어느 척도에서 계산한 값인가?”를 함께 적습니다.
범주화도 변환입니다. 연속적인 측정값을 임계값으로 두 그룹으로 바꾸면 경계 근처의 정보가 사라지고, 임계값 선택이 결과에 영향을 줄 수 있습니다. 이 편에서는 어떤 변환을 해야 한다는 처방을 제시하지 않고, 변환의 목적·규칙·영향을 기록해야 한다는 원칙을 적용합니다.
검수 가능한 데이터 품질 기록
품질 점검 결과는 다음 세 층으로 나누면 읽기 좋습니다.
- 관찰:
outcome에 3개의 결측 후보가 있었다. - 판단: 측정 로그를 확인하지 못해 원인을 확정하지 않았다.
- 처리: 본 분석에서는 제외하고, 제외 전후 행 수를 manifest에 기록했다.
관찰과 판단을 섞지 않으면, “결측이 무작위였다”처럼 근거가 부족한 문장을 피할 수 있습니다. 후속 분석에서 다른 처리 규칙을 선택하더라도 원래 관찰과 처리 이력을 비교할 수 있습니다.
연구 질문으로 돌아가 해석하기
결측·중복·변환을 점검한 뒤에도 데이터가 완전해지는 것은 아닙니다. 다만 어떤 값이 실제 측정이고 어떤 값이 처리 결과인지, 어떤 행이 분석 단위인지 더 명확해집니다. 이 정보가 없으면 평균이나 모델 결과가 어느 입력에 의존하는지 설명하기 어렵습니다.
결측 처리의 선택은 결과의 불확실성에 영향을 줄 수 있습니다. 따라서 처리 방법을 숨기지 않고, 연구 질문에 필요한 관측 단위와 함께 보고합니다.
데이터 품질 작업의 목표는 분석에 불편한 값을 모두 없애는 것이 아닙니다. 값의 생성 경로와 관측 단위를 보존하면서, 어떤 자료가 질문에 실제로 사용됐는지 설명하는 것입니다. 처리 후 표가 더 정돈돼 보여도, 특정 조건의 관측이 체계적으로 빠졌다면 비교의 의미가 달라질 수 있습니다.
자주 생기는 실패와 점검법
- 결측을 모두 0으로 바꾸지 않습니다.
- ID 중복을 곧바로 행 중복으로 간주하지 않습니다.
- 변환된 값만 남기고 원본 단위를 버리지 않습니다.
- 결측 패턴을 보고 MCAR·MAR·MNAR을 확정하지 않습니다.
- 처리 규칙을 결과 표에만 적고 provenance에서 누락하지 않습니다.
핵심 정리
- 결측은 값이 없다는 상태이지, 그 원인을 알려주는 표지가 아닙니다.
- 중복은 분석 단위와 반복 키를 정의한 뒤 판정해야 합니다.
- 변환은 값의 표현뿐 아니라 해석과 provenance를 바꿉니다.
- MCAR·MAR·MNAR은 가정이며 관측표 하나로 자동 확정되지 않습니다.
- 처리 전후, 규칙, 버전을 함께 기록해야 결과를 재검토할 수 있습니다.
다음 토픽으로
이제 데이터의 형태와 품질을 확인했으므로, 다음 모듈에서는 확률모형과 데이터 생성 과정을 다룹니다. 관측값이 어떤 구조에서 나올 수 있는지 질문을 확장합니다.
참고 자료
- pandas User Guide: https://pandas.pydata.org/docs/user_guide/index.html
- ASA GAISE Reports: https://www.amstat.org/education/guidelines-for-assessment-and-instruction-in-statistics-education-%28gaise%29-reports
본 편의 표, 코드, 처리 질문은 BioStatPy가 독립적으로 작성한 교육용 구성입니다.