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

[QA/QC - 5기] 76일차 - 최종 프로젝트 시!작!(사실 화요일에 시작했지만ㅎ)

qc-standard 2026. 6. 25. 21:11

2026/06/25 THU

식스시그마 시험 (합격 시 자격증 발급까지)
O 최종 프로젝트 - 데이터 전처리

 식스시그마 시험

결과론적으로 식스시그마 합격했다

근데,,, 자격증 발급 비용이 이게 맞나? 싶어 발급은 보류 중이다

일주일 정도 시간이 주어졌으니 다른 자격증 공부하면서 생각을 해봐야겠다,,, 있으면 괜찮은 자격증인지에 대해

그래서 오늘 계획은 발급까지 였으나 발급까지 마무리하지 못해

 


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

<2026/06/23 최종 프로젝트 시작>

제약, 바이오 분야에서 시계열 특성을 가진 데이터를 활용하는게 어떻겠냐는 의견이 모아졌다.


후보 1. 콜레스테롤 저하제 제조 및 품질 데이터

 

<2026/06/24 최종 프로젝트 Day +02>

제약, 바이오 분야 공정 + 시계열 데이터를 찾기 쉽지 않았다.
기획서에 언급되지 않았지만 제약, 바이오 QAQC 분야로 접근할 수 있는 데이터 대신 데이터 분석에 집중해 높은 완성도의 결과물을 만들어 보는건 어떠냐는 의견이 모아졌다.
  공정 순서, 시스템적 요소는 없지만 다양한 컬럼이 존재해 분석 과정에서 많은 인사이트를 얻을 수 있을 것 같은 "후보 2. FDA 의약품 부작용 보고서"로 데이터 선정을 마무리하였다
이 데이터의 단점?은 목적값?이 없다는 것이다.
   여태까지 프로젝트를 진행하며 달성한적은 없는거 같지만 데이터 분석을 통한 목적 달성을 목표로 해왔다
   그러나 이번에는 그 목적이 뚜렷하게 없다는 것이다
   이전 프로젝트는 목적 지향적 그러니까 Top Down Approach 였다면 (하향식 분석 : 문제 탐색 - 문제 정의 - 해결방안 탐색 - 타당성 검토)
   이번 프로젝트는 해본적 없는 데이터 지향적 방식, Botton Up Approach(상향식 분석 : 가설 수립 - 설계 - 실험 - 테스트(평가) 및 문제정)
 데이터 이해,,, 0도 못했는데 나,,, 이번 분석 무임승차 하지 않고 할 수 있을까?!


<2026/06/25 최종 프로젝트 Day +03>

(528000, 30) → 방대한 데이터,,,
   컬럼만 30개, 528,000행... 11년이라는 기간을 생각하면 평이한건가?

 

   FAERS 데이터 파악 및 전처리

더보기

데이터 파악


○ 2015년 1월 ~ 2025년 12월 : 11년간 FDA에 보고된 약물 보고서 : 528,000 row X 30 column
○ 컬럼
  1. report_id : FDA 안전 보고서 고유 식별자
  2. receive_date : FDA가 보고서를 접수한 날짜
  3. year : 보고 연도 (2015~2025)
  4. month : 보고 월 (1~12)
  5. quarter : 보고서 분기 (예: 2021년 3분기)
  6. serious : 해당 사건이 심각했는지 여부 (예/아니오)
  7. serious_flags : 구체적인 심각도 범주(사망, 입원 등)
  8. is_fatal : 해당 사건으로 인해 사망이 발생한 경우 참입니다.
  9. is_hospitalized : 환자가 입원한 경우 참입니다.
  10. is_life_threat : 해당 사건이 생명을 위협하는 경우라면 참입니다.
  11. is_disabling : 해당 사건이 장애를 유발한 경우 참입니다.
  12. reactions : 보고된 모든 MedDRA 반응 (세미콜론으로 구분, 최대 5개)
  13. primary_reaction : 최초/주요 반응 보고
  14. reaction_outcomes : 반응별 환자 결과
  15. patient_recovered : 환자가 완치되었거나 회복 중인 경우 참입니다.
  16. num_reactions : 보고된 반응의 총 수
  17. suspect_drug : 의심되는 약물의 일반명
  18. brand_name : 의심되는 약물의 브랜드/상품명
  19. drug_route : 투여 경로 (경구, 정맥 주사 등)
  20. drug_indication : 이 약은 다음과 같은 질병 치료를 위해 처방되었습니다.
  21. manufacturer : 의약품 제조업체명
  22. pharm_class : FDA 분류
  23. num_drugs : 환자가 복용한 총 약물 수
  24. drug_count_category : 다약물 복용자용 분류함 (1가지 / 2-3가지 / 4-5가지 / 6가지 이상)
  25. patient_age_years : 환자 연령을 연 단위로 표준화함
  26. age_group : 연령대(영유아/어린이/청소년/성인/중년/노년/고령자)
  27. patient_sex : 환자 성별 (남성/여성/미상)
  28. patient_weight_kg : 환자의 체중(킬로그램)
  29. country : 사건 발생 국가(ISO 코드)
  30. report_age_days : 보고서 접수 후 경과 일수 (2026년 3월 28일 기준

 

 데이터 전처리




















○ .info()  |  issnull().sum()   무슨 일이죠?


○ 컬럼은 왜 중간에 잘리는 거죠?


# 생략되는 부분 없이 다 볼 수 있게 설정
pd.set_option('display.max_columns', None)

# (선택 사항) 컬럼 안의 내용이 길어서 잘릴 경우, 아래 설정도 추가
# pd.set_option('display.max_colwidth', None)

# 다시 확인
df.head(10)



○ 생략된 컬럼없이 볼 수 있게 됨

1. report_id : FDA 고유 식별자 를 통해 얻을 정보 있을까? → 1. 제거
2. receive_date에 3. year + 4. month + 5. quarter의 내용이 있으므로 3. 4. 5. 제거


  seriouse_flags의 값 Array(배열)을 살펴보면 'is_' 컬럼들과 중복? 겹치는 내용이므로
     'is_' 컬럼에 없는 Congenital Anomaly(선천적 기형)을 'is_Anomaly' 컬럼으로 생성하고
     → 7. 'seriouse_flags' 제거


○ 12. reactions 컬럼의 첫번째 부분이 13. primary_reaction이므로 중복되는 내용이어서 → 13. 제거
○ 21. manufacturer : 해당 의약품 만든 제조사  부작용 판단과 관계 없으므로
   (우리가 목표?로 하는 웹페이지의 구상안에도 전혀 필요없으므로)
→ 21. 제거
○ 25. patient_age_years 와 26. age_group 중복되는 내용으로 → 26. 제거

○ 30. report_age_days : 2026년 기준 보고서 접수 후 경과 일수  는 이미 보고서 날짜가 있으므로 → 30. 제거
 
  1. report_id : FDA 안전 보고서 고유 식별자
  2. receive_date : FDA가 보고서를 접수한 날짜
  3. year : 보고 연도 (2015~2025)
  4. month : 보고 월 (1~12)
  5. quarter : 보고서 분기 (예: 2021년 3분기)
  6. serious : 해당 사건이 심각했는지 여부 (예/아니오)  is_Anomaly(선천성 기형) 컬럼 생성
  7. serious_flags : 구체적인 심각도 범주(사망, 입원 등)
  8. is_fatal : 해당 사건으로 인해 사망이 발생한 경우 참입니다.
  9. is_hospitalized : 환자가 입원한 경우 참입니다.
  10. is_life_threat : 해당 사건이 생명을 위협하는 경우라면 참입니다.
  11. is_disabling : 해당 사건이 장애를 유발한 경우 참입니다.
  12. reactions : 보고된 모든 MedDRA 반응 (세미콜론으로 구분, 최대 5개)
  13. primary_reaction : 최초/주요 반응 보고
  14. reaction_outcomes : 반응별 환자 결과
  15. patient_recovered : 환자가 완치되었거나 회복 중인 경우 참입니다.
  16. num_reactions : 보고된 반응의 총 수
  17. suspect_drug : 의심되는 약물의 일반명
  18. brand_name : 의심되는 약물의 브랜드/상품명
  19. drug_route : 투여 경로 (경구, 정맥 주사 등)
  20. drug_indication : 이 약은 다음과 같은 질병 치료를 위해 처방되었습니다.
  21. manufacturer : 의약품 제조업체명
  22. pharm_class : FDA 분류
  23. num_drugs : 환자가 복용한 총 약물 수
  24. drug_count_category : 다약물 복용자용 분류함 (1가지 / 2-3가지 / 4-5가지 / 6가지 이상)
  25. patient_age_years : 환자 연령을 연 단위로 표준화함
  26. age_group : 연령대(영유아/어린이/청소년/성인/중년/노년/고령자)
  27. patient_sex : 환자 성별 (남성/여성/미상)
  28. patient_weight_kg : 환자의 체중(킬로그램)
  29. country : 사건 발생 국가(ISO 코드)
  30. report_age_days : 보고서 접수 후 경과 일수 (2026년 3월 28일 기준
 






○ 중복 행 제거

 

이후 데이터 전처리 계획

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