LightGBM 기반 신용카드 이용금액 예측 모델 개발 과정에 관하여
안녕하세요, 투비소프트 융합기술개발팀 이동희입니다.
지난 6월 DACON 주관 데이터 사이언스 경진대회에 참가한 공공데이터 AI 활용을 통해 신용카드 사용량 예측 모델 개발에 대한 이야기를 공유합니다.
[INDEX]
1. DACON 및 참가한 컴피티션 소개
2. 신용카드 이용금액 예측 모델 개발의 목적
3. 신용카드 이용금액 예측 모델 개발을 위한 데이터셋 정제
4. 신용카드 이용금액 예측 모델 개발
DACON은 '한국판 캐글'로 불리는 데이터 사이언스 경진대회로, 다양한 산업 분야(제조, 유통, 생체 과학, 스포츠 등)에서 수집된 데이터를 기반으로 머신러닝/딥러닝 등의 모델을 통해 정답을 추론하는 대회입니다. 대회 참가 자격은 특별한 사유가 아니면 제한이 없으며, 개인 또는 팀으로 참가할 수 있습니다.
저희 팀이 참가한 컴피티션은 제주도 신용카드 빅데이터 경진대회였습니다. 해당 컴피티션은 2019년 1월 ~ 2020년 3월까지의 신용카드 사용 이력 데이터가 주어졌을 때, 머신러닝/딥러닝 등 추론 모델을 사용하여 2020년 4월 및 2020년 7월의 신용카드 이용금액을 예측하는 것입니다.
특별히 해당 컴피티션에서는 2020년 4월과 2020년 7월의 제주 지역 신용카드 사용 이력 데이터에 3배의 가중치를 부여하여 리더보드 public score 및 private score를 계산하기 때문에 해당 날짜의 제주 지역의 신용카드 이용금액 예측에 좋은 성능을 발휘하는 모델을 개발하는 것이 주요했습니다.
신용카드 이용금액 예측 모델 개발을 통해 포스트 코로나-19 시대에 신용카드 사용량을 추론하고, 이를 근거로 지역 경제 위축, 중소 상공이 경영난 해소 등을 위한 대책을 마련하기 위함입니다.
컴피티션 주최 측으로부터 제공받은 데이터셋은 2가지입니다.
먼저, 2019년 1월 ~ 2020년 3월까지의 신용카드 사용 이력 데이터셋입니다. 해당 데이터셋을 통해 전국 각 지역(시/도) 각 업종에서 신용카드를 사용한 고객의 연령대, 가구 특성, 고객 수, 이용건수, 이용금액을 알 수 있습니다.
다음으로 신용카드 이용금액 예측을 위한 테스트 데이터셋입니다. 예측하고자 하는 날짜(2020년 4월, 2020년 7월), 지역(시/도), 업종, 이용금액 칼럼으로 구성되어 있습니다. 0으로 표기된 신용카드 이용금액은 추후 예측 모델을 통한 신용카드 이용금액을 저장합니다.
2019년 1월 ~ 2020년 3월의 신용카드 사용 이력 데이터셋과 비교했을 때, 테스트 데이터셋은 '날짜(년/월), 지역(시/도), 업종명, 신용카드 이용금액' 칼럼만 존재합니다. 또한, 2019년 1월 ~ 2020년 3월의 신용카드 사용 이력 데이터셋은 특정 날짜, 지역, 업종에 대한 이용금액이 여러 개 row 데이터로 분리되어 있는데 반해 테스트 데이터셋은 특정 날짜, 지역, 업종에 대한 이용금액이 한 개 row 데이터로 합쳐져 있습니다.
학습을 수행한 머신러닝 모델을 가지고 테스트 데이터셋에 대한 예측을 수행하려면, 학습 데이터셋과 테스트 데이터셋의 구조가 같아야 합니다. 따라서 테스트 데이터셋 구조와 동일하게 2019년 1월 ~ 2020년 3월의 신용카드 사용 이력 데이터셋도 '날짜(년/월), 지역(시/도), 업종명, 이용금액' 데이터만 필터링을 수행하였습니다. 또한, '날짜(년/월), 지역(시/도), 업종명'에 대한 그룹핑을 수행하여 동일한 날짜, 지역, 업종에 대한 이용금액을 한 개 row 데이터로 합쳤습니다.
그 결과 최종 9,438건의 데이터를 확보할 수 있었습니다.
다음으로 2019년 1월 ~ 2020년 3월 신용카드 사용 이력 데이터셋과 테스트 데이터셋의 분포를 확인했습니다. 날짜 및 지역 별 업종 명의 분포를 확인한 결과, 테스트 데이터셋에서 17개의 지역과 각 41개의 업종명에 대한 이용금액을 예측해야 하는데, 2019년 1월 ~ 2020년 3월 신용카드 사용 이력 데이터셋에는 일부 지역이나 업종에 대한 신용카드 이용 내역이 존재하지 않는 경우가 있었습니다.
현 상태로 학습 및 테스트를 진행하면, 신용카드 이용 내역이 없는 일부 지역 및 업종 데이터에서 test score 오차가 크게 발생할 수 있습니다. 따라서 저희 팀은 신용카드 이용 내역이 없는 지역 및 업종에서의 신용카드 이용금액을 '0'으로 하여 학습을 수행하기로 했습니다.
또한, 신용카드 이용금액 예측 성능을 향상하기 위해 통계청에서 제공하는 분기별 전국 시/도 서비스업 생산 및 소매판매 동향 자료 내용을 적용했습니다. 해당 자료에서 아래와 같이 '전년도 동분기 대비 전국 시/도 서비스업 생산 및 소매판매 증감률'을 확인할 수 있는데, 이 값을 데이터셋 feature로 추가하여 최종 이용금액을 예측하는 방식으로 적용했습니다.
서비스업 생산 및 소매 판매 증감률 값을 적용한 이유는 서비스업 생산량 및 소매 판매량의 증가 또는 감소에 비례하여 신용카드 이용금액도 증가 또는 감소할 것이라 생각했기 때문입니다.
이러한 증감률 값을 데이터셋 feature로 추가하기 위해서는 41개의 업종 명도 '서비스업' 또는 '소매업'으로 분류해야 했습니다. 이에 통계청에서 정의한 산업 분류 방법을 참고하여 모든 업종명을 '서비스업' 또는 '소매업'으로 분류하고, 지역과 업종명에 따른 따른 증감률 값을 추가했습니다.
앞서 2020년 4월, 2020년 7월의 신용카드 이용금액을 예측하되 제주 지역에 3배 가중치가 부여된다고 언급했었습니다. 때문에 2020년 4월, 2020년 7월에 제주 지역에서의 신용카드 이용금액을 잘 예측하는 모델이 좋은 점수를 받을 수 있을 것입니다.
이를 위해 저희 팀은 2019년 1월 ~ 2020년 3월 신용카드 사용 이력 데이터셋에서 2020년 1월, 2월, 3월 데이터를 필터링하여 복제한 후, 다시 데이터셋에 추가했습니다. 즉, 2020년 1월, 2월, 3월의 신용카드 이용금액액의 추세가 2020년 4월, 2020년 7월까지 반영되어 예측 성능을 높일 수 있을 것이라 생각했기 때문입니다.
또한, 2019년 1월 ~ 2020년 3월까지 제주 지역의 신용카드 이용금액 데이터를 필터링하여 복제한 후, 다시 데이터셋에 추가했습니다. 즉, 예측 시점 직전에 제주 지역의 신용카드 이용금액의 추세가 반영되어 예측 성능을 높일 수 있을 것이라 생각했기 때문입니다.
데이터 복제 이후, 최종 20,664건의 학습 데이터셋이 생성되었습니다.
신용카드 이용금액을 예측하는 모델로 머신러닝 앙상블 부스팅 모델인 LightGBM을 사용했습니다. 앙상블 부스팅 알고리즘은 잘못 예측한 값에 더 큰 가중치를 부여하며 순차적으로 학습하는 방식입니다. 부스팅 알고리즘에 속하는 GB, XGboost 등의 모델들과 비교했을 때, LightGBM은 적은 메모리를 사용하면서 대용량 데이터를 빠른 속도로 처리가 가능하며 GPU 사용도 지원하는 장점이 있습니다.
또한, LightGBM은 보통 10,000건 이하의 데이터셋에서는 과적합이 발생할 확률이 높지만, 저희가 가진 학습 데이터는 20,664건으로 과적합 확률이 낮을 것이라 판단했습니다. LightGBM에 관한 자세한 내용은 아래 논문에 나와있습니다.
LightGBM(http://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree.pdf)
위와 같은 근거로 LightGBM을 예측 모델로 최종 선택하였고, validation 테스트 결과 아래와 같이 rmse값으로 1.12325를 얻을 수 있었습니다.
이제 해당 학습 모델을 가지고 테스트 데이터셋에 존재하는 2020년 4월과 2020년 7월의 신용카드 이용금액 예측을 수행했습니다.
마지막으로, 컴피티션의 public score는 2020년 4월 신용카드 이용금액에 대한 정답 데이터와 예측 데이터 각각을 제주 지역에 대하여 3배 가중치를 부여하여 rmsle값을 계산한 값입니다. 또한, private score도 2020년 7월 신용카드 이용금액에 대하여 동일하게 가중치를 부여하여 rmsle값을 계산한 값입니다. 그 결과, 2020년 4월에 대한 rmsle값은 1.44902, 2020년 7월에 대한 rmsle값은 2.06355를 얻을 수 있었습니다.
지금까지 DACON 데이터 사이언스 경진 대회와 참가한 컴피티션에 관한 소개 및 제공받은 데이터셋을 탐색하고 정제, 최종 예측 모델 개발까지의 과정을 글에 담아보았습니다. 데이터셋 정제 과정에서는 통계청에서 제공하는 자료를 활용하고, 데이터셋에서 특정 데이터를 복제하여 모델의 예측 성능을 높일 수 있었습니다. 또한, LightGBM 모델을 통해 최종 예측 성능을 확인할 수 있었습니다.
비록 저희 팀이 개발한 최종 예측 모델이 실제로 코로나-19로 인해 생계유지가 어려워진 소상공인 분들에게 직접적인 도움을 드리지는 못했지만, 이번 경험을 통해 실제로 머신러닝, 딥러닝 모델이 사회에 좋은 영향력을 나타낼 수 있겠다는 생각이 들었습니다.
앞으로는 사회에 실제로 필요한 곳에 개발한 머신러닝, 딥러닝 모델이 사용될 수 있도록 더 좋은 인사이트를 기를 수 있도록 노력해야겠습니다.