원프레딕트
경력근거: 산업 현장(제조/설비) 환경에서의 시계열 데이터 및 신호 데이터 분석
원프레딕트는 정유·발전 같은 제조·에너지 현장의 회전설비를 진단하는 Industrial AI 기업이고, 이 자리는 고객사 현장에 상주하며 산업 설비 진단 알고리즘을 ML·DL 로 만들어 현장 데이터로 개선하는 데이터 사이언티스트입니다. 진동 신호의 베어링 결함 주파수 대역 피크와 설비별 정격·임계로 이상을 판정하는 이 사슬은 원프레딕트가 실제로 다루는 회전설비 진단 도메인이 있어야 의미가 있고, 일반 IT 로그나 문서 데이터로는 그대로 재현되지 않습니다. 다만 이 포트폴리오가 보여주는 것은 특징량 대조 규칙·오토인코더 이상탐지·근거 인용 같은 기술이며, 설비 정비 도메인 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
제조·설비 현장에 상주해 실제 데이터를 탐구하고, 문제를 정의한 뒤 ML·DL 로 설비 진단 알고리즘을 만들어 현장에 적용하는 역할입니다. 진동·신호 특징량을 받아 이상 설비를 근거와 함께 판정하는 콘솔로 이 흐름을 그대로 보여줍니다.
자격·우대사항이 산업 현장의 시계열·신호 데이터 분석과 신호처리 배경지식입니다. 진동 스펙트럼의 베어링 결함 주파수 대역 피크와 RMS·첨도 같은 특징량을 다뤄 이 역량을 제품 골조로 씁니다.
EDA 결과를 시각적으로 전달하는 능숙함과 현장 데이터 기반 모델 개선의 지속적 피드백 루프를 봅니다. 설비별 스펙트럼·추세 시각화와 진단 엔지니어 라벨 일치도 측정으로 이 요구를 담습니다.
고객사 제조·설비 현장에 상주하는 진단 담당자가 펌프·모터·압축기 같은 회전설비의 진동 특징량(RMS·첨도·베어링 결함 주파수 대역 진폭)을 넣으면, 설비 마스터의 정격·임계와 대조해 설비별로 정상·주의·이상을 규칙으로 판정하고 어느 특징량이 임계에서 얼마나 벗어났는지 근거를 붙입니다. 이상 설비를 이탈 배율로 정비 우선순위 리스트로 정렬하고, 정비 조치 초안에 근거를 붙여 서술하며, 설비별 스펙트럼·추세를 EDA 시각화로 보여줍니다. 원프레딕트가 정유·발전 같은 제조·에너지 현장에서 하는 산업 설비 진단을 현장에서 바로 돌려보는 산출물입니다. 근거는 채용공고 정렬이고, 데이터는 작성자가 만든 더미입니다.
원프레딕트 소속으로 고객사 정유·발전 현장에 상주하며 수십 대 설비의 센서 데이터를 매일 들여다보던 진단 엔지니어입니다. 어느 설비를 먼저 봐야 하는지, 왜 이상인지를 스펙트럼을 일일이 뒤지지 않고 한 화면에서 근거를 보며 확인하고 싶은 사람입니다.
회전설비의 진동 특징량을 한 스키마로 모으고 설비별 정격·결함 주파수·경보 임계를 마스터로 두면, (a) 정상·주의·이상을 규칙으로 판정해 근거를 붙이고, (b) 이상 설비를 이탈 배율로 정비 우선순위로 정렬하며, (c) 판정 근거와 정비 조치 초안에 근거를 붙여 서술합니다.
진동 특징량을 넣으면 설비 마스터 임계와 대조해 정상·주의·이상을 규칙으로 판정하고, 이상 설비를 정비 우선순위로 정렬하며, 어느 특징량이 임계에서 얼마나 벗어났는지 근거를 붙여 서술하는 동작하는 콘솔입니다. 원시 진동 파형 처리는 무거우므로 1주차는 이미 뽑아둔 특징량 테이블을 입력으로 가정하고 시작하며, 설비 마스터와 특징량은 작성자가 만든 더미로 시작합니다.
정상 데이터로 학습한 딥러닝 오토인코더의 재구성오차를 규칙 판정과 대조해 경계 케이스를 보강하고, 판정이 진단 엔지니어 사람 라벨과 얼마나 일치하는지 일치도를 보여주는 단계입니다. 원시 진동 파형에서 특징량을 뽑는 신호처리 전처리도 이 단계에서 붙입니다.
매일 설비별 이상 순위와 근거를 요약 리포트로 자동 생성하고, 다른 회전설비 유형을 마스터에 추가해 설비군 전체 진단 현황을 한눈에 보는 대시보드로 확장하는 단계입니다.
설비별 진동 특징량을 넣으면 정상·주의·이상 판정과 그 근거(어느 특징량이 임계 대비 얼마나 벗어났는지), 이상 설비의 정비 우선순위 리스트가 몇 초 안에 나오는 걸 시연합니다. 각 판정에는 인용한 feature 값과 임계가 함께 붙습니다
판정 근거로 인용한 feature 값이 실제 입력 특징량과 일치하는지 자동 검사에서 통과하고, 규칙이 정한 severity 와 gold 라벨이 100% 재현되는 걸 보여줍니다. 단, 정답과 데이터를 모두 작성자가 만든 합성 기준이라 '성능 검증'이 아니라 '데모 조건에서의 동작'임을 명시합니다
일부러 만든 센서 결측·미등록 설비·표기흔들림·경계값(RMS 0, 설비 정지) 입력 30종을 넣어도 출력 형식(스키마)이 한 번도 안 깨지고, 마스터에 없는 설비는 추측 대신 '미매핑'으로 표시합니다
위 수치는 전부 작성자가 만든 더미 특징량의 자가채점이며, 실제 설비 진단 정확도와 오경보율은 원프레딕트 고객사의 실제 센서 데이터와 실 진단 엔지니어 검수가 있어야 측정 가능합니다. 이 콘솔은 그 검증을 바로 돌릴 수 있는 상태로 만듭니다
이건 고객·실데이터 없이 혼자 만든 포트폴리오입니다. 모든 수치는 합성 데이터 자가채점이라 '성능 증명'이 아닙니다. 면접에서는 '데모 조건 동작 + 실검증 준비 상태'로 솔직히 설명합니다
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 센서 결측·미등록 설비(마스터에 없음)·표기흔들림(설비명 원문/별칭)·경계값(RMS 0인 정지 설비, 임계 바로 위아래) 같은 하드 케이스를 더미에 일부러 섞어, 쉬운 문제만 푸는 게 아님을 보여줘야 합니다
진동 특징량과 실제 고장은 상관이지 인과가 아닙니다. 베어링 결함 주파수 피크가 높다고 항상 그 부품 고장인 것은 아니고 정렬 불량·공진과 헷갈릴 수 있습니다. 이 포트폴리오가 보여주는 것은 특징량 대조 규칙·오토인코더 이상탐지·근거 인용 같은 기술이며, 설비 정비 도메인 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다. 판정은 규칙과 재구성오차로 객관 채점하고, LLM 은 근거 서술·조치 초안만 맡깁니다
실제 도입 시 달라지는 것을 명시합니다. 더미 특징량은 고객사 실제 센서의 분포·노이즈·운전 조건으로 교체해야 하고, 설비 심각도 임계도 설비군·현장별로 다시 잡아야 하며, 정상 라벨을 정하는 사람이 작성자에서 실 진단 엔지니어로 바뀝니다(도입 단계 과제로 분리)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
회전설비 마스터. 설비별 정격 rpm·베어링 결함 주파수(BPFO·BPFI)·심각도 임계(주의·이상 RMS)의 진실원이며, 진동 특징량 판정의 기준이 됩니다. 설비명 별칭과 임계 결측을 일부러 섞어, 쉬운 데이터만 푸는 게 아님을 보여줍니다.
| equipment_id | equipment_name | machine_type | rated_rpm | bearing_model | bpfo_hz | bpfi_hz | rms_warn | rms_alarm |
|---|---|---|---|---|---|---|---|---|
| eq_p101 | 1호기 급수펌프 | 펌프 | 1,780 | SKF-6312 | 106.4 | 162.8 | 4.5 | 7.1 |
| eq_p102 | 2호기 급수펌프 | 펌프 | 1,780 | SKF-6312 | 106.4 | 162.8 | 4.5 | 7.1 |
| eq_m201 | 냉각탑 팬모터 | 모터 | 1,180 | NSK-6208 | 71.2 | 108.9 | 2.8 | 4.5 |
| eq_m202 | 순환수 모터 | 모터 | 3,560 | NSK-6310 | 152.6 | 233.1 | 2.8 | 7.1 |
| eq_c301 | 공정 압축기 A | 압축기 | 2,970 | FAG-NU314 | 188.3 | 271.7 | 4.5 | 11 |
아래 JSON Schema 에 맞는 회전설비 마스터 40행을 JSON 배열로 생성하세요. machine_type 별로 정격 rpm·베어링 결함 주파수(bpfo_hz·bpfi_hz)·심각도 임계(rms_warn·rms_alarm)가 현실적으로 일관되게(ISO 회전기계 진동 심각도 구간 참고) 만드세요.
{"type":"object","properties":{"equipment_id":{"type":"string"},"equipment_name":{"type":"string"},"machine_type":{"type":"string","enum":["펌프","모터","압축기","송풍기"]},"rated_rpm":{"type":"integer"},"bearing_model":{"type":["string","null"]},"bpfo_hz":{"type":["number","null"]},"bpfi_hz":{"type":["number","null"]},"rms_warn":{"type":"number"},"rms_alarm":{"type":"number"}},"required":["equipment_id","equipment_name","machine_type","rated_rpm","rms_warn","rms_alarm"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞으세요: (1) bearing_model·bpfo_hz·bpfi_hz 가 null 인 '베어링 사양 미등록' 설비 2~3건(결함 주파수 대역 판정을 건너뛰고 RMS·첨도로만 판정해야 함), (2) 같은 machine_type 이라도 정격 rpm 이 다르면 결함 주파수가 다르게, (3) rms_warn·rms_alarm 임계를 machine_type 별로 다르게. JSON 배열만 출력하세요.{"type":"object","properties":{"equipment_id":{"type":"string"},"equipment_name":{"type":"string"},"machine_type":{"type":"string","enum":["펌프","모터","압축기","송풍기"]},"rated_rpm":{"type":"integer"},"bearing_model":{"type":["string","null"]},"bpfo_hz":{"type":["number","null"]},"bpfi_hz":{"type":["number","null"]},"rms_warn":{"type":"number"},"rms_alarm":{"type":"number"}},"required":["equipment_id","equipment_name","machine_type","rated_rpm","rms_warn","rms_alarm"]}설비별 진동 특징량 스냅샷과 정답(severity·근거). 원시 파형에서 뽑은 RMS·첨도·베어링 대역 진폭을 담습니다. 센서 결측·미등록 설비(orphan)·표기흔들림·경계값(RMS 0인 정지)을 일부러 섞어, 규칙 판정이 하드 케이스에서도 안 깨지는지 보여줍니다.
| reading_id | equipment_raw | equipment_id | measured_at | rms_mm_s | kurtosis | bpfo_amp | bpfi_amp | temp_c | rpm | gold_severity | gold_reason |
|---|---|---|---|---|---|---|---|---|---|---|---|
| r_0001 | 1호기 급수펌프 | eq_p101 | 2026-07-10T09:00:00 | 2.1 | 3.1 | 0.4 | 0.3 | 48 | 1,778 | 정상 | RMS 2.1 은 주의 임계 4.5 미만이고 대역 진폭·첨도 모두 정… |
| r_0002 | 2호기 급수펌프 | eq_p102 | 2026-07-10T09:00:00 | 5.3 | 4.2 | 1.8 | 0.6 | 55 | 1,779 | 주의 | RMS 5.3 이 주의 임계 4.5 를 넘고 BPFO 대역 진폭이 상… |
| r_0003 | 공정 압축기 A | eq_c301 | 2026-07-10T09:00:00 | 12.4 | 6.8 | 3.9 | 1.1 | 71 | 2,965 | 이상 | RMS 12.4 가 이상 임계 11.0 을 초과하고 BPFO 대역 진… |
| r_0004 | 냉각탑 팬모터 | eq_m201 | 2026-07-10T09:00:00 | 4.9 | 5.5 | 0.5 | 2.4 | — | 1,176 | 이상 | RMS 4.9 가 이상 임계 4.5 를 넘고 BPFI 대역 진폭이 높… |
| r_0005 | 배기 송풍기 2 | eq_f402 | 2026-07-10T09:00:00 | 3.6 | 3.9 | — | — | 44 | 888 | 주의 | 베어링 사양 미등록으로 대역 진폭 판정은 건너뛰고 RMS 3.6 이 … |
아래 JSON Schema 에 맞는 회전설비 진동 특징량 60행을 JSON 배열로 생성하세요. equipment_raw·equipment_id 는 equipment_master 와 매칭되게 하고, gold_severity 는 해당 설비의 rms_warn·rms_alarm 임계와 대역 진폭(bpfo_amp·bpfi_amp)·첨도를 규칙으로 대조해 결정되게(정답이 규칙으로 재현되게) 만드세요: RMS 가 rms_alarm 이상이거나 대역 진폭이 크게 상승하면 이상, rms_warn 이상이면 주의, 그 미만이면 정상.
{"type":"object","properties":{"reading_id":{"type":"string"},"equipment_raw":{"type":"string"},"equipment_id":{"type":["string","null"]},"measured_at":{"type":"string"},"rms_mm_s":{"type":"number"},"kurtosis":{"type":["number","null"]},"bpfo_amp":{"type":["number","null"]},"bpfi_amp":{"type":["number","null"]},"temp_c":{"type":["number","null"]},"rpm":{"type":"integer"},"gold_severity":{"type":"string","enum":["정상","주의","이상","미매핑"]},"gold_reason":{"type":"string"}},"required":["reading_id","equipment_raw","measured_at","rms_mm_s","rpm","gold_severity","gold_reason"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞으세요: (1) temp_c 나 kurtosis 가 null 인 센서 결측 3~5건(그 특징량은 판정에서 제외), (2) rms_mm_s=0·rpm=0 인 정지 설비 경계값 1~2건(운전 중 아님, 이상 판정 제외), (3) equipment_id=null 인 미등록 설비 orphan 2~3건(gold_severity='미매핑'), (4) equipment_raw 표기 흔들림(같은 설비를 '1호기 급수펌프'와 '1호기 급수 펌프'로), (5) RMS 가 임계와 정확히 같은 경계값 케이스. JSON 배열만 출력하세요.{"type":"object","properties":{"reading_id":{"type":"string"},"equipment_raw":{"type":"string"},"equipment_id":{"type":["string","null"]},"measured_at":{"type":"string"},"rms_mm_s":{"type":"number"},"kurtosis":{"type":["number","null"]},"bpfo_amp":{"type":["number","null"]},"bpfi_amp":{"type":["number","null"]},"temp_c":{"type":["number","null"]},"rpm":{"type":"integer"},"gold_severity":{"type":"string","enum":["정상","주의","이상","미매핑"]},"gold_reason":{"type":"string"}},"required":["reading_id","equipment_raw","measured_at","rms_mm_s","rpm","gold_severity","gold_reason"]}| Python | 특징량 로딩·설비 임계 대조 규칙 판정, 우선순위 정렬, 근거 인용 자동 채점 스크립트, 신호처리 전처리 |
| 딥러닝 | 정상 데이터로 학습한 오토인코더의 재구성오차로 규칙이 놓치는 경계 이상을 잡아 교차검증(2주차) |
| 신호처리(FFT/스펙트럼) | 원시 진동 파형에서 베어링 결함 주파수(BPFO·BPFI) 대역 진폭·RMS·첨도 특징량 추출(2주차 전처리) |
| 시계열 분석 | 설비별 특징량 추세를 잡아 서서히 나빠지는 열화 패턴을 근거로 제시 |
| scikit-learn | 규칙 임계 튜닝과 특징량 기반 이상 점수 산출의 기준 모델 |
| EDA 시각화(matplotlib) | 설비별 스펙트럼·RMS 추세 플롯을 콘솔에 렌더해 판정 근거를 눈으로 확인 |
| LLM(Claude Sonnet) | 판정 근거를 사람 말로 서술하고 정비 조치 초안 작성(정상·주의·이상 판정 자체는 규칙과 오토인코더가 담당) |
| Streamlit | 진단 콘솔 화면(설비별 판정·우선순위·스펙트럼·근거 카드) 렌더 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우고 싶으면 2주차(오토인코더 교차검증·신호처리 전처리·사람 라벨 일치도)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(일일 우선순위 리포트 자동화·설비 유형 확장 대시보드)로 진행합니다.
설비별로 1) 진동 특징량과 설비 임계를 대조해 정상·주의·이상을 판정, 2) 어느 특징량이 임계 대비 얼마나 벗어났는지 근거(evidence)를 인용, 3) 정비 조치 초안에 근거를 붙여 서술. 판정(severity)은 규칙과 오토인코더 점수로 결정하고 LLM 은 근거 서술·조치 초안만 맡습니다.
{"type":"object","properties":{"reading_id":{"type":"string"},"equipment_id":{"type":["string","null"]},"severity":{"type":"string","enum":["정상","주의","이상","미매핑"]},"anomaly_score":{"type":["number","null"]},"evidence":{"type":"array","items":{"type":"object","properties":{"feature":{"type":"string"},"observed":{"type":"number"},"threshold":{"type":["number","null"]},"deviation_ratio":{"type":["number","null"]},"note":{"type":"string"}},"required":["feature","observed","note"]}},"recommended_action":{"type":["string","null"]},"hedge":{"type":["string","null"]}},"required":["reading_id","severity","evidence"]}[
{
"input_ref": "r_0003 (공정 압축기 A, RMS 12.4, BPFO 대역 진폭 3.9)",
"output": {
"reading_id": "r_0003",
"equipment_id": "eq_c301",
"severity": "이상",
"anomaly_score": 0.91,
"evidence": [
{
"feature": "rms_mm_s",
"observed": 12.4,
"threshold": 11,
"deviation_ratio": 1.13,
"note": "RMS 가 이상 임계 11.0 을 넘었습니다"
},
{
"feature": "bpfo_amp",
"observed": 3.9,
"threshold": 1.5,
"deviation_ratio": 2.6,
"note": "베어링 외륜 결함 주파수(BPFO) 대역 진폭이 기준의 2.6배로 높습니다"
},
{
"feature": "kurtosis",
"observed": 6.8,
"threshold": 4.5,
"deviation_ratio": 1.51,
"note": "첨도가 높아 충격성 진동이 섞였습니다"
}
],
"recommended_action": "베어링 외륜 결함 진행 의심으로, 다음 정지 기회에 해당 베어링 점검과 교체 준비를 우선 배정하는 것을 권합니다.",
"hedge": "판정은 작성자가 정한 더미 임계(rms_alarm 11.0) 기준이며, 실제 설비의 정상 기준선과 정비 판단은 현장 진단 엔지니어 확인이 필요합니다."
}
},
{
"input_ref": "r_0006 (순환수 모터, RPM 0·RMS 0 정지 상태)",
"output": {
"reading_id": "r_0006",
"equipment_id": "eq_m202",
"severity": "정상",
"anomaly_score": null,
"evidence": [
{
"feature": "rpm",
"observed": 0,
"threshold": null,
"deviation_ratio": null,
"note": "RPM 0 으로 운전 중이 아닙니다"
},
{
"feature": "rms_mm_s",
"observed": 0,
"threshold": 7.1,
"deviation_ratio": 0,
"note": "정지 상태라 진동이 없어 이상 판정 대상이 아닙니다"
}
],
"recommended_action": null,
"hedge": "정지 설비는 진단 대상에서 제외했습니다. 운전 재개 후 재측정이 필요합니다."
}
},
{
"input_ref": "r_0008 (3호기 급수펌프, 설비 마스터 미등록)",
"output": {
"reading_id": "r_0008",
"equipment_id": null,
"severity": "미매핑",
"anomaly_score": null,
"evidence": [
{
"feature": "equipment_raw",
"observed": 0,
"threshold": null,
"deviation_ratio": null,
"note": "설비 마스터에 '3호기 급수펌프'가 없어 임계를 알 수 없습니다"
}
],
"recommended_action": null,
"hedge": "마스터에 없는 설비라 추측 없이 미매핑으로 처리했습니다. 설비 마스터 등록 후 재판정이 필요합니다."
}
}
][자동 검증] 1. JSON Schema 형식 통과: 출력이 스키마를 만족하는지(필드·enum·타입) 검사해 형식 깨짐을 거릅니다. 2. 근거 인용 일치: evidence 의 각 observed 값이 입력 sensor_feature 의 해당 feature 값과 일치하고, threshold 가 equipment_master 의 임계와 맞는지 대조합니다(근거 없는 수치 인용 차단). 3. 판정 재현: severity 가 규칙(RMS·대역 진폭·첨도 대 임계)으로 결정한 gold_severity 와 일치하는지 채점합니다. 4. 미매핑 처리: equipment_id=null 케이스에서 severity 가 추측 없이 '미매핑'으로 나오는지 검사합니다. [수동 검증] 1. 정비 조치 초안 검수: 진단 엔지니어 2명이 recommended_action 이 근거와 맞고 과장·단정이 없는지 라벨링하고, 판정이 얼마나 일치하는지 측정합니다(Cohen's κ: 두 사람 판정이 우연 이상으로 일치하는 정도, 0~1). 2. 경계 케이스 점검: 임계 바로 위아래·센서 결측 케이스에서 근거 note 가 어떤 특징량을 제외했는지 정확히 밝히는지 표본 점검합니다.
포트폴리오가 “무엇을 만들지”라면, 시나리오 테스트는 “현장에서 어떻게 판단·소통할지” 입니다. 실제 이 채용공고 맥락의 대본을 읽고 무엇을 물어야 할지 직접 써봅니다.