QAQC_5기 부트캠프/실전 프로젝트

[내일배움캠프] QA/QC_5기 본캠프(0602)

두껍22 2026. 6. 2. 20:39

문제풀이

더보기

**Recall은 "실제로 Positive인 것 중에서 모델이 제대로 맞힌 비율"**입니다. 따라서:

  • 분자: TP (실제 Positive이면서 맞게 예측한 것)
  • 분모: TP + FN (실제 Positive인 모든 것)

**Precision은 "모델이 Positive라고 예측한 것 중에서 실제로 맞은 비율"**입니다. 따라서:

  • 분자: TP (같음)
  • 분모: TP + FP (모델이 Positive라고 예측한 모든 것)

✅ 올바른 이해: "분자는 같지만, 분모의 기준이 다르다"

두 지표 모두 분자는 **TP(진짜 양성)**로 동일해요. 하지만 분모가 달라요:

  • Precision의 분모 = 모델의 관점 (모델이 Positive라고 말한 것 전체)
  • Recall의 분모 = 현실의 관점 (실제로 Positive인 것 전체)

 

 

 

인터랙티브 요소와 사용자 경험 분석

더보기

인터랙티브 요소는 사용자가 대시보드나 시각화와 직접 상호작용할 수 있도록 만든 기능들이에요. 예를 들어 파라미터, 필터, 드롭다운 메뉴처럼 사용자가 값을 바꾸거나 선택할 수 있는 것들입니다.

사용자 경험 분석은 이런 인터랙티브 요소들이 실제로 사용자에게 어떤 영향을 미치는지 살펴보는 거예요. 즉, 사용자가 편하게 느끼는지, 쉽게 이해하고 사용할 수 있는지, 혼란스럽지는 않은지를 평가하는 것입니다.

이 둘을 합쳐서 생각하면: 인터랙티브 요소가 얼마나 잘 설계되어 있어서 사용자가 편하고 효과적으로 사용할 수 있는가를 분석하는 것이 핵심이에요.

 

많은 학생들이 "인터랙티브 요소가 있으면 = 좋은 사용자 경험"이라고 단순하게 생각해요. 하지만 이건 잘못된 이해입니다.

중요한 점은 이거예요: 파라미터나 필터 같은 인터랙티브 요소가 존재한다고 해서 자동으로 좋은 사용자 경험을 만드는 건 아니라는 거죠. 오히려 인터랙티브 요소가 많을수록, 또는 설명이 부족할수록 사용자가 혼란스러워할 수 있어요.

예를 들어, 파라미터가 10개나 있는데 각각이 뭘 하는지 설명이 없다면? 사용자는 "이게 뭐지?", "이걸 어떻게 써야 하지?"라며 헷갈리다가 결국 사용을 포기할 가능성이 높아요. 이건 나쁜 사용자 경험입니다.

따라서 사용자 경험을 분석할 때는 **"인터랙티브 요소가 얼마나 명확하고 직관적으로 설계되었는가", "사용자가 혼란 없이 쉽게 사용할 수 있는가"**를 봐야 해요. 인터랙티브 요소 자체의 기능(파라미터로 값을 바꿀 수 있다, 필터링된다)이 작동하는지가 아니라, 사용자 입장에서 그것이 얼마나 이해하기 쉽고 유용한지를 평가하는 거랍니다.

 

데이터 집계와 KPI 영향도 분석 — 개념 정리

더보기

데이터 집계는 흩어져 있는 원본 데이터를 의미 있는 단위로 묶어서 정리하는 과정이에요. 예를 들어 매일매일의 판매 기록을 월별·지역별·상품별로 모아서 합계를 내거나 평균을 구하는 것처럼요.

KPI 영향도 분석은 그렇게 집계된 데이터에서 특정 지표(KPI: Key Performance Indicator)가 최종 목표에 얼마나 영향을 미치는지 파악하는 일입니다. 어떤 요소가 핵심이고, 어떤 부분을 개선하면 가장 효과가 클지를 알아내는 거예요.

 

"데이터 집계"와 "시각화"를 같은 개념이라고 착각해요. 하지만 이 둘은 다릅니다. 집계는 데이터를 정리·계산하는 논리적 작업이고, 시각화는 그 결과를 그래프나 표로 보기 좋게 표현하는 것

 

"KPI를 보여주는 것"과 "KPI의 영향도를 분석하는 것"을 구분 못 하는 거예요. 단순히 "판매액은 100만 원입니다"라고 보여주는 것은 KPI를 표현한 것이지만, "이 100만 원 중에서 어느 지역의 기여도가 가장 크고, 상품 A를 30% 더 팔면 목표 달성이 가능하다"고 분석하는 것이 진짜 영향도 분석

 

KPI 영향도 분석은 단순 수치 보기를 넘어서 "이 지표가 변하면 전체 성과가 어떻게 달라질까?"라는 인과관계를 찾는 과정

 

 

데이터 전처리와 시각화의 관계 이해

더보기

데이터 전처리는 원본 데이터를 정제하고 정렬하는 과정이고, 시각화는 그 데이터를 차트나 대시보드 같은 시각적 형태로 표현하는 과정

 

전처리 → 시각화라는 일방향이 아니라, 시각화 도구 내에서 전처리와 시각화가 함께 일어난다

"데이터를 준비하는 단계"와 "그것을 의미 있게 표현하는 단계"는 서로 영향을 주고받는 상호작용 관계

 

오늘의 실전 프로젝트 내용은,,

더보기

세개의 데이터 묶어서 진행해봤는데 성능이 안나온다..

TIL: EV+OES 기반 금속 식각 공정 양불 분류 모델링

오늘 진행한 내용

오늘은 금속 식각 공정 데이터 중 EV 데이터와 OES 데이터를 중심으로 양불 분류 모델을 구축하는 작업을 진행했다. 기존에는 EV, OES, RFM을 모두 통합하는 방향도 검토했지만, 이번 분석에서는 우선 EV와 OES만 사용해 정상 공정과 불량 공정을 구분하는 모델을 만드는 것을 목표로 잡았다.

분석 방향은 참고 논문의 local/global 모델링 개념을 반영했다. 금속 식각 데이터는 실험 그룹에 따라 공정 드리프트가 존재할 수 있기 때문에 전체 데이터를 한 번에 학습하는 global 모델뿐 아니라, experiment 단위로 나누어 local 모델의 성능도 확인하는 구조로 설계했다.

데이터 처리 방향

EV 데이터는 장비 센서 및 공정 변수 정보를 담고 있고, OES 데이터는 플라즈마 방출 스펙트럼 정보를 담고 있다. OES 데이터에는 명확한 시간 컬럼이 없기 때문에 웨이퍼 내부의 행 순서를 시간 흐름으로 보고 상대 시간축을 생성했다. 이후 wafer 단위로 EV와 OES feature를 요약하여 머신러닝 입력 데이터로 사용할 수 있도록 구성했다.

OES의 경우 전체 파장 정보를 그대로 사용하는 것보다 공정 해석에 의미 있는 파장대를 함께 고려하는 방식으로 접근했다. Al, Ti, Si 관련 파장대와 500nm대 주요 피크 구간을 반영해 평균, 표준편차, 최대값, 최소값, 변화량 등의 통계 feature를 생성했다. EV 데이터 역시 평균, 표준편차, 최대값, 최소값, 기울기 등의 wafer-level feature로 변환했다.

모델링 진행

먼저 베이스라인 모델을 만들어 EV+OES 조합의 기본 성능을 확인했다. 모델은 Logistic Regression, Random Forest, ExtraTrees, LightGBM 계열을 기준으로 구성했다. 데이터 수가 많지 않고 wafer 단위 샘플이 제한적이기 때문에 일반적인 train-test split만으로 성능을 판단하기 어렵다고 보고, LOOCV 방식을 사용했다.

LOOCV는 하나의 wafer를 test로 두고 나머지를 train으로 반복 평가하는 방식이기 때문에, 샘플 수가 적은 현재 데이터셋에서 비교적 엄격하게 모델 성능을 확인할 수 있다. 특히 이번 프로젝트의 목적은 단순히 Accuracy를 높이는 것이 아니라 Fault를 정상으로 놓치는 False Negative를 줄이는 것이기 때문에 Precision보다 Recall과 F1-score를 더 중요하게 봐야 한다고 판단했다.

오류 해결 과정

모델 고도화 과정에서 ColumnDropper와 관련된 sklearn.clone() 오류가 발생했다. 원인은 ColumnDropper 클래스의 생성자에서 drop_cols 파라미터를 내부적으로 변형했기 때문이다. sklearn.clone()은 estimator의 생성자 파라미터가 그대로 유지되어야 하는데, 기존 구현에서는 None을 빈 리스트로 바꾸는 방식 때문에 clone이 실패했다.

처음에는 ColumnDropper 클래스를 수정하는 방향으로 접근했지만, 실제로 현재 pipeline에서 컬럼 제거 기능이 반드시 필요하지 않았기 때문에 더 안정적인 방법으로 ColumnDropper를 제거했다. 이후 make_enhanced_model() 함수를 다시 작성하여 SimpleImputer, StandardScaler, 모델만 포함하는 구조로 단순화했다.

또한 enhanced_model이 정의되지 않아 발생한 NameError도 해결했다. 이전 디버깅 과정에서 enhanced_model을 삭제한 뒤 다시 생성하는 셀이 실행되지 않아 발생한 문제였다. 이를 해결하기 위해 local LOOCV 실행 전에 enhanced_model = make_enhanced_model(...)을 다시 정의하도록 수정했다.

오늘 얻은 판단

현재 분석에서 가장 중요한 점은 모델의 Accuracy만 보고 성능이 좋다고 판단하면 안 된다는 것이다. 데이터는 정상 비율이 높기 때문에, 모델이 대부분을 정상으로 예측해도 Accuracy는 높게 나올 수 있다. 하지만 실제 공정 이상탐지에서는 Fault를 놓치는 것이 더 큰 문제이므로 Recall과 False Negative를 중심으로 평가해야 한다.

또한 EV+OES만으로 양불 분류를 진행할 경우, OES의 파장별 정보와 EV의 장비 상태 정보가 모두 필요하지만, 단순 통계 feature만으로는 Fault 구분력이 충분하지 않을 수 있다. 따라서 local 기준 주요 변수를 선정하고, 정상 기준 편차, 구간별 변화량, endpoint 부근 변화량, 파장 band ratio 같은 파생변수를 추가하는 방향이 필요하다.

Optuna 튜닝도 단순 Accuracy나 일반 F1-score만 기준으로 진행하면 Fault Recall이 낮아질 수 있다. 앞으로는 recall, F2-score, 또는 Recall과 PR-AUC를 결합한 목적 함수를 사용하는 방향이 더 적절하다.

다음 진행 방향

다음 단계에서는 EV+OES 전용 데이터셋을 기준으로 모델 성능을 다시 정리해야 한다. 특히 global 모델과 experiment별 local 모델을 분리해서 비교하고, local 기준으로 중요한 변수를 뽑아야 한다. 이후 주요 변수들을 기반으로 파생변수를 생성하고, 해당 파생변수가 실제로 Recall과 False Negative 개선에 기여하는지 확인해야 한다.

또한 threshold를 0.5로 고정하지 않고, Fault Recall을 높일 수 있는 threshold를 별도로 탐색해야 한다. 모델이 예측 확률은 어느 정도 구분하지만 threshold 문제로 Fault를 정상으로 보내는 경우가 있을 수 있기 때문이다.

양불 분류 성능이 안정화된 이후에는 불량 유형 분류로 확장할 수 있다. 현재는 양불 분류가 먼저 안정적으로 되어야 하므로, fault type classification은 다음 단계로 미루는 것이 맞다.

정리

오늘은 EV+OES 기반 금속 식각 공정 양불 분류 모델을 만들기 위한 노트북 구조를 정리하고, LOOCV 평가 구조와 local/global 모델링 방향을 적용했다. 동시에 ColumnDropper clone 오류, enhanced_model NameError, X_cols_for_enhanced 관련 문제를 수정하면서 모델링 pipeline을 더 안정적인 구조로 바꿨다.

이번 작업을 통해 단순히 모델을 돌리는 것보다, 데이터셋의 불균형 구조와 공정 드리프트를 고려한 평가 방식이 중요하다는 점을 확인했다. 특히 금속 식각 공정 이상탐지에서는 Accuracy보다 Fault Recall과 False Negative 감소가 더 중요한 평가 기준이라는 점을 다시 정리할 수 있었다.