평가 정직성 섹션 — 질문과 검증의 사슬
대질문: 측정된 성능이 실전에서 재현될 점수라는 걸 어떻게 보장하는가?
배경: 시계열 평가의 흔한 방법들은 미래를 미리 보거나(누수), 시험을 한 번만 본다(운). 점수는 항상 나온다 — 믿을 수 있는지가 문제.
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)의 복선
예상 질문
- "왜 Stage마다 split이 다른가?" → 원칙은 하나 — split의 가정을 그 Stage의 가정과 일치시킨다. Stage 1(시간 무시 실험)엔 분포 보존이, Stage 2~3(시간 모델링)엔 시간 정직성이 우선.
- "TimeSeriesSplit과 k-fold의 차이는?" → k-fold는 시간 무시 등분(모든 fold에서 미래 누수), TSS는 train이 시간순 누적 확장되고 val이 항상 미래 쪽 — 방향이 보장된 k번의 시험.
- "expanding 말고 rolling window는?" → rolling(고정 길이)은 오래된 데이터를 버림 — 연간 주기(lag_52)가 핵심인 본 데이터에선 과거 보존(expanding)이 적합.
- "CV와 Test가 왜 달라도 되나(Linear Δ+0.11)?" → CV fold들은 1년 미만 구간이라 시즌 구성이 치우침 — 전 시즌(52주) Test보다 어려운 시험. 그 민감도 자체가 모델 정보다.