전기차 가격 예측 해커톤 - Exploratory Data Analysis, EDA
안녕하세요. 이번에는 Dacon 전기차 가격 예측 해커톤에서 제공받은 데이터를 기반으로 수행한 탐색적 데이터 분석(Exploratory Data Anaysis, EDA)에 대한 글입니다. 해당 데이터는 전기차와 관련된 데이터를 활용하여 전기차 가격을 예측하는 AI 알고리즘 개발을 위해 제공되었으며, 데이터의 컬럼은 ID, 제조사, 모델, 차량상태, 배터리용량, 주행거리(km), 구동방식, 보증기간(년), 사고이력, 연식(년) 그리고 정답인 가격(백만원)으로 이루어진 데이터입니다. 해당 데이터 기반의 예측은 전기차 시장에서 소비자와 제조사 모두에게 중요한 가치를 제공하게 되는 데, 정확한 가격 예측은 시장 경쟁력 분서그 소비자 구매 의사 결정 지원 그리고 생산 및 유통 최적화에 기여할 수 있습니다. 따라서 저는 대회의 취지에 맞게 정확한 가격 예측을 위해 데이터 EDA를 수행하였고, 이 과정에서 제가 데이터에서 어떤 특징에 집중하였고 이상치 데이터를 어떻게 판별하고 이를 제거했는 지 등을 알아보도록 하겠습니다.
데이터 링크 : https://dacon.io/competitions/official/236424/data
전기차 가격 예측 해커톤: 데이터로 EV를 읽다! - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
탐색적 데이터 분석 (Exploratory Data Analysis, EDA)
1. 데이터 분포도 확인
데이터 분포도는 Seaborn의 Scatterplot을 통해서 x축을 가격으로 하여, 가격과 다른 컬럼 간의 관계를 가장 먼저 살펴보았습니다. 저 같은 경우는 가장 처음에 이런식으로 분포도를 살펴보고, 어디서부터 데이터를 파고들지를 판단을 해봅니다. 이에 대한 실마리를 찾기 위해서 수 없이 많은 생각과 시도(?)들이 필요하지만 여기서는 그 과정은 생략하고 저는 차량 상태에 따른 주행거리(km)과 배터리용량의 관계를 살펴보았습니다.
import matplotlib.pyplot as plt
import seaborn as sns
# ID를 제외한 컬럼 리스트 생성
features = ['제조사', '모델', '차량상태', '배터리용량', '구동방식', '주행거리(km)', '보증기간(년)', '사고이력', '연식(년)']
# 그래프 설정
plt.figure(figsize=(15, 10))
# 각 특성에 대해 반복
for i, feature in enumerate(features):
plt.subplot(3, 3, i + 1) # 3x3 그리드에 서브플롯 생성
sns.scatterplot(x='가격(백만원)', y=feature, data=train) # 가격과 특성 간의 박스플롯
plt.title(f'가격 vs {feature}')
plt.xlabel('가격(백만원)')
plt.ylabel(feature)
plt.grid()
plt.tight_layout() # 레이아웃 조정
plt.show() # 그래프 출력
2. 차량상태에 따른 주행거리(km)과 배터리용량과의 관계 그래프
저한테 왜 차량상태에 따른 주행거리와 배터리용량과의 관계 그래프를 보게 되었냐라는 질문을 하신다면, 일단은 먼저 차량상태의 요소는 Brand New, Nearly New, Pre-Owend라는 요소로 나뉘어져 있습니다. 따라서 저는 이를 통해서 각 차량상태에 따라서 주행거리의 상한값과 하한값이 있을 것이라고 생각을 하였고, 이에 따른 배터리용량을 살펴보면 적어도 3가지로 구분되는 일종의 군집화를 할 수 있지 않을까? 그리고 이에 대한 이상치가 분명히 있을 것 같다라는 생각을 하게 되었습니다. 그럼 이에 대한 그래프 결과를 살펴보도록 하겠습니다.
# 차량 상태에 따른 배터리와 주행거리의 관계 산점도 그리기
plt.figure(figsize=(12, 6))
sns.scatterplot(x='주행거리(km)', y='배터리용량', hue='차량상태', data=train, alpha=0.6)
plt.title('차량 상태에 따른 배터리와 주행거리의 관계')
plt.xlabel('주행 거리')
plt.ylabel('배터리')
plt.legend(title='차량 상태')
plt.grid()
plt.show()
이러한 예측에 따라서 저는 다음과 같은 그래프를 얻을 수 있었습니다. 그러면 대략적으로 차량상태에 따른 주행거리는 다음과 같이 볼 수 있었습니다.
- Brand New : 0 ~ 10,000 km
- Nearly New : 10,001km ~ 50,000km
- Pre-Owned : 50,000km 초과
이렇게 세 가지를 기준으로 해당 기준에 해당되지 않는 요소들은 모두 train에서 제외를 하였습니다. 여기서 배터리용량 부분을 기준으로 띄엄띄엄 보이는 데이터들도 제거해보았지만, 결과는 좋지 않았고 앞서 말씀드린 세가지 요소들에 해당하는 부분만 제거하였습니다. (여기서도 Pre-Owned의 요소를 모두 날려보니, 성능이 좋지 않아서 Nearly New의 요소만을 제거하였습니다.)
3. 모델별 가격에 따른 배터리용량과 가격(백만원) 간의 그래프
학습을 해보시면 알겠지만 해당 데이터 세트에서 Feature importance를 통해서 배터리용량과 주행거리(km)는 아주 중요한 역할을 합니다. 그리고 학습 과정에서 Validation을 통해 오차 값이 '1' 이상인 값을 따로 모아서 각 모델별 요소를 세어보면 IONIQ 모델과 TayGTS 모델이 가장 많이 나오게 됩니다. 해당 모델들은 가격 분포가 최하위와 최상위를 차지하고 있는 요소들이기 때문에 일단 저는 해당 부분을 좀 더 파해쳐보기로 하였습니다.
먼저 아래와 같이 IONIQ 모델에 대한 그래프를 보시면 아주 그래프가 난리난 모습을 볼 수 있습니다. 하지만 이를 자세히 차량 상태의 관점에서 보면 50,000일기준으로 Pre-Owned가 Nearly New 영역을 침범하고 있다는 것을 확인할 수 있습니다. 앞서 2번에서 언급한대로 일단은 이 부분을 이상치라고 정하고 50,000km 이하의 Pre-Owned는 모두 제거하였습니다.
다음으로는 TayGTS 모델을 살펴보았습니다. 아래 사진을 보시면 해당 구간은 크게 뭔가 잘못된 부분이 없는 것 같은 데, 왜 그럴까? 라는 의문이 있었습니다. 이 같은 과정에서 평균을 해보면 TayGTS는 안그래도 복잡한 데, 추가적인 배터리용량 값이 생긴다는 것을 알게되었습니다. 이러한 점들이 다른 모델에서도 나타나였지만, 그 모든 것들을 제거하면 너무 TEST에 과적합될 가능성이 매우 크기 때문에 저는 Validation의 예측 결과에 따른 TayGTS 모델 부분만 이상치로 간주하고 제거하였습니다.
4. 기타 이상치 제거
거의 여기서부터는 아주 소량의 성능을 올리기 위해 아둥바둥했던 것 같습니다. 이 부분에서 제거했던 것은 IONIQ 모델이 속한 데이터였고 여기서 보증기간(년)이 8년인 것과 배터리용량이 80인 것을 제거하였습니다. 이 또한, 너무 많은 이상치들을 제거하면 나중에 100% 공개된 TEST 데이터가 들어오게 되면 큰 손해를 입을 가능성이 크기 때문에 이상치 제거 부분은 여기까지로 마무리하였습니다.
마무리
여기까지 데이터 EDA에 대한 과정이었습니다. 해당 데이터를 통해서 차량상태에 따른 주행거리 그리고 배터리용량 간의 관계가 데이터 예측에 큰 영향을 미친다는 것을 알게되었습니다. 그리고 그 과정에서 작은 영역인 IONIQ 모델과 TayGTS 모델의 이상치도 데이터 예측의 영향을 미치는 것으로 보아서, 이상치 데이터가 전반적으로 예측에 많은 영향을 준다는 것을 알게 되었습니다. 이제 이후에는 전체적인 과정을 통해서 이상치 제거 외의 null 값에 대한 처리 과정, Scaler, 컬럼에 대한 Drop 그리고 모델에 대해서 알아보도록 하겠습니다. 해당 글에서는 저의 모든 과정이 다 나오지 않았지만 여기까지 알아내기까지 거의 200번을 넘는 제출 시도가 있었습니다. 정말 작은 데이터 하나 하나가 학습에 큰 영향을 주기 때문에 이러한 영역을 찾가까지 정말 많은 고민과 시도가 있었던 것 같습니다. 그럼 이번 EDA에 대한 글은 여기서 마치도록 하겠습니다.

학습 및 예측 :
2025.01.31 - [Personal Projects/Dacon] - [Dacon] 전기차 가격 예측 해커톤 (3) - Prediction Process
[Dacon] 전기차 가격 예측 해커톤 (3) - Prediction Process
전기차 가격 예측 해커톤 - Prediction Process 안녕하세요! 이번에는 지난 EDA에 이어서 데이터를 불러오는 것부터 예측까지의 모든 과정에 대한 글입니다. 지난 번 EDA에서 데이터의 이상치를 제거
muns-da2.tistory.com
'Personal Projects > Dacon' 카테고리의 다른 글
[Dacon] 부동한 허위매물 분류 해커톤 (3) - 최종 코드 (0) | 2025.02.28 |
---|---|
[Dacon] 부동산 허위매물 분류 해커톤 (2) - EDA (0) | 2025.02.28 |
[Dacon] 부동산 허위매물 분류 해커톤 (1) - 후기 (Private 43, 상위 10%) (0) | 2025.02.28 |
[Dacon] 전기차 가격 예측 해커톤 (3) - Prediction Process (0) | 2025.01.31 |
[Dacon] 전기차 가격 예측 해커톤 (1) - 후기 (최종 3위) (0) | 2025.01.31 |