일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- deeplearning
- Meta
- GPT-3.5
- ML
- AI
- naver
- OpenAI
- KoGPT
- KT
- gpt
- 생성형
- LLM
- LLaMA
- hyperclovaX
- 딥러닝
- 인공지능
- SearchGPT
- Stable Diffusion
- 생성형 AI
- AIVLE
- GPT-4
- GPT4
- SKT
- generative
- TRANSFORMER
- nlp
- 3기
- ChatGPT
- 네이버
Archives
- Today
- Total
Ttoro_Tech
[LG Aimers 3기]_온라인 채널 제품 판매량 예측 AI 온라인 해커톤 본문
https://dacon.io/competitions/official/236129/overview/description
온라인 채널 제품 판매량 예측 AI 온라인 해커톤 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
LG Aimers
- 저번 겨울방학에 진행한 Aimers 2기를 참가하고 많은 공부가 되어 3기에도 참가하게 되었다.
- 2기 당시에도 지금까지 접해보지 못한 스마트 공장 센서 데이터를 분류하는 문제였는데
- 이번에도 역시 쉽게 접할 수 없는 온라인 채널 제품 판매량 데이터를 가지고 다음 판매량을 예측하는 문제였다.
- 작년과 달리 Aimers 이외의 데이터 프로젝트에도 많이 참가하였고 이번엔 혼자가 아닌 팀원을 구성하여 대회에 참가하였기 때문에 지난과 달리 데이터에 대한 분석결과를 서로 공유하고 새로운 시도를 해보는 등 많은 것을 배울 수 있는 경험이었다.
데이터 배경
- 현대 디지털 시대에 들어, 온라인 판매는 상품과 서비스를 전달하는 핵심 채널
- 이러한 변화와 함께, 온라인 판매 채널에서 수집되는 대규모 데이터는 더 이상 그저 정보의 한 형태가 아닌, 온라인 판매 환경에서 귀중한 통찰력을 얻는데 있어 중요한 자산
- 이런 데이터를 활용해 빠르고 정확한 판매 예측을 수행하는 것은, 기업들이 효율적인 재고 관리를 하고, 타겟 마케팅 전략을 세우는데 필수적
해결 문제
특정 온라인 쇼핑몰의 일별 제품별 판매 데이터를 바탕으로
향후 약 3주간의 제품별 판매량을 예측하는 AI 모델을 개발
데이터
주어진 데이터는
- 간단한 분류 코드
- 기간은 2022.01.01 ~ 2023.04.04 로 동일
- 각 제품별 기간 동안의 판매량
- 각 제품별 기간 동안의 일별 총 판매금액
- 각 브랜드별 기간 동안의 브랜드 검색량
으로 이뤄진 약 15000개의 제품 데이터로 이뤄져있다.
데이터 분석
- 판매량 데이터가 행은 각 제품 아이디, 열이 분류 및 일별 판매량으로 이뤄져 데이터의 전처리가 필요했다.
- 각 ID별 행은 날짜로, 열은 분류인 새로운 Dataframe 형태가 필요했기 때문에 다음과 같은 코드를 작성하여 데이터를 학습에 용이하게 전처리해주었다.
- 각 ID별로 행을 가져와 날짜는 행으로,열의 데이터는 분류 데이터 및 일별 총 판매량 등 새로운 DataFrame을 생성하도록 코드를 작성하였다.
- 이때 Prices는 주어진 데이터에서 일별 판매량과 일별 총 판매 수익을 알 수 있어 일별 총 판매수익에서 일별 판매량을 나누면 일별 가격을 구할 수 있어 데이터에 추가하였다.
일별 가격 = 일별 총 판매 수익 / 일별 판매량
- 또한 브랜드 검색량(keywords)을 브랜드 코드에 맞게 추가하였는데 모든 브랜드가 모든 학습 데이터의 ID가 있지 않다는 내용이 있어 없는 경우(NaN)에 대해서는 0으로 채웠다.
- 마지막으로 팀원들과의 회의 결과 판매량은 휴일인지 아닌지가 영향이 있다고 판단되어 이와 같은 데이터를 수집해 데이터 기간동안의 휴일 정보를 가져와 column에 추가하였다.
- 또한 category 데이터인 분류 정보를 LabelEncoder를 사용하여 추가하였고 위와 같은 데이터셋으로 만들 수 있었다.
- 다음으로 만들어진 데이터는 학습하기 전에 MinMaxScaler를 활용하여 데이터의 스케일을 조절하는 작업을 수행하였다.
- 실제로 price와 판매량의 크기가 크게 차이나기 때문에 이러한 전처리 작업이 필요하다.
위 그래프를 보면 실제로 가격과 판매량이 영향있는 것을 볼 수 있으며 또한 검색량 역시 연관이 있음을 보여준다.
학습 데이터셋 및 검증 데이터셋
- 학습은 60일 간격으로 8개의 column을 가진 데이터를 사용하였으며 예측 데이터는 60일 이후 21일 데이터를 예측하도록 데이터 셋을 만들었다.
- 또한 검증 데이터셋을 위해 각 데이터 별 뒤의 60개를 잘라 검증 데이터셋으로 만들었다.
- 다음과 같은 전처리를 통해 약 500만개의 학습 데이터셋과 약 60만개의 검증 셋을 만들 수 있었다.
모델링
1D-CNN + LSTM 모델
- 시계열 데이터를 분석하는데 많이 사용하는 모델로 CNN 레이어와 LSTM 레이어로 이뤄진 모델이다.
- CNN은 이미지 등 위치 정보가 중요한 데이터에 많이 사용되는데 이러한 성질을 이용하여 시계열 데이터의 구간 정보를 집약하는 효과를 얻을 수 있다.
- LSTM은 시계열 데이터를 처리하기 위한 고전적인 딥러닝 네트워크로 긴 시계열의 데이터를 처리할 때 Vanishing Gradient(기울기 소실) 문제를 해결할 수 있는 순환 신경망이다.
- 최종적으로 위의 두 모델의 특징을 이어 붙인 모델 구조로 다음과 같이 코드를 작성하였다.
- 최적의 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기를 모집할 때 지원하여 더욱 다양한 데이터셋을 분석해보고 싶다.
LG AI
LG와 청년들이 함께 만드는 더 가치 있는 미래
www.lgaimers.ai
'Data Projects' 카테고리의 다른 글
[한국철도999_5위]_AIFactory_철도 인공지능 대회 (0) | 2023.09.12 |
---|---|
[AIVLE_3기]_16주차_Dacon_도배 하자 유형 분류 AI 경진대회 (0) | 2023.05.24 |
[AIVLE_3기]_15주차_AI_SPARK_CHALLENGE(2탄) (0) | 2023.05.09 |
[AIVLE_3기]_12주차_AI_SPARK_CHALLENGE (0) | 2023.04.18 |