← 기술 지식

기술 지식 / 머신러닝·AI 에이전트 / 머신러닝

학습 데이터 분할과 선택 정보의 누출

훈련·검증·테스트의 역할을 예측 시점과 사용자 단위로 나누고 전처리 fit·rolling validation·접기 상관의 경계를 설명합니다.

머신러닝 · 원리·구현·운영
기술 지식 트리

데이터 분할의 기준은 train·validation·test라는 이름이나 비율이 아니라 특정 정보가 어떤 의사결정에 흘러갔는지입니다. 목표로 하는 일반화 대상과 예측 시점부터 고정한 뒤, 전처리 fit·후보 선택·최종 평가의 경계를 같은 절차로 적용해야 점수를 해석할 수 있습니다.

테스트 점수와 모델 선택 자료의 오염

모델 크기와 학습률을 스무 번 바꿔 가장 높은 테스트 점수를 골랐다고 합시다. 모델 가중치를 테스트 데이터로 직접 학습하지 않았더라도 선택 과정은 그 데이터의 우연한 특성을 사용했습니다. 최종 점수를 정말 처음 본 자료의 성능으로 해석하기 어렵습니다.

훈련은 모델 파라미터를 맞추고, 검증은 모델·전처리·임계값·중단 시점을 선택하며, 테스트는 선택을 마친 뒤 고정한 방법을 평가합니다. 이름이나 비율보다 어떤 정보가 어떤 결정에 사용됐는가가 역할을 정합니다.

일반화 대상과 데이터 분할 단위

같은 사용자의 기록 100개를 무작위로 나누면 훈련에서 본 사용자 특성이 검증에도 나타납니다. 새 사용자에게 적용할 성능이 목표라면 사용자 단위 분할이 필요합니다. 기존 사용자의 미래 행동이 목표라면 같은 사용자가 양쪽에 있어도 시간 순서와 예측 시점 정보만 사용하는 계약이 더 중요합니다.

목표 적절한 분할의 출발점 대표 누출
새 사용자 사용자 그룹 분리 같은 사람의 다른 행이 양쪽에 존재
미래 수요 과거 학습·미래 평가 미래 매출·수정된 통계를 특징으로 사용
새 이미지 원본 원본 단위 분리 후 증강 원본과 회전본이 다른 분할로 이동
새 기관·장비 기관·장비별 외부 평가 동일 장비의 배경 특징 암기

먼저 분할을 정한 뒤 훈련 행에만 전처리의 통계를 fit하고, 같은 변환을 검증·테스트 행에는 transform으로 적용합니다. 예를 들어 전체 데이터 평균으로 표준화한 뒤 나누면 검증·테스트의 분포가 평균 계산에 섞여 훈련 과정에 들어가므로, 표준화 통계의 출처부터 훈련 분할로 제한해야 합니다. 결측 대체, 어휘 사전, 특징 선택, 확률 보정도 각각 어느 자료에서 fit했는지 기록해야 같은 경계를 재현할 수 있습니다.

fit과 평가 자료의 방향훈련 분할: 전처리 fit · 모델 fit. 검증 분할: transform만 적용, 후보·임계값 선택. 설정 고정: 특징 · 모델 · 판정 정책. 독립 테스트: 선택에 쓰지 않은 자료후보 평가선택 확정최종 평가훈련 분할전처리 fit · 모델 fit검증 분할transform만 적용후보·임계값 선택설정 고정특징 · 모델 · 판정 정책독립 테스트선택에 쓰지 않은 자료
fit과 평가 자료의 방향 화살표는 학습한 변환·모델의 적용입니다. 검증 점수는 선택에 사용하지만 테스트 정보는 모든 선택이 잠긴 뒤에만 사용합니다.
그림을 글로 읽기
  • 훈련 분할: 전처리 fit · 모델 fit
  • 검증 분할: transform만 적용 · 후보·임계값 선택
  • 설정 고정: 특징 · 모델 · 판정 정책
  • 독립 테스트: 선택에 쓰지 않은 자료
  1. 훈련 분할 → 검증 분할: 후보 평가
  2. 검증 분할 → 설정 고정: 선택 확정
  3. 설정 고정 → 독립 테스트: 최종 평가

교차 검증 fold별 전처리 학습

for candidate in candidate_configs:
    scores = []
    for trainIds, validationIds in approved_folds:
        transformer = new_transformer(candidate)
        transformer.fit(data[trainIds])
        model = new_model(candidate)
        model.fit(transformer.transform(data[trainIds]), labels[trainIds])
        scores.append(evaluate(model, transformer, data[validationIds]))
    record(candidate, scores)
choose_without_reading_final_test()

각 접기의 검증 행은 그 접기에서 통계 fit에 사용되지 않아야 합니다. 접기 전 전체 데이터로 특징 선택을 마치면 이후 모델만 다시 학습해도 누출이 남습니다. 후보 선택을 포함한 전체 절차를 평가하려면 독립 외부 테스트나 적절한 중첩 검증이 필요합니다.

5-fold에서는 각 접기의 검증 자료는 다르지만, 학습 집합은 다른 접기의 학습 집합과 대부분 겹치므로 다섯 점수가 같은 자료를 공유합니다. 이 다섯 값을 서로 독립인 새 실험 다섯 번으로 놓고 단순 표준오차를 계산하면 공유 자료와 그룹·시간 의존성을 무시해 불확실성을 과소평가할 수 있습니다. 따라서 평균만 남기지 말고 접기별 값, 집단 크기, 최악 집단을 함께 기록한 뒤 그 의존성을 반영하는 추정 방법을 골라야 합니다.

시간 분할과 라벨 가용 시점

16월 학습, 7월 검증 후 17월 학습, 8월 검증처럼 시점을 이동하는 것이 rolling validation입니다. 여러 계절·정책 변화에서 성능을 볼 수 있지만 반복 학습 비용과 겹친 학습 집합의 상관이 생깁니다. 9월을 최종 holdout으로 남겼다면 후보 선택에 사용하지 않습니다.

예측 결과가 30일 뒤에 라벨로 확정되는 문제라면 7월 1일 모델을 만들 때 6월 30일 사건의 최종 라벨을 알 수 없을 수 있습니다. 단순 사건 날짜 순서만 맞추지 말고 특징 관찰·라벨 확정·데이터 수정 시점을 함께 검사합니다. 겹치는 기간의 목표값이 누출된다면 예측 horizon과 가용 시점에 맞는 간격을 둡니다.

최고 검증 점수 선택과 다중 후보 선택 비용

후보를 많이 볼수록 우연히 높은 점수를 선택할 가능성이 커집니다. seed·특징·학습률·조기 종료·임계값의 선택 횟수를 기록하고, 테스트를 본 뒤 다시 바꾸었다면 기존 테스트가 선택에 쓰였다고 명시합니다. 새 독립 자료가 없다면 독립 최종 검증이라고 포장하지 않습니다.

최종 학습을 train+validation으로 다시 할지, 선택한 checkpoint를 그대로 쓸지도 절차의 일부입니다. 다시 학습하면 전처리 fit 범위와 학습 시간 정책이 달라지므로 그 완성 절차를 테스트해야 합니다. 테스트 성능은 미래의 보증이 아니라 정한 분포·분할 아래의 추정입니다.

누출 검사의 코드 경계와 데이터 계보

예상 결과는 검증·테스트 행이 어떤 전처리 통계의 fit 목록에도 나타나지 않는 것입니다. 사용자 단위 목표라면 같은 사용자 ID가 양쪽에 0건이어야 하고, 미래 예측 목표라면 특징 관찰 시각과 라벨 확정 시각이 예측 시점 뒤로 넘어가지 않아야 합니다. 위반 행을 찾으면 점수 비교보다 먼저 분할과 파이프라인을 고칩니다.

누출 검사는 분할 ID를 기준으로 사용자와 원본 식별자를 서로 대조해 중복 행이 양쪽에 걸쳐 있는지 세고, 각 전처리 통계의 fit 행 목록을 로그와 비교하며, 특징 생성 시각이 예측 시각보다 늦은 행을 찾는 순서로 수행합니다. 모델 평가 결과는 같은 분할·후보 수·seed 정책으로 기준 모델을 다시 돌린 값과 비교해야 하며, 접기 수를 한 번 더 늘린 것만으로 새로운 독립 데이터를 얻었다고 해석하지 않습니다.

데이터 버전·분할 규칙·예측 시점·전처리 fit 범위·선택 이력·최종 테스트 사용 여부를 남겨야 결과를 다시 검증할 수 있습니다. 표에 세 비율을 적는 것보다 정보가 흐르는 경계를 실제로 지키는 것이 중요합니다.

후속·관련 개념

이 개념의 확장

함께 읽을 문서

전체 기술 지식
선택 연습 · 관련 질문 3개

질문은 이해를 확인하는 보조 자료입니다. 학습 경로와 문서의 범위는 질문 수와 독립적입니다.