목표 누출은 미래를 훔쳐보는 일이야
목표 누출은 예측하려는 순간에는 알 수 없는 정보가 입력 특성에 들어가는 현상이야. 노트북에서는 놀라운 검증 점수를 만들지만 실제 운영에서는 그 정보가 없으니 성능이 무너져. 더 위험한 점은 오류가 숫자를 나쁘게 만들지 않고 오히려 좋게 만든다는 거야. 팀이 축하하는 동안 실험의 전제가 이미 깨져 있을 수 있어.
시간 누출
과거 고객의 다음 30일 매출을 예측하면서 전체 기간으로 계산한 ‘최근 30일 매출’을 넣으면 일부 행은 미래를 포함해. 집계식 이름이 과거형이라고 안전한 게 아니야. 각 행의 예측 기준 시각을 정하고 그 시각 이전 사건만 집계하도록 절단해야 해. 재학습 때도 같은 시간 규칙을 재현할 수 있어야 하지.
사건 뒤 정보 누출
취소 여부를 예측하면서 취소 사유, 환불액, 취소 때문에 생긴 상담 기록을 쓰는 경우야. 열 자체는 정상 자료지만 예측이 끝난 뒤에만 생겨. 원천 시스템의 생성 시각과 업무 흐름을 확인하지 않으면 이름만 보고 걸러내기 어려워. ‘이 값은 정확히 언제 처음 저장되는가’를 열마다 한 문장으로 증명해.
전처리 누출
학습·검증·시험 자료를 나누기 전에 전체 자료로 결측 대체값, 평균과 표준편차, 범주 사전, 특성 선택 기준을 계산하면 검증 자료의 통계가 학습에 스며들어. 목표값을 직접 보지 않았어도 누출이야. 먼저 행을 나누고, 변환기는 학습 부분만 보고 맞춘 뒤 같은 변환을 나머지에 적용해야 해. 교차검증에서는 이 과정을 각 폴드 안에서 다시 해야 하고.
집단 누출도 놓치지 마
같은 고객, 기기, 문서에서 나온 여러 행이 학습과 검증에 갈라지면 모델은 새로운 사례를 일반화하는 대신 대상을 알아볼 수 있어. 이미지의 연속 프레임이나 한 문서를 잘라 만든 문장도 같은 문제야. 독립 단위가 무엇인지 정하고 그 단위로 묶어 분할해야 실제 사용 조건과 닮아.
방어는 시간표와 파이프라인으로
모든 특성에 생성 시각과 사용 가능 시각을 기록하고, 전처리는 모델과 함께 하나의 파이프라인 안에 둬. 특성 하나를 뺐을 때 점수가 비현실적으로 떨어지면 지키기 전에 감사해. 실제 제공 요청 한 건을 골라 그 순간 확보되는 원시 값만으로 예측이 재현되는지 시험하면 많은 누출이 드러나. 누출이 발견된 점수는 보정해서 쓰지 말고 버린 뒤 분할부터 다시 시작해야 해. 누출은 성능 결함이 아니라 실험 무효 사유야. 가장 좋은 방어는 모든 열의 시간표를 직접 증명하는 습관이야. 증명하지 못한 열은 쓰지 마.