AI/머신러닝

센서 데이터와 이상 탐지 2일차 (이상치 탐지 유형, 감지 시스템, 이상치 모델)

edcrfv458 2025. 3. 18. 14:40

1. 이상치 탐지 유형

  • 센서 데이터에 많이 활용
  • 통계로 이상치 잡는 것은 정규분포인 경우에만 사용

 

Point Anomalies (포인트 이상치)

  • 단일 센서 값 또는 측정 값이 다른 정상 데이터와 비교했을 때 급격히 벗어난 경우
  • 예시
    • 온도 센서가 갑자기 비정상적으로 높은 값을 기록(정상 범위가 20~50 인데 100이 기록)
    • 특정 부품의 길이, 무게, 두께 등의 측정값이 허용 공차를 초과
    • 로봇 공정에서 하나의 동작 시간이 갑자기 너무 길거나 짧음

 

Contextual Anomalies (문맥적 이상치)

  • 값 자체는 정상 범위에 있지만 특정 조건이나 문맥에서 비정상적인 경우
  • 즉, 데이터의 맥락을 고려했을 때 이상이 생긴 것
  • 예시
    • 온도 센서 데이터: 일반적으로 밤에는 온도가 낮아야 하는데 특정 공장에서 높은 온도 기록
    • 진동 데이터: 정상적으로 기계가 작동할 때는 진동이 강해야 하는데 부하가 적은 공정에서 강한 진동이 발생
    • 생산 속도: 야간 작업 시 평균적으로 낮아야 하는데 특정 야간 근무일 때만 높게 기록

 

Collective Anomalies (집단적 이상치)

  • 개별 값들은 정상 범위 내에 있지만 여러 값이 특정한 패턴을 이루며 비정상적인 경우
  • 즉, 복수의 데이터 포인트들에게서 이상이 생긴 것(연속적)
  • 예시
    • 모터 전류 데이터: 특정 시간 동안 꾸준히 정상 범위를 유지하던 전류가 갑자기 연속적으로 변동이 심해짐
    • 생산 공정 시간: 개별적인 조립 공정 시간은 정상이지만 조립 후 검사 시간이 연속적으로 길어짐
    • 불량률 패턴 변화: 개별 불량률은 낮지만, 한 시간 동안 연속적으로 작은 불량이 누적되는 경우

 

주의점

  • 데이터의 시간적 특성과 시계열 이상 탐지
    • 이상 감지 분야에서 머신러닝 적용할 때 가장 큰 문제 중 하나는 데이터의 시간적 특성을 어떻게 반영할지
    • 특히 시계열 데이터의 경우, 단순히 개별 데이터 포인트의 이상 여부만을 판단하는 것이 아닌 시간에 따라 흐름과 패턴을 고려해야만 정확한 이상 감지가 가능
  • 그렇다면?
    • 대부분의 데이터는 다변수 시계열 데이터
    • 이 경우 각 변수들을 유사한 변수들끼리 묶어 그룹을 만드는게 중요

 

다변수 시계열 데이터를 그룹화해야 하는 이유

  • 예시 1: 모든 변수를 하나의 그룹으로 처리 (우주선 이상 감지 시스템)
    • 우주선에는 100개의 센서가 존재
    • 전체 데이터를 하나의 모델에서 감지하여 이상 발생 시 우주선 전체에 대한 이상 감지만 인지 가능
    • 하지만, 어느 부분에서 문제가 발생했는지 알 수 없어 대응이 어려움
    • 예를 들어, 1단 로켓, 2단 로켓, 엔진 궤도 등 어떤 시스템에서 이상이 발생했는지 파악이 어려움
    • 결과적으로, 경고 알람이 발생해도 세부적인 대응이 어려움
  • 예시 2: 변수들을 유사한 그룹으로 나누어 독립적인 이상 감지 모델 운영 (우주선 이상 가지 시스템)
    • 100개의 변수 중 유사한 변수들끼리 10개의 그룹으로 나누어 각각 독립적인 모델 운영
      • 1단 로켓 그룹 ➡️ 관련 변수만 포함(온도, 압력 등)
      • 엔진 그룹 ➡️ 엔진 관련 변수들만 포함
      • 궤도 그룹 ➡️ 궤도 조정 관련 변수만 포함
    • 만약 엔진 그룹에서 이상 감지 발생하면 엔진 관련 문제임을 인지하고 대응 가능
    • 모니터링 담당자는 경고 발생 시 즉시 해당 그룹을 확인하여 세부적인 원인 분석 및 대응 가능
  •  장점
    • 이상 감지의 정확도 향상 ➡️ 유사한 변수끼리 학습하므로 모델이 더 잘 학습
    • 문제 발생 시 즉각적인 원인 분석 가능
    • 운영 및 유지보수 용이

 

2. 실제 운영에서 그룹을 나누는 것이 중요한 이유

  • 다변수 시계열 데이터에서는 일부 변수들 간에 서로 연관이 깊고, 유사한 움직임 보이는 변수들이 존재
  • 예를 들어, 한 그룹의 변수가 A ~ E 까지 있다고 할 때, A 변수에서 이상이 발생하면 B, D 변수도 영향을 받는 경우가 존재
  • 이러한 도메인 지식을 반영해 서로 밀접한 관계가 있는 변수들을 같은 그룹으로 묶고 독립적으로 학습하는 것

 

3. 다변수 시계열 이상 감지 시스템 구축 방법

  • 변수 그룹화 (도메인 지식 반영)
    • 전문가의 도메인 지식 활용해 유사한 변수들 그룹으로 묶음
  • 그룹별 독립적인 이상 감지 모델 구축
    • 각 그룹에 맞는 이상 감지 모델을 개별적으로 학습 (Isolation Forest 등)
    • 그룹별 데이터의 특성을 반영해 최적화
  • 이상 감지 후 세부적인 원인 분석 가능하도록 설계
    • 하나의 모델에서 이상 감지 발생만 판단하는 것이 아님
    • 어느 그룹에서 어떤 값이 발생했는지까지 즉각적으로 확인 가능하도록 설계
  • 운영 및 유지보수의 용이성 확보
    • 특정 그룹의 데이터 특성이 변경되더라도 다른 그룹의 모델에는 영향을 주지 않음
    • 유지보수 및 개선이 더 쉬워짐

 

푸리에 변환(FFT)

  • 주기적인 패턴이 있는 센서 데이터(진동, 전력, 온도 등)에서는 푸리에 변환이 사용
  • 기계 진동(Vibration) 센서 이상 탐지
    • 문제
      • 공정의 모터, 베어링 등의 회전 기계에서 진동 센서를 통해 데이터 수집
      • 정상적인 기계는 일정한 주파수 패턴 가짐
      • 이상 발생하면 특정 주파수에서 진동 신호 강해지거나 새로운 주파수 성분 발견
    • 푸리에 변환 적용
      • 센서 데이터를 FFT로 변환
      • 정상적인 주파수 패턴과 비교해 새로운 주파수 성분 발생하면 이상 탐지
    • 해석
      • 정상적인 상태에서는 50Hz 주파수에서 진폭이 낮았지만 이상이 발생하면 50Hz에서 진폭이 급격히 증가
      • 이는 기계 부폼 손상 가능성이 있음을 나타냄

 

이상치 모델

 

Elliptic Envelope (타원형 경계 기반 이상치 탐지)

  • 데이터가 정규 분포를 따른다고 가정하고 타원형 경계(Elliptic Boundary)를 생성하여 이상치를 탐지
  • 다변수 데이터에서 중심에서 멀리 떨어진 데이터를 이상치로 간주
    • 특징
      • 통계적 접근법: 데이터의 평균과 공분산을 기반으로 이상 탐지
      • 정규 분포 가정: 데이터가 정규 분포를 따를 때 효과적
      • 고속 연산 가능: 다른 이상치 탐지 알고리즘으로 빠르게 동작
      • 선형적인 경계: 이상치를 결정하는 기준이 타원형 경계로 단순
  • 코드
from sklearn.covariance import EllipticEnvelope

# 모델 생성 및 학습
model = EllipticEnvelope(contamination=0.05) # contamination는 이상치 비율
model.fit(X)
pred = model.predict(X)

# 시각화
plt.scatter(X[:, 0], X[:, 1], c=pred, cmap='coolwarm')
plt.title("Elliptic Envelope Anomaly Detection")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

 

Isolation Forest (격리 기반 이상치 탐지)

  • 트리 구조를 사용하여 데이터를 무작위로 분할하며 이상치는 정상 데이터보다 더 빠르게 격리 되는 특성을 이용
  • 이상치는 다른 데이터보다 고립되기 쉬움으로 이상으로 판단
    • 특징
      • 비지도 학습 (하지만 지도 학습도 가능)
      • 빠른 연산 가능
      • 정규 분포가 아닌 데이터에도 적합
      • 고차원 데이터에도 효과적
  • 코드
from sklearn.ensemble import IsolationForest

# 모델 생성 및 학습
iso_forest = IsolationForest(contamination=0.05, random_state=42)
y_pred = iso_forest.fit_predict(X)

# 시각화
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='coolwarm')
plt.title("Isolation Forest Anomaly Detection")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

 

Local Outlier Factor (지역적 밀도 기반 이상치 탐지)

  • 데이터의 밀도를 계산하여 이웃 데이터(knn)들과의 상대적인 차이를 분석하여 이상치를 탐지하는 방법
  • 이상치의 특징: 주변 밀도가 낮고, 정상 데이터와의 밀도 차이가 클 경우 이상치로 판별
    • 특징
      • 밀도 기반 이상치 탐지 ➡️ 데이터 분포 균일하지 않아도 탐지 가능
      • 지역적 패턴 반영 ➡️ 특정 영역에서의 이상치 감지 가능
      • 비정규 분포 데이터에서도 효과적
  • 코드
from sklearn.neighbors import LocalOutlierFactor

# 모델 생성 및 학습
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.05)
y_pred = lof.fit_predict(X)

# 시각화
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='coolwarm')
plt.title("Local Outlier Factor (LOF) Anomaly Detection")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()