https://dacon.io/competitions/official/236424/overview/description
전기차 가격 예측 해커톤: 데이터로 EV를 읽다! - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
데이콘에서 전기차 가격 예측이라는 주제로 대회가 열려 사이드 프로젝트로 진행해보았다.
전기차에 관련된 데이터를 활용하여 전기차 가격을 예측하는 AI 알고리즘 개발해 빠르게 성장하는 전기차 시장에 소비자와 제조사에 시장 경쟁력, 타겟층 공략, 기업에서 손실을 최적화 할 수 있는 성과로 다가갈 수 있을 것이다.
먼저 데이터의 변수는 다음과 같다.
- ID : 샘플별 고유 ID/제조사/모델/차량상태/배터리용량/구동방식/
- 주행거리(km)/보증기간(년)/사고이력/연식(년)/가격(백만원)
1. 데이터 탐색(EDA)
각 변수의 결측값과 타입을 확인해보았다. 확인된 내용으로는 모두 결측값이 존재하지 않지만, 배터리용량만 Null값이 존재하는 것을 확인할 수 있다. 또한, 범주형데이터는 6개 수치형데이터는 5개이다.
수치형데이터에 대해서 이상치를 확인하기 위해 5개의 변수 모두 Boxplot을 이용하였다.
라이브러리는 matplotlib과 seaborn을 사용하였다.
이상치 결과, 주행거리(km)/연식/가격에서 이상치가 보이는 것을 알 수 있다.
연식과 주행거리의 이상치 갯수를 확인해보았고 주행거리는 726개, 연식은 1102개, Y가격은 375개이다.
연식과 주행거리의 경우 시간에 따른 자연스러운 True 데이터라고 생각이 되고, 특히 주행거리는 이상치가 연속적인 모습을 보이고 있다.
2. 전처리
1. 배터리용량 결측값 처리
배터리용량의 결측값을 처리해주어야 하는데, 삭제를 하기에는 결측값이 2711개로 전체의 1/3이 넘는 데이터이기 때문에 채워주는 방향으로 진행하였다.
단순하게, 평균값/중앙값/최빈값을 이용해 채우기보다는 공부하면서 찾아본 K-최근접 이웃 알고리즘을 사용해보았다.
KNN은 데이터 이웃 간 유클리드 거리의 가중치를 이용해서 계산한다. KNN의 Imputation을 이용해 결측치를 처리해보았다. 파라미터에서 사용할 이웃 수는 5로 지정하였으며, 거리 가중치는 정렬된 데이터도 아니고 여러 변수들이 있기 때문에 동일 가중치를 주었다.
그러나, 아래 그림과 같이 이상치가 너무 많이 생기게 되어 KNN은 맞지 않는 것으로 보이고, 평균으로 처리를 하기로 했다.
3. 범주형데이터의 수치형 변환
범주형데이터를 모델에 X변수로 학습시키기 위해 수치형으로 전환하는 One Hot Encoding을 해주어야한다.
사실, 범주형 변수의 고유한 값의 개수가 많아지면 모델에 들어가는 X의 값이 많아져서 모델의 정확성을 떨어트린다.
각각의 object형식의 고유 값을 확인해보니 제조사7/모델21/차량상태3/구동방식3/사고이력2 가 나온다.
제조사 7
모델 21
차량상태 3
구동방식 3
사고이력 2
모델의 경우 너무 많은 변수가 존재하는데 모델이 과연 전기차 가격 예측에 영향력이 높을까 생각해보게 되었다.
현대차만 봐도 제네시스와 아반떼 등 브랜드 이미지가 있기 때문에 아무래도 영향이 있을 것 같아 모두 변수로 사용하기로 했다. 추후 A/B테스트를 통해서 모델 변수를 넣은 모델과 그렇지 않은 모델을 평가해보면 될 것 같다.
그래서 제조사, 모델, 차량상태, 구동방식, 사고이력을 수치로 변환해주었다.
Pandas의 get_dummies 또는 SK-learn의 OneHotEncoder을 이용해주면 된다.
OneHotEncoder을 사용할 떄 주의할점은 회귀분석과 같은 다중공선성에 민감한 모델을 사용하게 될 경우 drop='first' 파라미터를 해주어야한다.
이로써 총 35개의 값으로 Y가격의 대한 값을 구해보려고 한다.
최적의 설명력을 가지는 변수를 선정하기 위해 회귀분석의 OLS를 진행해보았다.
회귀분석을 먼저 진행해보았다. 35개의 변수를 넣고 AIC 적합도를 이용해 단계적선택법으로 최적의 변수를 추출하였다.
결과는 아래 25개의 변수가 존재했을때 가장 좋은 설명력을 가진다는 것인데 R-squared가 99%로 너무 높다.
너무 높은 경우는 과대적합으로 파악이 된다. 이유는 아무래도 범주형 변수가 많아서 그런 것 같다.
이 모델로 테스트를 진행해보게 되면 아래와 같은 예측값이 나온다.
모델 정확도를 높이는 방법
1. 결측치를 평균이 아닌 클러스터링을 활용하여 실제 예측값에 가깝게 반영
2. 이상치에 대한 데이터를 삭제
3. 범주형 변수 축소
3. 모델을 다중회귀가 아닌 조금 더 데이터에 알맞는 모형을 사용하여 변수 조절
4. 시계열 모형 사용
'Portfolio' 카테고리의 다른 글
[데이터분석] 국내 배급 영화 매출 분석 (0) | 2025.02.10 |
---|---|
[ML/DL] NLP GRU를 이용한 해외영상 댓글 감정분석 (1) | 2024.07.18 |
[Tableau] Business Dashboard 구현 (0) | 2024.07.12 |
[Python] Crawling Meta 라이브러리 (0) | 2024.07.12 |
[Tableau] 작업물 (0) | 2024.07.12 |