1제조 데이터 피처의 특성

피처 엔지니어링(Feature Engineering)은 원시 데이터를 모델이 학습하기 좋은 형태로 변환하는 과정입니다. 제조 환경에서는 센서 데이터의 특성상 시간, 주파수, 통계적 특성을 모두 고려해야 합니다.

제조 데이터의 특징은 다음과 같습니다:

  • 시계열성: 센서 값은 시간에 따라 변화하며, 과거 값이 미래 예측에 중요
  • 다변량성: 수백 개의 센서가 동시에 측정되며 상호 연관성 존재
  • 주파수 패턴: 진동, 전류 등은 주파수 도메인에서 의미 있는 패턴 발견
  • 도메인 지식: 물리적 법칙과 공정 지식을 반영한 피처가 효과적
제조 피처의 주요 유형
시간 도메인
Time Domain
• Mean
• Std
• RMS
• Kurtosis
• Skewness
• Peak-to-Peak
주파수 도메인
Frequency Domain
• FFT
• Power Spectrum
• Peak Frequency
• Spectral Energy
• Harmonics
• Crest Factor
도메인 지식
Domain Knowledge
• OEE
• Cycle Time
• Energy Ratio
• Temperature
Difference
• Pressure Drop
Feature Store
(Feast / Tecton)

시간 도메인 피처

평균, 표준편차, RMS 등 원시 신호의 통계적 특성을 나타내는 피처

주파수 도메인 피처

FFT를 통한 주파수 분석, 진동 패턴, 모터 이상 탐지에 유용

도메인 지식 피처

물리 법칙과 공정 전문 지식을 반영한 엔지니어링 피처

상호작용 피처

센서 간 비율, 곱셈, 차이 등 변수 간 관계를 나타내는 피처

2시계열 피처 추출

시간 도메인에서 센서 데이터의 통계적 특성을 추출합니다. 슬라이딩 윈도우를 사용하여 시간 구간별로 피처를 계산합니다.

시계열 피처 추출 (수도코드)
# 시계열 피처 추출기 class TimeSeriesFeatureExtractor: # 설정: 윈도우 크기, 오버랩 비율 config = {window_size: 100, overlap: 0.5} # 슬라이딩 윈도우로 피처 추출 extract_features(data, sensor_columns): for each window in sliding_windows(data): for each sensor: features = extract_sensor_features(window[sensor]) return features_dataframe # 센서별 통계 피처 (시간 도메인) extract_sensor_features(values): mean = 평균값 std = 표준편차 rms = sqrt(mean(values^2)) # 신호 에너지 kurtosis = 첨도 (뾰족한 정도) skewness = 왜도 (비대칭도) peak_to_peak = max - min crest_factor = peak / rms # 충격 검출 # 롤링 윈도우 피처 (시간 변화 추적) rolling_features(sensor, windows=[10, 30, 60]): rolling_mean_{window} = 이동평균 rolling_std_{window} = 이동표준편차 pct_change_{window} = 변화율 # 예시: 진동 센서 → 피처 vibration_x → vibration_x_mean, vibration_x_std, vibration_x_rms, ... temperature → temperature_mean, temperature_rolling_mean_30, ...
RMS vs Mean: 언제 사용할까?

Mean(평균)은 신호의 중심 경향을 나타내며 DC 성분 측정에 적합합니다. RMS(Root Mean Square)는 신호의 에너지를 나타내며 AC 성분이 포함된 진동, 전류 측정에 더 유용합니다. 제조 설비 모니터링에서는 RMS가 설비 상태를 더 잘 반영합니다.

3주파수 도메인 피처

진동, 전류, 압력 등의 신호는 주파수 도메인에서 분석하면 특정 주파수 대역의 이상을 탐지할 수 있습니다. FFT(Fast Fourier Transform)를 사용하여 주파수 스펙트럼을 추출합니다.

주파수 도메인 피처 (수도코드)
# 주파수 피처 추출기 class FrequencyFeatureExtractor: # FFT 기반 피처 추출 extract_fft_features(signal, sampling_rate=1000): # 1. FFT 변환 fft_values = FFT(signal) fft_magnitude = abs(fft_values) psd = fft_magnitude^2 # Power Spectral Density # 2. 주요 피처 계산 peak_frequency = argmax(magnitude)의 주파수 spectral_energy = sum(psd) # 총 에너지 spectral_centroid = sum(freq * psd) / sum(psd) # 무게중심 spectral_entropy = -sum(p * log(p)) # 신호 복잡도 # 3. 대역별 에너지 (제조 설비용) energy_low = sum(psd[0-50Hz]) # 저주파 energy_mid = sum(psd[50-200Hz]) # 중간주파 energy_high = sum(psd[200-500Hz]) # 고주파 # 모터 결함 진단 (주파수 패턴 분석) class MotorSignatureAnalyzer: motor_hz = motor_rpm / 60 # RPM → Hz 변환 detect_motor_faults(vibration_signal): fft = FFT(signal) # 결함별 주파수 패턴 imbalance = magnitude at 1x RPM # 불균형 misalignment = magnitude at 2x, 3x RPM # 축정렬 불량 bearing = sum(magnitude[1-5kHz]) # 베어링 결함 looseness = sum(harmonics 1x~5x) # 느슨함 return fault_scores
모터 결함 주파수 패턴

불균형(Imbalance): 1x RPM | 미스얼라인먼트(Misalignment): 2x, 3x RPM | 베어링 결함(Bearing Fault): BPFO, BPFI (고주파) | 느슨함(Looseness): 여러 하모닉 성분. 이러한 패턴을 피처로 활용하면 정밀한 예측 정비가 가능합니다.

4자동화된 피처 선택

수백 개의 피처를 모두 사용하면 과적합과 계산 비용 증가 문제가 발생합니다. 통계적 방법과 머신러닝 기법을 사용하여 중요한 피처만 선택합니다.

자동 피처 선택 (수도코드)
# 자동 피처 선택기 class AutoFeatureSelector: # 방법 1: 상호 정보량 (비선형 관계 탐지) select_by_mutual_information(X, y, k=50): scores = mutual_info(X, y) return top_k_features(scores) # 방법 2: RFE (재귀적 피처 제거) select_by_rfe(X, y, n_features=50): model = RandomForest() # 가장 낮은 중요도 피처를 반복 제거 rfe = RFE(model, n_features) return selected_features # 방법 3: 트리 기반 중요도 select_by_importance(X, y, threshold=0.01): model = RandomForest().fit(X, y) importances = model.feature_importances_ return features where importance >= threshold # 방법 4: 상관관계 기반 select_by_correlation(X, y, threshold=0.1): correlations = X.corrwith(y) return features where abs(corr) >= threshold # 중복 피처 제거 (상관계수 0.95 이상) remove_correlated_features(X): corr_matrix = X.corr() return features without highly_correlated_pairs # 앙상블: 여러 방법 조합 ensemble_selection(X, y, methods, top_k): for method in methods: scores[method] = run_method(X, y) # Soft voting: 평균 점수 # Hard voting: 다수결 return top_k by ensemble_scores
방법 장점 단점 사용 시기
Mutual Information 비선형 관계 탐지 계산 비용 높음 복잡한 관계가 있는 데이터
RFE 모델 기반 선택 시간 소요 큼 정확한 선택이 필요할 때
Tree Importance 빠르고 직관적 편향 가능성 초기 탐색 단계
Correlation 매우 빠름 선형 관계만 탐지 빠른 필터링이 필요할 때

5Feature Store 통합

Feast를 사용하여 피처를 중앙에서 관리하고, 학습과 추론 환경에서 일관되게 사용할 수 있습니다.

Feature Store 설정 (수도코드)
# Feast Feature Store 구성 # 1. Entity 정의 (피처의 키) Entity: machine_id (설비 ID) # 2. FeatureView 정의 (피처 그룹) sensor_stats_features: entity: machine_id ttl: 7일 # 피처 유효 기간 features: - vibration_x_mean, vibration_x_std, vibration_x_rms - temperature_mean, pressure_mean source: sensor_features.parquet frequency_features: entity: machine_id features: - peak_frequency, spectral_energy - energy_low, energy_mid, energy_high source: frequency_features.parquet # 3. Feature Store 사용 class FeastFeatureManager: # 피처 저장 (Offline + Online) ingest_features(df, feature_view_name): store.write_to_offline_store(df) # 학습용 store.materialize() # 추론용 동기화 # 학습용: 과거 시점 피처 조회 get_historical_features(entity_df, features): return store.get_historical_features(entity_df, features) # 추론용: 최신 피처 조회 (실시간) get_online_features(entity_rows, features): return store.get_online_features(entity_rows, features)
Feature Store의 핵심 가치

1) 피처 재사용: 한 번 정의한 피처를 여러 모델에서 사용 | 2) 일관성 보장: 학습과 추론 환경에서 동일한 피처 사용 | 3) 버전 관리: 피처 변경 이력 추적 | 4) 성능 최적화: Online Store로 실시간 추론 가속화