프로덕션 ML 시스템: 파이프라인 모니터링

축하합니다. 유니콘 모델을 배포했습니다. 모델이 문제없이 연중무휴로 실행되어야 합니다. 이를 보장하려면 머신러닝 (ML) 파이프라인을 모니터링해야 합니다.

원시 데이터를 검증하는 데이터 스키마 작성

데이터를 모니터링하려면 데이터가 충족해야 하는 규칙을 작성하여 예상 통계 값에 대해 데이터를 지속적으로 확인해야 합니다. 이러한 규칙 모음을 데이터 스키마라고 합니다. 다음 단계에 따라 데이터 스키마를 정의합니다.

  1. 기능의 범위와 분포를 파악합니다. 범주형 특성의 경우 가능한 값의 집합을 이해합니다.

  2. 이해한 내용을 데이터 스키마에 인코딩합니다. 다음은 규칙의 예시입니다.

    • 사용자가 제출한 평점이 항상 1~5 범위에 있는지 확인합니다.
    • the라는 단어가 가장 자주 사용되는지 확인합니다 (영어 텍스트 기능의 경우).
    • 각 범주형 특성이 가능한 값의 고정된 집합에서 값으로 설정되어 있는지 확인합니다.
  3. 데이터를 데이터 스키마에 대해 테스트합니다. 스키마는 다음과 같은 데이터 오류를 포착해야 합니다.

    • 이상치
    • 범주형 변수의 예기치 않은 값
    • 예상치 못한 데이터 분포

단위 테스트를 작성하여 특성 추출 검증

원시 데이터가 데이터 스키마를 통과할 수 있지만 모델은 원시 데이터를 기반으로 학습하지 않습니다. 대신 모델은 특징 엔지니어링된 데이터를 기반으로 학습합니다. 예를 들어 모델은 원시 숫자 데이터가 아닌 정규화된 숫자 특성을 기반으로 학습됩니다. 특성 엔지니어링된 데이터는 원시 입력 데이터와 매우 다를 수 있으므로 원시 입력 데이터에 대한 검사와 별도로 특성 엔지니어링된 데이터를 검사해야 합니다.

특성 추출된 데이터에 대한 이해를 바탕으로 단위 테스트를 작성합니다. 예를 들어 다음과 같은 조건을 확인하는 단위 테스트를 작성할 수 있습니다.

  • 모든 숫자 특성은 0과 1 사이로 조정됩니다.
  • 원-핫 인코딩 벡터에는 1이 하나만 있고 0이 N-1개 있습니다.
  • 변환 후 데이터 분포가 예상과 일치합니다. 예를 들어 Z 점수를 사용하여 정규화한 경우 Z 점수의 평균은 0이어야 합니다.
  • 이상치스케일링 또는 클리핑과 같은 방식으로 처리됩니다.

중요한 데이터 슬라이스의 측정항목 확인

성공적인 전체가 때로는 성공하지 못한 하위 집합을 가리기도 합니다. 즉, 전반적인 측정항목이 우수한 모델이라도 특정 상황에서는 끔찍한 예측을 할 수 있습니다. 예를 들면 다음과 같습니다.

유니콘 모델은 전반적으로 성능이 좋지만 사하라 사막을 예측할 때는 성능이 좋지 않습니다.

전반적으로 우수한 AUC에 만족하는 엔지니어라면 사하라 사막에서 모델의 문제를 알아차리지 못할 수도 있습니다. 모든 지역에 대해 정확한 예측을 하는 것이 중요한 경우 모든 지역의 실적을 추적해야 합니다. 사하라 사막에 해당하는 데이터와 같은 데이터 하위 집합을 데이터 슬라이스라고 합니다.

관심 있는 데이터 슬라이스를 식별합니다. 그런 다음 이러한 데이터 슬라이스의 모델 측정항목을 전체 데이터 세트의 측정항목과 비교합니다. 모델이 모든 데이터 슬라이스에서 우수한 성능을 보이는지 확인하면 편향을 제거하는 데 도움이 됩니다. 자세한 내용은 공정성: 편향 평가를 참고하세요.

실제 측정항목 사용

모델 측정항목이 모델의 실제 영향을 반드시 측정하는 것은 아닙니다. 예를 들어 하이퍼 매개변수를 변경하면 모델의 AUC가 증가할 수 있지만 변경사항이 사용자 환경에 어떤 영향을 미쳤나요? 실제 영향을 측정하려면 별도의 측정항목을 정의해야 합니다. 예를 들어 모델이 유니콘을 본다고 예측한 경우 모델 사용자에게 설문조사를 실시하여 실제로 유니콘을 보았는지 확인할 수 있습니다.

학습-서빙 편향 확인

학습-제공 편향은 학습 중의 입력 데이터가 제공 시의 입력 데이터와 다르다는 의미입니다. 다음 표에서는 두 가지 중요한 유형의 기울기를 설명합니다.

유형 정의 솔루션
스키마 왜곡 학습 및 제공 입력 데이터가 동일한 스키마를 준수하지 않습니다. 모델이 이전 데이터로 계속 학습하는 동안 서빙 데이터의 형식이나 분포가 변경됩니다. 동일한 스키마를 사용하여 학습 데이터와 제공 데이터의 유효성을 검사합니다. 누락된 값의 비율과 같이 스키마에서 확인하지 않는 통계를 별도로 확인해야 합니다.
특성 편향 엔지니어링된 데이터가 학습과 제공 간에 다릅니다. 학습과 제공 간에 특성 엔지니어링 코드가 달라 엔지니어링된 데이터가 다릅니다. 스키마 편향과 마찬가지로 학습 및 제공 엔지니어링 데이터에 동일한 통계 규칙을 적용합니다. 감지된 편향된 특성의 수와 특성당 편향된 예의 비율을 추적합니다.

학습-서빙 편향의 원인은 미묘할 수 있습니다. 예측 시 모델에서 사용할 수 있는 데이터를 항상 고려하세요. 학습 중에는 제공 시 사용할 수 있는 기능만 사용하세요.

연습: 학습 내용 점검하기

온라인 상점을 운영하고 있으며 특정 날짜에 얼마나 많은 수익을 올릴지 예측하고 싶다고 가정해 보겠습니다. ML 목표는 고객 수를 특성으로 사용하여 일일 수익을 예측하는 것입니다.

어떤 문제가 발생할 수 있나요?
답을 보려면 여기를 클릭하세요.

라벨 누수 확인

라벨 유출은 예측하려는 정답 라벨이 실수로 학습 기능에 입력되었음을 의미합니다. 라벨 누수는 감지하기가 매우 어려울 때가 있습니다.

연습: 학습 내용 점검하기

새 병원 환자가 암에 걸렸는지 여부를 예측하는 이진 분류 모델을 빌드한다고 가정해 보겠습니다. 모델에서 다음과 같은 기능을 사용합니다.

  • 환자 연령
  • 환자 성별
  • 이전 질병
  • 병원 이름
  • 생체 신호
  • 테스트 결과
  • 유전

라벨은 다음과 같습니다.

  • 불리언: 환자가 암에 걸렸는지 여부

학습 세트가 검증 세트 및 테스트 세트와 잘 분리되도록 데이터를 신중하게 파티셔닝합니다. 모델이 검증 세트와 테스트 세트에서 매우 우수한 성능을 보입니다. 측정항목이 매우 좋습니다. 안타깝게도 이 모델은 실제 환경에서 새로운 환자에 대해 형편없는 성능을 보입니다.

테스트 세트에서 뛰어난 성능을 보인 이 모델이 실제 환경에서는 왜 형편없는 성능을 보였을까요?
답을 보려면 여기를 클릭하세요.

파이프라인 전체에서 모델 수명 모니터링

제공 데이터가 시간에 따라 진화하지만 모델이 정기적으로 재학습되지 않으면 모델 품질이 저하됩니다. 모델이 새 데이터로 재학습된 후 경과된 시간을 추적하고 알림의 기준 연령을 설정합니다. 서빙 시 모델의 기간을 모니터링하는 것 외에도 파이프라인 정체를 포착하기 위해 파이프라인 전체에서 모델의 기간을 모니터링해야 합니다.

모델 가중치와 출력이 수치적으로 안정적인지 테스트

모델 학습 중에 가중치와 레이어 출력이 NaN(숫자가 아님) 또는 Inf (무한대)가 되면 안 됩니다. 가중치와 레이어 출력의 NaN 및 Inf 값을 확인하는 테스트를 작성합니다. 또한 레이어 출력의 절반 이상이 0이 아닌지 테스트합니다.

모델 성능 모니터링

유니콘 출현 예측 도구가 예상보다 인기가 많습니다. 예측 요청이 많아지고 학습 데이터도 훨씬 많아집니다. 모델 학습에 필요한 메모리와 시간이 점점 늘어난다는 사실을 깨닫기 전까지는 괜찮다고 생각할 수 있습니다. 다음 단계에 따라 모델의 성능을 모니터링하기로 결정합니다.

  • 코드, 모델, 데이터 버전을 기준으로 모델 성능을 추적합니다. 이러한 추적을 통해 성능 저하의 정확한 원인을 파악할 수 있습니다.
  • 새 모델 버전의 초당 학습 단계를 이전 버전 및 고정된 기준과 비교하여 테스트합니다.
  • 메모리 사용량의 임곗값을 설정하여 메모리 누수를 포착합니다.
  • API 응답 시간을 모니터링하고 백분위수를 추적합니다. API 응답 시간은 제어할 수 없지만 응답이 느리면 실제 측정항목이 좋지 않을 수 있습니다.
  • 초당 답변된 질문 수를 모니터링합니다.

제공된 데이터에서 실시간 모델의 품질 테스트

모델을 검증했습니다. 하지만 유니콘 동작과 같은 실제 시나리오가 검증 데이터를 기록한 후에 변경되면 어떻게 해야 할까요? 그러면 제공된 모델의 품질이 저하됩니다. 하지만 실제 데이터에는 라벨이 지정되지 않는 경우가 많기 때문에 제공 시 품질을 테스트하기는 어렵습니다. 게재 데이터에 라벨이 지정되지 않은 경우 다음 테스트를 고려하세요.

  • 사람 평가자를 사용하여 라벨을 생성합니다.

  • 예측에서 통계적으로 유의미한 편향을 보이는 모델을 조사합니다. 분류: 예측 편향을 참고하세요.

  • 모델의 실제 측정항목을 추적합니다. 예를 들어 스팸을 분류하는 경우 예측을 사용자 신고 스팸과 비교합니다.

  • 일부 쿼리에 새 모델 버전을 제공하여 학습 데이터와 서빙 데이터 간의 잠재적 차이를 완화합니다. 새 제공 모델을 검증하면서 모든 쿼리를 새 버전으로 점진적으로 전환합니다.

이러한 테스트를 사용하여 예측 품질의 갑작스러운 저하와 느린 저하를 모두 모니터링해야 합니다.

임의 순서로 선택

데이터 생성 파이프라인을 재현 가능하게 만드세요. 모델 품질에 미치는 영향을 확인하기 위해 기능을 추가한다고 가정해 보겠습니다. 공정한 실험을 위해 데이터 세트는 이 새로운 기능을 제외하고 동일해야 합니다. 이러한 정신에 따라 데이터 생성의 무작위성이 결정론적으로 이루어질 수 있는지 확인하세요.

  • 난수 생성기 (RNG)를 시드합니다. 시딩을 사용하면 데이터 세트를 다시 만들 때마다 RNG가 동일한 순서로 동일한 값을 출력합니다.
  • 불변 해시 키를 사용합니다. 해싱은 데이터를 분할하거나 샘플링하는 일반적인 방법입니다. 각 예시를 해싱하고 결과 정수를 사용하여 예시를 배치할 분할을 결정할 수 있습니다. 데이터 생성 프로그램을 실행할 때마다 해시 함수의 입력이 변경되면 안 됩니다. 예를 들어 필요할 때 해시를 다시 만들려면 해시에 현재 시간이나 난수를 사용하지 마세요.

앞의 방법은 데이터 샘플링과 분할 모두에 적용됩니다.

해싱 고려사항

검색어를 수집하고 해싱을 사용하여 검색어를 포함하거나 제외한다고 다시 가정해 보겠습니다. 해시 키가 쿼리만 사용한 경우 여러 날짜의 데이터에서 해당 쿼리를 항상 포함하거나 항상 제외합니다. 항상 쿼리를 포함하거나 항상 제외하는 것은 다음과 같은 이유로 좋지 않습니다.

  • 학습 세트에는 다양한 쿼리가 표시되지 않습니다.
  • 평가 세트는 학습 데이터와 중복되지 않으므로 인위적으로 어려워집니다. 실제로 제공 시에는 학습 데이터에 일부 실시간 트래픽이 표시되므로 평가에 이를 반영해야 합니다.

대신 쿼리 + 쿼리 날짜를 해싱하면 매일 다른 해싱이 생성됩니다.

그림 7. 쿼리만 해싱하면 매일 데이터가 동일한 버킷으로 이동하지만 쿼리와 쿼리 시간을 해싱하면 매일 데이터가 다른 버킷으로 이동하는 방식을 보여주는 애니메이션 시각화 세 가지 버킷은 학습, 평가, 무시입니다.
그림 7. 쿼리 해싱과 쿼리 + 쿼리 날짜 해싱의 차이