[멀티에이전트 프로젝트] 기계음 이상탐지1(데이터 수집~가공)

1. 프로젝트 개요

제조 현장에서 설비 고장은 막대한 손실로 이어진다. 이 프로젝트는 "기계가 고장 나기 전에 현장에서 미리 쉽게 알 수 있는 방법은 없을까?"라는 질문에서 시작되었다.

프로젝트의 목표는 두 가지 였는데, 하나는 기계의 센서 데이터를 분석하여 이상 징후를 사전에 포착하는 머신러닝 모델을 구축하는 것이고, 다른 하나는 과연 Antigravity의 Agent와 Skills 기능으로 머신러닝 과정을 자동화할 수 있는 지 확인해보는 것이었다. 여기서 내가 개인적으로 더 신뢰하던 Claude Code를 사용하지 않은 이유는 두 가지다

  • 내가 교육(ML,DL)을 수행해야 하는 대상은 중소기업의 임직원들인데, 그들은 대부분 클로드 유료사용자가 아니어서 실습에 제한을 받고 있다.

  • 최근에 나온 Antigravity의 스킬과 에이전트 기능으로도 Claude Code를 대신할 수 있을 정도인지 개인적으로 궁금했다

단순한 프로그래밍을 넘어 각 단계별로 전문화된 에이전트에게 임무를 부여하고 도구(Skill)를 사용하는 데에도 문제가 없다면, 내가 수행하는 컨설팅 과정도 극적으로 바뀔 것이다.

2. 데이터 수집

모델 학습에 앞서 데이터를 이해하고 정제하는 과정(Data Preprocessing & EDA)을 수행했다. 데이터의 본질을 파악하고 최적의 학습 환경을 조성하기 위한 초기 단계의 기록이다.

데이터는 정밀가공기업의 CNC 설비에서 추출한 센서 데이터 1,000건(machine_data.csv)을 준비했다. 1분 간격으로 수집된 데이터인데, 다음과 같은 5가지 핵심 변수로 구성되어 있다. (테스트를 위해 미리 비식별화 처리와 목적에 맞게 수정하는 과정이 선행되었다. 또, 이상탐지가 목적이었지만 수월한 테스트를 위해서 정상/이상 라벨처리를 해줬다.)

변수명

설명

단위

비고

timestamp

측정 시간

YYYY-MM-DD HH:MM

시계열 데이터

amplitude

소리 크기

dB

소음 수준

frequency

주파수

Hz

진동 주파수

vibration

진동

G

진동 가속도

temperature

온도

°C

표면 온도

is_anomaly

이상 여부

0/1

Target (0: 정상, 1: 이상)

데이터의 무결성이 확보된 정제된 데이터 1,000 건을 샘플로 추출했다. 결측치(Missing Values) 처리가 완료된, 정제된 상태임을 확인했다.

우선 @data-whisperer 에이전트가 data-cleaner 스킬을 사용해서 데이터 전처리를 수행하도록 했다.

@data-whisperer 에이전트에는 지저분한 로우 데이터에서 인사이트를 추출하고, 모델 학습에 최적화된 피처(Feature)를 설계하는 역할을 맡겼다. 구체적인 임무는 데이터 탐색(결측치, 이상치, 상관관계), 정제(잘못된 데이터 타입 수정, 노이즈 제거), 피처엔지니어링(정제, 스케일링, 인코딩, 파생변수 생성 등), 시각화를 수행한다.

data-cleaner 스킬은 사용자가 로드한 CSV 파일을 가져와서 df.isnull().sum()으로 결측치를 확인한 후, 수치형 데이터는 중앙값(median)으로, 범주형 데이터는 최빈값(mode)으로 채우는 코드를 작성하는 스킬이다.

2.1 문제해결

초기 분석단계에서 분석 스크립트가 로컬 환경의 시각화 라이브러리(seaborn)가 의존성 문제로 인해 실행되지 않는 문제가 있었는데, 의존성을 최소화한 분석 코드를 재작성하도록 지시해서 보완했다. 그 결과로 에이전트는 외부 라이브러리 없이도 기초 통계량과 결측치를 확인할 수 있는 환경을 구축하고, 스스로 환경적 제약을 판단하고 우회할 수 있게 업그레이드 됐다.

2.2 데이터 전처리 결과

에이전트는 스킬을 사용하여 결측치 및 중복 진단 후, 이상 탐지 알고리즘에 불필요한 timestamp 컬럼을 제거하고, 학습에 최적화된 cleaned_data.csv를 생성해줬다.

3. 이상징후의 패턴 분석 (EDA)

"정상상태와 이상 발생 시 데이터는 어떻게 다른가?"를 중점적으로 파악하는 단계다.

3.1 수치적 통계비교

정상(is_anomaly=0) 데이터와 이상(is_anomaly=1) 데이터를 분리하여 주요 지표의 평균값을 비교했다.

  • 온도(Temperature): 정상 평균 40°C 대비 이상 평균 60°C로 약 20°C의 확연한 차이가 발생했다.

  • 소리 크기(Amplitude): 정상 평균 50 대비 이상 평균 80으로 소음 수준이 급격히 증가했다.

  • 주파수 및 진동: 두 상태 간의 유의미한 평균값 차이는 관찰되지 않았다.

이 분석을 통해 @data-whisperer 에이전트는 '온도''소리'가 이상탐지의 핵심지표라는 사실도 스스로 도출할 수 있었다.

다양한 유형의 데이터를 보여주는 일련의 그래프

3.2 시각화를 통한 상관관계 분석

에이전트는 히트맵 분석을 통해 온도(temperature)와 소음(amplitude)이 이상 징후와 매우 높은 상관계수(0.85 이상)를 가짐도 입증해냈다

4. 데이터 전처리 결과

이로써 모델 학습을 위한 최종 데이터가 준비되었다.

  1. 변수 선택: 시계열 분석이 목적이 아니므로 학습에 불필요한 timestamp 컬럼은 제거됐다.

  2. 데이터 정제: 전처리가 완료된 데이터는 cleaned_data.csv로 저장했다.

  3. 이상치 검증: IQR(사분위수 범위) 방식을 적용하여 정상 범주 내의 심각한 통계적 이상치가 존재하지 않음이 확인됐다.

5. 시사점

에이전트는 라이브러리 충돌 문제를 만나자 스스로 진단하고 해결방안을 마련하고 수행하여 결국 분석을 완수해 냈다.

다음 단계는 머신러닝 알고리즘에 기반한 이상탐지 모델링 단계인데, 이것도 잘 수행할 수 있을지 기대가 된다.

1
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요