After finishing data extraction from SAP tables, I started working on forecasting this week. It’s about predicting the demand for the next six months so that planners can make better decisions. We have demand data for the past 4 years for each material. It feels a bit awkward to me because it’s not the kind of well-structured data I used at university. Instead, it’s raw, messy, and unrefined.
그냥 한글로 적겠습니다ㅜ 고객사의 생산 계획 플래너들이 더 나은 의사결정을 할 수 있도록 여러 최적화 기능들을 추가하고 있는데 이것도 그 일환이다. 월별 수요량을 시계열로 그래프를 통해 제공을 하는데 그곳에 최적화랑 미래예측을 더 추가하고 있다. 현재 각 자재들에 대해 최근 4년 간의 수요 데이터들이 있으며 이 시계열 데이터를 통해 미래 6개월 수요의 예측값을 구하면 된다.

우선 자재를 수요 패턴 기반으로 분류(클러스터링)하고 각 그룹에 맞는 예측 모델을 적용하려고 했다. 피쳐로는 수요발생개월수, 평균 수요량, 변동계수 cv 이렇게 3개를 사용했다. 4개의 클러스터로 분류가 됐고 대략 18-19-119-120 이 정도 개수대로 나뉘었다. 먼저 클러스터 0에 속한 자재들 먼저 진행했다. 추천 받은 Holt-Winters 모델을 적용했는데 미래 6개월 예측 합계를 구해야 하니까 APE 절대 오차율로 (예측값 - 실제값) 매트릭스를 설정하고 모델링 했다. 결과는 생각보다 잘 나왔는데 단일 모델이 아닌 자재들에 대한 개별 모델이 만들어지는 문제가 있었다.
모든 자재에 대해 동일하게 적용되는 모델을 만들기 위해 LightGBM 머신러닝 모델을 사용해봤다. 전공 수업 때 한 번 다뤘어서 해봤는데 성능이 처참했다. 학습을 아예 못하고 오차율도 2배 이상 났다. 처음에는 자재끼리 데이터 스케일에 차이가 있어서 생기는 문제인 줄 알아서 스케일러를 통해 전처리를 진행하고 다시 해봤는데 결과는 큰 차이가 없었다. 19개 밖에 안되는 데이터라 샘플이 부해서 성능이 낮은 것 같다. 이후 다른 모델을 찾아보다가 많은 샘플 없이도 가능한 ElasticNet을 써보기로 하는 것까지 미팅 전에 진행했었다.

미팅 후 많은 피드백을 받을 수 있었다. 먼저 코드를 통해 자동으로 모델링과 예측을 할 거기 때문에 단일모델이 아니라 개별모델이어도 상관 없다고 했다. 내가 수동적으로 파라미터를 일일이 적어야 하는 게 아니라면 어차피 자동으로 코드가 연결되어 있으니까 클러스터 별 어떤 모델 사용할 수 있는지만 파악하면 되다고 했다. 그래서 Holt-Winter 모델로 다시 해봐야 겠다. 또 시각화 그래프는 월별 수요 데이터 특성상 꺾은선 보다 막대 그래프가 더 용이하다고 했고 학습에 사용하는 데이터 구간을 꼭 전구간이 아닌 최근 1년, 3년 같이 나누는 것도 방법이라고 했다. 시각화를 먼저 그려서 패턴을 눈으로 확인하고 사용할 구간을 선정해야겠다. 그리고 예측한 결과를 보일 때 비교를 위해 최근 3/6/12개월 평균 값을 사용해서 성능 비교도 추가하면 좋을 것 같다. 다음 미팅까지 해볼 게 상당히 있는데 최소 클러스터 2개 정도는 모델링이 잘 돼서 정리가 됐으면 좋겠다.