[Medium, Trading] What they don’t teach you about time series and predictions..

What they don’t teach you about time series and predictions.. (시계열 및 예측에 대해 알려주지 않는 것들)

이전 직장에서 가장 도전적이었던 프로젝트 중 하나는 유럽의 BEV(배터리 전기 자동차) 시장 발전을 예측하는 것이었습니다. ML 분야의 대부분의 프로젝트와 마찬가지로, 이 프로젝트는 기술적 측면뿐만 아니라 도메인별 과제를 모두 안고 있었습니다.

제 경우에는 서로 관련이 있었습니다. 이 글의 주제인 시계열 예측에 대해 가르쳐주지 않는 점과 몇 시간 동안 코드를 디버깅하고 실제로는 제 자신의 오류에 불과한 버그를 게시하게 만든 몇 가지 오류에 대해 자세히 살펴봅시다.

오류 #1: 도메인을 이해하지 못함

처음 시작할 때는 항상 데이터에 뛰어들고 싶은 유혹이 있습니다. 하지만 그렇게 하면 데이터에 노출되어 나중에 이면에서 어떤 일이 일어나는지 이해하게 되면 제거하기 어려운 편견이 생길 위험이 있습니다.

자동차 데이터의 경우, “2022년 3월에 유럽에서 판매된 자동차 대수는 X대”와 같은 판매 데이터는 실제로는 판매 데이터가 아니라는 점이 문제 중 하나입니다. 대신 해당 월에 등록된 차량의 수입니다. 데이터는 여전히 유용하지만 이 점을 인식하는 것이 중요합니다. 우리에게는 실제 판매 및 배송 지연이 데이터 사용 방식에 미치는 영향을 이해하는 것이 중요했습니다.

코로나19로 인한 공급망의 어려움과 수요 증가가 절정에 달했을 때, 차량 주문과 배송까지 약 1년의 지연이 발생했습니다. 금리, 실업률 등과 같은 거시 경제 변수가 즉각적인 매출에 영향을 미치지는 않지만 지연 효과를 발생시키기 때문에 이 점이 중요합니다.

또 다른 도전 과제는 자동차 산업이 상당히 주기적이라는 점이며, BEV 시장은 더욱 그렇습니다. 특히 Tesla를 비롯한 많은 제조업체는 매 분기 말에 납품량을 늘리는 경향이 있어 계절적 요인이 강합니다. 시장마다 개인 소유와 기업 소유 등의 요소가 동일하지 않다는 점도 데이터를 사용하고 해석하는 방식에 중요한 요소였습니다.

요점 #1: 학습 모델과 마찬가지로 편향성을 주의해야 합니다. 먼저 도메인을 이해한 다음 데이터를 살펴보세요.


오류 #2: 토끼굴을 너무 깊이 파고들기

이 프로젝트는 저의 첫 번째 실제 ML 프로젝트였고, 저는 정식 교육을 받지 않은 ML 애호가라면 누구나 하는 일을 했습니다. 파이프라인을 너무 복잡하게 만들다 보니 수렁에 빠졌죠. 사용하기에 가장 좋은 알고리즘을 연구하고, 10개 이상의 알고리즘을 학습하고 비교하는 워크플로우를 설정하여 가장 좋은 알고리즘을 선택하는 데 몇 시간을 보냈습니다.

그 후 저는 데이터에 미쳐버렸습니다. 동료와 함께 어떤 변수가 매출에 영향을 미칠 수 있는지, 데이터를 어디서 구할 수 있는지에 대해 정말 좋은 토론을 했습니다. 데이터를 수집하고 적절한 형식으로 변환하는 데 더 많은 시간을 할애했고, 마침내 모델을 훈련할 준비가 되었습니다.

이 시점에서 기능 엔지니어링, 전처리 단계 및 기타 데이터 소스가 포함된 복잡한 파이프라인의 문제점이 분명해졌습니다. 우선, 파이프라인이 복잡하다는 것은 모델 학습에 더 오랜 시간이 걸린다는 것을 의미합니다. 제 경우에는 데이터 세트가 그리 크지 않아서 10~15분 정도면 충분했지만, 디버깅을 할 때는 이 문제가 중요합니다. 둘째, 변수가 많은 복잡한 모델을 사용하면 디버깅하기가 더 어려워집니다.

셋째, 약 10개의 서로 다른 알고리즘과 함께 각각 고유한 모델을 가진 18개의 서로 다른 시장이 중첩된 데이터 집합을 가지고 있기 때문에 메트릭을 해석하고 이해하기가 복잡해졌습니다. 모델에 점수를 매기고 어떻게 비교하나요? 좋은 모델이란 무엇일까요?

요점 #2: 먼저, 제대로 작동하게 만드세요. 그런 다음 (필요하다면) 멋지게 만드세요. 작은 워크플로우와 소수의 알고리즘으로 오류를 발견하는 것이 더 쉬운 경우가 많습니다. 제 경우에는 날짜, 약간의 지연 및 선형 회귀로만 구성된 기준 모델을 만들었습니다. 그런 다음 거기에서 모델을 구축했습니다.


오류 #3: 회귀자(regressors) 때문이야, 바보야.

처음에는 흔련/테스트 데이터셋이 아주 좋아 보였습니다. 많은 예측과 괜찮은 점수가 나왔죠. 그런데 예측을 시작하면서 뭔가 이상한 점을 발견했습니다. 많은 알고리즘에서 미래 예측이 전혀 이루어지지 않았어요.

코드를 디버깅하는 데 많은 시간을 보냈습니다. 무언가를 변경하고, 모델을 다시 실행하고, 출력을 확인하고, 다시 일부 변수를 변경하고, 헹구고 반복했습니다. 아무것도 효과가 없었습니다. 저는 멋진 timetkmodeltime 패키지(저는 R로 코딩)의 개발자에게 연락을 취했고, 심지어 오류를 발견했다고 믿고 Github에 이슈를 등록하는 단계까지 나아갔습니다.

많은 고민 끝에 오류를 발견했습니다. “바보야, 경제 때문이야”라는 정치적 캐치프레이즈처럼, 이는 미래 예측의 고전적이지만 다소 간과되는 특징인 것으로 밝혀졌습니다.

이자율, 실업률, 주식 시장 지수 등과 같은 수많은 외부 회귀 변수로 모델을 구축하는 경우, 훈련/테스트 데이터는 기꺼이 훌륭한 결과를 보고할 것입니다. 그러나 향후 5년을 예측하려는 데이터 집합에는 이러한 변수가 기본적으로 포함되어 있지 않습니다.

즉, 외부 회귀변수(제 경우에는 여러 거시 경제 변수)를 제공해야 합니다. 제 GitHub 이슈에 대한 댓글을 보면 저만 이런 오류를 범한 것이 아닙니다.

요점 #3: 외부 회귀변수 사용의 필요성과 효과, 그리고 그에 따른 비용과 위험을 균형 있게 고려해야 합니다. 모델을 학습할 때 회귀 변수를 사용하는 경우 미래 데이터 세트에도 회귀 변수를 포함해야 합니다. 즉, 이자율을 사용하는 경우 향후 이자율도 예측해야 합니다.


때로는 단순한 것만으로도 충분합니다

복잡한 모델과 화려한 알고리즘으로 작업하는 것은 재미있고 멋진 데이터 과학자가 된 것 같은 기분을 느끼게 해줄 수 있습니다. 하지만 더 간단한 모델을 만드는 것만으로도 많은 비즈니스 가치를 창출할 수 있습니다. 이렇게 시작하면 데이터 과학 팀의 복잡성과 위험을 줄이는 동시에, 비즈니스 측에서 모델을 이해하고 예측을 신뢰할 수 있는 능력이 향상됩니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다