- 자동차 구매 요인을 다룬 기존 연구가 대부분 설문 기반이라, 설문 대신 카탈로그 사양표와 실제 월별 판매 대수를 맞붙여 보기로 했다. 헤드램프 광원 종류, 룸미러 자동디밍, 시트 재질 같은 세부 옵션까지 전부 변수로 만들었다.
- 변수를 기본·기능·디테일 3계층으로 설계해 회귀 모형에 넣은 독립변수 51개, 최종 학습 데이터 69열을 만들었다. 종속변수는 연간 판매량이 아니라 판매 개월 수로 나눈 월평균 판매 대수로 잡았다.
- 수업에서 배우지 않은 랜덤포레스트를 독학해 직접 구현했다. 트리 개수를 300으로 고정한 채 트리의 최대 깊이와 트리당 변수 비율을 무작위 탐색해 깊이 43 · 비율 0.985054를 골랐고, 20겹 교차검증 RMSE는 259.47대/월이었다.
- 2019년 신차 4종 예측값은 현대 팰리세이드 40,019대, 기아 K3 GT 7,253대, 쉐보레 더 뉴 말리부 6,817대, BMW New X4 4,371대다. 모델 출력은 월 단위였고 12개월을 곱해 환산했다.
- 정작 이 주제를 시작하게 만든 리콜 변수는 판매량과의 상관계수가 −0.055로 사실상 0에 가까웠고, 고급 옵션 변수들은 대부분 음의 상관을 보였다 — 가격의 대리 변수 노릇을 했기 때문이다. “세부 옵션이 판매를 가른다”는 가설은 기대만큼 지지되지 않았다.
| 51개 | 회귀 초기 모형 독립변수 | 기본 6 · 헤드램프 8 · 룸미러 3 · 크루즈컨트롤 1 · 시트재질 5 · 주차보조 7 · 운전석 4 · 주행안전 13 · 에어컨 2 · 하이브리드/전기 2 |
| 69열 | 최종 학습 데이터프레임 | 판매량 · 판매 개월 수 · 사양 더미 · 묶음별 점수 파생변수 포함 |
| 76개 | 통합 시트에 남은 차종 | 현대 25 · 렉서스 9 · 쉐보레 15 · 인피니티 7 · BMW 12 · 르노삼성 8 (헤더 포함 77행) |
| 7개 | 단계적 선택 후 남은 변수 | 51개 중. R step() 전진·단계적 선택 결과 |
| 259.47 | 20-겹 교차검증 RMSE | 종속변수가 월평균 판매 대수이므로 단위는 대/월 |
| max_depth 43 | 최적 하이퍼파라미터 | max_features 0.985054, n_estimators 300 고정 |
| 40,019대 | 팰리세이드 예측 판매량 | 월평균 3,334.997대 × 12개월. 신차 4종 중 최대 |
불이 나도 잘 팔리는 차가 있었다
2018년 여름 BMW 차량 화재가 이슈였는데, 그 달 판매량은 전년 대비 늘었다.
주제 후보로 팀이 먼저 꺼낸 것은 그해 여름의 BMW 차량 화재 사건이었다. 그런데 중간 발표 자료에 붙인 기사 제목은 “불 타도 잘 팔리는 BMW, 7월 판매 전년대비 24% 증가”였다. 결함 사고와 그로 인한 평판이 구매 결정을 실제로 얼마나 바꾸는지가 궁금해졌다.
기존 연구를 찾아보니 자동차 구매 요인을 다룬 자료는 대부분 소비자 설문조사 결과를 확률적으로 분석한 것이었다. “무엇을 보고 샀습니까”라고 물어본 연구는 많았지만, 실제로 팔린 차의 사양표를 놓고 판매 대수와 맞춰 본 연구는 찾지 못했다.
프로포절에 적은 결론은 이랬다 — 자동차 판매량과, 영향을 미칠 것 같은 요인 가설들의 상관관계를 우리가 직접 분석해 본다.
설문 대신 카탈로그로 물었다
가격·배기량·연비 같은 기본 사양만으로는 같은 가격대 차량 사이의 판매량 차이가 설명되지 않는다고 보았다.
발표 대본에 적어 둔 이유는 단순했다. 기존 연구들에서 자동차의 세부적인 옵션에 대한 분석을 찾아볼 수 없었고, 헤드램프의 광원이나 주차보조 기능처럼 작은 기능과 디자인 요소가 판매량에 어떻게 작용하는지 알고 싶었다는 것이다.
그래서 이 프로젝트의 무게중심을 알고리즘이 아니라 변수의 범위를 디테일까지 넓히는 쪽에 두었다. 소비자가 전시장과 카탈로그에서 실제로 비교하는 항목 — 헤드램프가 LED인지 할로겐인지, 룸미러에 자동디밍이 붙는지, 시트가 천인지 가죽인지 — 을 전부 변수로 만들면 무엇이 남는지 보기로 했다.
목표는 두 가지였다. 첫째, 어떤 사양이 판매량과 함께 움직이는지 확인한다. 둘째, 그 모형으로 아직 팔리지 않은 신차의 2019년 판매량을 예측한다.
발표 자료 끝에는 참고한 논문 9편을 붙였다. 연비·온실가스 규제(최도영, 2010), 연비 정보의 변화가 자동차 구매패턴에 미치는 영향(김대욱, 2015), 자동차 시트의 고급감에 관한 소비자 인식 차이(유일선 외, 2010), 전·후방 카메라를 이용한 주차가이드 시스템(정교영 외, 2008), 능동형 샤시시스템(허승진, 1992), ESC와 4WD의 샤시통합제어(윤재민 외, 2008), 타이어 공기압 모니터링(김병우, 2006), 냉매충전량과 에어컨 성능(이건호 외, 1996), 도어 트림과 승차감(지성호 외, 2006)이다. 목록만 봐도 이 프로젝트가 선 자리가 드러난다 — 소비자의 선택이나 인식을 다룬 것은 두 편뿐이고 나머지는 개별 사양이 공학적으로 무엇인지를 설명하는 논문이었다. 사양 하나하나의 정의는 빌려올 수 있었지만, 그 사양과 판매 대수를 직접 붙여 본 연구는 목록에 없었다.
프로포절에 적은 25개 요인, 그리고 살아남지 못한 것들
11월 7일 제출한 프로포절에는 요인 가설이 25개 있었다. 최종 데이터에 들어간 것은 그 절반이 안 된다.
프로포절 단계의 요인 가설은 가격, 편의사항, 적재량·트렁크 이용 편의성, 기본사양, 외관 스타일, 크기, 천장높이, 엔진 배기량, 안전성, 승차감, 연비, 연료 타입, 품질 보증기간, 광고·PR, 사고 발생 건수, 실내 인테리어, 차의 색상, 웹상의 명성·평판, 신모델 여부, 정숙성, 세금혜택, 내구성, 최대속력, 첨단사양, 시리즈까지 25개였다. 조사 대상은 현대자동차 승용·SUV·MPV와 기아자동차 승용·RV로 잡았고, 친환경 전용차와 소형 상용차는 제외했다.
이 중 승차감과 웹상의 평판은 자동차 커뮤니티 웹 크롤링으로 모으겠다고 적었다. 결과적으로 최종 데이터셋에 평판·승차감·광고 관련 열은 하나도 남지 않았다. 크롤링은 “실행 가능성 및 신뢰성 확인 후”라는 단서를 달아 두었는데, 그 단계를 넘지 못했다.
차의 색상, 세금혜택, 내구성, 최대속력, 천장높이도 같은 이유로 빠졌다. 카탈로그에 표로 정리돼 있어 같은 기준으로 옮겨 적을 수 있는 항목만 살아남았다. 수집 가능성이 변수 목록을 결정했다는 것이 이 단계의 결론이다.
일정표에는 12월 초에 의사결정나무·랜덤포레스트·XGBoost를 모두 써서 결과를 비교하겠다고 적어 두었지만, 실제로 끝까지 간 것은 랜덤포레스트 하나였다.
기본 · 기능 · 디테일 — 변수를 세 층으로 설계했다
아래층으로 갈수록 카탈로그 세부 항목이고, 기존 판매량 연구에서 잘 쓰이지 않는 변수들이다.
변수를 한 덩어리로 두면 어느 층이 설명력을 갖는지 구분할 수 없다고 보고, 조사 범위를 세 층으로 나누어 설계했다.
| 계층 | 변수 | 왜 넣었나 |
|---|---|---|
| BASIC DATA | 가격 · 배기량 · 연비 · 연료 | 차급과 유지비를 결정하는 1차 비교 항목 |
| FUNCTION | 차체 및 부품 품질보증 · 주차보조 · 크루즈컨트롤(정속주행) · 주행안전 | 같은 급 안에서 체감 만족도를 가르는 편의·안전 기능 |
| DETAIL | 헤드램프 · 에어컨 · 룸미러 · 시트재질 | 전시장과 카탈로그에서 실제로 비교하게 되는 세부 사양 |
디테일 층은 하위 항목까지 다시 쪼갰다. 헤드램프는 광원 종류(할로겐·프로젝션·HID·제논·LED·벌브형)와 기능(오토라이트 컨트롤, 액티브 헤드라이트)으로, 룸미러는 자동디밍·ECM·하이패스로, 시트 재질은 천·가죽·인조가죽·천연가죽·직물로, 주차보조는 전방감지·후방감지·후방카메라·조향연동 안내선·리어파킹 어시스턴스·자동주차·360도 뷰 파킹 카메라로 나눴다.
이렇게 쪼개고 나니 R 회귀 모형에 넣은 독립변수가 51개가 되었다.
| 묶음 | 변수 수 | 내용 |
|---|---|---|
| 기본 | 6 | 브랜드, 차종, 최저연비, 최고연비, 연료1, 연료2 |
| 헤드램프 | 8 | 벌브형, 프로젝션, 오토라이트컨트롤, 액티브, LED, 할로겐, HID, 제논 |
| 룸미러 | 3 | 자동디밍, ECM, 하이패스 |
| 크루즈컨트롤 | 1 | 정속주행 |
| 시트재질 | 5 | 천, 가죽, 인조가죽, 천연가죽, 직물 |
| 주차보조 | 7 | 전방감지, 후방감지, 후방카메라, 조향연동 안내선, 리어파킹 어시스턴스, 자동주차, 360도 뷰 파킹 카메라 |
| 운전석 | 4 | 전동조절, 통풍, 열선, 요추받침 |
| 주행안전 | 13 | 차체 자세 제어, 구동력 제어, ABS, 제동력 분배, 샤시통합 제어, 경사로 밀림방지, 타이어 공기압 경고, BAS, 전자식 제동력 분배, 스태빌리티 컨트롤, 차선이탈 경고, 전자식 트랙션 컨트롤, 충돌 경고 장치 |
| 에어컨 | 2 | 오토 2존, 자동 성에제거 |
| 구동 방식 | 2 | hybrid, electric |
| 합계 | 51 |

사양표와 월별 판매량을 따로 모았다
차 한 대의 카탈로그를 열 단위로 옮기는 일과, 모델별 월별 판매 대수를 붙이는 일은 별개였다.
수집은 두 갈래였다. 하나는 자동차 정보 사이트의 차량 사양 정보를 옮겨 적는 일이었다. 연도, 차 이름, 브랜드, 차종, 최저·최고 연비, 연료, 최저·최고 가격, 출시일, 최저 배기량, 그리고 헤드램프부터 전방 안개등·주간 주행등·리어 램프·루프·도어포켓 라이트·아웃사이드 미러·와이퍼까지의 옵션 항목이 한 행에 들어갔다.
다른 하나는 판매 실적이었다. 2017년 3월부터 2018년 11월까지 모델별 월별 판매 대수를 별도 시트로 모았다. 이 시트가 왜 필요했는지는 종속변수를 정의하는 대목에서 드러난다.
프로포절에서는 대상을 현대·기아로 한정했지만, 최종 통합 시트에는 렉서스·쉐보레·인피니티·BMW·르노삼성이 들어갔다. 국산 두 브랜드만으로는 사양 조합의 폭이 좁았고, 수입 브랜드를 넣어야 고급 옵션 변수에 변동이 생기기 때문이다. 시트는 브랜드별로 정렬돼 현대 25 · 렉서스 9 · 쉐보레 15 · 인피니티 7 · BMW 12 · 르노삼성 8, 모두 76개 차종에서 끝난다.
여기에 설명되지 않는 구멍이 하나 있다. 중간 발표에 실린 더미변수 시트는 현대와 기아를 함께 정리한 것이어서 기아 차종이 20행 넘게 들어 있는데, 기말 발표의 최종 통합 시트 76행에는 기아가 한 행도 없다. 그러면서 예측 대상 4종에는 기아 K3 GT가 들어 있다. 학습 데이터에 없는 브랜드의 차를 예측한 셈인데, 통합 과정에서 기아가 어디서 빠졌는지는 남은 자료로 확인되지 않는다.
사이트마다 같은 기능을 다른 이름으로 적어 두기 때문에, 표기를 하나의 기준으로 맞추는 정제 작업이 수집 자체보다 오래 걸렸다. 헤드램프 칸에는 “벌브형, 프로젝션, 오토 라이트 컨트롤”처럼 여러 값이 쉼표로 들어 있었고, 이것을 항목별 열로 풀어야 했다.


카탈로그 문장을 0과 1로 바꾸는 일
쉼표로 나열된 옵션 문자열을 항목별 더미변수로 풀었고, 여러 옵션을 묶은 점수 변수를 새로 만들었다.
원시 시트의 헤드램프 칸에 들어 있던 문자열을 할로겐·프로젝션·제논·오토라이트처럼 항목별 열로 풀고 각 칸을 0 또는 1로 채웠다. 시트 재질, 주차보조, 주행안전, 에어컨도 같은 방식으로 처리했다.
다음은 파생변수였다. 중간 발표에 적어 둔 분석 순서는 상관분석 → 데이터 전처리 → 랜덤포레스트였고, 전처리 단계의 항목은 “수집된 트레이닝 데이터 간의 상관계수 유도”, “유의하지 않은 변수 삭제 및 보관”, “파생변수 생성 및 새로운 변수 고안” 세 가지였다.
실제로 최종 데이터에는 개별 더미 외에 주차보조·주행안전·헤드램프처럼 한 묶음의 옵션 개수를 합산한 점수 변수가 들어 있다. 옵션이 13개로 흩어진 주행안전 같은 묶음은 개별 더미보다 합산 점수가 다루기 쉬웠다. 브랜드도 그대로 두지 않고 일본·유럽 같은 지역 그룹으로 다시 묶었다. 브랜드를 원래 범주 그대로 넣으면 한 브랜드에 한두 대만 들어가는 칸이 생기기 때문이다.


종속변수를 연간 판매량이 아니라 월평균으로 잡았다
연중에 출시된 차는 판매 개월 수가 짧다. 연간 합계를 그대로 쓰면 출시 시점이 성능으로 둔갑한다.
2018년 판매량 옆에는 그 해에 실제로 판매된 개월 수가 함께 적혀 있다. 싼타페는 9개월에 90,500대, 포터2는 11개월에 88,667대, 그랜저는 11개월에 80,521대, 쏘나타 뉴 라이즈는 9개월에 57,085대, 아반떼는 11개월에 51,461대였다. 연간 합계를 그대로 종속변수로 쓰면 12개월 내내 팔린 차가 무조건 유리해진다.
그래서 판매량을 판매 개월 수로 나눈 월평균 판매 대수를 예측 대상으로 삼았다. 이 결정 때문에 뒤에 나오는 RMSE와 예측값의 단위가 모두 “대/월”이 된다.
전처리를 마친 학습용 데이터는 69개 열이었다. 판매량·판매 개월 수·브랜드·차종·최저연비·최고연비·연료1·연료2·최저가·최고가부터 개별 옵션 더미, 묶음별 점수 변수, 하이브리드·전기 표시까지가 여기에 들어간다.

상관분석 — 고급 옵션일수록 음의 상관이 나왔다
부호가 직관과 반대였다. 좋은 옵션이 붙은 차일수록 덜 팔린 것으로 나온다.
랜덤포레스트를 돌리기 전에 전 변수의 상관계수 행렬을 먼저 뽑았다. 행렬의 첫 열이 18년도 판매량과의 상관계수다. 절댓값이 큰 쪽부터 주요 변수만 추리면 다음과 같다(전체 목록은 아니다).
| 변수 | 18년 판매량과의 상관계수 |
|---|---|
| 헤드램프 LED | −0.365 |
| 헤드램프 오토라이트컨트롤 | −0.364 |
| 헤드램프 벌브형 | +0.342 |
| 주차보조 후방카메라 | −0.342 |
| 최저가 | −0.319 |
| 주차보조 점수 | −0.310 |
| 시리즈 | +0.308 |
| 시트재질 가죽 | −0.297 |
| 룸미러 자동디밍 | −0.253 |
| 주차보조 전방감지 | −0.242 |
| 크루즈 컨트롤(정속주행) | −0.235 |
| 최고가 | −0.231 |
| 주차보조 후방감지 | −0.222 |
| 주행안전 점수 | −0.170 |
| 시트재질 직물 | +0.167 |
| 시트재질 인조가죽 | +0.152 |
| 최저연비 | −0.129 |
| 최고연비 | +0.106 |
| 리콜 | −0.055 |
LED 헤드램프, 오토라이트 컨트롤, 후방카메라, 가죽 시트, 자동디밍 룸미러 — 좋은 옵션이 전부 음수다. 반대로 값이 싼 벌브형 헤드램프와 직물·인조가죽 시트는 양수다. 옵션 자체의 효과가 아니라 가격의 대리 변수가 잡힌 결과다. 고급 옵션은 비싼 차에 붙고, 비싼 차는 대수로는 적게 팔린다. 실제로 최저가의 상관계수가 −0.319로 같은 크기의 축에 있다.
가장 눈에 띈 것은 리콜이었다. 이 주제를 시작하게 만든 변수인데 상관계수가 −0.055로 사실상 0에 가까웠다. 위 표에 실은 변수 중에서 가장 작고, 표에 넣지 않은 변수까지 넓혀 봐도 헤드램프 할로겐(+0.050)·액티브 헤드라이트(−0.065)와 함께 최하위권이다. “불 타도 잘 팔린다”는 기사 제목이 데이터에서도 그대로 나온 셈이다.
이 표를 보고 변수를 전부 넣는 대신 상관계수를 고려해 중요한 변수만 골라 넣는 쪽으로 방향을 바꿨다. 발표 대본에도 “연비나 리콜 같은 것뿐만 아니라 헤드램프와 차 시트, 에어컨까지 상관계수를 고려했을 때 중요한 변수로 나와서 이것을 고려해 넣었다”고 적혀 있다.

다중회귀와 단계적 선택 — 51개에서 7개로
랜덤포레스트와 별개로, 선형 모형을 세우고 변수를 추려 보았다.
범주형 열을 범주형으로 지정한 뒤 51개 독립변수를 전부 넣은 선형회귀 모형을 세웠다. 그다음 절편만 있는 모형을 시작점으로 잡고 전진선택과 단계적 선택을 각각 돌렸다.
이 과정 끝에 남은 최종 모형의 설명변수는 7개였다.
| 남은 변수 | 속한 계층 |
|---|---|
| 헤드램프 오토라이트컨트롤 | 디테일 |
| 최고연비 | 기본 |
| 최저연비 | 기본 |
| 차종 | 기본 |
| 시트재질 천 | 디테일 |
| 주행안전 제동력 분배 | 기능 |
| 운전석 통풍 | 기능 |
세 계층이 모두 남았다는 점은 가설과 맞았다. 다만 51개를 넣어 7개가 남았다는 사실은 반대로도 읽어야 한다 — 넣은 것의 86%는 판매량 설명에 기여하지 못했다.
이 모형에는 남겨 두어야 할 문제가 둘 있다. 첫째, 최저연비와 최고연비를 범주형으로 지정해 넣었다. 연속형 수치를 범주로 바꿔 넣은 것이다. 둘째, 최저가·최고가가 회귀식에 아예 빠져 있다. 상관계수 표에서 가격이 가장 강한 축의 하나였는데도 그렇다. 남은 기록에는 다중공선성을 확인한 흔적이 없고, 산점도 행렬을 그린 단계만 남아 있다.
한 가지 더 밝혀 둘 것이 있다. 남은 기록은 실행 순서 그대로의 로그가 아니라 조각을 모아 둔 형태다. 적힌 순서만 그대로 읽으면 단계적 선택의 상한 모형이 직전에 정의된 룸미러 3변수 모형이 된다. 다만 최종 모형에 남은 7개가 헤드램프·연비·차종·시트재질·주행안전·운전석에 걸쳐 있으므로, 51변수 모형을 상한으로 두고 돌린 결과로 읽었다.
랜덤포레스트를 독학한 이유
사양 변수 사이에 상호작용이 있을 것으로 보았고, 당시 수업에서는 다루지 않은 방법이었다.
옵션 변수는 서로 독립적이지 않다. LED 헤드램프가 붙은 차에는 자동디밍 룸미러와 가죽 시트도 함께 붙는 식이다. 이런 조합 효과를 선형 모형이 잡기 어렵다고 보고 트리 기반 앙상블을 쓰기로 했다. 문제는 당시 수업에서 랜덤포레스트를 배우지 않았다는 점이었다. 스스로 공부해 직접 구현했다.
발표 자료에 정리한 요약은 이랬다 — 학습된 데이터를 샘플링해 다수의 결정 트리를 만들고, 만들어진 결정 트리들의 결과를 모아 다수결로 최종 결과를 도출하는 알고리즘이다. 장점은 모든 데이터셋에 대한 경우의 수를 고려하기 때문에 예측 분석력이 뛰어나다는 것, 단점은 속도와 메모리 비용 측면에서 비효율적이라는 것, 그리고 트리의 깊이와 개수 설정이 예측력을 좌우한다는 것이었다. 마지막 문장이 다음 단계로 이어졌다.

하이퍼파라미터 무작위 탐색 — 점수가 더 내려가지 않았다
트리 개수를 300으로 고정하고 트리의 깊이와 트리당 변수 비율을 무작위로 뽑아 점수를 비교했다.
남은 탐색 기록의 30개 조합을 보면 트리 개수는 300으로 고정한 채 트리의 최대 깊이는 6~97, 트리 하나가 보는 변수의 비율은 0.178~0.998 범위에서 뽑혀 각 조합의 점수가 기록돼 있다. 점수는 낮을수록 좋은 RMSE다.
| 최대 깊이 | 트리당 변수 비율 | RMSE |
|---|---|---|
| 23 | 0.978 | 246.84 |
| 31 | 0.888 | 253.81 |
| 93 | 0.921 | 254.02 |
| 70 | 0.948 | 254.77 |
| 60 | 0.742 | 274.41 |
| 34 | 0.433 | 359.56 |
| 97 | 0.291 | 470.92 |
| 87 | 0.231 | 560.86 |
| 7 | 0.211 | 578.74 |
| 83 | 0.178 | 608.86 |
패턴은 분명했다. 트리당 변수 비율이 0.9 이상이면 점수가 246~255 사이에 모이고, 0.2 근처로 내려가면 560~610까지 튀었다. 트리마다 보는 변수를 줄이면 성능이 무너졌다는 뜻이다. 반면 최대 깊이는 20을 넘기고 나면 점수에 거의 영향을 주지 않았다 — 깊이 7과 깊이 97이 나란히 나쁜 축에 있고, 그 차이는 변수 비율이 만들고 있었다.
이어서 좁힌 구간으로 다시 탐색했는데, 여기서 상위 10개 조합의 점수가 248.905047로 전부 같았다. 깊이가 33이든 93이든, 변수 비율이 0.967이든 0.994든 결과가 움직이지 않았다. 탐색이 더 내려갈 곳이 없었다는 뜻이다. 최종적으로 고른 값은 최대 깊이 43 · 변수 비율 0.985054였다. 좁힌 탐색의 최고점(248.91)이 앞선 넓은 탐색의 최고점(246.84)보다 오히려 나빴다는 점도 그대로 적어 둔다.


20-겹 교차검증과 RMSE 259.47
하나의 큰 학습 데이터로 바로 예측하면 과적합 위험이 있다고 보고 교차검증으로 성능을 확인했다.
발표 자료에 적어 둔 논리는 이랬다 — 하나의 큰 학습 데이터를 가지고 바로 예측하는 것은 과적합 위험이 있으므로, 학습 데이터를 나눠 하나를 검증에 쓰고 나머지를 학습에 쓰는 조합을 반복한다. 그림으로 설명한 것은 5겹이었지만 실제로 돌린 것은 20겹이었다.
20겹으로 나눠 각 조합의 평균제곱오차를 받은 뒤 제곱근을 취해 평균을 냈다. 결과는 259.4693이었다. 종속변수가 월평균 판매 대수이므로 단위는 대/월이다.
이 숫자를 그대로 읽으면 이렇다. 월 3,000대 넘게 팔리는 차에 259대의 오차는 10% 아래지만, 월 300~600대 팔리는 차에는 오차가 값의 절반에 가깝다. 많이 팔리는 차와 적게 팔리는 차에 같은 신뢰도를 줄 수 없는 모델이었다. 판매량 분포가 오른쪽으로 크게 치우쳐 있는데(1위 싼타페 월 1만 대, 하위권은 월 한 자릿수) 오차를 절대 단위 하나로만 본 것이 이 프로젝트의 평가 설계에서 가장 약한 부분이다.


신차 4종의 2019년 판매량 예측
아직 판매 실적이 없는 차 4대의 사양표를 같은 형식으로 만들어 넣었다.
예측용 입력은 4행 29열이었다. 현대 팰리세이드, 쉐보레 더 뉴 말리부, 기아 K3 GT, BMW New X4의 사양을 같은 열 구조로 채우고 판매 개월 수는 12로 놓았다. 학습 데이터가 69열이었으니 29열은 그 일부다 — 발표 대본의 “상관계수를 고려해 중요한 변수만 넣었다”는 설명과 맞물려 보면, 최종 모델에 실제로 들어간 열은 69개 전부가 아니라 추려낸 쪽이었던 것으로 읽힌다. 다만 어떤 열을 남겼는지 목록은 원본에 없다.
예측 출력은 월평균 판매 대수였다. 여기에 12를 곱해 연간 예측 판매량을 얻었다.
| 차종 | 월평균 예측 (대/월) | 연간 환산 |
|---|---|---|
| 현대 팰리세이드 | 3,334.997 | 40,019대 |
| 기아 K3 GT | 604.490 | 7,253대 |
| 쉐보레 더 뉴 말리부 | 568.115 | 6,817대 |
| BMW New X4 | 364.281 | 4,371대 |
팰리세이드가 X4의 약 9배다. 다만 앞 절의 RMSE 259대/월을 여기에 대면, 말리부·K3 GT·X4의 예측값은 오차와 크기가 비슷한 수준이다. 순위를 가르는 데는 쓸 수 있어도 개별 값을 그대로 믿을 수는 없었다.


남은 한계
발표 대본에 적어 둔 아쉬움과, 지금 다시 보면 더 큰 문제.
발표를 마무리하며 적어 둔 문장은 이랬다 — 자동차 판매량에 영향을 미치는 요인에 관해 많은 기준을 넣었지만 예상만큼 많은 기준이 중요한 변수가 아니었던 점이 아쉬웠고, 예상 외로 에어컨 옵션도 중요한 영향을 끼친다는 것을 볼 수 있었다. 헤드램프나 시트 재질 같은 작은 옵션도 판매량에 영향을 미치는 요소가 될 수 있다는 것을, 더 많은 기준과 더 세부적인 기준까지 확인했다면 좋았을 것이다.
향후 과제로 남긴 것은 디자인이었다. 곡률처럼 수치화하거나 범주화하기 어려웠던 기준을 어떻게든 변수로 만들 수 있다면 다시 해 보고 싶다고 적었다.
지금 다시 보면 더 큰 문제가 따로 있다. 옵션 변수들이 사실상 가격의 대리 변수였고, 그것을 통제하지 않은 채 상관계수를 읽었다. 가격대나 차급 안에서 옵션 차이를 비교했어야 “같은 가격대 차량 사이의 판매량 차이”라는 원래 질문에 답할 수 있었다. 질문은 맞게 세웠지만 설계로 그 질문을 지키지 못했다.
그럼에도 남은 것은 두 가지다. 카탈로그처럼 정형화되지 않은 자료를 변수로 바꾸는 일이 분석의 본체라는 것, 그리고 필요한 방법은 수업에서 배우기 전이라도 스스로 익혀 쓸 수 있다는 것이다.
여기서 배운 것
- 변수를 늘리는 것과 설명력이 늘어나는 것은 다르다. 51개를 넣어 단계적 선택으로 7개가 남았고, 상관계수 상위 변수들은 대부분 옵션이 아니라 가격을 대신 설명하고 있었다.
- 통제하지 않은 교란변수는 부호를 뒤집는다. 좋은 옵션일수록 판매량과 음의 상관이 나온 것은 옵션의 효과가 아니라 가격 때문이었고, 이것을 알아차리는 것이 계수를 뽑는 것보다 중요했다.
- 종속변수 정의가 분석의 절반이다. 연간 판매량 대신 판매 개월 수로 나눈 월평균을 쓴 결정이 출시 시점 편향을 없앴다.
- 성능 지표는 절대값이 아니라 예측 대상의 크기와 함께 읽어야 한다. RMSE 259대/월은 팰리세이드에는 작고 X4에는 크다.
- 수업에서 배우지 않은 방법도 필요하면 익혀 쓸 수 있다. 랜덤포레스트를 수업 밖에서 스스로 공부해 직접 구현하고 튜닝까지 붙였다.