★ 최종 프로젝트 - FDA 이상반응 데이터 활용한★

[QA/QC - 5기] 77일차 - 최종 프로젝트 +04 : MCAR,MAR,MNAR / 목적 구체화

qc-standard 2026. 6. 26. 21:22

2026/06/26 FRI

데이터 전처리

 최종 프로젝트 - 데이터 전처리

    - 전날 세운 6/26 데이터 전처리 계획

 pharm_class : FDA 분류 컬럼 제거/유지에 대한 논의
unknown 표시 데이터 결측값을 → np.nan으로 변경에 대한 논의

 

 

    - 전처리 하다보니...



1개 행에 unknown(결측치)이 최대 9개까지 있다는 것을 알게 되었음

 한 행에 'unknown' 개수 계산 → <5 미만 행만 남기기

# 각 행(axis=1)별로 'Unknown' 또는 'unknown' 값을 가진 컬럼의 개수를 계산
unknown_count = dfc.isin(['Unknown', 'unknown', 'UNKNOWN']).sum(axis=1)

# 2. 진짜 결측치(NaN) 개수 카운트
nan_count = dfc.isna().sum(axis=1)

# 3. 두 '알 수 없는 값'의 합이 5개 미만인 행만 남기기 → 5개를 남기고 편향 확인
mask = (unknown_count + nan_count) < 5
dfc = dfc[mask].reset_index(drop=True)

print(f"<5 조건 적용 후 데이터 형태: {dfc.shape}")




한 행에 'unknown' 개수 계산 → <5 미만 행만 남기기

# 각 행(axis=1)별로 'Unknown' 또는 'unknown' 값을 가진 컬럼의 개수를 계산
unknown_count = dfc.isin(['Unknown', 'unknown', 'UNKNOWN']).sum(axis=1)

# 2. 진짜 결측치(NaN) 개수 카운트
nan_count = dfc.isna().sum(axis=1)

# 3. 두 '알 수 없는 값'의 합이 4개 미만인 행만 남기기 → 4개를 남기고 편향 확인
mask = (unknown_count + nan_count) < 4
dfc = dfc[mask].reset_index(drop=True)

print(f"<4 조건 적용 후 데이터 형태: {dfc.shape}")


 unknown <5 미만 행 데이터 정제 → EDA









   <4 : 너무 많은 데이터 소실

   <5 : 전체 데이터의 8~10% 로 적절

 




○ <5개, <4개 기준으로 데이터 정제 후
   → 남은 unknown 처리에 대한 논의

 MCAR - 완전 무작위 결측 - 결측에 이유 없이 누락 : 지워도 됨
MAR - 무작위 결측 - 데이터 간 연관있으나 누락 : 다른 컬럼값을 힌트 삼아 회귀 분석으로 대치(imputation)
MNAR - 비무작위 결측 - 결측 자채에 이유 있는 누락 : 값 누락 자체를 하나의 정보로 인정하고 결측 여부를 이진 분류 컬럼을 새로 만들어 모델에 학습
   (값을 지우거나(Drop) 대치하면 데이터 왜곡됨)
   (빈칸, 결측치로 놔두면 연산을 하지 못하므로 unknown은 중앙값 또는 평균값으로 대치하고 unknown : 1 / 정상데이터 : 0으로 이진 분류한 새로운 컬럼을 옆에 둔다.... 이진 분류 컬럼의 1이 대치된 값임을 알려주는 힌트 )

 

이렇게 하면 될 줄 알았는데;;;

 

춘튜터님 피드백

"목적이 구체적이지 않아 데이터 의미, 필요한 컬럼이 무엇인지 헤매고 있는 듯하다"

+ 지금과 같은 방식으로 하면 공허해서 지치기 쉬움

+ 구체적 목적과 가설이 없어 필요한 컬럼이 무엇인지 같은 말만 하는 중

+ 데이터로 부터 얻을 수 있는 인사이트를 뜯어보는 것을 추천

+ KPI와 목표 연결이 중요

+ 코로나 맵처럼 정보 제공이라는 방향성은 문제가 없으나 구체화할 목표 부족으로 보임

 

 

○ 피드백을 반영하고자 원본 데이터 페이지 확인

https://open.fda.gov/apis/drug/event/

 

의약품과 이상반응 사이 인과관계를 확신할 수 없다

    → 기존 기획서 "처방  의사결정을 지원한다"를 할 수 없게 됨

 

시간적 특성(보고 시기) + 화학적 특성(약품) + 사람 특징 (나이, 몸무게 등)이 있음

  → 이상 반응(부작용) 발생 패턴을 예측 가능하지 않을까?

(is_)를 이용해 이상사례 패턴 발견/예측
→ 화학적 사람졀 시간적? 특성 간의 통계적 유의미 확인?
→ 이상 사례 정보 제공

 

 데이터의 화학적 특성(약품)과 더불어 +a 데이터 응용해 또 다른 예측 가능하지 않을까?