본문으로 건너뛰기

제조 운영: 예지보전, 수율, 그리고 일정 계획

📍 현재 위치: 6부 · 전체 시스템 — 23장. 지난 장은 배포 이후에 어떤 단일 모델이든 정직하게 유지시키는 MLOps 척추(MLOps spine) — 표류, 재훈련, 그리고 검증의 역설 — 을 세웠습니다. 이제 우리는 모델에서 물러나 공장으로 향합니다. 닳아 가는 장비, 일정, 그리고 그 모든 단위-작업 모델이 합쳐져 도달하는 배치 결과로.

이 장 앞의 모든 장은 한 단계를 향해 현미경으로 아래를 들여다봤습니다 — 한 바이오리액터의 소프트 센서, 한 포획 칼럼의 하이브리드 모델, 한 충전 라인의 비전 시스템. 이 장은 를, 하나의 시스템으로서의 공장을 봅니다. 닳아 없어지는 용기, 스키드(skid), 칠러(chiller), 공조기로 가득 찬 홀; 그 용기들을 두고 경쟁하는 배치들의 달력; 그리고 각 캠페인의 끝에서, 깨끗한 합격이거나 비싼 실패이거나 둘 중 하나인 출하 결정. 이 고도에 사는 기계학습은 이 책에서 가장 화려하지 않고, 우연이 아니게도 가장 많이 배포된 것입니다. 그것은 핵심품질속성(CQA — 순도나 역가처럼 약물이 출하에 적합한지를 정의하는 측정 가능한 속성)을 직접 건드리는 일이 드뭅니다. 그것은 모터가 눌어붙는 것을 막고, 규격-밖 결과(등록된 규격 한계를 벗어난 측정값 — 출하에서 실패하는 배치)로 표류하는 배치를 표시하고, 깨끗한 기록의 검토를 초안 잡아 사람이 예외만 읽으면 되게 하며, 같은 강철에 더 많은 제품을 채워 넣습니다.

이곳은 또한 진행 중인 예시가 마침내 빚을 갚는 곳이기도 합니다. 다섯 권에 걸쳐 우리는 BATCH-2026-001과 그 형제들을 따라왔고, 규격을 벗어난 형제가 하나 있다는 것을 줄곧 알고 있었습니다 — BATCH-2026-004. 이 장에서 그것은 각주이기를 멈추고 표적이 됩니다. 실험실이 확인하기 전에 배치-실패 모델이 예측하려 하는 양성 라벨이 되는 것입니다. 이 이야기의 정직한 부분은, 여섯 개의 배치로는 그런 모델을 훈련할 수 없다는 것 — 그리고 그 제약이, 알고리즘이 아니라, 진짜 주제라는 것입니다.

쉽게 말하면

좋은 공장 관리자는 따분하지만 가치 있는 세 가지를 합니다. 그들은 기계의 소리를 듣습니다 — 오늘 약간 거칠게 들리는 베어링은 다음 달에 고장 날 테니, 배치 한복판이 아니라 계획된 토요일에 고칩니다. 그들은 배치가 돌아가는 것을 지켜보며, 최종 시험이 확인하기 전에 "이번 건은 엇나가고 있다"는 직감을 키웁니다. 그리고 비싼 용기가 놀지 않도록 일정을 빽빽이 채웁니다. 공장 수준 기계학습은 정확히 그 세 가지를 — 고장을 예측하고, 나쁜 배치를 예측하고, 달력을 채우는 것을 — 공장이 이미 만들어 내는 데이터로부터 하는 소프트웨어입니다. 그중 어느 것도 암을 치료하지 않습니다. 그 모두가 불을 켜 두고 강철을 채워 둡니다.

이 장에서 다루는 내용

우리는 추상화 수준을 단위 작업에서 공장으로 한 단계 올리고, 산업에서 실제로 돌아가는 네 가지 운영 ML 계통을 걷습니다:

  • 예지보전(predictive maintenance, PdM) — 진동, 전류, 온도로부터 장비-건강 신호를 학습하여 고장을 여유 시간(lead time)을 두고 잡아내며, 그것이 흔히 그러한 형태인 비지도식 "건강에서의 이탈" 문제로 틀 잡음.
  • 배치-실패 / 수율 / 일탈 예측배치 수준의 지도 학습 과제(초당이 아니라 배치당 한 행), BATCH-2026-004의 실제 숙주-세포-단백질(host-cell-protein, HCP) 초과를 실패 모드로 삼고, 여섯-배치 데이터 천장과의 정직한 셈.
  • 일발-적중과 예외-검토 — ML이 제조 실행 시스템(MES — 작업 현장에서 배치 레시피를 실행하고 기록하는 소프트웨어) 실행 계층(Körber PAS-X) 위에 올라타 인간 검토 부담을 줄이는 방식, 그리고 규제선이 그것이 더 나아가는 것을 금하는 지점.
  • 일정 계획, 용량, 공급망, 그리고 에너지 — 대부분 심층학습이 아닌 최적화 및 예보 문제, 그리고 진짜 돈이 있는 곳.

세 개의 실행 가능 모듈이 이 장에 닻을 내리며, 읽는 순서대로 제시됩니다. examples/platform/ml/pdm.py(예시적 예지보전 신호), examples/platform/ml/batch_outcome.py(실제 출하 표에 접지된 수율/실패 예측), 그리고 examples/platform/ml/integration_opcua.py(예측이 제어 시스템으로 건너가려면 만족해야 하는 인터페이스 계약 — 태그가 붙은 값을 공장 태그에 올리는 개방형 산업 통신 프로토콜인 OPC-UA를 거쳐, 공장의 태그 이력을 보관하는 시계열 데이터베이스인 히스토리언(historian)으로, 그리고 MES로).

예지보전: 공장에서 가장 신뢰할 수 있는 ML

제조-시스템 엔지니어에게 작업 현장에서 기계학습이 실제로 제 몫을 해낸 곳이 어디냐고 물으면, 답은 "바이오리액터"인 경우가 드뭅니다. 그것은 바이오리액터 주변의 장비입니다. 바이오리액터의 교반 모터, 크로마토그래피 스키드의 공급 펌프, 원심분리기의 구동부, 칠러 압축기, HVAC 급기 팬 — 각각은 물리적 시그니처(진동 스펙트럼, 모터 전류, 베어링 온도, 음향 방출)를 가진 회전 또는 왕복 기계이며, 베어링이 박리되거나(표면이 벗겨지기 시작함) 실(seal)이 열화되면서 그 시그니처가 천천히 표류하는데, 흔히 부품이 실제로 고장 나기 몇 주 전입니다 [1]. 경제적 논거는 극명합니다. 배치 도중의 계획되지 않은 고장은 부품보다 훨씬 비싼 몇 주짜리 운전을 폐기시킬 수 있는 반면, 정비 토요일의 계획된 교체는 부품값과 한 시간이 듭니다.

CQA 예측이 어려운 곳에서 PdM을 다루기 쉽게 만드는 것은 라벨입니다. 소프트 센서(값싼 신호로부터 측정하기 어려운 양을 추론하는 모델)는 학습할 비싼 오프라인 참조 — 참값의 실험실 측정 — 가 필요합니다. PdM은 대체로 그렇지 않은데, 진짜 파국적 고장은 너무 드물어 지도 분류기(각 예시가 정답으로 표시된 — 여기서는 "고장" 또는 "건강함" — 예시들로부터 학습하는 모델)를 훈련할 수 없기 때문입니다 — 펌프당 몇 년에 한 번 베어링 고장이 날까 말까입니다. 그래서 배포 가능한 정식화는 거의 언제나 비지도(unsupervised)입니다(정답 라벨이 전혀 없이 데이터의 모양을 학습함). 정상 운전의 기준선 창에서 "건강함"이 어떻게 생겼는지 학습한 뒤, 라이브 신호가 그 영역(envelope)에서 이탈할 때 경보를 올립니다. 이것은 황금-배치 영역(golden-batch envelope)MSPC와 같은 개념적 수입니다. 정상의 모델을 세우고, 그것에 대해 새로움(novelty)을 점수 매기는 것. 가장 단순한 버전은 진동 RMS(root-mean-square, 진동 신호의 전체 에너지)에 대한 1차원 관리도이고, 더 풍부한 버전은 다중-센서 판독이 건강한 구름에서 얼마나 먼지를 점수 매깁니다 — 예컨대 PCA/오토인코더 재구성 오차(건강한 데이터로 훈련된 모델이 새 판독을 얼마나 나쁘게 다시 만드는지)로, 고립 숲(isolation forest)이나 단일-클래스 SVM(둘 다 건강한 데이터가 차지하는 영역을 단순히 떼어 내고 그 밖의 무엇이든 표시하는 다른 탐지기)이 흔한 대안입니다 — 여기서 그 잔차가 건강 점수입니다. 이들 각각은 아래 사다리에서 풀어 봅니다.

범위를 정직하게 유지하는 바이오-특화 단서가 하나 있습니다. 여기 이탈-점수 이야기는 보편적인 회전-장비 이야기이지만, 바이오의약품 공장에서 배치를 가장 자주 폐기시키는 실패는 멸균성 또는 무결성 상실 — 일회용 백 용접부, 멸균-등급 필터, 또는 청정-유틸리티 초과 — 이며, 이는 진동 z-점수가 결코 보지 못합니다. 그것들은 사용-전/후 무결성 시험과 청정-유틸리티(WFI, 청정 증기) 품질 추세로 감시되는데, 회전-자산 PdM 사다리 안이 아니라 그 곁에 자리하는 다른 감시 규율입니다.

"정상"을 모델링하는 네 가지 방법, 필요한 것으로 순위를 매겨

비지도 PdM 계통은 사다리이며, 당신이 올라가는 단은 정교함 그 자체가 아니라 센서를 몇 개 가졌고 경고가 얼마나 일찍 필요한가로 정해집니다.

  • 단변량 관리도. 단일 스칼라 — 일별 진동 RMS, 모터 전류 — 에 건강한 창의 평균과 표준편차를 한계로 삼습니다. 건강 점수는 표준화된 이탈(라이브 값에서 기준선 평균을 빼고 기준선 표준편차로 나눔)이며, 3-시그마 — 건강한 평균에서 3 표준편차로, 건강한 신호가 우연으로 그만큼 벗어나는 일이 거의 없기에 통상적인 경보 지점 — 에서, SPC(statistical process control, 공정이 정상 범위를 벗어날 때를 짚어내는 고전적 관리도 규율)에서와 똑같이 경보합니다. 가장 값싸고, 가장 감사 가능하며, 더 풍부한 어떤 방법이든 가치를 더한다고 증명해야 하는 바닥선.
  • 다변량 PCA / Hotelling의 T-제곱. 여러 상관된 채널(진동, 전류, 두 베어링 온도)을 쌓고, 건강한 창에 PCA — 주성분 분석(principal component analysis), 건강한 데이터가 실제로 변하는 몇 개의 결합된 방향을 찾아냄 — 를 적합한 뒤, 두 통계량을 감시합니다. T-제곱 거리는 판독이 그 정상 방향을 따라 얼마나 멀리 앉는지(모델이 예상한 표류, 단지 더 많을 뿐)를 재고, 제곱 예측 오차(SPE 또는 Q)는 그것에서 벗어나 얼마나 멀리 앉는지(건강한 모델이 한 번도 본 적 없는 진정으로 새로운 패턴 — "직교"란 그저 모델에 축이 없는 방향을 뜻함)를 잽니다. 진정으로 새로운 결함을 잡는 것은 SPE 쪽이며, 변수별 SPE 기여는 어느 센서가 고장 났는지 알려 줍니다 — MSPC 모듈(MSPC module)BATCH-2026-004의 HCP를 가리킬 때 쓰는 바로 그 진단입니다.
  • 오토인코더의 재구성 오차. 오토인코더는 판독을 몇 개의 숫자로 짜낸 뒤 다시 만들도록 훈련된 작은 신경망입니다. 건강한 데이터로만 훈련하면 건강한 판독은 잘 다시 만들고 낯선 것은 나쁘게 만듭니다. 그래서 새 데이터에 돌릴 때(추론 시), 재구성 잔차 — 입력과 다시 만든 판본 사이의 간격 — 가 건강 점수입니다. 선형 PCA가 놓치는 비선형 결합을 잡지만, 적합에 더 많은 데이터가 들고 심사자에게 설명하기 더 어려운 모델이라는 대가가 따릅니다.
  • 고립 숲 / 단일-클래스 SVM. 건강한 데이터가 차지하는 영역을 떼어 내고 그 밖의 모든 것을 이상으로 점수 매기는 순수 새로움 탐지기 — 바이러스-제거 모듈이 오염된 여과 운전을 표시하는(viral-clearance module flags a fouled filtration run with) 그리고 직렬화 계층이 짧은 케이스를 점수 매기는(serialization layer scores a short case with) 것과 같은 고립-숲 패턴. "정상"이 이상하게 생긴 구름일 때 유용하지만, 그것들은 보정된 확률이 아니라 점수를 주고, 어느 신호가 움직였는지에 대한 본래적 진단이 없습니다.

각 단은 같은 질문에 답합니다 — 오늘은 건강함에서 얼마나 멀리 떨어졌는가? — 그리고 얼마나 많은 구조를 표현할 수 있고 그것이 데이터와 설명에서 얼마나 드는가에서만 다릅니다. GMP(Good Manufacturing Practice — 규제받는 의약품 공장이 운영되는 법적으로 강제되는 품질 규칙) 공장에서 설명 가능성 비용은 진짜입니다. 단변량 관리도와 PCA SPE-기여 도표는 자신의 산술만으로 감사를 통과하는 반면 — 심사자가 모든 숫자를 손으로 다시 유도할 수 있습니다 — 오토인코더 잔차는 MLOps 장(MLOps chapter)이 내부를 심사자가 지면에서 읽어낼 수 없는 어떤 모델에든 요구하는 것과 같은 의도된-용도 범위 설정(모델이 무엇에 쓰여도 되고 안 되는지를 정확히 적은 서면 진술), 변경 관리(모든 변경이 공식적으로 검토되고 승인됨), 인간 처분(모델이 아니라 자격 있는 사람이 최종 판단을 내림)이 필요합니다.

이탈 점수, 구체적으로

신뢰할 수 있고 감사 가능한 PdM 패턴은 건강한 기준선으로부터의 z-거리입니다. 교반 모터의 일별 진동 RMS를 취하고, 알려진-양호 날들의 기준선 창에서 평균과 표준편차를 적합한 뒤, 이후의 모든 날을 그 기준선으로부터 몇 표준편차인지로 표현합니다. 그 이탈이 경보 임계값을 넘으면 — 3-시그마가 SPC 관례를 빌린 자연스러운 선택입니다 — 경보가 생기고, 결정적으로 당신은 그것을 경성(hard) 고장 전에 여유 시간을 두고 갖게 됩니다. 여유 시간이 가치의 전부입니다. 그것은 비상사태를 계획된 작업으로 바꿉니다. (실제 프로그램에서는 상대적 이탈 점수가 절대적 기준 — 광대역 진동 속도를, 밀리미터/초 단위로, ISO 20816(기계 진동을 "양호 / 허용 / 불만족 / 불용"의 심각도 등급으로 분류하는 국제 표준)에 대해 등급 매김 — 곁에 자리하여, 경보가 이 기계 자신의 건강한 창으로부터의 표류뿐 아니라 물리적 심각도 척도에도 닻을 내립니다. 아래에서 쓰는 1.8 mm/s 기준선은 작은 기계의 현실적 "양호" 범위 안입니다.)

이 산술은 의도적으로 단변량 바닥선입니다. 기준선 창은 알려진-양호 날들에서 와야 합니다 — 전체 추적이 아니라 건강한 구간에서만 평균과 표준편차를 적합하세요. 그러지 않으면 당신이 탐지하려는 마모가 당신 자신의 한계로 새어 들어가 경보가 결코 울리지 않습니다. 표본 표준편차(개수가 아니라 개수에서 1을 뺀 값으로 나눔, ddof=1)를 쓰세요. 작은 창에서는 개수로 나누면 참된 산포를 약간 과소-추정하는데, 1을-빼는 보정이 그 체계적 치우침을 제거하기 때문입니다(불편(unbiased) 추정량이란 일관되게 너무 작은 것이 아니라 평균적으로 옳은 것). 기준선이 작은 창이고 단 스물한 날이 다음 달의 임계값을 정할 때 그것이 중요합니다. 경보는 이탈이 3-시그마를 넘는 첫날이고, 여유 시간은 그날에서 결국 닥치는 경성 고장까지의 간격입니다:

# examples/platform/ml/pdm.py
def health_score(signal: np.ndarray, baseline_days: int = 21) -> dict:
"""Unsupervised PdM: z-distance from the healthy baseline window."""
base = signal[:baseline_days]
mu, sd = base.mean(), base.std(ddof=1)
z = (signal - mu) / sd # departure score
alarm = 3.0 # 3-sigma, an SPC threshold
crossed = np.argmax(z > alarm) if (z > alarm).any() else -1
return {"baseline_mean": round(float(mu), 3),
"baseline_sd": round(float(sd), 3),
"alarm_threshold_sigma": alarm,
"first_alarm_day": int(crossed),
"max_z": round(float(z.max()), 2)}

특징이 풍부할수록 경고는 더 빨라집니다. 원시 진동 진폭은 끝 무렵에만 치솟지만, 스펙트럼 특징 — 베어링의 특성 결함 주파수에서의 에너지, 또는 고주파 대역의 첨도(kurtosis) — 은 훨씬 일찍 움직이며, 그것이 상용 PdM 플랫폼(AVEVA Predictive Analytics, Siemens Senseye, Aizon과 Rockwell의 장비-분석 계층)이 단일 스칼라가 아니라 주파수-영역 특징에 기대는 이유입니다 [1][2]. 아래 방법은 의도적으로 스칼라 버전인데, 그것이 정직한 바닥선이기 때문입니다. 한 숫자짜리 z-점수조차 여유 시간을 사 준다면, 스펙트럼 버전은 더 많이 사 줍니다.

잔여 유효 수명 대 이상: 두 가지 다른 질문

PdM은 같은 z-점수가 똑같이 답하지 못하는 두 질문으로 갈립니다. 첫째는 이상 탐지(anomaly detection) — 기계가 지금 건강함에서 이탈하고 있는가? — 로, 이탈 점수가 직접 답하며 배포된 거의 모든 바이오제약 PdM 시스템이 실제로 하는 일입니다. 둘째이자 더 어려운 질문은 잔여 유효 수명(remaining useful life, RUL) — 고장까지 며칠 남았는가? — 으로, 사건-발생-시간(time-to-event)에 대한 회귀(예/아니오가 아니라 며칠 수를 예측하는 모델)이며, 공장이 좀처럼 갖지 못하는 고장-까지-운전(run-to-failure) 이력 — 기계를 망가지는 순간까지 줄곧 추적한 완전한 기록 — 이 필요합니다. RUL은 발표된 연구가 사는 곳이지만(열화-궤적 모델, 입자 필터, 그리고 순환 및 생존 모델 — 한 공정이 사건 전에 얼마나 오래 돌아가는지를 학습하는 방법 계열 — 을 엔진과 베어링의 고장-까지-운전 벤치마크로 훈련), 데이터 천장이 가장 세게 무는 곳이기도 합니다. 한 번 고장 났거나 한 번도 고장 나지 않은 기계로부터 열화 곡선의 모양을 학습할 수는 없습니다. 그래서 배포 가능한 현실은 이상 쪽 — 여유 시간을 두고 경보를 울리는 것 — 이며, 실무에서 "잔여 유효 수명"은 보통 학습된 생존 모델이 아니라 이탈 추세를 그 임계값까지 거칠지만 감사 가능하게 외삽하는 것입니다. 배치 실패를 다스리는 것과 같은 라벨-희소 제약이 장비 고장을 다스리며, 바로 그것이 두 배포 가능한 답이 모두 비지도인 이유입니다.

배치-실패 예측: 표적으로서의 OOS

예지보전은 장비에 관한 것입니다. 두 번째 계통은 제품에 관한 것입니다. 모델이 운전 도중이나 끝에서 배치가 출하(배치를 출하하게 하는 최종 가부 결정) 합격할지, 아니면 규격-벗어남(out-of-spec, OOS) 결과 — 등록된 규격 한계를 벗어난 값 — 로 거부될지 예측할 수 있는가? 이것이 배치-실패 예측(batch-failure prediction)(그리고 그 연속형 사촌인 수율 예측(yield prediction)일탈 예측(deviation prediction))이며, 이는 이 책의 앞선 모든 것과 진정으로 다른 ML 과제입니다 — 분석 단위가 시점이 아니라 배치이기 때문입니다.

그 구분이 어려움의 전부입니다. 라만 소프트 센서(라만 스펙트럼 — 배양액에 녹아 있는 것의 광학적 지문으로, 연속적으로 측정됨 — 을 받는 모델)는 단일 배치에서 수천 개의 훈련 행을 갖는데, 그 스펙트럼이 변함에 따라 매분 새로운 예측을 하기 때문입니다. 배치-실패 모델은 배치당 행 — 고정 길이의 공정-요약 특징 벡터(최대 생존 세포 밀도, 적분 락트산, 수확 탁도, 포획 부하, 온도 NOR 밖의 누적 시간) 하나에 하나의 이진 결과, 합격 또는 실패를 짝지은 것 — 을 갖습니다. 의 개수는 당신이 지금껏 운전한 배치의 개수이며, 그것이 공장 수준 전체 사업의 묶는 제약입니다 [3]. 단일 부지의 상업 공정은 수년에 걸쳐 수백 개의 배치를 쌓을 수 있고, 임상 또는 신제품 공정은 한 줌을 갖습니다. 이것이 1장(Chapter 1)의 소량-데이터 천장이며, 가장 심각한 형태인데, 여기서는 그것이 행이 아니라 배치로 측정되기 때문입니다.

배치를 특징화하기: 시계열에서 한 행으로

이 계통을 정의하는 모델링 수는 특징화(featurization)입니다. 각 배치의 여러 날, 여러 센서 시계열을 하나의 고정 길이 벡터로 무너뜨리는 것입니다. 배치는 한 행이 아닙니다 — 그것은 두 주 동안 몇 초마다 샘플링된 수십 개의 태그 궤적입니다 — 그리고 모델은 "배치당 한 행"이 정의라도 되도록 모든 배치를 같은 한 줌의 숫자로 줄여야 합니다. 예시의 여섯 특징은 각각 원시 측정값이 아니라 물리적으로 의미 있도록 선택된 궤적의 의도적 요약 통계량입니다:

  • peak_VCD_e6_per_mL — 생존-세포-밀도 곡선의 최댓값, 상류 성장 요약.
  • final_titer_g_L — 생산성 종점.
  • integral_lactate — 시간에 걸쳐 적분된 락트산 농도(곡선 아래 면적, 대사-부담 요약), 출하-예측 모듈(release-prediction module)의 적분-VCD 특징과 같은 궤적-적분 발상.
  • harvest_turbidity_NTU — 원심분리와 심층 여과 하류의 청징된 풀의 탁도(흐림 정도, 비탁도 단위 NTU); 청징 이월(carry-over)이자 HCP-위험 동인. 수확 장(harvest chapter)청징-전 수확-공급물의 흐림(훨씬 높게 돌아감)을 모델링합니다. 청징은 그것을 5 NTU 미만의 청징 목표까지 끌어내리며, 이 특징이 여기서 포착하는 것은 그 잔여 이월입니다. 잘 청징된 운전은 그 목표 부근으로 낮게 앉고, 부실하게 청징된 운전은 더 높이 표류합니다.
  • protein_a_load_g_L — 포획 칼럼 부하.
  • temp_excursion_h — 온도 정상 운전 범위 밖의 누적 시간, 운전 전체의 사건-횟수.

피크, 종점, 적분, 그리고 초과-횟수가 네 가지 특징화 관용구이며, 어느 것을 추출할지의 선택이 도메인 지식입니다 — 알고리즘이 아니라 공정 엔지니어가 배치의 무엇이 그럴듯하게 실패를 일으킬 수 있는지를 부호화하는 곳입니다. 원시 시점을 먹인 모델은 갖지 못한 데이터로부터 이것을 다시 학습해야 할 것이고, 좋은 요약을 먹인 모델은 물리에서 출발합니다.

실무에서 특징 벡터는 출하 시점에 한 번 만들어지는 것이 아니라 배치가 진행됨에 따라 자랍니다 — 최대 VCD와 적분 락트산은 배양 종료에, 탁도는 수확에, 포획 부하는 칼럼 뒤에 떨어집니다 — 그래서 모델은 매 이정표에서 다시 점수 매겨집니다. 이것이 다중경로(multiway) / 진화하는-배치 감시 관용구(Nomikos와 MacGregor의 배치 PCA/PLS)로, 포획-종료 경고가 OOS가 굳기 전에 다시-풀(re-pool)할 여지를 여전히 남기게 하며, 정확히 뒤의 해부 그림이 고정하는 as-of 단계 틀입니다. 같은 시간적 논리가 PdM 쪽을 다듬습니다. 정적 일별 z-점수 위에서 이탈은 보통 EWMA나 CUSUM으로 평활되어, 한 번의 잡음 많은 날이 경보를 울리지 않게 합니다 — 약간의 여유 시간을 훨씬 적은 거짓 경보와 맞바꾸는 것 — 그리고 운전-풍부한 이력이 있는 곳에서는 행렬-프로파일(matrix-profile)과 작은 순환 탐지기가 그 위의 연구-등급 단입니다 [2]. 정적 z는 배포 가능한 바닥선으로 남습니다.

진행 중인 예시: BATCH-2026-004

이 시리즈의 캠페인은 정확히 하나의 규격-벗어남 형제를 지닙니다. examples/datasets/hplc_results.csv에서 곧장 읽으면 실패는 명백합니다. BATCH-2026-004는 규격 상한 100.0 ng/mg에 대해 숙주-세포-단백질(host-cell-protein) 결과가 128.0 ng/mg — 66행짜리 출하 표 전체에서 유일한 OOS 값이고, 다른 모든 배치의 다른 모든 분석은 합격합니다. 다른 다섯 배치(BATCH-2026-001/002/003/005/006)는 깨끗하며, HCP 값이 14.953에서 28.203 ng/mg까지로 모두 넉넉하게 규격 안입니다. 그래서 배치-실패 모델이 학습할 라벨은 실재하고 단일-속성입니다. 이 배치는 단량체 순도, 전하 변이체, 또는 다른 어떤 CQA가 아니라 HCP, 숙주-세포-단백질 이월에서 실패했습니다.

메커니즘은 특징에서 중요합니다. 숙주-세포 단백질은 하류-제거 속성이며, 포획(capture)연마(polishing) 단계에서 살아남은 HCP는 공장이 배치당 요약할 수 있는 두 가지로 거슬러 갑니다. 얼마나 많은 숙주-세포 잔해가 하류로 들어왔는지(탁한 수확물이 더 많이 앞으로 나르며, 수확과 청징(harvest and clarification)에서 정해짐)와, 포획 칼럼이 어떻게 부하되고 세척되었는지. 부하는 여러 레버 중 하나입니다 — 단백질 A에서의 제거는 세척 설계, 용출 pH, 수지 선택성에 의해 적어도 그만큼 다스려지며, 부하가 HCP를 모는 것은 주로 그것이 칼럼을 동적 결합 용량(흐름 아래에서 수지가 실제로 붙잡을 수 있는 최대 제품량) 쪽으로 밀어 약하게-결합된 HCP가 공-용출(씻겨 나가는 대신 제품과 함께 칼럼에서 떨어져 나옴)될 때입니다. 그러나 여기서 배치 수준 모델에 가용한 두 요약 특징은 수확 탁도포획 부하이므로, 물리-형상의 모델은 HCP 실패의 동인으로 역가를 모는 상류 성장 지표가 아니라 그 둘을 읽을 수 있는 대리물로 찾아야 합니다. 대신 가령 최대 VCD에서 실패를 "예측"하는 모델은 허위 상관을 학습하고 있을 것이고, 여섯 배치에서는 그것이 절대적으로 가능합니다. 이것은 MSPC 모듈(MSPC module)이 반대 방향에서 도달하는 같은 진단입니다. 그것이 BATCH-2026-004를 SPE(위 PCA 감시기의 제곱 예측 오차) 356.59로, 4.95 경보 한계에 대해 — 정상에서 한참 벗어남 — 표시할 때, 그 오차의 꼬박 83%가 HCP 채널로 거슬러 갑니다. 다변량 감시와 배치-실패 예측이 어느 속성어느 메커니즘에 대해 의견이 일치하며, 그것이 둘 다를 믿을 만하게 만드는 교차 점검입니다.

여섯 배치가 분류기를 훈련할 수 없는 이유

여기 정직한 핵심이 있습니다. 여섯 배치와 한 번의 실패로는 배치-실패 분류기를 적합하거나, 검증하거나, 신뢰할 수 없습니다 — 끝입니다. 하나의 양성 예시는 클래스가 아닙니다. 표준 검정은 데이터 일부를 모델이 결코 훈련하지 않는 폴드(fold)로 떼어 두고 거기서 점수 매기는 것이지만, 실패가 하나면 단일한 보류 폴드는 실패를 담거나(그러면 훈련 집합에는 하나도 없음) 담지 않거나(그러면 시험 집합에 하나도 없음) 둘 중 하나입니다. 당신이 보고하는 어떤 AUC(ROC 곡선 아래 면적 — 점수가 실패를 합격 위로 얼마나 잘 순위 매기는지의 0에서 1까지의 요약으로, 0.5는 동전 던지기, 1.0은 완벽)든 인공물입니다. 이 장의 교훈은 "보라, 우리가 배치-실패 모델을 만들었다"가 아닙니다. 그것은 "여기 모델이 어떻게 생겼을지가 있고, 여기 당신이 필요할 데이터가 있으며, 여기 공장 수준 제약이 행이-아니라-배치인 이유가 있다"입니다. 그리고 그 개수는 당신이 실제로 쓸 수 있는 것을 과장합니다. 제품의 일생에 걸쳐 비교성(comparability) 실험(어떤 제조 변경 후에도 제품이 변하지 않았음을 증명하는 공식 연구), 규모 변경, 수지와 배지 로트 변경, 그리고 방법 이전(공정이나 분석을 새 라인이나 부지로 옮김)이 모집단을 재분할하므로, 성숙한 부지의 수백 배치조차 하나의 교환 가능한 분포가 아니라 여럿입니다 — 전이 학습을 깨뜨리는 바로 그 비정상성(non-stationarity)이, 여기서는 쓸 수 있는 훈련 집합이 배치 개수가 시사하는 것보다 작은 이유로 도착합니다.

그래서 예시 모듈은 두 가지를 나란히 하고, 그 경계를 큰 소리로 표시합니다. 그것은 hplc_results.csvbatches.csv에서 실제 결과를 읽어 지상 진실(5 PASS, 1 OOS, HCP 초과)을 진술합니다. 그다음 — 수확 탁도가 HCP 이월로 들어가 실패를 모는, 실제 BATCH-2026-004 메커니즘으로 — 실제 공정 통계 주위에 수백 개의 배치로 된 예시적 합성 코호트를 만드는데, 오직 경사-부스팅 분류기와 그 특징 귀속을 시연하기 위해서입니다. 모델은 실제이고, 그것이 훈련하는 코호트는 합성된 것이며, 그것이 출력하는 모든 숫자는 예시적이라고 표시됩니다. 그것이 여섯-배치 데이터셋에서 공장 수준 ML을 보여 주는 유일하게 지적으로 정직한 방법입니다.

바이오공정 척추 위 세 계층으로 보인 공장 수준 제조-운영 기계학습의 히어로 도해. 바닥 띠는 세포주에서 바이오리액터, 수확, 포획, 연마, 충전, 출하까지 공유된 공정 라인을 보여 준다. 예지보전 계층이 왼쪽에 자리한다: 교반-모터 진동 신호가 천천히 마모 경사로 상승하고, 건강한 기준선 띠와, 라벨 붙은 여유-시간 간격을 둔 경성-고장 표지 앞에서 교차하는 3-시그마 경보. 배치-결과 계층이 중앙에 자리한다: 캠페인 배치 여섯 개를 열로, 다섯 개의 녹색 PASS와 BATCH-2026-004의 100 규격 상한에 대한 HCP 128을 가진 한 개의 장미색 OOS가, 배치 수준 특징 벡터(최대 VCD, 적분 락트산, 수확 탁도, 포획 부하)를 경사-부스팅 실패-확률 게이지에 입력한다. 일정-및-용량 계층이 오른쪽에 자리한다: 두 바이오리액터 레인에 걸쳐 전환 간격을 두고 빽빽이 채워진 배치 달력, 그 곁에 수요 예보와 유틸리티-부하 곡선을 보여 주는 공급-및-에너지 패널. 캡션 띠는 생산 군집이 CQA의 자율 제어가 아니라 감시, 예지보전, 비전, 인간-개입 문서화임을 짚는다. 공장 수준 학습은 단위 작업 위에 자리합니다: 장비의 예지보전(왼쪽), 제품의 배치-실패 및 수율 예측(중앙, 실제 OOS BATCH-2026-004를 표적으로), 그리고 캠페인의 일정 계획, 용량, 공급망, 에너지 분석학(오른쪽) — 생산 ML이 실제로 사는 군집. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

두 모델 만들기

이 장의 두 모듈은 커밋된 데이터셋 위의 순수 NumPy/Pandas/scikit-learn이므로, 어떤 서비스도 없이 돌아갑니다. 배치-결과 모델부터 시작합시다. 그것은 실제 출하 결과를 읽고, 그다음 예시적 코호트에서 경사-부스팅 실패 분류기를 훈련하며, 그것이 유일하게 정직한 소량-데이터 추정치이기에 배치-별로 묶어 교차검증합니다:

# examples/platform/ml/batch_outcome.py
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import cross_val_predict

# Plant-level summary features a completed batch carries by harvest/release.
FEATURES = [
"peak_VCD_e6_per_mL", # upstream growth summary
"final_titer_g_L", # productivity summary
"integral_lactate", # metabolic-burden summary (lactate * time)
"harvest_turbidity_NTU", # clarification carry-over -> HCP risk
"protein_a_load_g_L", # capture loading
"temp_excursion_h", # cumulative hours outside the temperature NOR
]

def real_release_outcomes() -> pd.DataFrame:
"""The ground truth: 6 batches, one OOS. Read straight from the datasets."""
hplc = pd.read_csv(DATASETS / "hplc_results.csv")
batches = pd.read_csv(DATASETS / "batches.csv")
oos = hplc[hplc.result == "OOS"][["batch_id", "test", "value", "spec_high"]]
return batches.merge(oos.rename(columns={"test": "failing_assay",
"value": "failing_value"}),
on="batch_id", how="left")

def train_failure_model(df: pd.DataFrame) -> dict:
"""Gradient-boosted batch-failure classifier, batch-out cross-validated."""
X, y = df[FEATURES].to_numpy(), df["failed_release"].to_numpy()
clf = GradientBoostingClassifier(n_estimators=200, max_depth=2, random_state=2026)
# 5-fold CV is the honest small-data estimate; never score on the train fold.
proba = cross_val_predict(clf, X, y, cv=5, method="predict_proba")[:, 1]
auc = roc_auc_score(y, proba)
clf.fit(X, y)
imp = dict(sorted(zip(FEATURES, clf.feature_importances_), key=lambda kv: -kv[1]))
return {"n": len(df), "n_failed": int(y.sum()),
"cv_auc": round(float(auc), 3), "top_driver": next(iter(imp)),
"importances": {k: round(float(v), 3) for k, v in imp.items()}}

알고리즘 선택은 부수적이지 않습니다. 경사-부스팅 분류기(gradient-boosted classifier) — 한 번에 하나씩 더해지는 작은 결정 트리들의 팀(앙상블)으로, 각 새 얕은 트리가 그 앞의 트리들이 여전히 저지르는 오차를 바로잡도록(엄밀히는, 그들이 남긴 손실의 경사에 적합되도록) 훈련됨 — 는 신경망이 여기서 따라올 수 없는 세 가지 이유로 배치 수준 표 형식 데이터의 올바른 기본값입니다. 그것은 서로 다른 스케일의 한 줌의 이질적 특징(생존-세포 밀도, 탁도, 시간-횟수)을 전처리 없이 다루고, 트리 분할을 통해 상호작용을 손으로 부호화할 필요 없이 실제 실패의 임계값-및-상호작용 구조(탁도가 높고 부하가 높을 때 HCP가 실패함)를 잡으며, 얕은 트리로(max_depth=2, 그래서 각 트리는 기껏해야 2-방향 상호작용을 봄) 수백 행짜리 심층망이 그러지 못할 방식으로 과적합에 저항합니다. random_state=2026은 부스팅을 재현 가능하게 만드는데, MLOps 장(MLOps chapter)이 숫자가 기록에 떨어지는 어떤 모델에든 고집하는 것입니다.

검증 선택이 정직성이 사는 곳입니다. 다섯 폴드의 cross_val_predict모든 배치에 대해 폴드-밖(out-of-fold) 확률을 만들고 — 각 배치는 그것을 한 번도 보지 못한 모델에 의해 점수 매겨짐 — AUC는 훈련 폴드가 아니라 그 보류된 예측에서 계산됩니다. 실제 배치에서 이것은 배치-밖(batch-out) 교차검증입니다. 유일하게 방어할 수 있는 소량-데이터 추정치인데, 배치를 그 위에 훈련한 모델로 점수 매기면 일반화가 아니라 암기를 보고할 것이기 때문입니다. 실제 실패가 하나뿐이면 이 절차도 당신을 구하지 못합니다 — 여섯 배치의 5-폴드 분할은 패러디입니다 — 바로 그것이 코호트가 합성이고 경계가 큰 소리인 이유입니다. 특징 중요도는 적합된 모델의 특징당 평균 불순도 감소에서 나오며, 합이 1이 됩니다 — "불순도"란 트리 가지에서 합격/실패 라벨이 얼마나 섞여 있는지로, 그것들을 깔끔하게 가르는 특징이 중요해 보임 — 그러나 이 불순도(Gini) 중요도는 편향되어(이진 특징을 과소-인정하고, 서로 다른 값이 많은 연속 특징을 과대-인정하는데, 단지 그것들이 트리에 가를 자리를 더 많이 주기 때문임) 첫-패스 읽기일 뿐입니다. 조사자가 신뢰해야 하는 실행 가능한 귀속은 아래에서 소개하는 순열 중요도(또는 SHAP)입니다.

python ml/batch_outcome.py를 실행하면 실제 지상 진실을, 그다음 배포 가능한 모델이 마주할 같은 신뢰성 검토를 거친 예시적 모델을 출력합니다 — 표제 AUROC만이 아니라 그것의 불확실성, 보정, 그리고 모델-불가지론적(model-agnostic) 귀속까지:

REAL release outcomes (6 batches):
5 PASS, 1 OOS
OOS batch = BATCH-2026-004: HCP_ng_per_mg = 128.0 (spec <= 100.0)

batch-failure classifier (ILLUSTRATIVE cohort, n=240, 39 failed, rate=0.163):
5-fold CV ROC-AUC = 0.978 (95% CI (0.934, 0.999)) # illustrative
calibration: raw GBM Brier=0.0261 ECE=0.0272 -> isotonic Brier=0.0181 ECE=0.0 (recalibration tightens the probabilities)
split-importance top driver = harvest_turbidity_NTU
permutation importance (drop in AUROC when a feature is shuffled):
harvest_turbidity_NTU +0.447
protein_a_load_g_L +0.002
integral_lactate +0.001
temp_excursion_h +0.000
peak_VCD_e6_per_mL +0.000
final_titer_g_L +0.000
partial dependence (log-odds of failure) on harvest_turbidity_NTU: -8.847 at 0.91 -> 9.672 at 13.0 (rising overall, non-monotone mid-range = the right physics direction)

주의 깊게 읽으세요. 실제 블록(바로 위에 출력된 5 PASS, 1 OOS, HCP에서 128.0 ng/mg)이 유일한 글자 그대로의 주장입니다. 예시적 블록은 실제 모델이 살아남아야 하는 네 가지 점검 아래에서 좋은 배치-실패 모델의 형상을 보여 줌으로써 제 몫을 합니다. 점수가 불확실한가(신뢰구간), 그것이 진짜 확률인가(보정), 어느 특징이 진정으로 그것을 모는가(순열 중요도), 그리고 어떻게인가(부분 의존성)?

첫째, 표제는 헐벗은 숫자가 아닙니다. 교차검증 AUC 0.978은 이제 부트스트랩 95% 신뢰구간(bootstrap 95% confidence interval) (0.934, 0.999)과 함께 따라갑니다 — 수백 행짜리 코호트에 대한 단일 점 추정치는 불확실성이 실제로 얼마나 넓은지를 숨기는데, 이 구간이 그 불확실성을 읽을 수 있게 만듭니다. 그것이 높은 것은 합성 코호트가 깨끗한 탁도→HCP 신호를 갖기 때문입니다.

둘째, 모델은 순위가 매겨질 뿐 아니라 보정됩니다(calibrated). 순위를 잘 매긴다는 것은 위험한 배치를 안전한 것 위로 정렬한다는 뜻이고, 보정은 0.07이라는 점수가 실제로 약 7%의 빈도로 일어나서 그 숫자를 참된 확률로 읽을 수 있다는 뜻입니다. 경사-부스팅 점수는 순위는 잘 매기지만 그 원시 확률은 과신하며, 보정 점검이 정확히 그것을 보여 줍니다. 두 점수가 그 간격을 잽니다. Brier 점수(예측 확률과 0/1 결과 사이의 평균 제곱 오차 — 낮을수록 좋음)와 기대-보정-오차(expected-calibration-error, ECE)(예측 빈도와 관측 빈도의 평균 불일치 — 0이 완벽). 원시 GBM은 Brier 0.0261과 ECE 0.0272를 내고, 등위 재보정(isotonic recalibration) — 원시 점수를 적합된 계단 모양 곡선에 통과시켜 관측 빈도에 줄을 맞추는 방법 — 이 그것을 Brier 0.0181과 ECE 0.0으로 조입니다. 그 쌍을 주의 깊게 읽으세요. 원시 ECE는 폴드-밖(모델이 결코 훈련하지 않은 행에서 측정)인 반면, 여기 등위 ECE는 재보정 곡선이 적합된 바로 그 행에서 표본-내(in-sample)로 측정됩니다. 유연한 적합은 자신이 맞춰진 데이터를 늘 정확히 맞출 수 있기에, 그 0.0은 그것의 표본-내 바닥선이지 표본-밖(out-of-sample) 보장(신선하고 보지 못한 데이터에서 낼 점수, 배포에서 실제로 중요한 숫자)이 아닙니다. 그 쌍이 보여 주는 것은 재보정의 형상 — GBM 특유의 과신을 제거하는 단조 사상 — 이지, 동일 조건 표본-밖 감소가 아닙니다. 그것이 중요한 까닭은 하류의 결정 띠(주시 / 보류 / 출하-추적)가 그 숫자를 확률로 다루기 때문입니다 — 원시의 과신하는 점수는 배치를 잘못된 띠에 놓을 것입니다.

셋째 — 그리고 이것이 귀속 이야기의 정직한 중심입니다 — 모듈은 이제 트리 자신의 분할-중요도만이 아니라 모델-불가지론적 귀속(model-agnostic attribution)을 보고합니다. 원시 feature_importances_(분할-중요도)는 여전히 수확 탁도를 최상위 동인으로 명명하지만, 원시 분할-횟수는 트리의 분할-횟수 편향(split-count bias)에 속을 수 있습니다(후보 분할 지점이 많은 특징은 보류 점수를 실제로 움직이지 않으면서도 중요해 보일 수 있음). 순열 중요도(permutation importance)는 더 날카로운 질문을 합니다. 한 특징의 열을 무작위로 섞을 때(나머지 모두는 그대로 둔 채 그것과 결과의 연결만 파괴함) 모델의 AUROC가 얼마나 떨어지는가? 수확 탁도를 섞으면 AUROC가 0.447 듭니다. 다른 모든 것은 본질적으로 아무것도 들지 않습니다(포획 부하 +0.002, 적분 락트산 +0.001, 나머지 +0.000). 그리고 부분 의존성 곡선(partial-dependence curve)은 한 특징을 그 범위에 걸쳐 쓸며 모델의 평균 반응을 읽어냄으로써 어느 특징이 중요한지만이 아니라 어떻게 중요한지를 말합니다. 실패의 로그-오즈(실패-대-합격 오즈의 로그 — 분류기가 작동하는 척도로, 음수는 "있을 법하지 않음", 양수는 "있을 법함"을 뜻함)가 탁도에서 전체적으로 상승하여, 0.91 NTU에서 −8.847부터 13.0 NTU에서 9.672까지 오릅니다 — 올바른 물리 방향이지만, 깊이-2 부스팅 격자는 깔끔하게 오르기보다 중간 구간에서 위아래로 흔들립니다. 순열 중요도와 부분 의존성은 원시 중요도가 그러는 것처럼 분할-횟수 편향에 속을 수 없는데, 그것들이 모델 자신의 점수와 실제 예측 표면에 대고 측정되기 때문입니다. (SHAP(SHAP)은 단일 예측을 분해하는 관련된 게임-이론적 귀속입니다. 여기서 실행 가능하고 의존성 없는 것은 순열 중요도와 부분 의존성 곡선 — 이 장이 주장한 대리물입니다.)

코호트 자체가 물리를 부호화하므로 — 잠재 HCP 이월이 탁도와 온도 초과와 함께 상승하고(hcp = 20 + 9.0 * turbidity + 1.6 * temp_h + noise) 실패 라벨이 hcp > 100, 실제 100 ng/mg 규격입니다 — 순열 중요도와 부분 의존성 곡선이 둘 다 탁도를 골라낼 때 그것들은 허위 상관물이 아니라 생성 메커니즘, BATCH-2026-004를 폐기시킨 바로 그 메커니즘을 복원하는 것입니다. 그것이 정확히 당신이 실제 모델을 자격검증할 속성인데, 출하 결정을 위해서는 합성 코호트에서 그것을 결코 훈련하지 않을지언정 그렇습니다.

합성 코호트의 0.163 실패율(240 중 39)은 그 자체로 교육적 선택입니다. 그것은 실패가 설계상 드문 실제로 잘 운영되는 공정보다 훨씬 높은데, 정확히 분류기가 학습할 양성을 충분히 갖도록 하기 위함입니다. 2–3% 실패율의 실제 코호트는 당신을 클래스-불균형 체제 — 한 결과(합격)가 다른 것(실패)을 압도적으로 능가하는 — 에 놓을 것입니다. 거기서 AUC는 듣기 좋게 들리고, 대신 정밀도-재현율 사고가 필요합니다. 정밀도는 "우리가 표시한 배치 중 정말로 실패한 것은 몇이나 되는가", 재현율은 "실패한 배치 중 우리가 잡은 것은 몇이나 되는가"이며, 둘의 균형을 잡는 운전점(점수 절단값)을 고릅니다. 그것이 정확히 출하-예측 모듈(release-prediction module)이 8% 유병률에서 보여 주는 것으로, 단일 AUROC가 아니라 무-기량(no-skill) 기준선(아무것도 모르는 모델이 받을 점수로, 실패율과 같음)에 대한 AUPRC(정밀도-재현율 곡선 아래 면적)와 각 임계값에서의 재현율/정밀도 절충을 보고합니다.

예지보전 모듈은 비지도 이탈 점수입니다. 합성 추적이 방법을 읽기 쉽게 만듭니다. 처음 몇 주는 안정된 기준선(1.8 + 작은 사인 곡선), 그다음 고장 두 주 전까지 아무것도 하지 않다가 52일째에 심긴 결함으로 지수적으로 오르는 베어링-마모 경사:

# examples/platform/ml/pdm.py
def synth_motor_run(n_days: int = 60, fail_day: int = 52) -> np.ndarray:
"""Daily agitation-motor vibration RMS (mm/s); healthy, then a wear ramp."""
t = np.arange(n_days)
healthy = 1.8 + 0.05 * np.sin(t / 6.0) # stable baseline + cycle
# bearing wear: nothing, then an exponential ramp into the failure
elapsed = np.clip(t - (fail_day - 14), 0.0, None)
wear = np.where(t < fail_day - 14, 0.0, 0.012 * elapsed ** 1.7)
noise = RNG.normal(0, 0.06, n_days)
return healthy + wear + noise
predictive maintenance (ILLUSTRATIVE agitation-motor vibration):
healthy baseline = 1.821 +/- 0.054 mm/s RMS
3-sigma health alarm first trips on day 43 (max departure 38.17 sigma)
hard failure scheduled day 52 -> 9 days of lead time # illustrative
ASSERT ok: the health alarm fires before failure with lead time (illustrative).

9일의 여유 시간(예시적)이 경제적 논거의 전부입니다. 베어링은 52일째에 고장 나지만, 건강 경보는 43일째에 울려, 배치 도중의 비상사태를 계획된 교체로 바꿉니다. 숫자가 옳은 이야기를 한다는 데 주목하세요. 기준선이 빡빡하므로(1.821 ± 0.054 mm/s RMS) 작은 절대 상승이 큰 상대적 이탈이 됩니다 — 최대 이탈이 38.17 시그마에 도달하며, 그것이 핵심입니다. 안정된 건강한 창에 대해서는 적당한 진동 잠식조차 틀림없는 신호이고, 3-시그마는 기계가 실제로 눌어붙기 한참 전에 울립니다. 마모 경사는 초선형(지수 1.7)이며, 그것이 경보가 전날이 아니라 9일 전에 울리는 이유입니다. 선형 잠식은 여유 시간을 덜 사 줄 것이고, 스펙트럼 특징은 더 사 줄 것입니다. 시뮬레이터는 장비 결함을 모델링하지 않으므로 진동 추적은 합성이지만 — 방법, 즉 기준선-과-이탈은 실제로 출하되는 것입니다.

일발-적중과 예외-검토

세 번째 계통은 예측이 전혀 아닙니다. 그것은 작업량 문제입니다. 모든 GMP 배치는 전자 배치 기록(electronic batch record, EBR) — 배치의 완전한 서명된 로그로, 수천 개의 개별 항목(운전 중에 사람이나 계측기가 기록한 각 값, 매개변수, 단계)이 듦 — 을 만들고, 역사적으로 사람 검토자가 출하 전에 그 모두를 읽었습니다 — 느리고, 비싸며, 출하 일정이 죽으러 가는 곳입니다. 실행-계층의 답은 예외-검토(review-by-exception)입니다. MES가 레시피를 실행하고, 허용 범위 안에 있는 항목을 자동으로 검증하며, 사람 검토자에게 예외만 — 한계 밖으로 떨어졌거나 판단이 필요한 항목 — 을 드러냅니다. 일발-적중(right-first-time, RFT)은 동반 지표입니다. 재작업이 필요한 일탈 없이 완료되는 배치의 비율.

이곳이 ML이 기존 생산 척추를 대체하는 것이 아니라 그 위에 계층을 얹는 곳입니다. Körber PAS-X가 여기서 정전적(canonical) MES이며, 그 벤더 자료는 예외-검토를 표제 능력으로 삼아 "최대 98% 일발-적중"을 인용합니다 — 벤더-자체보고이고 전형적 결과가 아니라 최선의 경우 천장인 수치이지만, 그 능력(허용-내 항목의 규칙-기반 자동-검증)은 진정으로 상용입니다 [4]. 그 밑의 메커니즘은 대부분 기계학습이 아닙니다. 예외-검토는 결정론적 규칙 엔진입니다 — 모든 항목에는 규격이 있고, MES가 각각을 그 한계에 대조하며, 허용-밖 항목만 사람에게 도달합니다. 그 결정론은 한계가 아니라 특징인데, "값이 등록된 범위 안에 있을 때 자동으로 검증하라"는 규칙은 자신의 산술만으로 감사 가능하기 때문이며, 바로 그것이 이 능력이 상용인 반면 이 장의 지도 모델들은 여전히 파일럿인 이유입니다.

그 위에 얹히는 ML 추가는 두 겹입니다. 어떤 예외가 진짜 일탈이 될 가능성이 높고 어떤 것이 잡음인지를 분류(triage)하는 분류기 — 비슷한 이전 사례를 검색하는 TF-IDF 일탈-분류 NLP(TF-IDF deviation-triage NLP)(TF-IDF는 쓰인 서사를, 그것에 특징적인 단어에 가중치를 주어 숫자로 바꾸는 단순한 방법이고, 그다음 NLP — 자연어 처리(natural-language-processing) — 모델이 그 서사를 그 범주로 라우팅함)가 정확히 이 계층입니다 — 그리고 다음 장(next chapter)에서 다루는 생성형-AI 일탈/CAPA(시정 및 예방 조치(corrective and preventive action) — 일탈 후에 여는 공식적 고치고-예방하는 기록) 초안 작성. 결정적인 단서 — 그리고 이 절 전체의 결실 — 는 그 모두가 인간-개입(human-in-the-loop)이라는 것입니다. 모델은 제안하고, 자격 있는 검토자가 처분합니다. 이것은 양식적 선호가 아닙니다. 그것은 Purolea 이후의 규제 현실입니다 — Purolea는 FDA의 첫 AI-인용 cGMP(current Good Manufacturing Practice — 의약품을 만드는 데 적용되는 구속력 있는 현행 품질 규제) 경고장(규제 위반에 대한 공식 집행 통지)에 명명된 회사로, 그것이 규격, SOP, 마스터 생산 기록을 품질 부서 검토 없이 생성하는 AI 에이전트를 썼기에 2026년 4월 2일 발부되었는데, 그것이 정확히 예외-검토 ML이 넘어서는 안 되는 선입니다 [5].

근거

본문이 말하지 않은 것만 더하면: MES 능력으로서의 예외-검토는 독립적으로 인정받습니다 — Gartner는 PAS-X를 MES 리더로 평가합니다 — 그래서 능력은 확립된 것이지만, 구체적 RFT 백분율과 설치 기반 수치는 독립 검증된 것이 아니라 벤더 자료입니다.

인터페이스 계약: 예측의 자기-점검이 상태 코드가 되다

예외-검토는 이 이야기의 인간-대면 절반입니다. 기계-대면 절반은 예측이 애초에 그 예외를 올리려면 — 그리고 조용히 운영자를 오도하지 않고 제어 시스템으로 건너가려면 — 만족해야 하는 인터페이스 계약(interface contract)입니다. 이 장은 OPC-UA / 히스토리언 / MES 배관을 여러 번 명명했습니다 — 예외-검토가 MES 위에 올라타고, 예측이 태그에 떨어지고, 히스토리언이 감사 추적을 보관함 — 그러나 인터페이스를 명명만 하고 코드로 결코 보여 주지 않는 책은 무엇이 선을 건너는지 독자가 추측하게 둡니다. 모음은 이제 그 인터페이스를 실행 가능한 코드에 고정합니다. examples/platform/ml/integration_opcua.py. 작동된 사례는 포도당 소프트 센서의 예측이지만, 그 계약은 배치-실패나 PdM 점수가 나가는 길에 만족해야 하는 것과 같습니다. 출력만 하는 숫자는 과학 프로젝트입니다. GMP 공장에서 돌아가려면 그것은 상태를 나르고, 감사 추적을 남기고, 자신의 예외를 라우팅해야 합니다.

계약은 세 부분입니다. 첫째, 모든 예측은 값, UTC 출처 타임스탬프, 그리고 상태 코드(StatusCode)Book 3의 OPC UA 장(Book 3's OPC UA chapter)에서 상세히 세운 품질 필드 — 를 나르는 OPC UA 태그(여기서는 BR101.Glucose_SoftSensor.PV)에 기록됩니다. OPC UA 상태 코드의 상위 두 비트가 모든 판독을 세 가지 품질 심각도 — GOOD, UNCERTAIN, BAD — 로 분류하며, 핵심 전체는 품질 코드가 I/O 채널이 아니라 모델 자신의 자기-점검에 의해 구동된다는 것입니다. 좁은 구간을 가진 도메인-내 예측은 GOOD입니다. 도메인-밖 입력(모델이 훈련된 어떤 것과도 다른 입력 — 소프트-센서 모듈(soft-sensor module)이 세운 적용 가능성-영역(applicability-domain) 플래그로, 위 PdM 사다리의 바로 그 Hotelling T-제곱과 SPE 점검이며, 여기서는 이 입력이 훈련 구름 안에 앉는지를 물음)이나 너무 넓은 예측 구간은 UNCERTAIN입니다. 누락되거나 유한하지 않은 입력 — 센서 결함 — 은 BAD입니다. 둘째, 모든 기록은 하나의 귀속 가능한 행으로 히스토리언에 덧붙여집니다 — 태그, 값, 품질, 모델 버전, 그리고 적용 가능성-영역 통계량(Hotelling T-제곱, SPE, 구간 폭) — 이는 배치 한참 뒤에도 기록이 왜 그 품질을 나르게 되었는지 재구성하게 해 주는 ALCOA+ / 21 CFR Part 11 감사 추적(ALCOA+는 데이터-무결성 점검표 — 기록은 귀속 가능(Attributable), 가독(Legible), 동시대(Contemporaneous), 원본(Original), 정확(Accurate)해야 하며 그 이상; 21 CFR Part 11은 전자 기록과 서명을 신뢰할 수 있게 만드는 FDA 규칙)입니다. 셋째, 모든 비-GOOD 기록은 MES 예외-검토 사건(review-by-exception event)을 올립니다 — 정확히 PAS-X 양식의 시스템이 사람에게 라우팅하는 일탈 — 반면 GOOD 기록은 루프 안의 사람 없이 곧장 흘러갑니다.

열 번의 기록 중에서 축약하면, 계약은 이렇게 생겼습니다:

IN-MEMORY OPC-UA / historian / MES interface CONTRACT simulation (no live server)
tag = BR101.Glucose_SoftSensor.PV model = glucose-pls-v2.3.0 batch = BATCH-2026-001
AD limits: T2<=9.0 SPE<=4.0 interval_width<=3.0 g/L
-- OPC UA tag writes (timestamp | tag | value | quality) --
2026-02-15T06:00:00Z BR101.Glucose_SoftSensor.PV 3.98 GOOD
2026-02-15T08:00:00Z BR101.Glucose_SoftSensor.PV 3.88 UNCERTAIN
2026-02-15T14:00:00Z BR101.Glucose_SoftSensor.PV 3.63 UNCERTAIN
2026-02-15T16:00:00Z BR101.Glucose_SoftSensor.PV None BAD
-- MES review-by-exception events (one per non-GOOD write) --
[2026-02-15T08:00:00Z] BATCH-2026-001 ... -> UNCERTAIN: applicability_domain: out-of-domain (T2=14.5>9.0 or SPE=1.1>4.0)
[2026-02-15T14:00:00Z] BATCH-2026-001 ... -> UNCERTAIN: wide_interval: PI width 4.6 g/L >3.0 g/L
[2026-02-15T16:00:00Z] BATCH-2026-001 ... -> BAD: sensor_fault: missing/non-finite input
-- summary --
10 writes: 7 GOOD / 2 UNCERTAIN / 1 BAD -> 3 MES exceptions raised

위 네 행은 부분집합입니다. 핵심은 두 번째 UNCERTAIN 기록에 있습니다. (3.88 g/L)은 완벽히 평범해 보이지만 — 오직 적용 가능성-영역 자기-점검(9.0 한계에 대한 T-제곱 14.5)만이 입력이 훈련 구름과 다르다는 것을 잡아내고, 그 판정이 산업 상태 코드가 됩니다. OPC-UA 품질을 존중하는 제어 시스템은 UNCERTAIN 읽기를 믿을 만한 GOOD으로 다루지 않을 것이므로, 도메인-밖 예측은 더 이상 조용히 제어 루프를 조종할 수 없습니다. 세 번째 예외는 역의 실패입니다 — 떨어진 프로브(None 입력)는 어떤 통계량과도 무관하게 BAD인데, 쓰레기에 대한 적용 가능성-영역 점검은 믿을 수 없기 때문입니다. 열 개의 기록 중 일곱은 GOOD이고 곧장 흘러가며, 세 개의 비-GOOD 기록은 각각 정확히 하나의 MES 예외를 올립니다.

범위에 대해 정직합시다. 이것은 인-메모리 계약 시뮬레이션(in-memory contract simulation)이지 라이브 통합이 아닙니다 — 여기에는 OPC-UA 서버도, 히스토리언 데이터베이스도, MES도 없습니다. 그 라이브 배선은 자매 책들의 주제입니다 — 프로토콜 자체는 Book 3의 OPC UA / MQTT 장(Book 3's OPC UA / MQTT chapter)에서, 그리고 Book 2의 연결성 표준(connectivity standards)에서. 이 모듈은 인터페이스만 고정하여, 데이터-과학 쪽이 모양을 바꾸지 않고도 나중에 세 실제 시스템을 볼트로 붙일 수 있게 합니다. 타임스탬프와 품질 코드는 글자 단위로 재현됩니다(시드 RNG, 고정 기준 타임스탬프). 재현 불가능한 감사 추적은 감사 추적이 아니기 때문입니다.

일정 계획, 용량, 공급망, 그리고 에너지

네 번째 계통은 가장 큰 달러 수치가 사는 곳이고, 시사적이게도 방법이 대부분 심층학습이 아닌 곳입니다. 바이오제조 부지는 많은 배치가 두고 경쟁하는 비싼 용기와 스위트(suite)의 희소한 집합입니다. 어느 배치가 어느 용기에서 언제 돌아가는지를 — 전환, 세정 검증, 배지와 완충액 준비, 그리고 공유 유틸리티를 둘러싸고 — 결정하는 것이 생산 일정 계획 / 용량 최적화(production scheduling / capacity optimization) 문제입니다. 올바른 도구는 운영 연구(operations research)입니다. 혼합-정수 선형 계획법(mixed-integer linear programming, MILP — 단단한 규칙을 따르는 최선의 일정을 찾되, "용기 1 또는 용기 2"처럼 일부 결정은 정수여야 함), 제약 계획법(constraint programming — 모든 규칙을 만족하는 어떤 배정이든 사냥하는 관련 솔버), 그리고 이산-사건 시뮬레이션(가상 시계를 공장에 돌려 후보 일정이 실제로 어떻게 펼쳐지는지 봄)이며, 때로 ML 수요 예보를 입력으로 감쌉니다. ML의 역할은 보통 일정 결정 자체를 내리는 것이 아니라, 최적화기가 그것에 대고 일정을 짜는 입력(수요, 배치 지속 시간, 일탈 가능성)을 예보하는 것입니다.

노동 분업은 정확히 진술할 가치가 있는데, "AI 일정 계획" 마케팅이 가장 자주 흐려 놓는 부분이기 때문입니다. 일정 계획자의 목적(용기 유휴 시간 최소화, 또는 분기당 배치 최대화)과 그 제약(한 번에 스위트당 한 배치, 일상적 정치(clean-in-place)/증기 멸균(steam-in-place)(CIP/SIP — 용기를 분해하지 않고 제자리에서 자동으로 세정하고 증기 멸균하는 것으로, 배치 사이에 용기를 몇 시간 차지함)에 더해 다제품 스위트에서 제품 전환마다의 더 긴 세정-검증 전환, 유한한 완충액-준비 용량)은 알려진, 단단한 논리입니다 — 그것들은 추측하는 모델이 아니라, 증명 가능하게 실행 가능하고 거의-최적인 달력을 돌려주는 MILP나 제약 솔버에 속합니다. 불확실한 것 — 다음 분기에 시장이 제품을 얼마나 요구할지, 이 배치가 실제로 얼마나 걸릴지, 이 운전이 하류 전체를 밀어내는 일탈을 던질 가능성이 얼마나 될지 — 이 ML이 예보하는 것이며, 분포 또는 점 추정치를 매개변수로서 솔버에 입력합니다. 실패 모드는 학습된 모델에게 이산 배정을 직접 시키라고 요구하는 것입니다. 그것은 실행 가능성을 보장할 수 없고, 일정 계획자에게 교체를 설명할 수 없으며, 수요가 바뀌면 조용히 열화하는 반면, 솔버는 새 예보에 대고 다시 돌려 신선하고 감사 가능한 일정을 돌려줍니다. 이산-사건 시뮬레이션은 둘 곁에 자리하여, 누군가 강철을 걸기 전에 예보가 정량화하는 가변성에 대고 후보 일정을 스트레스-테스트합니다.

이어지는 수치는 줄곧 하나의 단서를 쥐고 읽으세요. 모든 백분율은 단일-회사 또는 단일-프로그램 자체보고이며 — 배포는 실재하지만 숫자는 독립 검증되지 않았으므로, 그것들은 능력이 배포된다는 것을 표시하지 얼마나 잘은 아닙니다. 공장 위로, 공급망 분석학(supply-chain analytics)은 수요를 예보하고 품절을 예측하여 저온-사슬(cold-chain) 바이오의약품이 선반에서 만료되지도, 진료소에서 동나지도 않게 합니다 — Sanofi의 plai 플랫폼은 대략 80% 품절 예측과 65% 위험-대-근본원인을 보고하는데, 둘 다 단일-회사 자체보고이고 독립 검증되지 않았으므로 "예시적/자체보고" 통에 속합니다 [6]. 저온-사슬 조각은 그 자체로 이 모음이 지닌 모델링 표적입니다. 저온-사슬 모듈(cold-chain module)은 평균-속도론적-온도(mean-kinetic-temperature, 화물이 받은 누적 열 손상을 포착하는 단일 가중-평균 온도로, 짧은 고온 급등을 단순 평균보다 더 무겁게 셈) 초과 점검과, 길고 더운 여름 레인을 짧은 겨울 레인보다 훨씬 위험하다고 점수 매기는 레인-위험 분류기(합성 레인 이력에 대한 경사-부스팅 모델)를 보여 줍니다 — 같은 입력-예보 패턴이되, 여기서는 용기 일정이 아니라 운송 결정을 입력합니다. 에너지 및 유틸리티 분석학(energy and utility analytics)은 시설의 발자국을 지배하는 거대한 HVAC, 냉각수, 청정-유틸리티 부하를 최적화합니다. WEF 글로벌 라이트하우스(Global Lighthouse) 제약 부지들은 ACG Shirwal의 31% 에너지 절감과 Cipla Indore의 26% 비용 절감 같은 수치를 보고합니다 — 라이트하우스-프로그램 자체보고이고 실제 부지에 배포되었지만 그래도 표제 숫자입니다 [7]. Amgen의 오하이오주 뉴올버니 "스마트 시설"은 AWS-기반 예지보전과 기계 비전을 공격적인 에너지/물 목표(−75% 에너지, −80% 물)와 짝짓는데, 그것들이 감사된 결과가 아니라 목표이며 이 부지가 무인이 아니라 400명 이상이 일한다는 점을 강조할 가치가 있습니다 [8][2].

네 계통 전반의 패턴은 ISPE 7차 Pharma 4.0 설문의 중심 발견입니다. AI/ML은 제약의 어떤 디지털 기술보다 가장 많은 파일럿과 가장 적은 규모화 구현을 가지며, 그 생산 군집은 정확히 이 장의 것들 — 감시, 예지보전, 비전 검사, 그리고 인간-개입 문서화 — 이지, CQA의 자율 제어가 아닙니다 [9].

배치-결과 예측 한 건의 해부

배치-결과 예측은, 이 시리즈의 모든 산출물처럼, 헐벗은 숫자로는 무가치합니다. P(fail) = 0.07다스릴 수 있는 결정 지원으로 만드는 것은 그것과 함께 따라가는 모든 것입니다. 그것이 점수 매기는 배치, 그것이 읽은 특징, 그것을 만든 모델과 데이터 버전, 점수를 확률로 바꾸는 보정, 그리고 사람이 결국 기록한 처분. 모델이 단일 배치에 대해 영속할 기록을 풀어 봅시다.

BATCH-2026-001에 대한 배치-결과 예측 한 건을 풀어내는 해부 신원 카드. 인디고 헤더는 기록을 명명한다: 배치-결과 예측, 모델 batch_outcome_gbm 버전 1, scikit-learn GradientBoostingClassifier. 입력 블록은 배치 id BATCH-2026-001, as-of 단계(포획 종료), 그리고 값과 함께 여섯 개 요약 특징을 나열한다: 최대 VCD, 최종 역가, 적분 락트산, 수확 탁도, 단백질-A 부하, 온도-초과 시간. 녹색 핵심 블록은 예측을 담는다: 실패 확률 0.07, 예측 수율 마진, 보정된 결정 띠(주시 / 보류 / 출하-추적), 그리고 모델 귀속에서 나온 최상위 기여 특징(수확 탁도). 화해 블록은 결국의 출하 결과 PASS와 실험실이 보고하면 실현된 HCP 값을, 예측 위험과 실제 결과 사이 잔차와 함께 보여 준다. 거버넌스 블록(보라색)은 모델 버전, 예시적 코호트로 표시된 훈련-코호트 해시, 의도된 용도(자문이지, 출하 결정 아님), 인간 처분과 전자서명, 그리고 운전-에서-모델-에서-레지스트리 계보를 나열한다. 측면 주석은 훈련 코호트가 합성/예시적이고 모델은 결정 지원일 뿐 결코 자율 출하가 아님을 표시한다. 다스려진 기록으로서의 배치-결과 예측 한 건: 배치와 그 요약 특징, 최상위 동인을 가진 보정된 실패 확률, 그것을 채점하는 결국의 출하 결과, 그리고 그것을 자율 출하가 아니라 자문으로 유지하는 거버넌스 블록 — 의도된 용도, 인간 처분, 전자서명, 그리고 계보. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

위에서 아래로, 필드 하나하나 읽으세요.

헤더는 기록 유형(배치-결과 예측), 모델 신원(batch_outcome_gbm, 버전 1), 그리고 추정기 부류(scikit-learn GradientBoostingClassifier)를 명명합니다. 버전은 장식이 아닙니다. 그것은 감사자가 정확히 어느 훈련된 산출물이 이 숫자를 만들었는지 재구성하게 해 주는 결합 키이며, MLOps 장(MLOps chapter)이 의무로 삼는 같은 모델-버전 규율입니다.

입력 블록은 예측을 한 배치와 한 as-of 순간에 고정합니다. batch_id(BATCH-2026-001)와 as-of 단계(포획 종료)는 진짜 일을 합니다 — 배치-실패 모델은 출하 시점보다 운전 도중이 훨씬 유용한데, 이른 경고는 개입할 여지를 남기기 때문입니다. 출하에서 점수 매기면 그 숫자는 부검이고, 포획-종료에서 점수 매기면 그것은 OOS가 굳기 전에 다시-풀(re-pool)하거나 다시-조사할 기회입니다. 여섯 특징 행은 모델이 실제로 읽은 값들 — 최대 VCD, 최종 역가, 적분 락트산, 수확 탁도, 단백질-A 부하, 온도-초과 시간 — 을 나르는데, 모델이 훈련하는 같은 여섯 요약 통계량이므로 기록은 자기-기술적입니다. 무엇도 다시 돌리지 않고 점수를 만든 입력을 볼 수 있습니다.

녹색 핵심은 예측 본체입니다. 보정된 failure_probability(이 깨끗한 배치는 0.07), 선택적 예측 yield_margin, 연속 확률을 행동에 매핑하는 결정 띠(주시 / 보류 / 출하-추적), 그리고 모델의 특징 귀속에서 나온 top_driver. "보정된(calibrated)"이 하중을 지는 단어입니다 — 원시 경사-부스팅 점수는 확률이 아니며, 0.07을 일정 계획자가 7% 가능성으로 다룰 수 있는 숫자로 바꾸는 데는 보정(보류 데이터에 대한 Platt 스케일링이나 등위(isotonic) 회귀)이 필요하고, 그것이 없으면 결정 띠는 무의미합니다. BATCH-2026-004에 대해서는 top_driver가 수확 탁도일 것이며, 조사자에게 설명 없는 경보를 건네는 대신 실제 메커니즘을 가리킵니다.

화해(reconciliation) 블록은 결국의 진실을 담습니다. 실제 출하 결과(PASS), 실험실이 나중에 보고하는 실현된 HCP 값, 그리고 예측 위험과 실제 결과 사이의 잔차. 이것이 사후에 예측을 채점하고 표류 감시(drift monitoring)에 입력하는 행입니다 — 잔차가 추세를 보이는 모델은 재훈련 시계가 시작된 모델입니다.

보라색 거버넌스 블록은 감사자가 가장 먼저 여는 것입니다. 모델 버전, 예시적 코호트로 표시된 훈련-코호트 해시(합성 기원은 잃어버리는 각주가 아니라 기록의 영구적 속성), 모델을 자문 결정 지원으로 범위 짓고 명시적으로 출하 결정이 아니라고 하는 의도된 용도, 인간 처분과 전자서명, 그리고 운전-에서-모델-에서-레지스트리 계보. 측면 주석은 이 장 전체가 방어하는 경계를 다시 진술합니다. 코호트는 합성이고, 모델은 결정 지원일 뿐이며, 결코 자율 출하가 아닙니다. 그 블록을 떼어 내면 같은 예측이 AI가 의약품에 대해 만든 다스려지지 않은 숫자가 됩니다 — Purolea 실패 모드의 축소판.

미해결 과제: 행이-아니라-배치 천장과 교란된 라벨

여기 정직한 열린 문제는 빠진 알고리즘이 아닙니다. 그것은 공장 수준이 소량-데이터 천장이 가장 단단하고 라벨이 가장 교란된 곳이라는 것입니다. 행이 아니라 배치가 증거의 단위이고, 배치는 희소하고, 느리고, 비쌉니다 — 새 공정은 한 자릿수의 완료된 운전을 가질 수 있고, 성숙한 것조차 수년에 걸쳐 배치를 쌓는데, 그때쯤이면 공정 변경이 초기 것들을 다른 분포로 만들어 놓았습니다. 전이 학습과 베이즈 사전이 도움이 되지만 — 관련된 것에서 새 제품의 실패 모델을 따뜻하게-시작(warm-start)(맨바닥이 아니라 비슷한 공정이 이미 가르친 것에서 출발)하고, 베이즈 사전이 공정이 어떻게 행동하는지에 대한 사전 믿음을 접어 넣어 적은 배치가 더 멀리 가게 함 — 문서화된 단단한 문제는 살아 있는 시스템의 운전-간 가변성이 전이 가능성을 훼손하여, 한 공정이나 규모에서 학습된 모델이 다음에서 오도할 수 있다는 것입니다 [3].

라벨은 희소한 것보다 더 나쁩니다 — 그것은 교란되고 불균형합니다. BATCH-2026-004 같은 실패 배치는 단일 OOS 속성(HCP)을 나르지만 상관된 공정 조건의 온 벡터를 나르며, 실패가 하나면 원인을 우연들로부터 분리할 방법이 없습니다. 모델은 탁도가 그것을 일으킨 것만큼 쉽게 그것을 운전한 운전자를 학습할 수 있습니다. 그것이 정확히 예시가 합성 실패를 탁도에서 공학하고 그다음 모델이 그것을 복원하는지 점검하는 이유입니다(앞에서 온전히 펼친 탁도-가-동인 논증) — 실제 데이터에서는 생성 메커니즘을 미리 결코 알지 못합니다. 실패는 또한 설계상 드뭅니다 — 잘 운영되는 공정은 마땅히 아주 적어야 하며, 그것이 정확히 분류기가 양성 클래스에서 학습할 것이 거의 없고, 늘 "합격"으로 예측하는 모델이 99% 정확도를 내면서 쓸모없는 체제입니다. 표준 불균형 도구상자(드문 실패를 더 자주 재표집, 더 무겁게 가중, 합성 소수자 오버샘플링 — 실제 실패들 사이를 보간하여 그럴듯한 새 실패 행을 지어냄 — 그리고 놓친 실패를 거짓 경보보다 더 벌하는 비용-민감 손실)는 훈련 분포를 재형성하지만 한 줌의 실제 실패가 담지 않은 정보를 제조할 수는 없습니다. 그것은 정밀도 문제를 재현율 문제로 맞바꾸며, 그것이 정직한 보고가 정확도가 아니라 정밀도-재현율 곡선과 운전점인 이유입니다. 생존 편향 문제(일탈로 운전 도중 멈춘 배치는 깨끗한 합격/실패 라벨을 전혀 만들지 않으므로, 실패에 대해 가장 정보가 많은 바로 그 운전이 훈련 집합에서 검열되어 빠짐 — "검열(censored)"은 결과가 완료까지 관측된 적 없는 사례를 가리키는 생존-분석 용어)를 더하면 그림이 분명합니다. 공장 수준 예측은 데이터가 야심에 가장 부적합한 응용이며, 그것이 상용 배포가 실패를 본 적이 있어야 하는 지도 실패-예측 구석이 아니라, "정상"만 모델링하면 되는 비지도 감시 구석(PdM, MSPC)에 군집하는 이유입니다.

공장 수준 모델을 온톨로지와 데이터 그림자에 접지하기

위의 모든 것은 입력이 신뢰할 수 있다고 조용히 가정했습니다. harvest_turbidity_NTU 배치의 정화된-풀 탁도이고, NTU 단위이며, 존재하고 단일하다는 것; BATCH-2026-004의 OOS 라벨이 실제 HCP 초과이지 전사 오류가 아니라는 것; 배치-밖 CV가 빼두는 행들이 진정으로 독립적인 배치라는 것. 그중 어느 것도 공짜가 아닙니다. 그것은 정확히 Book 4(지식 그래프)와 Book 2(데이터 그림자)가 하는 일이며, 그것을 무시하는 공장 수준 모델은 데이터 장(data chapter)이 진짜 천장이라고 경고한 쓰레기-입력 실패 모드입니다. 네 개의 다리가 그 가정을 명시적이고 점검 가능하게 만듭니다.

취약한 열 이름이 아니라 온톨로지 IRI로 끌어온 특징. CSV 헤더에서 harvest_turbidity_NTU를 받는 배치-실패 모델은 이름 변경 한 번이면 조용히 엉뚱한 수량으로 학습합니다. 시맨틱하게 접지된 대안은 각 특징을 QbD 관계에서 그 IRI를 통해 끌어옵니다. 탁도 특징은 정화된 풀 노드에 실린 bp:QualityAttribute의 값이고, 그 UCUM 단위가 붙어 있어, 모델과 제어 시스템이 비슷하게 철자된 두 열이 아니라 동일한 거버넌스된 정체성을 읽습니다. 사료 속도가 단량체에 영향을 준다고 말하는 바로 그 bp:affectsQuality 엣지가, 특징-공학 단계에 어느 공정 매개변수가 HCP 실패를 그럴듯하게 운전할 수 있는지를 알려줍니다 — 경사-부스팅 모델이 그러지 않으면 갖지 못한 데이터에서 다시 배워야 하는 물리이지요.

훈련-집합 입회 게이트로서의 SHACL. 폐쇄-세계 출하 게이트는 비-적합 로트를 거부하도록 지어졌습니다. 후보 훈련 부분그래프에 겨누면 그것은 비-적합 데이터셋을 거부합니다. 모델은 "완전함"에 대한 토착 개념이 없습니다 — 탁도가 조용히 한 번도 적재되지 않은 배치를 받으면, 경사-부스팅 분류기는 그 구멍을 대치하거나 둘러싸 분할하고는 어쨌든 자신 있는 숫자를 보고합니다. 각 배치의 패널을 특징 행이 되기 전에 bp:ReleaseShape로 돌리는 것은 모든 필수 값이 존재하고, 단일하고, 타입되고, 범위 내임을 인증하므로, 출하 기록이 완전함을 보장하는 바로 그 형상이 모델의 입력도 그렇다고 보장합니다 — 유효한 PASS/OOS 타깃이 무엇인지 말하는 라벨링 계약이, 학습기가 구멍을 메우기 전에 강제되는 것입니다.

계보 엣지가 배치 하나 빼기 CV의 그룹 키다. 위의 배치-밖 교차검증은 빼둔 폴드가 훈련 폴드와 진정으로 독립일 때만 정직합니다 — 그리고 이 인스턴스들에서는 기본적으로 그렇지 않습니다. 그래프가 로트를 개별화하고 계보가 많은 로트를 하나의 작업 세포은행에 묶기 때문에, DP-001, DP-002, DP-004WCB-CHO-001을 통해 조상을 공유하고, 따라서 순진한 무작위 분할은 형제 정보를 폴드를 가로질러 누수시켜 점수를 부풀립니다. bp:derivedFrom 추이적 척추 — 회수를 범위 짓는 바로 그 (bp:derivedFrom)+ 걸음 — 가 정확히 그룹화된 배치 하나 빼기 분할이 필요로 하는 그룹 키입니다. 공유된 계보로 분할하되, 결코 가로질러 분할하지 않습니다. 무엇이 무엇에서 파생되었는지를 기록하는 PROV 양식 출처 엣지가, 공짜로, 검증 곡선을 정직하게 유지하는 스키마입니다.

BFO가 측정을 운전과 구별되게 유지한다. 특징화는 모델이 배치(연속체 — 지속하며 탁도 측정을 나르는 사물)를 그것을 만든 세포 배양 운전(발생체 — 일어나고 끝나는 과정)이나 그것이 돌아간 용기 BR-101(장비)과 결코 혼동하지 않을 때에만 잘 정의됩니다. 상위 척추의 연속체/발생체 절단과 bp:Materialbp:Equipment 분리성 가드가, "배치당 한 행"이 운전-속-반응기당 한 행이 아니라 물질 로트당 한 행을 의미하게 하고 — 적재기가 한 해에 배치 백 개를 처리하는 반응기에 출하 사실을 붙이지 못하게 합니다. 같은 규율이 GraphRAG 보조자로 하여금 "BATCH-2026-004가 출하되었나?"를 검증된 그래프를 순회하여(아니요 — HCP에 걸렸습니다) 답하게 하지, 유창한 추측을 지어내게 하지 않습니다. 온톨로지가, 모델의 회상이 아니라, 답이 접지되는 스키마이기 때문입니다.

이곳이 또한 이 페이지의 암묵적 의미론 — 배치, 단계, 물질, 분석, 장비가 일관되게 타입되고, BATCH-2026-004가 안정적 식별자로 나르어지는 것 — 이 온톨로지 책(ontology book)이 23개 역량 질문과 CQ별 PASS/FAIL 수용 시험으로 빚어내는 명시적 OWL/RDF/SHACL 기계로 졸업하는 곳입니다. 공장 수준 모델은 그 기계를 다시 도출하지 않습니다. 그것을 소비합니다. 그리고 아래의 데이터 그림자 자체가 거버넌스된 산물입니다. 각 특징화된 배치 행은 ISA-95로 맥락화된 히스토리언 태그와 LIMS 시료 id로 추적되며, ISA-95 / B2MML이 어느 장비, 어느 물질 로트, 어느 공정 세그먼트에 태그가 속하는지를 말하는 표준 데이터 모델입니다 — Parquet 파일 폴더를 감사자가 뒤에 설 수 있는 훈련 집합으로 바꾸는 데이터 거버넌스(data-governance) 계층이지요. 실행 가능한 모듈들은 구성적으로 그 접지에 기댑니다. 커밋된 데이터셋에 대한 순수 NumPy/Pandas/scikit-learn으로, 고정 시드(random_state=2026, 시드 고정된 RNG, 고정된 기준 타임스탬프)와 함께라서 모든 출력 지표가 바이트 단위로 재현됩니다 — 분석 스택(analytics stack)과 모음의 run_all이 강제하는 오픈소스 재현성 바닥이며, 이 장의 숫자가 믿음으로 받아들여지는 대신 점검될 수 있는 이유입니다.

이 장이 모델 모음에 더하는 것

이 장은 Book 5의 공장 수준 모듈 — 단위 작업 위에서 작동하는 것들 — 을 기여합니다:

  • examples/platform/ml/pdm.py — 예시적 예지보전 신호: 합성 교반-모터 진동 추적에 대한 비지도 기준선-과-이탈 건강 점수로, 심긴 고장 전에 여유 시간을 두고 경보합니다. 방법(건강한 창으로부터의 z-거리, 3-시그마 경보)은 배포 가능한 것이고, 결함은 합성인데 시뮬레이터가 장비가 아니라 공정을 모델링하기 때문입니다.
  • examples/platform/ml/batch_outcome.py — 수율/실패 예측. 그것은 실제 출하 결과(5 PASS, 1 OOS — BATCH-2026-004의 HCP 초과)를 읽고, 그다음 명시적으로-표시된 예시적 합성 코호트에서 경사-부스팅 배치-실패 분류기를 배치-밖 교차검증으로 훈련합니다. 원시 분할-중요도를 넘어 그것은 이제 모델을 신뢰성 검토에 부칩니다. AUROC에 대한 부트스트랩 95% CI, 보정 점검(원시 GBM 대 등위 재보정), 그리고 모델-불가지론적 귀속 — 순열 중요도와 부분 의존성 곡선 — 이 실제 탁도→HCP 메커니즘을 복원하며 SHAP(SHAP) 양식 귀속의 실행 가능한 대리물입니다. 그 docstring에 새겨진 교훈은 행이-아니라-배치 천장입니다. 모델은 실제이고, 코호트는 합성된 것이며, 경계는 큰 소리입니다.
  • examples/platform/ml/integration_opcua.py — 예측을 산업 신호로 바꾸는 인터페이스 계약. 그것은 소프트-센서 예측의 적용 가능성-영역 판정을 OPC UA 상태 코드(StatusCode) 품질(도메인-내→GOOD, 도메인-밖 또는 넓은 구간→UNCERTAIN, 센서 결함→BAD)에 매핑하고, 히스토리언 감사 행(태그, 값, 품질, 모델 버전, AD 통계량)을 기록하며, 모든 비-GOOD 기록에 대해 MES 예외-검토 사건을 올리는 반면 GOOD 기록은 곧장 흘러갑니다. 그것은 정직한 인-메모리 계약 시뮬레이션입니다 — 라이브 OPC-UA 서버 / 히스토리언 / MES 배선은 Books 2–4에 위임됩니다. 이 모듈은 예측이 만족해야 하는 인터페이스만 고정합니다.

이들은 모음의 예측 및 검색 모델 곁에, 배치(시점이 아니라)와 장비(제품이 아니라)를 분석 단위로 삼는 유일한 둘로 — 모음의 공장-고도 항목으로 — 자리합니다. 그것들은 일탈-분류(deviation-triage)출하-예측(release-prediction) 모듈과 협력하되 중복하지 않습니다. 저것들은 기록과 분석을 분류하고, 이것들은 배치와 기계를 점수 매깁니다.

왜 중요한가

공장 수준 ML은 기계학습이 바이오의약품 시설의 손익계산서를 만나는 곳입니다. 폐기될 배치를 계획된 부품 교체로 바꾸는 예지보전 경보는 어떤 역가 개선보다 더 절약하고, 포획 종료에 표류하는 운전을 표시하는 배치-실패 모델은 OOS가 굳기 전에 개입할 여지를 남기며, 검토자가 예외만 읽게 하는 예외-검토는 그러지 않으면 몇 주로 늘어나는 출하 일정을 압축하고, 노는 용기를 채우는 일정 계획자는 이미 쓴 자본을 제품으로 바꿉니다. 그중 어느 것도 화려하지 않고 어느 것도 CQA를 제어하지 않으며 — 바로 그것이 그것이 실제로 배포된 AI 이야기의 부분인 이유입니다. 화려하지 않은, 인간-개입, 감시-와-최적화 구석이 생산 성숙도가 있는 곳이며, 이 장의 냉정한 독해는 최전선 장(frontier chapter)이 살펴볼 자율-공장 과장에 대한 해독제입니다.

실제 현장에서는

명명되고 귀속된 현실은 일관됩니다. 예지보전에서, AVEVA Predictive Analytics와 Siemens Senseye가 산업-횡단 플랫폼이고, J&J Mulund가 계획되지 않은 가동 중단 감소를 보고하고 Amgen의 오하이오 시설이 AWS-기반 PdM을 기계 비전과 짝짓는 것 같은 바이오제약 사례가 있습니다 — 모두 벤더 또는 자체보고이고, 모두 배포되었다는 의미에서 (상용)이며, 표제 백분율은 예시적입니다 [1][2][8]. 예외-검토와 RFT에서, Körber PAS-X가 정전적 MES 실행 계층(상용)이고 그 "최대 98% RFT" 수치는 벤더 자체보고이며, Rockwell PharmaSuite와 Aizon의 GxP(규제받는 제약 회사가 따라야 하는 모든 "good practice" 규제 — GMP, GLP, GCP, 그 외 — 를 아우르는 용어) 제조-인텔리전스 계층이 합류합니다(세 부지에 걸친 그 대표 Grifols 배포는 벤더 자체보고이지만, 2020/2021 PDA-JPST AI-자격검증 연구는 주목할 만한 동료심사 예외임) [4][10]. 그 모두를 먹이는 데이터 계층에서, TetraScience Tetra OS는 자신을 "AI-준비된 데이터" 플랫폼으로 자리매김하며(배포 수는 벤더 자체보고), 이 분야의 진짜 1순위 장벽을 반영합니다. Zifo 연구는 기업의 70%가 데이터가 단절된 사일로에 갇혀 있어 AI를 위한 데이터 접근에 어려움을 겪고, 39%만이 표준화된 형식을 쓴다는 것을 발견했으니, 위 모델들은 깨끗하고 닿을 수 있는 입력이 없어 굶주립니다 [11]. 공급망과 에너지에서, Sanofi의 plai와 WEF 라이트하우스 부지가 표제 수치를 공급하며, 모두 자체보고입니다.

관통하는 줄기는 ISPE 7차 Pharma 4.0 설문입니다. 가장 많은 파일럿, 가장 적은 규모화 구현, 생산이 감시, 예지보전, 비전, 그리고 인간-개입 문서화에 집중됨 [9]. 공장 수준 ML은 실재하고, 배포되어 있으며, 의도적으로 경계 지어져 있습니다 — 그것은 공장을 돌아가게 유지하고 사람이 결정하게 합니다.

핵심 용어

  • 예지보전(predictive maintenance, PdM) — 고장을 여유 시간을 두고 예측하기 위해 장비-건강 신호(진동, 전류, 온도)를 학습; 진짜 고장이 너무 드물어 지도 분류기를 훈련할 수 없기에 보통 비지도.
  • 이탈 / 건강 점수(departure / health score) — 건강한 기준선으로부터의 라이브 장비 신호 거리(z-거리, 또는 PCA/오토인코더 재구성 오차); 그것이 임계값(통상 3-시그마)을 넘으면 경보가 울림.
  • 이상 탐지 대 잔여 유효 수명(anomaly detection vs remaining useful life) — 두 PdM 질문: "지금 건강함에서 이탈하고 있는가?"(배포 가능, 비지도) 대 "고장까지 며칠인가?"(사건-발생-시간에 대한 회귀, 공장이 좀처럼 갖지 못하는 고장-까지-운전 이력 필요).
  • 여유 시간(lead time) — PdM 경보와 경성 고장 사이의 간격; 경제적 가치의 전부로, 비상사태를 계획된 작업으로 바꿈.
  • Hotelling의 T-제곱 / SPE (Q)(Hotelling's T-squared / SPE (Q)) — 두 다변량 PdM 통계량: 건강한 PCA 부분공간 안쪽의 거리 대 그것에 직교하는 제곱 예측 오차; SPE 기여가 어느 센서가 움직였는지 명명함.
  • 배치-실패 예측(batch-failure prediction)배치 수준 지도 과제: 배치당 하나의 요약-특징 벡터가 들어가고, 하나의 합격/실패 결과가 나옴; 증거의 단위는 시점이 아니라 배치.
  • 특징화(featurization) — 배치의 여러 날, 여러 센서 시계열을 하나의 고정 길이 요약-통계량 벡터(피크, 종점, 적분, 초과-횟수)로 무너뜨림; 어느 것을 추출할지의 선택이 도메인 지식이 들어가는 곳.
  • 수율 / 일탈 예측(yield / deviation prediction) — 배치-실패 예측의 연속형 및 사건-수준 사촌(수율 마진, 또는 일탈이 재작업을 요할 가능성을 예측).
  • 행이-아니라-배치 천장(batches-not-rows ceiling) — 묶는 공장 수준 제약: 훈련 예시의 개수가 지금껏 운전한 배치의 개수와 같으며, 상업 규모에서도 희소하고, 느리고, 비쌈.
  • 배치-밖 교차검증(batch-out cross-validation) — 각 배치를 그 위에 한 번도 훈련하지 않은 모델로만 점수 매김(cross_val_predict), 유일하게 방어할 수 있는 소량-데이터 성능 추정치.
  • 일발-적중(right-first-time, RFT) — 재작업이 필요한 일탈 없이 완료되는 배치의 비율; 예외-검토가 올리려는 표제 지표.
  • 예외-검토(review-by-exception) — 허용-내 배치-기록 항목을 자동-검증하고 사람 검토를 위해 예외만 드러내는 MES 능력(Körber PAS-X); ML과 생성형 AI가 그 위에 계층을 얹으며, 인간-개입.
  • OPC UA 상태 코드 (GOOD / UNCERTAIN / BAD)(OPC UA StatusCode) — 모든 OPC UA 판독에 붙는 품질 필드로, 상위 두 비트가 그것을 세 가지 심각도로 분류함; 인터페이스 계약에서 예측의 적용 가능성-영역 자기-점검이 코드를 정함(도메인-내→GOOD, 도메인-밖 또는 넓은 구간→UNCERTAIN, 센서 결함→BAD)으로, 품질을 존중하는 제어 시스템은 도메인-밖 읽기를 믿지 않으며, 모든 비-GOOD 기록은 MES 예외-검토 사건을 올림.
  • 순열 중요도 / 부분 의존성(permutation importance / partial dependence) — 모델-불가지론적 귀속: 순열 중요도는 한 특징을 섞을 때 모델의 AUROC가 얼마나 떨어지는지(어느 특징이 중요한지)를 측정하고, 부분 의존성 곡선은 그 특징과 함께 예측이 어떻게 움직이는지(어떻게 중요한지)를 추적함; 트리의 원시 분할-중요도와 달리 분할-횟수 편향에 속을 수 없으며, SHAP(SHAP) 양식 귀속의 실행 가능하고 의존성 없는 대리물.
  • 생산 일정 계획 / 용량 최적화(production scheduling / capacity optimization) — 어느 배치가 어느 용기에서 언제 돌아가는지를 전환과 공유 유틸리티를 둘러싸고 결정; 운영-연구 문제(MILP, 제약 계획법, 이산-사건 시뮬레이션)이며, ML은 보통 결정을 내리는 대신 입력을 예보함.
  • 공급망 / 에너지 분석학(supply-chain / energy analytics) — 수요와 품절 예보, 그리고 HVAC/유틸리티-부하 최적화; 가장 큰 달러 수치가 자리하고 표제 백분율 대부분이 자체보고인 곳.
  • 교란된 라벨(confounded labels) — 단일한 실패 배치가 상관된 조건의 온 벡터를 나르므로, 소량 데이터에서 원인을 우연으로부터 분리할 수 없는 공장 수준 병리.
  • 시맨틱하게 접지된 특징(semantically-grounded feature) — 취약한 CSV 열 이름이 아니라 온톨로지 IRI(UCUM 단위가 붙은 bp:QualityAttribute)를 통해 끌어온 특징으로, 모델과 제어 시스템이 동일한 거버넌스된 정체성을 읽고 이름 변경이 수량을 조용히 바꾸지 못함.
  • SHACL 훈련-입회 게이트(SHACL training-admission gate) — 후보 훈련 부분그래프가 특징 행이 되기 전에 폐쇄-세계 출하 형상을 돌려, 존재-단일-타입-범위 점검이 출하 기록을 인증하는 방식 그대로 모델의 입력을 인증함; PASS/OOS 타깃을 위한 라벨링 계약.
  • 그룹 키로서의 계보(lineage as the grouping key) — 배치 하나 빼기 교차검증을 분할하는 데 쓰는 bp:derivedFrom(PROV 양식 출처) 추이적 척추로, 작업 세포은행 조상을 공유하는 형제 로트가 폴드를 가로질러 누수하지 않음; 회수를 범위 짓는 엣지가 검증 점수를 정직하게 유지하는 엣지.
  • 연속체 대 발생체(continuant vs occurrent, BFO)배치(측정을 나르는 지속하는 물질)를 그것을 만든 운전과 그것이 돌아간 용기로부터 구별되게 유지하는 상위-온톨로지 절단으로, "배치당 한 행"을 잘 정의하고 출하 사실이 결코 반응기에 붙지 않게 함.

다음 이야기

공장이 돌아가고, 장비가 감시되고, 배치가 점수 매겨지고, 일정이 채워집니다 — 그리고 매 단계에서 사람이 루프 안에 머물러, 모델이 드러낸 예외만 읽고 서명으로 그것을 처분합니다. 명백한 다음 질문은 무엇이 그 예외들, 그 CAPA들, 그 조사 보고서들을 초안 잡는가, 그리고 새 물결의 언어 모델이 그것을 하도록 얼마나 신뢰받을 수 있는가입니다. 다음 장 생성형 AI와 LLM: 코파일럿, CAPA, 그리고 에이전트의 한계(Generative AI and LLMs: Copilots, CAPA, and the Limits of Agents)는 일탈을 쓰는 코파일럿과 그것에 행동하겠다고 약속하는 에이전트 — 그리고 Purolea 경고장과 EU/PIC/S GMP Annex 22 초안에 그려진, 그것들을 자문으로 유지하는 단단한 규제선 — 을 다룹니다.