내일배움캠프(QA,QC_5기)

[내일배움캠프] QA/QC_5기 ( 64일차 )

lshxkwh 2026. 6. 10. 20:07

BMW i3 실주행 데이터로 주행거리 예측 모델링 중간 점검 (D-2)

CatBoost 기반 EV 항속거리 예측 모델 구축기

전기차를 타는 사람이라면 한 번쯤은 이런 고민을 해봤을 것이다.

"지금 배터리로 정말 목적지까지 갈 수 있을까?"

이른바 Range Anxiety(주행거리 불안) 이다.

이번 프로젝트에서는 BMW i3의 실제 주행 데이터를 활용하여 주행거리에 영향을 미치는 요인을 분석하고, 머신러닝 모델을 이용해 주행거리를 예측해 보았다.

최종적으로 CatBoost 모델을 통해 R² 0.941, 평균 RMSE 3.08km의 성능을 얻을 수 있었다.

하지만 이 프로젝트에서 더 중요했던 것은 높은 성능보다도, 그 성능이 어떤 의미를 가지는지 이해하는 과정이었다.


왜 BMW i3를 선택했을까?

BMW i3는 전기차 시장 초기의 대표적인 혁신 모델이었다.

2013년 출시 당시에는 탄소섬유 차체, 경량 설계, 미래지향적 디자인 등으로 많은 주목을 받았다.

하지만 2022년 결국 단종되었다.

그 이유를 살펴보면 가장 큰 원인 중 하나는 항속거리 경쟁력 부족이었다.

  • 22kWh 배터리 탑재
  • 실주행 거리 약 130~160km
  • Tesla Model 3 등 장거리 EV 등장
  • 경쟁 차종 대비 짧은 주행거리

전기차 시장이 성장할수록 소비자들은 더 긴 주행거리를 원했고, 결국 항속거리는 차량 경쟁력을 결정하는 핵심 요소가 되었다.

그래서 다음과 같은 질문이 생겼다.

"실제 주행 데이터만으로 주행거리를 얼마나 정확하게 예측할 수 있을까?"


데이터셋 소개

이번 프로젝트에서 사용한 데이터는 BMW i3의 실제 주행 데이터이다.

항목내용

차량 BMW i3
트립 수 70개
TripA 22개
TripB 48개
총 데이터 수 109,505 행
최종 분석 데이터 70 × 17

수집된 데이터에는 다음과 같은 정보가 포함되어 있었다.

  • 속도(Velocity)
  • 배터리 전류(Current)
  • 배터리 온도
  • SoC(State of Charge)
  • 고도(Elevation)
  • 난방 전력(Heating Power)
  • 공조 전력(Air Conditioning Power)

즉 차량의 움직임뿐 아니라 배터리 상태와 HVAC 데이터까지 함께 포함된 데이터셋이었다.


데이터 전처리

실제 차량 데이터는 그대로 사용할 수 없었다.

먼저 데이터 품질을 확보하기 위해 전처리 과정을 진행했다.

원본 데이터
↓
1초 단위 리샘플링
↓
결측치 보간
↓
파생변수 생성
↓
Trip 단위 집계
↓
변수 선택
↓
최종 모델링 데이터셋 생성

Feature Engineering

단순 평균값만으로는 차량의 특성을 충분히 설명하기 어려웠다.

그래서 시계열 특성을 반영할 수 있는 파생변수를 생성했다.

대표적으로 다음 변수들이 사용되었다.

변수의미

Elevation_MA3_std 고도 변화 변동성
SoC_lag1_std SoC 변동성
Velocity_diff_mean 속도 변화량 평균
Battery_Current_diff_mean 전류 변화량 평균

특히 단순 값 자체보다 변동성(Variance) 이 주행거리와 밀접한 관계를 보였다.


데이터에서 발견한 흥미로운 사실

TripA와 TripB를 비교하는 과정에서 흥미로운 패턴을 발견했다.

저온 환경에서 난방 사용량이 크게 증가하면서 배터리 소모 속도가 빨라지는 현상이 나타난 것이다.

분석 결과,

외기온도 감소
↓
난방 전력 증가
↓
배터리 소비 증가
↓
SoC 감소 가속
↓
주행거리 감소

라는 흐름을 확인할 수 있었다.

실제로 외기온도와 난방 전력은 음의 상관관계를 보였으며, 추운 환경에서 전기차 주행거리가 감소하는 이유를 데이터로 확인할 수 있었다.


머신러닝 모델 비교

본격적으로 여러 모델을 비교해 보았다.

모델R²RMSE

CatBoost 0.922 4.25km
XGBoost 0.905 4.72km
RandomForest 0.873 5.45km
LightGBM 0.674 8.71km

결과는 CatBoost의 압승이었다.

특히 데이터 수가 70개로 많지 않은 상황에서도 안정적인 성능을 보여주었다.

반면 LightGBM은 충분한 데이터를 확보하지 못해 성능이 크게 떨어졌다.


성능보다 더 중요했던 문제

모델링 과정에서 예상치 못한 고민이 생겼다.

바로 일부 변수들이 주행거리와 지나치게 높은 상관관계를 보인 것이다.

대표적인 변수는 다음과 같았다.

변수상관계수

SoC_lag1_std 0.897
Duration 0.840
SOC_Consumed 0.667
Battery_State_of_Charge_End 0.379

처음에는 데이터 누수(Data Leakage)를 의심했다.

하지만 자세히 살펴보니 문제의 본질은 조금 달랐다.

이 변수들은 미래 정보를 포함한 누수 변수라기보다는, 주행거리와 직접적으로 연결된 정답 대리변수(Proxy Variable) 에 가까웠다.

예를 들어,

주행시간(Duration) × 평균속도
≈ 주행거리(Distance)

라는 관계가 성립한다.

즉 모델이 진짜 패턴을 학습한 것이 아니라 정답을 우회적으로 계산했을 가능성이 있는 것이다.


직접 검증해봤다

그래서 해당 변수들을 제거한 뒤 다시 교차검증을 진행했다.

결과는 다음과 같았다.

조건R²RMSE

전체 변수 사용 0.874 3.30km
대리변수 제거 0.675 5.53km

R²는 약 20% 감소했고 RMSE는 크게 증가했다.

이는 해당 변수들이 실제로 매우 강력한 설명력을 가지고 있다는 의미였다.

다만 이 결과는 동시에 모델이 일부 대리변수에 의존하고 있다는 사실도 보여준다.

따라서 본 모델은 실시간 예측 모델이 아니라 트립 종료 후 사후 분석(Post-Trip Analysis) 모델 로 해석하는 것이 적절하다고 판단했다.


Optuna 튜닝

성능 향상을 위해 Optuna를 이용한 하이퍼파라미터 최적화를 진행했다.

30회 탐색 결과,

  • RMSE 5.37km
  • → 4.50km

까지 개선되었다.

Trial 20 이후부터는 성능 향상이 거의 발생하지 않아 수렴한 것으로 판단했다.


최종 모델 성능

최종 모델은

5-Fold Cross Validation × 10회 반복

방식으로 평가하였다.

결과는 다음과 같다.

지표결과

평균 R² 0.941
평균 RMSE 3.08km
RMSE 표준편차 1.55km
최소 RMSE 1.59km

70개의 트립 데이터만으로도 상당히 높은 예측 성능을 확보할 수 있었다.


어떤 변수가 가장 중요했을까?

Feature Importance 분석 결과는 다음과 같았다.

순위변수중요도

1 Duration 25.6%
2 SoC_lag1_std 24.3%
3 Elevation_MA3_std 17.6%
4 SOC_Consumed 16.4%

흥미로운 점은 단순 속도보다

  • 주행시간
  • 배터리 변동성
  • 고도 변화

가 더 중요한 변수로 나타났다는 것이다.

특히 언덕이 많은 구간에서는 추가적인 에너지 소비가 발생했고, 이는 주행거리 감소에 직접적인 영향을 주었다.


프로젝트를 통해 배운 점

이번 프로젝트에서 얻은 가장 큰 교훈은 단 하나였다.

높은 성능 수치 자체는 그리 중요하지 않다.

중요한 것은

"왜 그런 성능이 나왔는가?"

를 설명할 수 있는지 여부다.

실제로 R² 0.941이라는 결과도 대리변수 검증을 수행하지 않았다면 단순히 좋은 숫자에 불과했을 것이다.

하지만 변수 제거 실험을 통해 모델의 한계를 확인했고, 어떤 상황에서 사용할 수 있는 모델인지 명확하게 정의할 수 있었다.


마무리

전기차의 항속거리는 단순히 배터리 용량만으로 결정되지 않는다.

주행 패턴, 고도 변화, 외기온도, HVAC 사용량 등 수많은 요소가 복합적으로 작용한다.

이번 프로젝트를 통해 실제 주행 데이터만으로도 이러한 관계를 정량적으로 분석할 수 있었으며, 머신러닝을 활용해 상당히 높은 수준의 주행거리 예측이 가능하다는 점을 확인했다.

다만 현재 모델은 사후 분석 중심의 모델이다.

향후에는 출발 전 확인 가능한 정보만 사용하여 실시간 항속거리 예측 모델로 확장해 볼 계획이다.

데이터는 단순히 숫자를 만드는 도구가 아니다.

숫자 뒤에 숨어 있는 원인을 이해하고 설명하는 과정이야말로 데이터 분석의 진짜 가치라고 생각한다.