Ttoro_Tech

[LG Aimers 3기]_온라인 채널 제품 판매량 예측 AI 온라인 해커톤 본문

Data Projects

[LG Aimers 3기]_온라인 채널 제품 판매량 예측 AI 온라인 해커톤

Lee_Ttoro 2023. 8. 31. 01:15

https://dacon.io/competitions/official/236129/overview/description

 

온라인 채널 제품 판매량 예측 AI 온라인 해커톤 - DACON

분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.

dacon.io

LG Aimers

  • 저번 겨울방학에 진행한 Aimers 2기를 참가하고 많은 공부가 되어 3기에도 참가하게 되었다.
  • 2기 당시에도 지금까지 접해보지 못한 스마트 공장 센서 데이터를 분류하는 문제였는데
  • 이번에도 역시 쉽게 접할 수 없는 온라인 채널 제품 판매량 데이터를 가지고 다음 판매량을 예측하는 문제였다.
  • 작년과 달리 Aimers 이외의 데이터 프로젝트에도 많이 참가하였고 이번엔 혼자가 아닌 팀원을 구성하여 대회에 참가하였기 때문에 지난과 달리 데이터에 대한 분석결과를 서로 공유하고 새로운 시도를 해보는 등 많은 것을 배울 수 있는 경험이었다.

데이터 배경

  • 현대 디지털 시대에 들어, 온라인 판매는 상품과 서비스를 전달하는 핵심 채널
  • 이러한 변화와 함께, 온라인 판매 채널에서 수집되는 대규모 데이터는 더 이상 그저 정보의 한 형태가 아닌, 온라인 판매 환경에서 귀중한 통찰력을 얻는데 있어 중요한 자산
  • 이런 데이터를 활용해 빠르고 정확한 판매 예측을 수행하는 것은, 기업들이 효율적인 재고 관리를 하고, 타겟 마케팅 전략을 세우는데 필수적

해결 문제

특정 온라인 쇼핑몰의 일별 제품별 판매 데이터를 바탕으로
향후 약 3주간의 제품별 판매량을 예측하는 AI 모델을 개발

데이터

주어진 데이터는

  1. 간단한 분류 코드
  2. 기간은 2022.01.01 ~ 2023.04.04 로 동일
  3. 각 제품별 기간 동안의 판매량
  4. 각 제품별 기간 동안의 일별 총 판매금액
  5. 각 브랜드별 기간 동안의 브랜드 검색량

으로 이뤄진 약 15000개의 제품 데이터로 이뤄져있다.

데이터 분석

  • 판매량 데이터가 행은 각 제품 아이디, 열이 분류 및 일별 판매량으로 이뤄져 데이터의 전처리가 필요했다.

행은 데이터 ID, 열은 각 분류와 브랜드 일별 판매량

  • 각 ID별 행은 날짜로, 열은 분류인 새로운 Dataframe 형태가 필요했기 때문에 다음과 같은 코드를 작성하여 데이터를 학습에 용이하게 전처리해주었다.

행은 날짜로 열은 데이터 정보로 구성된 DataFrame으로 변환하는 코드

  • 각 ID별로 행을 가져와 날짜는 행으로,열의 데이터는 분류 데이터 및 일별 총 판매량 등 새로운 DataFrame을 생성하도록 코드를 작성하였다.
  • 이때 Prices는 주어진 데이터에서 일별 판매량과 일별 총 판매 수익을 알 수 있어 일별 총 판매수익에서 일별 판매량을 나누면 일별 가격을 구할 수 있어 데이터에 추가하였다.
일별 가격 = 일별 총 판매 수익 / 일별 판매량
  • 또한 브랜드 검색량(keywords)을 브랜드 코드에 맞게 추가하였는데 모든 브랜드가 모든 학습 데이터의 ID가 있지 않다는 내용이 있어 없는 경우(NaN)에 대해서는 0으로 채웠다.
  • 마지막으로 팀원들과의 회의 결과 판매량은 휴일인지 아닌지가 영향이 있다고 판단되어 이와 같은 데이터를 수집해 데이터 기간동안의 휴일 정보를 가져와 column에 추가하였다.

id 0 데이터 전처리 예시

  • 또한 category 데이터인 분류 정보를 LabelEncoder를 사용하여 추가하였고 위와 같은 데이터셋으로 만들 수 있었다.
  • 다음으로 만들어진 데이터는 학습하기 전에 MinMaxScaler를 활용하여 데이터의 스케일을 조절하는 작업을 수행하였다.
  • 실제로 price와 판매량의 크기가 크게 차이나기 때문에 이러한 전처리 작업이 필요하다.

ID 0번 데이터 시각화

위 그래프를 보면 실제로 가격과 판매량이 영향있는 것을 볼 수 있으며 또한 검색량 역시 연관이 있음을 보여준다.

 

학습 데이터셋 및 검증 데이터셋

  • 학습은 60일 간격으로 8개의 column을 가진 데이터를 사용하였으며 예측 데이터는 60일 이후 21일 데이터를 예측하도록 데이터 셋을 만들었다.

학습 데이터셋을 구성하는 코드

  • 또한 검증 데이터셋을 위해 각 데이터 별 뒤의 60개를 잘라 검증 데이터셋으로 만들었다.

학습 및 검증 데이터 셋 크기

  • 다음과 같은 전처리를 통해 약 500만개의 학습 데이터셋과 약 60만개의 검증 셋을 만들 수 있었다.

모델링

1D-CNN + LSTM 모델

  • 시계열 데이터를 분석하는데 많이 사용하는 모델로 CNN 레이어와 LSTM 레이어로 이뤄진 모델이다.
  • CNN은 이미지 등 위치 정보가 중요한 데이터에 많이 사용되는데 이러한 성질을 이용하여 시계열 데이터의 구간 정보를 집약하는 효과를 얻을 수 있다.

1D-CNN 구조

  • LSTM은 시계열 데이터를 처리하기 위한 고전적인 딥러닝 네트워크로 긴 시계열의 데이터를 처리할 때 Vanishing Gradient(기울기 소실) 문제를 해결할 수 있는 순환 신경망이다.

LSTM 구조

  • 최종적으로 위의 두 모델의 특징을 이어 붙인 모델 구조로 다음과 같이 코드를 작성하였다.

  • 최적의 parameter를 찾기 위해 다양한 실험을 진행하였고 최종적으로 깊지 않으면서 LSTM의 hidden layer를 깊게 쌓는 것이 결과에 많은 도움이 된다는 것을 확인할 수 있었다.

실험 정리 및 최종 결과

  • 먼저 첫 실험은 기존에 제공된 Baseline 코드를 돌려봄으로써 어떤 데이터인지 분석하는 과정을 진행하였다.
  • 실제로 처음 제공된 코드를 돌렸을때는 500만이라는 큰 데이터로 인해 RAM Memory Over가 나거나 로컬 환경에서 바닐라 LSTM + FC 모델을 돌리는데 약 12시간이라는 시간이 걸렸다.(하루 종일 다른 작업은 하지도 못했다.)
  • 첫 제출 결과는 Score 48.XX 로 심지어 Baseline 점수도 못넘어 큰 충격을 남겼다.(12시간이나 돌렸는데..?)
  • 두번째 실험은 Colab Pro를 통해 로컬로 돌리지 않고 고용량 램과 고용량 VRAM을 사용하여 모델을 돌렸다.
  • 첫번째 실험과 동일한 모델과 동일한 과정을 통해 실험을 진행하였고 Epoch 수만 늘린 모델이었다.
  • 결과는 50.9로 일단은 Baseline 점수를 넘는데 성공하였고 이제 Baseline을 넘어 상위권에 들고자 추가적인 회의를 진행하였다.
  • 판매량과 관련이 있으면서 주어진 데이터 내에서 알 수 있는 정보가 무엇인가에 대해 논의하였고 날짜 데이터에서 판매량과 연관있는 휴일 여부를 데이터 정보에 추가했으며, 또한 가격 역시 기존 가격에서 낮아지거나 높아지면 이 역시 영향이 있을 것이라는 가정으로 추가적인 실험을 진행하였다.
  • 또한 Baseline의 90일을 40일 60일 등 여러 기간을 나눠 실험을 진행하였고 최종적으로  Public 0.546 이라는 점수를 휙득하여 58등에 대회를 마무리할 수 있었다.
에이머블  public 0.54662 58등(약 상위 7%) 

배운점 및 소감

  • 먼저 한달동안 모델링을 하면서 같이 회의와 실험 결과 공유를 해준 팀원들에게 감사함을 전하고 싶다.
  • 또한 혼자서 했으면 하나의 아이디어에 갇혀 새로운 feature를 추가하는데 큰 어려움을 겪었을텐데 새로운 아이디를 제시해주고 새로운 시도를 수행해준 팀원들이 너무나도 감사했다.
  • 해커톤이 끝나고 아쉬운점은 데이터가 큰 만큼 주어진 기간 내에 더 많은 실험을 못해본 것이 너무 아쉬웠고 또한 column 즉 feature가 늘어날 수록 학습을 위한 데이터 크기가 더욱 커지기 때문에 RAM Memory Over 및 조금만 모델이 커도 VRAM이 부족하여 세션이 만료되는 현상을 자주 겪을 수 있었다.
  • 배운점으로는 데이터 전처리를 진행하면서 큰 데이터를 전처리할때는 numpy를 활용하는 것이 Pandas를 사용하는 것보다 훨씬 빠르다는 것을 몸소 느낄 수 있었다 (실제 전처리 시간 pandas(30분) → numpy(5분))
  • 이러한 물리적 하드웨어의 한계를 통해 배운 점과 쉽게 구할 수 없는 큰 데이터 셋을 전처리하면서 배운 정보는 앞으로의 데이터 분석과 AI 모델링 및 엔지니어링에 큰 경험이 되었으며 추후 4기를 모집할 때 지원하여 더욱 다양한 데이터셋을 분석해보고 싶다.

https://www.lgaimers.ai/

 

LG AI

LG와 청년들이 함께 만드는 더 가치 있는 미래

www.lgaimers.ai

3기 수료!