본 프로젝트는 영국 중고차 시장 데이터를 기반으로
데이터 손실은 줄이고 정보량은 최대한 보존한다는 방향을 세우고, "중고차 가격 예측 모델링" 및 "특성 기반 클러스터링"에 사용될 수 있는 데이터로 정제하는 것을 목표로 진행하였다.
자세한 프로젝트 진행 과정은 GitHub repository에서 확인할 수 있다.
🛠️ 사용 환경: Python, Pandas, Jupyter Notebook
cars.csv
brand.csv
| 내용 | 주요 메서드/기법 | |
|---|---|---|
| 1 | 데이터 로드 및 브랜드 병합 | read_csv(), merge(), str.split() |
| ↓ | ||
| 2 | 파생변수 생성 및 타입 정리 | str.split(), to_numeric() |
| ↓ | ||
| 3 | 결측치 처리 | isna(), fillna(), median(), drop() |
| ↓ | ||
| 4 | 이상치 제거 | 조건 필터링, 도메인 기반 삭제 |
| ↓ | ||
| 5 | 원-핫 인코딩 | pd.get_dummies |
| ↓ | ||
| 6 | 스케일링 | RobustScaler(), .fit_transform() |
| ↓ | ||
| 7 | PCA (주성분 분석) | PCA(), explained_variance_ratio_ |
| ↓ | ||
| 8 | 컬럼별 상관관계 확인 | corr() |
[1] 데이터 병합 및 브랜드 정보 추가
car_df['title']에서 브랜드 추출 후, brand_df와 병합하여 brand 컬럼 추가[2] 문자열 숫자형 컬럼 처리
Engine, Emission Class의 문자열에서 숫자만 추출 후 float형으로 변환[3] 결측치 처리 전략
Service history: 'Unknown'으로 채움median으로 대체[4] 이상치 제거
[5] 원-핫 인코딩
[6] 스케일링
RobustScaler로 전체 데이터프레임 스케일 조정[7] PCA 적용
PCA(2~10)까지 설명력 확인 후, PCA(7) 최종 선택pca = PCA(7)
pca_df = pd.DataFrame(pca.fit_transform(car_df), columns = [f'PC{i}' for i in range(1, 8)])
[8] 컬럼별 상관관계 확인
Price와의 상관관계가 Registration_Year에서 0.7로 가장 높게 나타난 것을 확인파이썬은 대소문자에 민감하게 반응한다.
→ 따라서 테이블 병합 시 사용된 키 title 컬럼에 저장된 값들을 대문자로 변환하는 과정이 필요했다.
describe()는 기본적으로 숫자형 변수에 대한 통계치를 제공하므로, 카테고리형 변수를 숫자로 인코딩하면 요약 통계에 포함시킬 수 있다.
일반적으로 결측치의 비율이 크다면 제거하지만 남겨두는 것이 유의미한 역할을 하는 경우도 있다.
→ Service history는 결측 여부가 차량 가격에 명확한 영향을 주기 때문에 'Unknown'으로 처리하고 분석에 반영하였다.
한 행에 여러 컬럼에서 결측치가 존재한다면, 결측치 비율이 낮더라도 mean이나 median으로 채우기보다 drop시키는 방향으로 가야 한다.
가격과 마일리지의 분포를 확인했을 때 로그 변환이 고려될 수 있으나, Price는 종속변수로 해석 및 예측에 영향을 줄 수 있어 최종적으로 로그 변환을 적용하지 않았다.
원-핫 인코딩을 수행하기 전, 고윳값이 448개로 많은 title 컬럼에서 "해당 컬럼이 없어도 데이터에 큰 영향이 없을까?" 를 고려해 보았을 때, 다른 특성으로 모델의 차이를 충분히 설명할 수 있다는 판단 하에 drop하였다.
PCA 적용 시 주성분 수에 따른 설명 분산 비율을 확인하며 7개의 주성분이 약 70%의 분산을 설명한다는 점에서 해당 수치를 기준으로 차원 축소를 수행하였다.
변수 간의 상관관계가 높으면 다중공선성 문제가 발생할 수 있다.
→ 그런데 주의할 점은, 이는 독립변수 간의 상관관계인 경우라는 것이다.
→ 만약 이 데이터를 "중고차 가격을 예측"하는 모델을 만들기 위해 사용한다면 Price는 예측 대상이 되는 종속변수이기 때문에 Price와 Registration_Year의 상관관계가 높다고 해서 문제가 되는 것은 아니라, 오히려 연식이 가격을 예측하는 데에 유용한 도구로 작용한다는 것을 생각해 볼 수 있다. 이와 관련해서 다중공선성, 종속변수와의 상관관계가 높다면?이라는 주제로 정리해 보았다.
전처리의 각 단계마다 "왜 이렇게 하는가"를 고민하면서 데이터를 바라보는 시야를 조금 더 넓힐 수 있는 프로젝트였다.