실전 프로젝트 발제날. 우선
코드카타
시계열 코드 6번. LOT 단위 요약 통계 생

import pandas as pd
data = {
'LOT_ID': ['LOT123','LOT123','LOT123','LOT123','LOT123',
'LOT124','LOT124','LOT124','LOT124','LOT124'],
'PRODUCT': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
'WIDTH': [10.23, 10.15, 9.87, 10.31, 10.08,
11.02, 10.94, 11.21, 11.13, 10.87],
'DEFECT': ['OK','OK','NG','OK','OK',
'OK','NG','NG','OK','OK']
}
df = pd.DataFrame(data)
test = df.groupby('LOT_ID').agg(
width_mean=('WIDTH','mean'),
width_std = ('WIDTH', 'std'),
defect_ratio = ('DEFECT', lambda x : (x =='NG').mean())
).reset_index()
test['width_std']=test['width_std'].round(3)
print(test)
agg 함수는 아직도 어려움.
lambda도 아직 모르겠어서. gpt 이용한 연습 문제 풀 예정
오늘부터 실전 프로젝트 시작했다. 당연히 반도체 데이터 선택했고 이번엔 금속 etch 공정 데이터다.
ev, oes, rfm 데이터 세개로 이루어졌고, 분석과 대시보드 구성까지가 이번 프로젝트의 목표
도메인 지식이 부족해서 데이터만 한참 바라본것 같다.
다음은 우리 프로젝트 노션 정리 내용.
- oes_data.csv파일 탐색
1-1. /info()를 통해 데이터 정보 확인
1-2. isnull()를 통해 결측치 확인
1-3. ev_data, oes_data, rfm_data 별 웨이퍼 개수 확인
1-4. ev_data에는 있지만 oes_data나 rfm_data에 없는 웨이퍼 확인 ('2916’, '3306', '3325’, '2902’, '2919’)
1-5. ev_data, oes_data, rfm_data 별로 Fault name의 종류와 개수
1-6. 정상(calibration)과 불량 데이터 비율 확인 (약 84 대 16으로 불균형)
1-7. 웨이퍼별 공정 시간 확인 (12901, 12902, 12903 순으로)
1-8. 장비 센서 데이터별 평균값 확인
1-9. 장비 센서 데이터별 최댓값 및 최솟값 확인
1-10. OES 주요 파장대별 평균 강도 확인 (272, 544가 주요 )
1-11. OES 주요 파장대별 최대 강도 확인
1-12. OES 파장대별 변화량(표준편차) 확인
- ev_data.csv 파일 탐색
2-1. 공정의 단계는 총 두개로 나누어 짐 : Step 4 (6025개) , Step 5 (6804개)
2-2. 각각의 fault name 에는 공백이 포함되어 있음
ev_data['fault_name'] = ev_data['fault_name'].str.strip()
for name in ev_data['fault_name'].unique():
print(repr(name))
로 공백을 지우고 진행하는게 나을듯.
2-3. Step Number 별 Time 을 보면 4단계의 식각 시간 이후에 5단계의 식각이 진행됨.
논문을 참고하여
Step 4 - Al etch
Step 5 - Ti etch
로 보고 진행한다.
| Step Number | min | max | mean | count |
| 4.0 | 8.66797 | 65.559 | 33.078704 | 6025 |
| 5.0 | 54.58790 | 127.259 | 84.620197 | 6804 |

- Step 4 (살구색 선) : 약 9 ~ 65초
초반부 : pressure 급격한 변동 존재 -> 1220 근처 -> 1140까지 급락 -> 다시 회복
중~후반부 : pressure plateau 형성 -> 안정된 etch regime
- Step 5 (검은색 선)
초반부 : 갑자기 pressure 떨어짐 -> recipe condition 바뀜 (gas ratio변화, RF 변경, pressure 변경 등)
중~후반부 : 안정적인 plateau -> thinner, 짧은 cleanup, 안정된 유지 구간
** 시각화를 보면
- Al etch 종료 → recipe transition → Ti etch 진입 으로 예측 가능.
- Step 4 에서 나온 초기 stabilization 존재는 (plasma stabilization 가능성) == 실제 논문에서 endpoint trace와 유사함을 확인
- 정상 wafer도 fluctuation 존재 == 공정 fluctuation 자체는 정상 현상 즉, 크기 / 지속성 / 패턴이 핵심일듯?
- 후반부 plateau 안정성 == 공정 안정화 구간 / cleanup / residual etch / stabilization
++++ Step 4와 Step 5가 같은 시간에 동시에 기록된 건 없음, 각 공정은 독립된 공정이 아니다.
- rfm_data.csv 파일 탐색
1-1. info()로 데이터 구조 확인
1-2. isnull().sum()으로 결측치 확인
⇒ 결측치 없음
1-3. wafer_names.nunique()로 웨이퍼 개수 확인
총 웨이퍼 수: 126
샘플 웨이퍼명 (10개): ['r2901.txt', 'r2903.txt', 'r2904.txt', 'r2905.txt', 'r2906.txt', 'r2907.txt', 'r2908.txt', 'r2909.txt', 'r2910.txt', 'r2911.txt']
마지막 5개: ['r3319.txt', 'r3320.txt', 'r3339.txt', 'r3340.txt', 'r3341.txt']
1-4. ev_data 대비 RFM에 없는 웨이퍼 확인 (예: r2902, r2916, r2919, r3306, r3325 등 — wafer_names를 set으로 만들어 차집합)
웨이퍼 번호 범위: 2901 ~ 3343 있어야 할 개수: 443, 실제: 126
누락된 번호 (317개): [2902, 2916, 2919, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970] ...
1-5. fault_name의 종류와 개수 확인 (21종 — calibration 외 Cl2 ±, TCP ±, RF ±, BCl3 ±, Pr ±, He Chuck)
1-6. 정상(calibration) vs 불량 비율 확인 (시점 단위 84:16, 웨이퍼 단위로도 다시 확인)
1-7. 웨이퍼별 공정 시간(시점 수) 확인 (28~32 timesteps, 결함 종류에 따라 다른지 비교)
1-8. wafer_names 정규화 — r2901.txt → 2901 (정수 변환해야 시간순 정렬 가능, ev_data와 조인하려면 필수)
1-9. 센서 73개 컬럼을 V(전압) / I(전류) / P(위상·파워) 그룹으로 분류 (s{스테이션}{V|I|P}{채널} 명명 규칙)
1-10. 채널별 평균값 비교 — 채널 1 (기본 주파수, fundamental) > 2 > 3 > 4 > 5 패턴 확인 (예: S1V1 ≈ 147, S1V2 ≈ 7.4, ..., S1V5 ≈ 1.4)
1-11. 센서별 최댓값/최솟값으로 동작 범위 파악 (정상 범위 벗어나는 outlier 시점 있는지)
1-12. 위상각 컬럼(p접미사)의 ±180° wrapping 점프 탐지 (s2p1 등에서 −10 → 178 같은 급변 → np.unwrap- 또는 sin/cos 분해 필요)
1-13. calibration에서 std ≈ 0인 near-constant 컬럼 식별 (s1v5, s34pv1 등 — 결함 시에만 튀는지 별도 확인)
1-14. V/I/P 간 상관 히트맵 (P = V × I 관계로 강한 다중공선성 예상 → 차원 축소·feature 선택에 활용)
1-15. 드리프트 분석 — 캘리브레이션 웨이퍼만 시간순 정렬해서 센서별 평균 추이 (원논문 그림 6의 Lot 1/2/3 분리 현상이 데이터에도 있는지 검증)
1-16. Fault별 평균 trace overlay — 어느 센서가 어느 결함에 가장 민감한지 (feature importance 사전 추정)
관련 조사 논문:
(원본)

'QAQC_5기 부트캠프 > 실전 프로젝트' 카테고리의 다른 글
| [내일배움캠프] QA/QC_5기 본캠프(0604) (0) | 2026.06.04 |
|---|---|
| [내일배움캠프] QA/QC_5기 본캠프(0602) (1) | 2026.06.02 |
| [내일배움캠프] QA/QC_5기 본캠프(0601) (0) | 2026.06.01 |
| [내일배움캠프] QA/QC_5기 본캠프(0529) (0) | 2026.05.29 |
| [내일배움캠프] QA/QC_5기 본캠프(0528) (0) | 2026.05.28 |