Skip to main content
수정을 만들 때 쓴 바로 그 데이터로 평가하면 품질 숫자가 부풀려집니다. “오버피팅” 문제를 한 문장으로 줄이면 이겁니다. 홀드아웃은 개선 플로우가 손댈 수 없는 데이터 일부입니다. 시뮬레이션이 여기에도 돌아갑니다. 여기를 통과하는 신호가 정직성 문턱을 넘은 것입니다.
홀드아웃은 켜서 쓰는 기능입니다. 기본으로 시뮬레이션과 최적화는 실패한 클러스터만(cluster-local) 잽니다. 일반화가 잘 됐는지 보고 싶을 때 홀드아웃을 켜고 강도(light / full)를 고릅니다. 작은 팀은 대개 없이 시작했다가, 개선 플로우가 출시할 만한 수정을 꾸준히 내놓기 시작하면 더합니다.

홀드아웃 만들기

데이터셋에서 Split → Create holdout를 누릅니다. 이렇게 나눌 수 있습니다.
  • Random N% 무작위 20%(기본).
  • By tag 특정 태그를 전부 홀드아웃(예: hard 예시).
  • By date range 컷오프 뒤에 더한 예시를 홀드아웃(앞으로의 방어력 평가).
  • Manual pick 예시를 낱개로 체크.
홀드아웃은 별도 데이터셋이 되어, 원래 데이터셋과 서로 참조됩니다.

홀드아웃을 지키는 방식

홀드아웃으로 표시하면 개선 플로우의 제안 생성이 그 예시를 읽지 못합니다. 진단, 근본 원인 분석, 레버 선택이 홀드아웃이 아닌 쪽만 씁니다. 하지만 시뮬레이션은 제안을 양쪽에 돌립니다.
  • Train 쪽 개선을 만든 곳. “분포 안” 개선을 보여줍니다.
  • Holdout 쪽 정직한 신호. 일반화를 보여줍니다.
둘 사이가 크게 벌어지면 오버피팅입니다.

오버피팅 경고

제안이 train 성능은 크게 올리는데 holdout 성능은 꿈쩍도 안 하면 Nora가 경고합니다.
이 제안이 train 점수는 +12% 올렸는데 holdout은 +0.5% 입니다. 개선 플로우에 쓴 실패 예시에 오버피팅했을 수 있습니다. 개선 패턴을 넓히는 걸 생각해 보세요.
경고가 막지는 않습니다. 그래도 출시할 수 있습니다. 다만 강한 힌트입니다.

로테이션

홀드아웃은 돌려 가며 바꿔야 합니다. 같은 예시가 늘 홀드아웃이면 낡아서, 개선 플로우가 시험하는 패턴을 못 덮습니다. 이렇게 권합니다.
  • 홀드아웃을 매달(또는 분기마다) 바꿉니다.
  • 새 실패를 고치면 새 홀드아웃 예시를 더합니다.
  • 이제 사소해진(늘 통과하는) 홀드아웃 예시는 물립니다.
로테이션은 수동입니다(여러분이 정합니다). 60일 넘게 안 바뀌면 Nora가 “holdout age” 표시를 띄웁니다.

홀드아웃과 회귀 스위트는 다릅니다

둘 다 테스트 전용이지만 다릅니다.
  • Holdout 트래픽의 일반 대표 샘플. 넓게 덮습니다.
  • 회귀 스위트 영원히 막을 특정 실패. 좁고 방어적입니다.
따로 두세요. 변경이 하나는 통과하고 하나는 실패할 수 있고, 해석이 다릅니다.

Enterprise: 프로덕션 홀드아웃

위험이 큰 Flow는 Nora가 프로덕션 트래픽의 일부를 늘 샘플링 하도록 설정할 수 있습니다. 실행이 자동으로 데이터셋에 쌓이고, 오프라인으로 사람이(또는 판사가) 주석을 달아, 홀드아웃이 자연스럽게 늘어납니다. Flow 설정 → Sampling → Production holdout에서 켭니다.

분할과 시뮬레이션

시뮬레이션이 쪽마다 따로 알려 줍니다.
  • Train: 47/50 통과.
  • Holdout: 18/20 통과.
  • Overall: 65/70 통과.
전체 숫자는 편리하지만, 정작 중요한 건 두 쪽의 개별 숫자입니다. 그 차이가 일반화에서 여러분이 어디쯤인지 말해 줍니다.