1.관리도
SPC 란?
| Statistical Process Control(SPC)은 우리나라 말로 통계적 공정관리라고 부르며, 1920년 Walter Shewhart에 의해 개발되어 제조 과정에서의 품질 향상을 위해 활용되고 있습니다. 제품이 완성되는 시점에서 사후검사를 하는 것이 아닌 생산 공정 자체를 지속적으로 감시하는 데 집중하며 제품을 모니터링하면서 각 공정별로 정한 Contol 범위 이상의 quality를 찾아내는 생산 공정 모니터링 입니다. |
공정감지 → 조직의 대응 → 공정이 조정됨

- PROCESS (첫 번째 구간)
- 초기 공정 상태를 나타냄
- 데이터가 변동하며 관리 한계선(UCL, LCL) 내에 유지되고 있지만, 변동이 큼
- CHANGE 1 (첫 번째 변경 이후 구간)
- 공정 개선(또는 환경 변화) 후 데이터가 이전보다 안정적으로 변화함
- 평균선(파란색 점선)과 관리 한계선(빨간 선)이 새롭게 설정됨
- CHANGE 2 (두 번째 변경 이후 구간)
- 다시 한 번 공정이 조정되었으며, 변동성이 더욱 감소하고 관리 한계선이 좁아짐
- 공정이 점점 더 안정화되는 과정이 보임
Control Chart(관리도)
목적
- 공정(Process) 자체를 관리하여 문제가 발생하기 전 사전 예방
- 이상 요인이 발생하면 즉각 수정하여 불량 억제
- 공정의 변동을 효율적으로 관리하여 품질 유지 및 향상

공정이 안정된 상태에서 유지되고 있는 경우, 측정값의 데이터를 토대로 Plotting하면 좌우 대칭의 정규분포(Normal Distribution)을 이루게 됩니다. 평균을 중심으로 양측의 표준편차의 1배(1σ), 2배(2σ), 3배(3σ)의 폭을 기준으로 각 구간내 들어가는 비율은 각각 68.26%, 95.46%, 99.73%가 됩니다.

공정 내 변동이 ±3σ(3 시그마) 이내라면 99.73%의 데이터가 허용된 범위 내 존재하여 정상적인 공정으로 볼 수 있다 반대로, 3σ를 넘어가는 값이 많아지면 공정이 이상 상태일 가능성이 높아지고, 개선이 필요함을 의미한다.
관리도(Control Chart)의 해석(Interpretation)


- Zone C (-1σ ~ +1σ, 초록색 영역)
- 데이터의 대부분(약 68.26%)이 여기에 포함됨 → 정상적인 공정 상태
- 값이 이 영역 내에 머물면 공정이 안정적이라고 판단 가능
- Zone B (-2σ ~ -1σ, +1σ ~ +2σ, 노란색 영역)
- 데이터의 약 27.2%가 포함되는 영역
- 일부 이상 징후가 나타날 수 있는 경고 영역(Warning Zone)
- 값이 지속적으로 이 영역에 머문다면, 공정 이상을 의심해야 함
- Zone A (-3σ ~ -2σ, +2σ ~ +3σ, 빨간색 영역)
- 데이터의 약 4.2%가 포함되는 영역
- 이 영역을 초과하면(±3σ 이상) 공정이 이상 상태임을 의미
- 즉각적인 원인 분석 및 조치가 필요함
2. 시계열 데이터
시계열 데이터의 특징
- 시간 순서가 연속적이여야 함
- 이전 값과 현재 값이 상관되어 있음 (자기상관성)
- 시간 간격이 일정함
★ 시간이 뒤죽박죽 일경우 → 어떻게든 균일한 시간으로 바꾸거나 불규칙한 간격을 그대로 두고 사용가능
예시)
value cycle
timestamp
2025-07-01 08:01:00 10 0
2025-07-01 08:02:00 20 1
2025-07-01 08:07:00 15 2
2025-07-01 08:08:00 30 3
2025-07-01 08:15:00 25 4
df_resampled = df.resample('1M').mean()
value
timestamp
2025-07-01 08:01:00 10.0
2025-07-01 08:02:00 20.0
2025-07-01 08:03:00 NaN
2025-07-01 08:04:00 NaN
2025-07-01 08:05:00 NaN
2025-07-01 08:06:00 NaN
2025-07-01 08:07:00 15.0
2025-07-01 08:08:00 30.0
2025-07-01 08:09:00 NaN
2025-07-01 08:10:00 NaN
★ 일별 데이터인데 특정 날에 3개의 row 데이터가 있어도 사용할 수 있는가 → 같은 날짜의 데이터를 집계하거나, 평균, 합계 방식으로 축소할 수 있음.
value
timestamp
2025-07-01 10
2025-07-01 20
2025-07-01 30
2025-07-02 40
2025-07-02 60
2025-07-03 90
daily_mean = df.resample('D').mean()
daily_sum = df.resample('D').sum()
value
timestamp
2025-07-01 20.0
2025-07-02 50.0
2025-07-03 90.0
1) 연속된 측정값이지만 비시계열 풀기
| Timestamp | 압력 | 온도 | 전류 | 품질결과 |
| 2025-07-01 00:00:00 | 2.10 | 55.3 | 1.10 | OK |
| 2025-07-01 00:01:00 | 2.15 | 55.5 | 1.12 | OK |
| 2025-07-01 00:02:00 | 2.00 | 58.1 | 1.30 | NG |
한 열당 1개의 제품일때 시계열로 풀면안됨.
각각 독립된 다른 요소로 봐야함.
2) 연속된 측정값이지만 시계열 풀기
| Timestamp | 전압 | 전류 | 온도 | 자동차 배터리량 |
| 2025-07-01 08:00:00 | 370.2 | 21.5 | 34.1 | 97.5 |
| 2025-07-01 08:01:00 | 370.2 | 21.5 | 34.1 | 97.4 |
| 2025-07-01 08:02:00 | 370.2 | 21.5 | 34.1 | 97.3 |
| 2025-07-01 08:03:00 | 369.5 | 22.8 | 34.5 | 97.1 |
내가 압력을 x만큼 가했다면 동일한 압력에는 동일한 y값이 나오게 될 것이다.
ex) 압력 1을 가했다면 음료수 캔이 찌그러진 것은 0.1cm라고 고정적으로 나올 것이고 압력 2를 가했다면 음료수 캔이 찌그러진 것은 0.2cm라고 나오게 된다.
그런데, 음료수 캔이 찌그러지면 원상태로 복원이 되지 않는다. y값이 음료수캔의 길이라면??
음료수 캔의 길이 5cm다.
처음 압력 1 가하면, 4.9cm이고
두번째 압력 1 가하면 4.8cm,
세번째 압력 2 가하면 4.6cm가 된다.
이처럼, 동일한 입력(압력)에도 출력은 누적된 상태 에 따라 달라진다.
즉, 출력값 자체보다는 이전 상태로부터 얼마나 변화했는지(변화량 Δy) 가 더 중요한 경우다.
▶ 차분하기 : 이전 시점 값과 현재 값의 차이(변화량)를 계산.
df['diff_1'] = df['기준 컬럼'].diff(1) # 이전 값과의 차이 계산
| Timestamp | 전압(V) | 전류(A) | 온도(℃) | 자동차 배터리 량 | 변화량 |
| ------------------- | ----- | ----- | ----- | --------- | ----- |
| 2025-07-01 08:00:00 | 370.2 | 21.5 | 34.1 | 97.5 | NaN |
| 2025-07-01 08:01:00 | 370.2 | 21.5 | 34.1 | 97.4 | -0.1 |
| 2025-07-01 08:02:00 | 370.2 | 21.5 | 34.1 | 97.3 | -0.1 |
| 2025-07-01 08:03:00 | 369.5 | 22.8 | 34.5 | 97.1 | -0.2 |
시계열 데이터의 특징
1. 계절성
- 특징: 일정한 주기(예: 일별, 주별, 월별)로 반복되는 변동.
- 설명: 계절적, 환경적 요인에 의해 정기적으로 나타나는 패턴.
- 센서 데이터 예시:
- 에너지 소비 센서: 여름철에는 에어컨 사용으로 전력 소비 증가, 겨울에는 난방 기기로 인해 증가.

2. 추세변동
- 특징: 시간이 지남에 따라 지속적으로 증가하거나 감소하는 경향.
- 설명: 데이터의 장기적인 상승 또는 하락 패턴.
- 예시:
- 배터리 전압 센서: 배터리 수명이 줄어들면서 전압이 지속적으로 감소.

3. 계절적 추세변동
- 특징: 계절성과 추세가 결합된 변동.
- 설명: 계절적인 패턴이 반복되면서, 장기적으로 증가 또는 감소하는 추세도 함께 나타나는 형태.
- 센서 데이터 예시:
- 에너지 소비 센서: 점점 증가하는 전력 사용량(추세) + 계절별 변동.
- 교통량 센서: 매년 도심 차량 수가 증가하면서, 출퇴근 시간 패턴이 반복됨.

4. 순환변동
- 특징: 경제적, 환경적 요인에 의해 발생하는 불규칙적이고 주기가 일정하지 않은 변동.
- 설명: 계절성과 다르게 일정한 고정된 주기(periodicity)는 없지만 반복되는 경향이 있음
- 데이터 예시:
- 환경 센서: 미세먼지 수치가 특정 시기에 따라 불규칙적으로 증가.

5.우연변동
- 특징: 예측 불가능하고 규칙성이 없는 무작위 변동.
- 설명: 일정한 주기나 규칙이 전혀 없음
- 센서 데이터 예시:
- 기계 진동 센서: 특정 순간 기계 이상으로 인해 갑자기 높은 진동 수치가 기록됨.
- 자연재해 : 지진, 쓰나미 등
- 네트워크 트래픽 센서: 사이버 공격이나 예기치 못한 사용량 급증으로 인해 데이터 전송량이 급격히 변동.

3. 시계열 데이터 활용
Lag Feature : 과거의 데이터를 새로운 입력으로 추가하는것
| 시간 | 온도(현재) | 온도(1분 전) | 온도(2분 전) |
| ----- | ------ | -------- | -------- |
| 08:00 | 25.0°C | — | — |
| 08:01 | 25.3°C | 25.0 | — |
| 08:02 | 25.5°C | 25.3 | 25.0
h(t):현재시점에서
h(t-1) 이전시점
h(t-2) 두단계전 시
쓰는이유 : 과거가 현재에 영향을 줄 수 있기 때문
- "어제 많이 비가 왔다면 오늘도 비가 올 확률이 높다"
- "배터리 전압이 계속 떨어졌다면, 지금도 떨어질 가능성이 높다" ⇒ 배터리 잔량은 전류나 온도가 누적적으로 영향을 미쳐 변화하기 때문에, 현재 값뿐만 아니라 과거 값도 중요하다.
import pandas as pd
# 예제 시계열 데이터 생성
data = {'value': [10, 12, 15, 14, 16, 18, 20]}
df = pd.DataFrame(data)
# t-1, t-2 lag feature 생성
df['lag_1'] = df['value'].shift(1) t-1
df['lag_2'] = df['value'].shift(2) t-2
print(df)
lag 어디까지해야하나요??
ACF q => lag 시점
Rolling Statistics : 데이터를 일정 구간씩 묶어서 평균, 표준편차 등을 계산하는 기법입니다.
윈도우(Window)란?
시계열 데이터에서 과거 일정한 개수만큼 묶은 구간


실제 공정에서는 특정 순간의 압력, 온도, 전류 값만으로는 공정의 전체적인 흐름이나 추세를 파악하기 어려움 ⇒ Rolling Statistics는 정상적인 공정 상태의 '기준선(baseline)' 역할을하는데, 만약 현재 값이 이동 평균에서 크게 벗어나거나, 이동 표준편차가 갑자기 비정상적으로 커진다면, 이는 공정 이상 또는 장비 고장의 초기 징후로 해석
윈도우 크기 정하기
Timestamp 전류(A)
2025-07-01 08:00:00 21.5
2025-07-01 08:01:00 21.7
2025-07-01 08:02:00 21.6
2025-07-01 08:03:00 22.5
2025-07-01 08:04:00 23.0
2025-07-01 08:05:00 22.8
2025-07-01 08:06:00 22.6
2025-07-01 08:07:00 23.5
2025-07-01 08:08:00 23.8
2025-07-01 08:09:00 23.6
# 3분 이동 평균과 이동 표준편차
df['전류_이동평균'] = df['전류(A)'].rolling(window=3).mean()
df['전류_이동표준편차'] = df['전류(A)'].rolling(window=3).std()
print("\n🔹 Rolling 적용 후:")
print(df)
| Timestamp | 전류(A) | 전류\_이동평균 | 전류\_이동표준편차 |
| ------------------- | ----- | -------- | ---------- |
| 2025-07-01 08:00:00 | 21.5 | NaN | NaN |
| 2025-07-01 08:01:00 | 21.7 | NaN | NaN |
| 2025-07-01 08:02:00 | 21.6 | 21.6 | 0.10 |
| 2025-07-01 08:03:00 | 22.5 | 21.93 | 0.47 |
| 2025-07-01 08:04:00 | 23.0 | 22.37 | 0.75 |
| 2025-07-01 08:05:00 | 22.8 | 22.77 | 0.25 |
diff feature() : 이전 시점과 현재 시점의 차이

1. 변화 자체가 의미 있는 경우가 많기 때문
- 시계열 데이터 에서는 현재 값보다 얼마나 변했는지가 더 중요할 수 있음
- 예:
- 전류가 갑자기 증가했다 → 이상 징후
- 온도나 특정 센서가 점점 상승 중이다 → 공정 이상 가능성
2. 추세나 패턴을 모델이 인식하게 해줌
- 원본 값만 보면 모델은 "상태"만 인식
- 하지만 변화량이 있으면 방향"과 "속도"도 파악할 수 있음
예:
x_t = 370.2
→ 정지된 값처럼 보이지만
Δx_t = -0.7 이라면 → "감소 중"이라는 신호를 모델이 이해함
| Timestamp | 전압(V) | 전류(A) | 온도 |
| 2025-07-01 08:00:00 | 370.2 | 21.5 | 34.1 |
| 2025-07-01 08:01:00 | 370.2 | 21.5 | 34.1 |
| 2025-07-01 08:02:00 | 370.2 | 21.5 | 34.1 |
| 2025-07-01 08:03:00 | 369.5 | 22.8 | 34.5 |
| 2025-07-01 08:04:00 | 369.0 | 23.0 | 34.7 |
# 변화량(ΔX) 추가: .diff() = 현재 - 이전 시점
df['Δ전압'] = df['전압(V)'].diff()
df['Δ전류'] = df['전류(A)'].diff()
df['Δ온도'] = df['온도(℃)'].diff()
| Timestamp | 전압 | 전류 | 온도 | △전압 | △ 전류 | △ 온도 |
| 2025-07-01 08:00:00 | 370.2 | 21.5 | 34.1 | — | — | — |
| 2025-07-01 08:01:00 | 370.2 | 21.5 | 34.1 | 0.0 | 0.0 | 0.0 |
| 2025-07-01 08:02:00 | 370.2 | 21.5 | 34.1 | 0.0 | 0.0 | 0.0 |
| 2025-07-01 08:03:00 | 369.5 | 22.8 | 34.5 | -0.7 | 1.3 | 0.4 |
| 2025-07-01 08:04:00 | 369.0 | 23.0 | 34.7 | -0.5 | 0.2 | 0.2 |
LOT와 Batch
LOT
- 제품 묶음
- 제품 여러 개가 들어있고,
- 시계열이 있을 수도 있고 없을 수도 있음
- LOT 하나에 요약값을 만들 수도 있고,
- LOT 내부 제품별 데이터가 있을 수도 있음
Batch
- 공정을 한 번 수행한 전체 과정
- “기계를 한 번 돌린 0~T 시간 전체”
- 내부에는 엄청 긴 시계열(센서값)이 그대로 들어있다
- Batch가 끝나면 품질 값은 보통 1개 나온다
- → 하지만 내부 시계열은 요약되어 있지 않다.
1. LOT와 Batch 데이터 구조를 예시로 비교
예시)
사출 성형 공정에서
- 같은 조건으로 1시간 동안 200개 제품 생산
- 이 200개를 LOT123으로 묶음
① 제품단위 데이터
LOT_ID | PRODUCT_NO | WIDTH | HEIGHT | WEIGHT | DEFECT
------------------------------------------------------
LOT123 | 1 | 10.2 | 5.3 | 12.1 | OK
LOT123 | 2 | 10.1 | 5.2 | 12.0 | OK
LOT123 | 3 | 9.8 | 5.4 | 11.8 | NG
...
LOT123 | 200 | 10.3 | 5.3 | 12.2 | OK
LOT_ID | PRODUCT_NO | WIDTH | HEIGHT | WEIGHT | DEFECT
------------------------------------------------------
LOT123 | 1 | 10.2 | 5.3 | 12.1 | NG
LOT123 | 2 | 10.1 | 5.2 | 12.0 | NG
LOT123 | 3 | 9.8 | 5.4 | 11.8 | NG
...
LOT123 | 200 | 10.3 | 5.3 | 12.2 | NG
200개 RAW => 2개나 3개 OR 1개로
응 너 불량 LOT123 = 불량 우리는 몰라요
② LOT 내부의 시계열 데이터
예: 한 제품이 만들어질 때 금형 내부 압력/온도 시계열
LOT123 / PRODUCT 1
Time | Pressure | Temperature
--------------------------------
0.00 | 20.0 | 180
0.01 | 30.5 | 183
0.02 | 45.3 | 185
...
0.80 | 10.2 | 170
LOT란 “제품 여러 개 묶음”이며
내부에는 제품별 정형데이터 + 시계열(waveform) 둘 다 존재할 수 있다.
Batch 데이터 예시 (공정 전체 run 중심)
발효 공정:
- Batch57은 0~48시간 동안 발효 진행
- 끝나면 Penicillin Yield(품질) 1개가 나옴
- 📄 Batch 데이터 구조 예시 (긴 시계열)
Batch_ID | Time(h) | Temp | pH | DO | Agitation | Volume
-----------------------------------------------------------
Batch57 | 0.0 | 29 | 6.8 | 20 | 200 | 100
Batch57 | 0.5 | 30 | 6.7 | 22 | 210 | 102
Batch57 | 1.0 | 31 | 6.6 | 24 | 220 | 103
...
Batch57 | 48.0 | 28 | 6.1 | 18 | 180 | 140
👉 Batch는 제품 단위가 아니라 공정 단위의 시계열
👉 결과 품질은 보통 1개
👉 내부 데이터는 LOT보다 훨씬 “길고 연속적”
2. LOT와 Batch 데이터를 "시계열적으로" 어떻게 풀어야 하는가?
2.1. LOT 데이터 시계열 모델링 방법
LOT 내부에는 제품별 waveform(사출 압력곡선, Etch RF waveform 등)이 존재한다.
① 제품별 시계열 → 요약 통계(summary) → ML 모델 (LightGBM/XGBoost)
예시)
- Pressure_mean
- Pressure_std
- Pressure_max
- Pressure_slope
- Peak_count
- FFT_peak
가장 보편적이고 빠르고 정확한 방식.
② 제품별 시계열 → 구간(section) 분할 후 요약 → ML
예시)
- 0~20% 구간 mean
- 20~50% 구간 std
- 50~100% 구간 slope
➡ Waveform의 형태(shape)를 ML feature로 간접 반영
③ LOT 내부 제품들을 집계해서 LOT-level feature 생성
예시)
LOT-Level Mean Pressure = 제품별 mean의 평균
LOT-Level Std Pressure = 제품별 std의 평균
LOT-Level Defect Ratio = NG 제품 비율
➡ LOT 품질 예측에 바로 사용 가능
2.2. Batch 데이터 시계열 모델링 방법
① Batch 전체 waveform → 전역 요약(feature) 생성 → ML
- 전체 평균/분산
- 전체 peak count
- 전체 slope
- DO_min_time
- Temp_integral (면적)
➡ 공정 전체 경향으로 품질 예측
② Batch를 일정 구간 %로 나누는 방식 (Normalization)
Batch 길이가 서로 다르기 때문에
0~10%, 10~20%, … 90~100% 식으로 구간을 분리
- 구간별 mean
- 구간별 std
- 구간별 slope
- 구간별 energy(면적)
을 뽑아서 ML 입력으로 만든다.
➡ Batch 시계열 차이를 표준화하는 제조업 전형 방법
③ Rolling/Diff 기반의 변화량 feature
Batch 공정은 시간 흐름에 따른 변화가 중요하기 때문에:
- diff_mean
- diff_std
- rolling_mean(10)의 전체 평균
- rolling_std(20)의 전체 최대값
이와 같이 변화 패턴 기반 feature가 Batch 품질 예측에 강함.
xgboost rf, lgbm 등 사