Data Leakage

개념 확인: Data Leakage and Pipelines


전처리 규칙을 어느 자료에서 정하는지 추적하고 누수를 진단한다.

문제 1

학습 자료의 통계로 표준화하기

학습 자료의 특성 한 열이 2, 4, 4, 4, 5, 5, 7, 9다. 표준화는 z = (x − μ)/σ이며 μ와 σ는 이 학습 자료에서 계산한다(σ는 n으로 나눈 표준편차).

  1. μ와 σ를 구한다.
  2. 학습 자료의 값 9와 테스트 자료의 값 11, 1을 각각 표준화한다.
  3. 테스트 자료의 평균과 표준편차로 다시 표준화하면 안 되는 이유를 적는다.
  4. 표준화한 학습 자료 열의 평균과 표준편차를 적는다.
  5. 다음 세 계산 가운데 특성마다 값의 범위가 다를 때 결과가 크게 달라지는 것과 영향이 없는 것을 고른다. (가) 두 관측 사이의 거리 (나) 그래디언트로 계수를 갱신 (다) 값의 순서만 비교해 나누기
해설 펼치기
  1. μ = 40/8 = 5, 편차 제곱의 합 9 + 1 + 1 + 1 + 0 + 0 + 4 + 16 = 32이므로 σ = √(32/8) = 2다.
  2. 9는 (9 − 5)/2 = 2, 11은 (11 − 5)/2 = 3, 1은 (1 − 5)/2 = −2다.
  3. 표준화 상태는 학습 자료로 fit하고 테스트 자료에는 transform만 적용한다. 다시 fit하면 테스트 분포가 전처리 상태에 들어가고 학습과 다른 입력 표현을 쓰게 된다.
  4. 평균 0, 표준편차 1이다.
  5. (가) 거리는 값이 큰 특성이 지배하고, (나) 그래디언트 갱신은 축마다 알맞은 이동 폭이 크게 달라진다. (다) 순서만 쓰는 계산은 척도 조정 전후 순서가 같아 영향이 없다.
문제 2

결측값과 범주 처리

학습 자료에 다음 두 열이 있다.

  • 월 소득(만 원): 300, 400, 결측값, 500, 800
  • 거주 도시: 서울, 부산, 대전, 서울, 부산
  1. 월 소득의 결측값을 평균으로 채울 때와 중앙값으로 채울 때의 값을 각각 구한다.
  2. 거주 도시가 비어 있는 관측이 있다면 어떤 값으로 채우는지 적는다.
  3. 거주 도시에 순서형 부호화(서울 = 0, 부산 = 1, 대전 = 2)를 쓰면 어떤 잘못된 관계가 생기는지 적고, 알맞은 부호화와 대전의 표현을 적는다. 범주 순서는 서울, 부산, 대전이다.
  4. 만족도 ‘낮음/중간/높음’ 열에는 어떤 부호화가 알맞은지 적는다.
  5. 테스트 자료에 학습 자료에 없던 ‘광주’가 나왔을 때 처리 규칙을 미리 정해야 하는 이유를 적는다.
해설 펼치기
  1. 관측된 네 값의 평균은 (300 + 400 + 500 + 800)/4 = 500, 중앙값은 (400 + 500)/2 = 450이다. 두 값 모두 학습 자료에서 계산해 저장한다.
  2. 학습 자료에서 가장 자주 나온 범주로 채운다. 이 열에서는 서울과 부산이 두 번씩 나와 동률이므로 동률 처리 규칙도 정해야 한다.
  3. 대전(2)이 서울(0)보다 크고 부산이 그 사이에 있다는, 원래 없는 순서와 크기 관계가 생긴다. 순서가 없는 범주에는 one-hot encoding이 알맞고 대전은 (0, 0, 1)이다.
  4. 범주에 순서가 있으므로 순서형 부호화(낮음 = 0, 중간 = 1, 높음 = 2)가 알맞다.
  5. 부호화는 학습 자료에서 확인한 범주 목록을 저장하므로 ‘광주’는 목록에 없다. 오류로 멈출지 모두 0으로 표현할지 미리 정해야 하며, 모두 0으로 두면 서로 다른 새 범주가 같은 값으로 표현된다.
문제 3

평가 절차가 적절한가

다음 작업마다 평가 절차가 적절한지 판단하고, 데이터 누수나 입력 표현의 차이가 생기는지 근거를 적는다.

  1. 전체 자료로 StandardScaler의 fit을 실행해 표준화 기준을 구한 뒤 학습 자료와 테스트 자료로 나눴다.
  2. 대출 연체 여부를 예측하는 모델에 ‘연체 뒤 독촉 전화 횟수’ 열을 넣었다.
  3. 자료를 나누기 전에 각 행의 방 수 / 가구 수로 가구당 방 수 열을 만들었다.
  4. 테스트 성능을 확인한 뒤 결과가 더 좋아지도록 특성을 바꾸고 같은 테스트 자료로 다시 보고했다.
  5. 학습 자료로 적합한 모델은 그대로 두고, 별도 StandardScaler를 테스트 자료로 fit한 뒤 그 기준으로 변환한 테스트 자료를 모델에 넣었다.
해설 펼치기
  1. 부적절하다. 테스트 자료의 평균과 표준편차가 학습에 쓸 전처리 상태에 섞이므로 누수다.
  2. 부적절하다. 독촉 전화는 연체가 일어난 뒤에 관측되는 값이라 예측 시점에 알 수 없으므로 누수다.
  3. 적절하다. 한 행 안에서만 계산하고 자료에서 상태를 배우지 않으므로 누수가 아니다.
  4. 부적절하다. 테스트 자료를 특성 선택에 반복 사용해 최종 성능을 과대 추정하는 누수다. 선택은 검증 자료로 한다.
  5. 부적절하다. 표준화 기준도 fit으로 학습하는 상태다. 테스트 자료의 통계로 새 기준을 정하면 모델을 학습할 때와 다른 입력 표현을 사용한다. 학습 자료로 적합한 전처리의 transform만 테스트 자료에 적용해야 한다.

누수가 있어도 코드는 오류 없이 실행될 수 있다. 테스트 성능이 지나치게 높거나 배포 뒤 성능이 크게 낮아지면 전처리를 어디서 fit했는지와 예측 시점 뒤의 특성을 먼저 확인한다.

문제 4

파이프라인이 실행하는 순서

pipeline = [결측값 대체 → 표준화 → 선형 모델]이다.

  1. pipeline.fit(X_train, y_train)을 호출하면 각 단계가 어떤 순서로 무엇을 저장하는지 적는다.
  2. pipeline.predict(X_test)를 호출하면 각 단계가 무엇을 하고, 무엇을 다시 fit하지 않는지 적는다.
  3. 전처리를 손으로 따로 실행할 때 생길 수 있는 오류 하나를 적고, 파이프라인이 그 오류를 막는 이유를 적는다.
  4. 수치형 열과 범주형 열에 서로 다른 처리를 적용하려면 무엇을 쓰는지 적는다.
해설 펼치기
  1. 대체 단계가 학습 자료로 채울 값을 fit해 저장하고 변환한 결과를 넘긴다. 표준화 단계가 그 결과로 평균과 표준편차를 fit해 저장하고 변환한다. 마지막으로 모델이 변환된 학습 자료로 매개변수를 학습한다.
  2. 대체와 표준화는 저장한 상태로 transform만 하고, 모델은 저장된 매개변수로 예측값을 계산한다. 전처리 상태와 모델 매개변수는 다시 fit하지 않는다.
  3. 단계를 따로 실행하면 테스트 자료에 fit을 잘못 호출하거나 새 자료에 학습 때와 다른 변환을 적용할 수 있다. 파이프라인은 fit과 predict를 한 단위로 묶어 같은 순서와 같은 저장 상태를 사용한다.
  4. ColumnTransformer로 열을 나누어 변환한 뒤 하나의 특성 행렬로 합친다.
문제 5

특성 공학과 자료의 역할

주택 가격을 예측하는 자료에 면적, 방 수, 가구 수 열이 있다.

  1. ‘가구당 방 수’와 ‘학습 자료 평균 면적과의 차이’ 가운데 fit이 필요한 특성을 고르고, 그 상태를 어느 자료에서 정하는지 적는다.
  2. ‘학습 자료 평균 가격과의 차이’를 특성으로 넣자는 제안이 문제인 이유를 적는다.
  3. 불필요한 특성을 많이 추가했더니 학습 오차는 줄었다. 새 자료에서 어떤 일이 생길 수 있는지 적는다.
  4. 학습 자료, 검증 자료, 테스트 자료가 각각 정하는 것을 적는다.
해설 펼치기
  1. 평균 면적과의 차이다. 평균이라는 상태가 필요하므로 학습 자료에서 fit하고 파이프라인 안에 둔다. 가구당 방 수는 한 행에서 계산되어 fit이 필요 없다.
  2. 가격은 예측할 값이다. 예측할 값으로 만든 특성은 새 주택을 예측할 때 알 수 없으므로 데이터 누수다.
  3. 학습 오차는 줄어도 분산이 커져 새 자료의 오차가 커질 수 있다.
  4. 학습 자료는 전처리 상태와 모델 매개변수를, 검증 자료는 특성·모델 후보의 선택을, 테스트 자료는 선택을 마친 모델의 최종 성능을 정한다. 테스트 결과를 본 뒤 선택을 바꾸면 그 자료는 더 이상 최종 평가 자료가 아니다.