CAN 데이터를 활용한 머신러닝 기반 예측 시스템(실전 프로젝트)
1. 개요
자동차와 산업용 기기에서 사용되는 CAN(Controller Area Network) 통신은 다양한 센서 및 제어 데이터를 실시간으로 전송하는 중요한 네트워크입니다. 이 데이터를 활용하면 차량의 상태를 분석하고, 머신러닝 및 딥러닝 기술을 통해 고장 예측 및 유지보수 자동화 시스템을 구축할 수 있습니다.
이번 포스팅에서는 CAN 데이터를 기반으로 머신러닝 및 딥러닝을 활용한 고장 예측 모델을 개발하는 방법을 설명합니다. 또한, 실제 자동차 유지보수를 위해 AI 기반 분석 시스템을 구축하는 절차를 소개합니다.
2. CAN 데이터를 활용한 고장 예측 모델 개발
2.1 데이터 수집 및 전처리
머신러닝 기반 고장 예측 모델을 구축하려면 먼저 CAN 데이터 로그를 수집해야 합니다. 일반적으로 CAN 데이터는 로그 파일(CSV, JSON, ASC 등) 형태로 저장됩니다.
CAN 데이터의 일반적인 구조는 다음과 같습니다:
Timestamp | CAN ID | DLC | Data Bytes |
---|---|---|---|
1612435232 | 0x18FEF1 | 8 | FF FF 00 00 12 34 56 78 |
1612435233 | 0x0CFE6C | 8 | 45 67 89 AB CD EF 12 34 |
데이터를 활용하기 위해 Python과 Pandas를 사용하여 CAN 로그를 불러오고 전처리합니다.
import pandas as pd
def load_can_data(file_path):
df = pd.read_csv(file_path)
df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='s')
return df
can_data = load_can_data('can_log.csv')
print(can_data.head())
이제 데이터를 정제하고, 머신러닝 모델에서 활용할 수 있도록 가공하는 과정이 필요합니다.
2.2 특징 추출 (Feature Engineering)
머신러닝 모델이 학습할 수 있도록 CAN 데이터에서 의미 있는 특징(Feature)을 추출해야 합니다. 주요 특징으로는 다음과 같은 것들이 있습니다:
- CAN ID별 발생 빈도: 특정 ID의 메시지가 얼마나 자주 발생하는지 분석
- 데이터 패턴 분석: 센서 값의 변화 패턴
- 이상 값 탐지: 정상적인 범위를 벗어난 데이터 검출
Pandas를 활용하여 CAN ID별 발생 빈도를 계산할 수 있습니다.
can_id_counts = can_data['CAN ID'].value_counts()
print(can_id_counts)
2.3 머신러닝 모델 구축
이제 머신러닝 모델을 사용하여 CAN 데이터 기반 고장 예측을 수행합니다. 주로 랜덤 포레스트(Random Forest), XGBoost, 딥러닝 모델(LSTM, CNN 등)을 활용할 수 있습니다.
간단한 랜덤 포레스트 모델을 사용하여 고장 예측을 시도해 보겠습니다.
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 데이터 준비 (예제 데이터)
X = can_data.drop(['Timestamp', 'CAN ID'], axis=1) # 특성 데이터
Y = (can_data['CAN ID'] == 0x18FEF1).astype(int) # 특정 고장 발생 여부
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
# 랜덤 포레스트 모델 학습
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, Y_train)
# 모델 평가
predictions = model.predict(X_test)
accuracy = accuracy_score(Y_test, predictions)
print(f'모델 정확도: {accuracy:.2f}')
이러한 방식으로 CAN 데이터를 기반으로 고장을 예측하는 머신러닝 모델을 개발할 수 있습니다.
3. 딥러닝/머신러닝과 CAN 로그 데이터를 결합
3.1 시계열 데이터 기반 딥러닝 모델
자동차 센서 데이터는 시간에 따라 변화하는 시계열 데이터이므로, 딥러닝 모델 중에서도 LSTM(Long Short-Term Memory) 네트워크가 효과적입니다.
TensorFlow/Keras를 활용하여 LSTM 모델을 구현하는 예제는 다음과 같습니다.
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# LSTM 모델 정의
model = Sequential([
LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], 1)),
LSTM(50, return_sequences=False),
Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 모델 학습
model.fit(X_train, Y_train, epochs=10, batch_size=32, validation_data=(X_test, Y_test))
LSTM 모델은 CAN 데이터의 시계열 패턴을 학습하여 미래의 고장 가능성을 예측하는 데 유용합니다.
4. 자동차 유지보수를 위한 AI 기반 분석 시스템 구축
4.1 실시간 CAN 데이터 스트리밍 및 분석
실제 자동차 유지보수 시스템을 구축하려면 실시간으로 CAN 데이터를 수집하고 분석해야 합니다. 이를 위해 MQTT, Kafka 등의 메시지 브로커를 활용할 수 있습니다.
import paho.mqtt.client as mqtt
def on_message(client, userdata, message):
print(f"수신한 데이터: {message.payload.decode()}")
client = mqtt.Client()
client.on_message = on_message
client.connect("mqtt_broker_ip", 1883)
client.subscribe("car/can_data")
client.loop_forever()
이와 같이 실시간으로 CAN 데이터를 수집하고 분석하여 자동차 유지보수 및 고장 예측을 자동화하는 시스템을 구축할 수 있습니다.
5. 결론
본 포스팅에서는 CAN 데이터를 활용한 머신러닝 기반 고장 예측 시스템 구축 방법을 설명하였습니다.
- CAN 데이터를 수집하고 전처리하는 방법
- 머신러닝 및 딥러닝을 활용하여 고장 예측 모델을 개발하는 방법
- 실시간 스트리밍을 활용하여 유지보수 시스템을 구축하는 방법
앞으로 더욱 발전된 모델을 활용하여 자동차 유지보수의 자동화 및 예측 정밀도 향상을 목표로 연구를 진행할 수 있습니다.
'CAN 통신' 카테고리의 다른 글
자동차 ECU와 CAN 통신(실전 프로젝트) (0) | 2025.03.13 |
---|---|
CAN 기반 센서 네트워크 구축 (실전 프로젝트) (0) | 2025.03.13 |
CAN FD 및 최신 CAN XL 기술 심화 분석 (0) | 2025.03.12 |
Linux에서 SocketCAN을 활용한 CAN 네트워크 제어 (0) | 2025.03.11 |
CAN to Wireless 통합 시스템 구축 (0) | 2025.03.10 |