Clustering Hotelling T² 기법을 통한 배터리 이상 탐지


1. 개요

안녕하세요 DX컨설팅팀 이수빈입니다. 저희 팀은 지역 주력산업 육성 사업에서 배터리 이상탐지 모니터링 시스템 개발을 수행하였고 저는 모니터링 시스템에 탑재할 이상탐지 알고리즘 개발을 담당하였습니다. 이상탐지 알고리즘은 이상탐지 기법으로 널리 사용되는 Hotelling T² 알고리즘을 기반으로 충전 조건에 따라 변하는 데이터를 정상으로 처리하기 위한 K-means 클러스터링 기법을 추가한 Clustering Hotelling T²를 사용하여 개발하였습니다.

2. 사용 데이터 및 알고리즘

가. A123-APR18650M1A 데이터1

공칭 용량 1.1Ah, 공칭 전압 3.3V, 충방전 조건 공칭 용량의 80%(0.88Ah), 충전 정책은 C1(Q1 %)-C2 인 실험 데이터입니다. 실험 날짜는 `17-05-12, `17-06-30, `18-04-12이며 날짜 순으로41개, 43개, 40개의 셀을 사용하여 데이터를 수집하였고 사용된 충전 정책은 각각 3.6C(80%)-3.6C, 1C(4%)-6C, 4.36C(80%)-4.36C입니다.

아래와 같이 동일한 20번째 셀임에도 충전 정책에 따라 데이터 값이 달라집니다.

<20번째 셀 충전조건별 데이터 변화>

나. Clustering Hotelling T2

정상 데이터를 사용한 군집들의 범위 통계량의 정상 범위에 해당하며 이를 이용하여 새로운 데이터가 어느 군집에 속하는지를 판단하고, 해당 군집으로부터의 T2 통계량을 계산하여 이상 값을 탐지하는 방법입니다. 

3. 이상탐지 알고리즘 개발

가. T² 통계량 정상 범위 설정

1) 학습 데이터 제작

배터리 분야에서 신뢰성을 이야기할 때는 100사이클 이하의 충방전 상태를 정상 범위로 간주한다고 합니다. 실제 데이터는 다양한 사이클의 데이터가 존재하므로 정상 상태의 학습데이터를 구축하기 위해 100사이클 이하의 충전 데이터만 추출하여 학습용 데이터를 제작했습니다.

사용한 컬럼명은 온도, 전압, 전류, 충전용량, 데이터는 6,891,582건입니다.

QcTVI
0.00000231.642682.0391860.215985
0.00000231.642682.0548530.395954
0.00000231.642682.0668210.503829
0.00000231.642682.0807110.611646

<학습 데이터 일부>

2) K-means 군집화

yellowbrick 라이브러리를 사용하여 최적 클러스터 수를 찾고 K-means 알고리즘을 사용하여 최적 수의 군집으로 데이터를 분류합니다. 

<최적 군집 도출 결과 및 군집별 특징 시각화>

3) T² 임계 값 계산

아래 계산식을 통해 군집별로 T² 임계 값을 계산한 다음, 각 군집에서 구한 임계 값들의 평균을 계산합니다. 식은 다음과 같습니다.

<T² 임계 값 계산식 및 결과>

나. 이상탐지 및 주 원인 도출

1) 유사 군집 판단

새로운 데이터가 들어왔을 때, 새로운 데이터와 군집 간의 마하라노비스 거리를 계산하여 새로운 데이터가 어느 군집에 속하는지 찾습니다.

<마하라노비스 거리기반 유사 군집 식별>

2) T² 통계량 계산

T² 통계량은 새로운 측정값이 정상상태에서 얻어진 과거 이력자료와 얼마나 비슷한지를 판단하는 통계량으로 활용되며 이는 과거 이력자료와 새로운 측정값과의 마하라노비스 거리를 의미합니다. 식은 다음과 같습니다.


<T² 통계량 계산식 >

3) 주 이상 원인 도출

임계 값을 초과하는 데이터는 이상 데이터이며, 해당 데이터가 속하는 군집의 변수 별 평균을 사용하여 각 변수 간의 거리 비교를 통해 주 이상 원인을 도출합니다.

<주 이상 원인 도출 과정>

4. 이상탐지 알고리즘 수행 결과

사용된 데이터는 실험 데이터로, 이상이 없는 정상적인 데이터입니다. 따라서 셀의 전체 데이터를 사용하더라도 임계선을 넘는 값, 즉 이상치가 존재하지 않았습니다.

<충전조건별 이상탐지 결과>

이상탐지를 위해 3.6C(80%)-3.6C 충전 정책으로 수집한 첫 번째 셀 데이터 1,000건 중 온도가 이상인 데이터와 전압이 이상인 데이터를 총 10건의 이상 데이터를 추가합니다.

problematic_indices_T = [38, 400, 612, 941, 960]
problematic_indices_V = [128, 240, 342, 830, 884]

#온도를 올바른 범위를 벗어나게 설정
for idx in problematic_indices_T:
    data['T'][idx] = np.random.uniform(50, 70)
#전압을 올바른 범위를 벗어나게 설정
for idx in problematic_indices_V:
    data['V'][idx] = np.random.uniform(5.0, 10.0)

이상이라 정의한 10건의 이상 데이터가 제대로 검출되고, 주 원인 변수까지 잘 나오는 것을 확인했습니다.

QcTVIT2주원인
3420.96239932.3053978.3867410.99977825.371389V
4001.02197554.0498043.5053590.99984316.542800T
6121.07298260.4512303.5999660.04079821.681565T
8300.69857534.4996458.6964535.40041826.304181V

<이상 데이터를 추가한 이상탐지 결과>

5. 마무리

지금까지 개발한 배터리 이상탐지 알고리즘에 대해 공유하였습니다. 개발한 알고리즘은 배터리 모니터링 시스템에 적용하여 배터리의 상태를 실시간으로 분석하여 잠재적인 문제를 조기에 발견하는 데 큰 도움이 될 것으로 기대됩니다.

또한, 이 알고리즘은 전기차 배터리 관리 시스템에 적용하여 전기차 배터리의 성능을 실시간으로 모니터링하고 이상 징후를 조기에 감지하거나, 재생 에너지 저장 시스템에서도 태양광 패널이나 풍력 터빈의 배터리 상태를 지속적으로 감시하여 효율적인 에너지 저장 및 관리를 지원하는 등 다양한 분야에서도 활용할 수 있습니다.


[각주]

  1. 데이터 출처 – https://onesixx.com/a123-data/ ↩︎