[카테고리:] 미분류

  • 머신러닝 예측 모델에서 Promo2SinceWeek 결측치 처리는 어떻게 해야 하는가?

    머신러닝 프로젝트에서 다뤄지는 실제 기업 데이터는 종종 불완전하고 구조적으로 복잡하다. 특히 시계열 또는 마케팅 변수와 관련된 결측치 처리 문제는 모델의 예측 정확도에 직결되며, 단순한 평균 대체나 0으로 채우는 방식이 오히려 성능 저하를 유발할 수 있다. 대표적인 예시 중 하나가 바로 Rossmann 매장 판매 예측 프로젝트에서 등장하는 Promo2SinceWeek 변수다.


    Promo2SinceWeek는 무엇인가?

    Rossmann의 데이터에서 Promo2SinceWeek는 특정 매장에서 **프로모션 2(Promo2)**가 시작된 시점을 의미한다. 정확히는 해당 연도의 몇 번째 주부터 해당 프로모션이 시작되었는지를 나타내는 숫자(1~52)다. 이 값은 Promo2가 활성화된 매장에만 유효하며, 그렇지 않은 매장은 결측치로 남는다.

    문제는 Promo2가 꺼져 있는 매장에서 Promo2SinceWeek가 결측으로 존재한다는 점이다. 이 경우 해당 변수는 본질적으로 무의미한 정보이므로, 단순히 0으로 대체해선 안 된다.


    왜 0으로 채우면 안 되는가?

    0은 주차(Week of Year)라는 개념에 존재하지 않는 값이다. 일반적으로 주차는 1~52 혹은 1~53 사이의 값을 가지며, 0은 유효한 범위에 포함되지 않는다. 이처럼 도메인에서 의미 없는 값을 채워 넣으면, 모델은 그것을 극단적인 숫자로 간주해 오해할 가능성이 높다. 특히 트리 계열 모델에서는 분할 기준이 왜곡되어 전체 성능이 저하될 수 있다.

    또한 0이라는 숫자가 Promo2SinceWeek = 1보다 “이른 시점”으로 인식될 수도 있는데, 이는 잘못된 시간 흐름 해석을 유발한다. 이처럼 의미 없는 0을 주차 정보에 삽입하는 행위는 시계열 특성을 가진 변수의 정합성을 심각하게 훼손할 수 있다.


    Promo2 == 0인 경우에는 어떻게 해야 하나?

    이 경우 Promo2SinceWeek의미가 없는 변수다. 프로모션 자체가 존재하지 않기 때문에, 해당 매장이 언제 프로모션을 시작했는지를 나타내는 정보는 필요 없다. 따라서 이 경우에는:

    • Promo2SinceWeek, Promo2SinceYear 등의 관련 변수는 0으로 고정하거나 아예 제거해도 무방하다.
    • 모델링에서 Promo2 == 0인 행은 Promo2SinceWeek 등을 참조하지 않게 설계해야 한다.

    Promo2 == 1인데 Promo2SinceWeek가 결측이면?

    이 경우는 보다 섬세한 처리가 필요하다. 프로모션이 존재함에도 불구하고 시작 시점 정보가 빠졌다면, 다음과 같은 전략이 효과적이다:

    1. 최빈값 대체: Promo2 == 1인 매장들 중 Promo2SinceWeek의 최빈값으로 채운다. 해당 주차가 프로모션이 가장 많이 시작된 시점이라는 가정이다.
    2. 평균값 대체: 수치적 의미를 중시할 경우 평균값으로 대체하는 방법도 있다. 다만 주차 번호라는 특성상 정수로 반올림 처리해야 할 수도 있다.
    3. 고급 대체 기법: 추후 모델 성능을 높이고자 한다면, PromoInterval, Promo2SinceYear, StoreType 등의 변수를 활용한 예측 기반 결측치 대체(imputation)도 고려할 수 있다.

    변수 처리 전략 정리

    조건처리 전략
    Promo2 == 0Promo2SinceWeek = 0 또는 해당 변수 제거
    Promo2 == 1 & 값 결측최빈값 또는 평균값으로 대체
    Promo2 == 1 & 값 존재그대로 사용
    전체 데이터셋Promo2 여부에 따라 조건부 전처리 필요

    모델링 시 고려할 점

    모델을 학습시키기 전, Promo2SinceWeek와 같은 시계열 변수에 대해 도메인 기반 정제를 수행하지 않으면, 모델은 오해하기 쉬운 입력값으로부터 패턴을 잘못 학습할 수 있다. 특히나 결측치가 단순한 빈칸이 아니라 **’존재 자체가 의미 없음’**을 나타내는 경우에는, 해당 변수를 직접 제거하거나 조건부 처리하는 것이 훨씬 더 안정적인 방식이다.

    결국 머신러닝 프로젝트에서 결측치는 그 자체보다도 도메인 이해도와 전처리 설계가 성능의 핵심이 되는 변수다. 의미 없는 0 하나가 수천 개의 예측에 오류를 가져올 수 있다는 점을 항상 명심해야 한다.