projects

평가 정직성 섹션 — 질문과 검증의 사슬

평가 정직성 섹션 — 질문과 검증의 사슬

대질문: 측정된 성능이 실전에서 재현될 점수라는 걸 어떻게 보장하는가? 배경: 시계열 평가의 흔한 방법들은 미래를 미리 보거나(누수), 시험을 한 번만 본다(운). 점수는 항상 나온다 — 믿을 수 있는지가 문제.

Q1. 기존 평가법들은 어떤 반칙을 하는가? (문제의 해부)

단계내용
도구세 방법의 위반 분석 (개념 검증)
분석random split: 미래 행이 train에 → 보간 과제로 변질, 점수 부풀림 / k-fold: 같은 누수를 k번 반복 + 허위 안정성 / 단일 cutoff: 정직하나 시험 1회 — 운인지 실력인지 모름
판정셋 다 그대로는 부적합
결정Stage별로 "split의 가정 = Stage의 가정" 원칙 수립

Q2. 그런데 Stage 1은 random split — 모순 아닌가? (예외의 정당화)

단계내용
도구가정 정합성 논증 + KS 검정
실측KS p: store .33 / item .16 / sales .995 — train/test 분포 일치
판정Stage 1은 "시간 무시" 가정의 실험 → 누수가 결함이 아니라 가정의 일부. 게다가 입력에 시간이 없어 미래 이웃을 훔칠 방법 자체가 없음(누수 무해 구간)
결정Stage 1만 random 8:2 + 분포 보존 검증. Stage 2부터 시간 정직

Q3. 반복 평가(튜닝·비교)는 어떻게 정직하게? (시험을 여러 번)

단계내용
도구TimeSeriesSplit 5-fold (expanding window) — train 누적 확장, val은 항상 직후
실측train 13K→65K, val 13K×5 / CV-Test Δ: RF +0.003 · SVR +0.007 · HGB +0.003 / Linear만 std 0.060
판정비선형 3모델은 CV와 Test 일관 — 평가 기반 신뢰 확보. Linear의 fold 민감성은 보너스 발견
결정Stage 3의 모든 탐색·비교를 이 위에서 수행

Q4. 최종 점수의 순결성은? (금고의 원칙)

단계내용
도구Test 1회 원칙
실행Test(2017, 52주 전 시즌)는 모든 탐색에서 격리 — 최종 모델(Tuned HGB) 확정 후 단 1회 평가
실측Test R² 0.9858 · SMAPE 5.20 · MAE 18.88
판정탐색에 오염되지 않은, 실전 재현 가능한 점수

산출물

  • 신뢰 가능한 최종 수치 0.9858 — "이 숫자는 한 번도 탐색에 쓰이지 않았다"
  • 보너스: 단일 cutoff였다면 몰랐을 Linear의 시즌 민감성 발견 → 앙상블 가중(meta coef +0.06)의 복선

예상 질문

  1. "왜 Stage마다 split이 다른가?" → 원칙은 하나 — split의 가정을 그 Stage의 가정과 일치시킨다. Stage 1(시간 무시 실험)엔 분포 보존이, Stage 2~3(시간 모델링)엔 시간 정직성이 우선.
  2. "TimeSeriesSplit과 k-fold의 차이는?" → k-fold는 시간 무시 등분(모든 fold에서 미래 누수), TSS는 train이 시간순 누적 확장되고 val이 항상 미래 쪽 — 방향이 보장된 k번의 시험.
  3. "expanding 말고 rolling window는?" → rolling(고정 길이)은 오래된 데이터를 버림 — 연간 주기(lag_52)가 핵심인 본 데이터에선 과거 보존(expanding)이 적합.
  4. "CV와 Test가 왜 달라도 되나(Linear Δ+0.11)?" → CV fold들은 1년 미만 구간이라 시즌 구성이 치우침 — 전 시즌(52주) Test보다 어려운 시험. 그 민감도 자체가 모델 정보다.