제조 AI — 공장 데이터가 모델에게 요구하는 것
제조 AI 의 어려움은 모델에 있지 않고 데이터의 성질에 있습니다. 공장 신호는 라벨이 거의 없고, 운전 조건에 따라 분포가 바뀌며, 비어 있는 값과 0 인 값이 다른 뜻을 가집니다. 그리고 틀린 답의 비용이 비대칭입니다 — 놓친 고장 한 건과 거짓 경보 백 건은 서로 다른 방식으로 공장을 망칩니다.
이 글은 그 성질에서 출발해 어떤 설계가 나오는지를 정리합니다. 예시는 PlantPulse AI 의 실제 구현에서 가져왔지만, 논지는 제품과 무관하게 제조 AI 일반에 해당합니다.
데이터 과학자 · 설비 엔지니어 · AI 도입을 검토하는 기술 담당자. 시계열·임베딩·RAG 같은 용어를 설명 없이 씁니다. 제품 기능 목록은 AI 기능 일람, 모델 자체는 AURA 기술 백서에 있습니다.
1. 공장 신호는 무엇이 다른가
일반적인 머신러닝 교재의 가정 — 독립 동일 분포, 넉넉한 라벨, 정상적인 결측 처리 — 은 공장에서 대부분 깨집니다.
| 성질 | 무슨 뜻인가 | 설계에 주는 영향 |
|---|---|---|
| 라벨이 없다 | 고장은 드물고, 난 고장도 원인까지 기록되는 일은 더 드물다 | 지도학습 분류기보다 정상을 배우고 벗어남을 재는 방식(재구성 · 예측 오차)이 기본이 된다 |
| 운전 조건이 바뀐다 | 부하 · 제품 · 계절 · 교대에 따라 «정상» 의 모양이 달라진다 | 고정 임계값은 조건이 바뀌는 순간 거짓 경보를 쏟아낸다. 어려운 정상(비정상처럼 보이는 고부하 구간)을 따로 다뤄야 한다 |
| 0 과 «모름» 이 다르다 | 「작업지시 0건」은 측정이고, 「CMMS 연결 끊김」은 측정이 아니다 | 결측을 0 으로 채우는 순간 아무도 보지 않은 설비가 «정상» 으로 보고된다 |
| 신호가 계층에 매달려 있다 | 태그 하나는 설비 · 라인 · 구역 · 사이트 아래에 있다 | 「3라인 압축기」라는 말을 계층의 노드로 바꾸는 단계가 모든 질의의 첫 단계가 된다 |
| 원인은 순서에 있다 | 같은 두 신호도 어느 쪽이 먼저 오르느냐에 따라 다른 고장이다 | 상관만 보는 모델은 고장을 가르지 못한다. 선행 · 후행을 봐야 한다 |
| 틀린 답의 비용이 비대칭이다 | 미탐지는 설비를 잃고, 거짓 경보는 사람의 신뢰를 잃는다 | 거짓 경보를 미탐지와 따로 세고, 경보를 잠재우는 경로를 제품이 가져야 한다 |
마지막 줄이 과소평가됩니다. 거짓 경보가 쌓인 이상탐지는 결국 운영자가 끕니다. 꺼진 탐지기는 아무것도 잡지 못합니다 — 정확도 99% 의 모델도 꺼지면 0% 입니다.
2. 층을 나눈다 — 큰 모델 하나로 풀지 않는다
제조 AI 를 «대형 언어모델에게 센서 데이터를 보여 주는 것» 으로 설계하면 세 가지가 동시에 틀어집니다. 초 단위 파형은 토큰으로 옮기기에 너무 길고, 언어모델은 숫자 패턴에서 이상을 찾는 데 강하지 않으며, 무엇보다 재지 않은 값을 그럴듯하게 지어냅니다.
그래서 일을 성질에 따라 나눕니다.
질문 「3라인 압축기 요즘 어때?」
│
┌──────────────────────────────▼──────────────────────────────┐
│ ④ 설명 — 언어모델 │
│ 도구를 골라 부르고, 결과와 문서를 읽고, 근거와 함께 답한다 │
└───────┬──────────────────────┬──────────────────────┬───────┘
│ 도구 호출 │ 도구 호출 │ 검색
┌───────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐
│ ③ 시계열 모델 │ │ ② 통계 · 규칙 │ │ 문서 검색 (RAG) │
│ 이상 · 예측 │ │ 기준선 편차 · 공식 │ │ 절차서 · 이력 │
└───────┬────────┘ └────────┬────────┘ └─────────────────┘
└──────────┬───────────┘
┌───────▼────────┐
│ ① 데이터 원장 │ 시계열 · 알람 · 작업지시 · 설비 계층
└────────────────┘
| 층 | 무엇이 강한가 | 무엇을 맡기지 않는가 |
|---|---|---|
| ② 통계 · 규칙 | 설비 평소 기준선 대비 편차, 공학 공식(OEE · MTBF · 베어링 결함 주파수) | 다변량 패턴 |
| ③ 시계열 모델 | 여러 채널이 함께 만드는 «모양» 의 이상, 짧은 지평의 추세 | 원인 설명, 문서 대조 |
| ④ 언어모델 | 도구 선택, 결과 종합, 절차서와의 대조, 사람의 말로 설명 | 숫자를 만들어 내는 일 |
아래 층이 풀 수 있는 것은 위로 올리지 않습니다. 기준선 대비 편차만으로 이상 구간이 갈리는 경우가 실제로 있었고, 그런 구간은 모델로 풀지 않습니다. 계산은 공식이 하고, 언어모델은 계산 결과를 읽어서 설명합니다 — 언어모델이 L10 수명을 «어림» 하는 순간 그 답은 검증할 수 없게 됩니다.
3. 이상탐지 — 정상을 배우고 벗어남을 잰다
라벨이 없으니 «고장 분류기» 를 학습할 수 없습니다. 대신 정상 신호를 재구성하는 모델을 두고, 재구성이 얼마나 빗나가는지를 이상 점수로 씁니다. PlantPulse 는 IBM Granite TSPulse 를 씁니다.
두 가지 오차를 함께 본다
| 점수 모드 | 무엇을 재나 | 무엇을 잡나 |
|---|---|---|
| 시간 영역 재구성 | 원 신호와 재구성의 차이 | 급변 · 스파이크 · 수준 이동 |
| 주파수 영역 재구성 | 스펙트럼의 차이 | 진동 모양의 변화 — 평균은 그대로인데 «떨림» 이 달라진 경우 |
회전기의 초기 결함은 흔히 뒤쪽으로 먼저 나타납니다. 진폭은 멀쩡한데 특정 주파수 대역이 자라기 시작합니다. 시간 영역만 보면 이것을 놓칩니다.
시계열 라이브러리가 모드 목록 중 하나라도 지원되면 검증을 통과시키고, 지원되지 않는 모드는 예외도 경고도 없이 버리는 경우가 있습니다. 「수준 편차 점수를 켰다」고 적힌 채 아무것도 안 켜진 상태로 돌 수 있습니다 — 실측으로 확인한 일입니다(2026-09).
PlantPulse 는 모드를 하나씩 따로 라이브러리에 물어, 모델이 세지 않을 모드가 하나라도 섞이면 적재를 거부합니다. 모델마다 세는 모드 집합이 다르므로(재구성 모델과 예측 모델은 겹치지 않습니다) 모델을 바꾸면 같은 설정이 다른 뜻이 됩니다.
컨텍스트 길이와 짧은 이력
TSPulse 는 512 스텝의 창을 입력으로 받습니다. 설비를 막 붙였거나 이력이 짧으면 창이 모자랍니다. 이때 두 선택지가 있습니다.
- 거부한다 — 신규 설비는 한동안 아무 판정도 받지 못한다
- 왼쪽을 채운다 — 가장 오래된 값을 반복해 창을 채운다(edge padding)
PlantPulse 는 최소 32행이 있으면 뒤쪽을 택하고, 그보다 적으면 거부합니다. 채우면 판정은 나오지만 채운 만큼 판정의 근거가 얇습니다 — 이력이 짧은 설비의 이상 점수는 긴 설비의 것과 같은 무게로 읽지 마십시오.
임계값보다 «잠재우는 경로» 가 중요하다
임계값을 아무리 잘 골라도 현장에는 자주 뜨지만 문제가 아닌 것이 남습니다. 해법은 임계값을 더 조이는 것이 아니라, 운영자가 그것을 잠재울 수 있게 하는 것입니다.
- 자주 뜬 항목을 횟수 · 마지막 발생과 함께 올리고, 「임계 상향 / 뮤트 검토」 또는 「관찰」을 제안한다
- 뮤트는 알림과 인시던트 승격만 멈춘다 — 탐지 기록은 남긴다. 나중에 되짚을 근거가 사라지면 안 된다
- 확인 처리는 한 번뿐이다. 먼저 확인한 사람과 시각이 남는다
화면은 TimeSeries-Insight 에 있습니다.
4. 예측 — 구간이 없으면 예측이 아니다
추세 예측에는 TinyTimeMixer(TTM) 를 씁니다. 컨텍스트 512 스텝, 한 번에 최대 96 스텝을 내다봅니다 — 모델이 그 길이로 학습됐으므로, 넘는 요청은 조용히 잘라 내지 않고 거절합니다. 이력이 512 스텝에 못 미치면 컨텍스트를 가진 만큼으로 줄여서 돌리고, 줄인 값을 응답에 함께 싣습니다.
점 예측 대신 구간
「다음 주 베어링 온도 78℃」는 쓸모가 적습니다. 운영자에게 필요한 것은 「1090% 분위 구간이 7284℃이고, 상한이 경보선에 닿는다」입니다(기본 분위수가 0.1 · 0.9 입니다). PlantPulse 는 예측 뒤에 conformal 보정을 붙여 구간을 만듭니다.
- 과거 이력에서 창을 밀어 가며 «그때 예측했다면» 의 예측값을 만든다
- 그 예측과 실제로 일어난 값의 잔차를 모은다
- 잔차의 분위수로 지금 예측의 상한 · 하한을 정한다
모델이 불확실성을 스스로 말하게 하는 대신, 이 설비에서 이 모델이 실제로 얼마나 틀렸는지로 구간을 정하는 방법입니다. 분포 가정이 없어서 산업 신호처럼 꼬리가 두꺼운 데이터에 맞습니다.
평균 1500 kPa 인 압력 태그에 결측이 있고 그것을 0 으로 채우면, 그 창의 잔차는 |1500 − 0| 이 됩니다. 분위수는 예측 오차가 아니라 결측 크기로 정해지고, 구간은 터무니없이 넓어집니다 — 그런데 「구간 계산 성공」이라는 표시는 그대로 붙습니다.
PlantPulse 는 결측이 섞인 창과 실측이 아직 없는 말미의 창을 보정 집합에서 뺍니다. 남은 창이 필요한 개수에 못 미치면 구간을 내지 않고, 그 이유를 응답에 적습니다(「이력을 더 보내라」). 틀린 구간보다 없는 구간이 낫습니다.
5. 조용한 실패 — 제조 AI 에서 가장 비싼 버그
제조 AI 의 사고는 대개 에러가 나지 않는 쪽에서 납니다. 서비스는 200 을 돌려주고, 헬스체크는 녹색이고, 숫자는 그럴듯합니다. 그런데 그 숫자를 만든 것이 모델이 아닙니다.
실제로 겪은 세 형태입니다.
| 형태 | 무슨 일이 있었나 | 막는 법 |
|---|---|---|
| 폴백이 모델 행세를 한다 | 데이터가 모자라 모델이 못 뜨면 단순 외삽(drift · seasonal-naive)으로 내려간다. 응답은 200 이다 | 응답에 model_used 와 fallback_reason 을 싣는다. 호출하는 쪽은 그것을 읽고 기록한다 — NAIVE 비율이 오르는 것 자체가 신호다 |
| 무작위 가중치가 모델 이름표를 단다 | 예측 모델의 두 세대(R2 · R3)는 가중치 키가 하나도 겹치지 않는데도 서로의 체크포인트를 예외 없이 읽는다. 결과는 445개 파라미터가 전부 무작위로 초기화된 모델이 TTM 이름표를 달고 답하는 것 | 적재 시 체크포인트에 없어 새로 지은 파라미터가 하나라도 있으면 거부한다 |
| 설정 오류가 일시적 실패처럼 흡수된다 | 위 설정 오류가 폴백으로 흡수돼 «헬스 정상 · 예측 200 · 모든 답이 단순 외삽» 으로 돌았다 | 실패를 둘로 가른다. 재시도해도 안 낫는 것(설정 · GPU 사망)은 500 · 503 으로 올리고, 일시적인 것(데이터 부족)만 폴백한다 |
일반화하면 규칙은 하나입니다 — 모든 출력은 «무엇이 그것을 만들었는지» 를 같이 싣는다. 모델인지 폴백인지, 구간이 계산됐는지 건너뛰었는지, 몇 행으로 판정했는지. 이것이 없으면 운영 중인 AI 가 실제로 AI 인지 아무도 확인할 수 없습니다.
예측 설정이 틀려도 같은 프로세스가 이상탐지를 계속 서비스하므로 /health 는 정상입니다. 헬스체크가 «답이 맞다» 까지 말하게 만들 수는 없습니다. 그래서 기동 로그에 모델 적재 결과를 한 줄로 남기고([MODEL_LOAD] · [MODEL_LOAD_FAIL] · [MODEL_WARMUP_FAIL]), 그 줄을 감시합니다.
6. 원인은 순서에 있다 — 고장 메커니즘
「온도가 올랐다」의 원인은 여럿입니다. 베어링 마모 · 윤활 부족 · 냉각 불량 · 전기적 결함 · 파울링. 이들은 값의 크기가 아니라 무엇이 먼저, 무엇이 함께 움직였는지로 갈립니다.
| 고장 | 먼저 오는 신호 | 뒤따르는 신호 |
|---|---|---|
| 베어링 마모 | 진동 상승 | 온도가 따라 오름 · 결함 주파수 고조파 |
| 윤활 부족 | 윤활유 유량 저하 | 마찰열로 온도 급상승 |
| 냉각 불량 | 냉각수 유량 저하 | 온도만 오름(진동은 정상) |
| 전기적 결함 | 전류 불평형 | 소비전력 · 온도 동반 상승 |
| 캐비테이션 | 광대역 소음 급증 | 토출 저하 → 전력 감소 |
읽는 규칙은 이렇습니다. 진동이 함께 오르면 기계적 원인 쪽이고, 온도만 오르면 냉각 · 파울링 쪽이며, 윤활유량이 먼저 떨어졌다면 온도 급상승은 원인이 아니라 결과입니다. 그리고 다른 모드가 전부 전력을 올리는 가운데 전력이 내려가는 것은 캐비테이션뿐이라, 이 하나로 갈립니다. 전체 지도(고장 11종 × 설비 18종)는 AURA 기술 백서 5 · 6장에 있습니다.
요점은 동시 상관만으로는 이것이 안 갈린다는 것입니다 — 상관은 대칭이고, 고장은 비대칭입니다. 그래서 두 가지를 같이 둡니다.
- 시차 교차상관. 태그 관계 분석은 동시 상관이 높은 쌍에 대해 시차를 앞뒤로 밀어 가며(최대 ±10 샘플) 상관이 최대가 되는 시차를 찾고, 그것이 0 이 아니면 선행 · 후행 쌍으로 냅니다
- 메커니즘의 구조를 가르친다. 모델에게 「증상 → 정답」 짝이 아니라 시간 축을 가진 궤적을 보여 주고, 판정과 함께 「온도가 D+11 에 먼저 오르고 진동은 D+19 에 뒤따랐다 — 열적 원인이 선행」처럼 수치와 기간이 붙은 근거 문장을 내게 한다. 사람이 검증할 수 있어야 하기 때문이다
분석 대상 열을 고르기 전에 표 전체를 숫자로 바꾸면, 타임스탬프가 나노초 정수로 바뀌어 태그처럼 섞입니다. 단조 증가하므로 무엇과도 상관이 1 에 가깝게 나오고, 진단에 「timestamp 가 온도를 선행한다」가 흘러 들어갔습니다(2026-07). 시간 · 식별자 열은 먼저 빼고, 변동이 없는 열도 뺍니다 — 상관계수가 정의되지 않습니다.
과거 사례도 같은 목적으로 씁니다. 같은 모양의 이상이 전에 있었는지(유사 이상 검색), 같은 종류 설비 중 혼자 다르게 움직이는 것이 있는지(플릿 이상치), 고장 전에 보이던 신호가 지금 보이는지(전조 점검). 셋 다 «이 설비의 과거» 와 «이웃 설비의 현재» 를 기준선으로 삼는 방법입니다.
7. 설명 — 근거에서만 답한다
언어모델의 역할은 읽고 고르고 설명하는 것입니다. 한 질의는 대략 이렇게 흐릅니다.
① 이름을 ID 로 「3라인 압축기」 → 설비 계층의 노드
② 도구를 고른다 분석 · 이력 · 알람 · 문서 · 사진 중 무엇이 필요한가
③ 데이터를 가져온다 이상 점수 · 건강 지수 · 태그 이력
④ 문서를 더 본다 절차서 · 고장 이력 · 규격
⑤ 모아서 답한다 근거를 붙여서
②–④ 는 한 번에 끝나지 않습니다. 에이전트는 도구 결과를 보고 다음 도구를 고르기를 반복합니다. 이 구조에서 품질을 결정하는 것은 셋입니다.
① 도구 스키마. 모델이 도구를 제대로 고르고 인자를 맞게 채우는지가 곧 답의 품질입니다. 도구는 기본이 꺼짐이고, 켠 것만 에이전트에게 보입니다. 쓸 일 없는 도구가 많을수록 고르는 정확도가 떨어집니다. 그리고 프롬프트가 길어지면 모델이 도구를 덜 부른다는 것이 실측됐습니다 — 설명을 늘리는 것이 늘 이득은 아닙니다.
② 검색 품질이 답의 상한이다. 산업 문서에는 태그명 · 부품번호 · 규격 조문처럼 정확히 일치해야 하는 문자열과, 「교체 주기」 = 「정비 간격」 같은 의미가 같은 다른 표현이 섞여 있습니다. 그래서 키워드 검색(BM25)과 의미 검색(임베딩)을 함께 쓰고, 리랭커가 후보 중 실제로 답이 되는 대목을 고릅니다. 임베딩 차원은 계약으로 고정합니다 — 모델을 갈아도 벡터 색인을 다시 만들지 않기 위해서입니다. 파이프라인은 RAG 알고리즘에 있습니다.
③ 모른다고 말하기. 수집되지 않은 값을 «정상» 으로 보고하지 않고, 맥락에 없는 것은 쓰지 않습니다. 이것은 프롬프트 한 줄로 되지 않습니다 — 판단 보류가 정답인 문항을 학습 데이터에 넣어야 모델이 그렇게 답합니다. AURA 학습 데이터의 3분의 1 이 확정하지 않는 답인 이유입니다.
8. 어떻게 재나 — 심판 모델 없이
산업 AI 에는 리더보드가 없습니다. 그리고 다른 언어모델에게 채점을 맡기면 그럴듯한 오답이 높은 점수를 받습니다. 그래서 채점을 기계화합니다.
| 무엇을 | 무엇에 맞춰 | 주의할 것 |
|---|---|---|
| 산업 계산 | 공식(공학 수식 30 계열) | 일부 계열을 학습에서 아예 뺀다 — 외운 것과 할 줄 아는 것을 가르기 위해 |
| 도구 호출 | 가동 중인 시스템의 실제 스키마 | 고른 도구 · 인자 · 다단계 연결을 따로 본다 |
| 근거 지키기 | 주어진 맥락 | 맥락에 없던 사실이 나오면 틀린 것이다 |
| 현장 진단 | 실측 계측과 기록된 고장 | 정답이 우리 밖에서 오는 유일한 축. 어려운 정상을 섞고, 거짓 경보를 미탐지와 따로 센다 |
두 가지 원칙을 덧붙입니다.
- 관문의 기준은 측정 «전» 에 정한다. 결과를 보고 기준을 정하면 그것은 기준이 아니다
- 평가 데이터가 학습에 새지 않았는지를 검토자가 스스로 확인할 수 있어야 한다. 숫자를 믿으라고 하는 대신 다시 재는 법을 준다
9. 어디서 돌리나 — 온프레미스가 기본인 이유
제조 데이터는 대개 공장 밖으로 나갈 수 없습니다. 공정 조건 자체가 영업 비밀이고, 망이 폐쇄돼 있는 곳도 많습니다. 그래서 설계가 이렇게 됩니다.
- 모델이 데이터로 간다. 언어모델은 양자화 체크포인트(NVFP4)로 GPU 한 장에 올라가고, OpenAI 호환 엔드포인트 뒤에서 돈다. 설정에
gpt-4o라고 찍혀 있어도 사내 모델의 호환 이름이다 - 파형은 작은 모델로. 백만 파라미터급 시계열 모델은 GPU 없이 돌아 엣지에 얹을 수 있고, 설비마다 따로 맞춰도 비용이 거의 들지 않는다 — 설비 1만 대에 모델 1만 개가 가능한 크기다(연구 중, 아직 제품 경로에 넣지 않았다)
- 추론과 관문을 가른다. 가벼운 API 와 GPU 를 쓰는 추론 서버를 따로 두면, 추론을 다른 장비로 옮기거나 늘려도 호출하는 쪽의 주소가 바뀌지 않는다
- AI 가 자기 데이터베이스를 세우지 않는다. 시계열 · 관계형 · 캐시는 플랫폼의 원장을 함께 쓴다. 데이터가 두 벌이 되면 «AI 가 본 값» 과 «화면의 값» 이 어긋난다
배치 구조는 AI 아키텍처, 네 제품이 맞물리는 방식은 전체 구조에 있습니다.
도입 전에 확인할 것
제조 AI 를 검토할 때, 제품이 무엇이든 물어볼 만한 질문들입니다.
| 질문 | 좋은 답의 모양 |
|---|---|
| 결측을 어떻게 다루나 | 0 으로 채우지 않는다. 「측정 안 됨」을 따로 보고한다 |
| 모델이 못 떴을 때 무엇이 나가나 | 폴백하되 폴백했다고 응답에 적는다 |
| 거짓 경보를 어떻게 세나 | 미탐지와 따로 센다. 운영자가 잠재울 수 있고, 잠재워도 기록은 남는다 |
| 예측에 구간이 있나 | 있다. 그리고 그 구간이 실측 잔차에서 왔다 |
| 언어모델이 숫자를 만드나 | 만들지 않는다. 공식과 도구가 만들고 언어모델은 읽는다 |
| 성능 수치는 어떻게 쟀나 | 심판 모델 없이, 기준을 먼저 정하고, 검토자가 다시 잴 수 있게 |
| 데이터가 밖으로 나가나 | 나가지 않는다. 폐쇄망에서도 같은 구성으로 돈다 |
함께 보기
AURA 기술 백서 — 모델을 어떻게 만들고 재는지 · TimeSeries-Insight — 이상탐지 · 예측의 화면과 도구 · RAG 알고리즘 — 문서 검색 파이프라인 · 데이터레이크 기술 백서 — 모델이 올라앉는 데이터 인프라 · 자료 내려받기