축하합니다. 유니콘 모델을 배포했습니다. 모델이 문제 없이 연중무휴 24시간 실행되어야 합니다. 이를 위해서는 머신러닝 (ML) 파이프라인을 모니터링해야 합니다.
원시 데이터를 검증하기 위한 데이터 스키마 작성
데이터를 모니터링하려면 데이터가 충족해야 하는 규칙을 작성하여 예상 통계 값과 지속적으로 비교해야 합니다. 이러한 규칙 모음을 데이터 스키마라고 합니다. 다음 단계에 따라 데이터 스키마를 정의합니다.
지형지물의 범위와 분포를 파악합니다. 범주형 특성의 경우 가능한 값 집합을 이해합니다.
이해한 내용을 데이터 스키마에 인코딩합니다. 다음은 규칙의 예입니다.
- 사용자가 제출한 평점이 항상 1~5점 범위인지 확인합니다.
- 영어 텍스트 기능의 경우 the라는 단어가 가장 자주 사용되는지 확인합니다.
- 각 범주형 특성이 가능한 값의 고정된 세트에서 값으로 설정되어 있는지 확인합니다.
데이터 스키마를 기준으로 데이터를 테스트합니다. 스키마는 다음과 같은 데이터 오류를 포착해야 합니다.
- 이상치
- 범주형 변수의 예기치 않은 값
- 예기치 않은 데이터 분포
단위 테스트를 작성하여 특성 추출 검증
원시 데이터가 데이터 스키마를 통과할 수 있지만 모델은 원시 데이터로 학습하지 않습니다. 대신 모델은 기능 엔지니어링된 데이터를 학습합니다. 예를 들어 모델은 원시 숫자 데이터가 아닌 정규화된 숫자 특성을 바탕으로 학습합니다. 기능 엔지니어링된 데이터는 원시 입력 데이터와 매우 다를 수 있으므로 원시 입력 데이터에 대한 검사와는 별도로 기능 엔지니어링된 데이터를 확인해야 합니다.
특성 추출 데이터에 대한 이해를 바탕으로 단위 테스트를 작성합니다. 예를 들어 다음과 같은 조건을 확인하는 단위 테스트를 작성할 수 있습니다.
- 모든 숫자 특성은 예를 들어 0과 1 사이로 조정됩니다.
- 원-핫 인코딩된 벡터는 1과 N-1개의 0만 포함합니다.
- 변환 후 데이터 분포가 예상과 일치합니다. 예를 들어 Z 점수를 사용하여 정규화한 경우 Z 점수의 평균은 0이어야 합니다.
- 외부값은 확대/축소 또는 자르기와 같이 처리됩니다.
중요한 데이터 슬라이스의 측정항목 확인
전체가 성공하면 실패한 하위 집합이 가려질 수 있습니다. 즉, 전반적인 측정항목이 우수한 모델이라도 특정 상황에서는 좋지 않은 예측을 할 수 있습니다. 예를 들면 다음과 같습니다.
유니콘 모델이 전반적으로는 우수한 성능을 보이지만 사하라 사막에 대한 예측을 수행할 때는 성능이 저조합니다.
전반적으로 우수한 AUC에 만족하는 엔지니어라면 사하라 사막에서 모델의 문제를 발견하지 못할 수도 있습니다. 모든 리전에서 정확한 예측을 하는 것이 중요한 경우 모든 리전의 실적을 추적해야 합니다. 사하라 사막에 해당하는 데이터 하위 집합과 같은 데이터 하위 집합을 데이터 슬라이스라고 합니다.
관심 있는 데이터 슬라이스를 식별합니다. 그런 다음 이러한 데이터 슬라이스의 모델 측정항목을 전체 데이터 세트의 측정항목과 비교합니다. 모든 데이터 슬라이스에서 모델이 잘 작동하는지 확인하면 편향을 제거하는 데 도움이 됩니다. 자세한 내용은 공정성: 편향 평가를 참고하세요.
실제 측정항목 사용
모델 측정항목은 모델의 실제 효과를 반드시 측정하지는 않습니다. 예를 들어 하이퍼파라미터를 변경하면 모델의 AUC가 증가할 수 있지만 변경사항이 사용자 환경에 어떤 영향을 미쳤을까요? 실제 영향을 측정하려면 별도의 측정항목을 정의해야 합니다. 예를 들어 모델의 사용자를 대상으로 설문조사를 실시하여 모델이 예측한 대로 유니콘을 실제로 보았는지 확인할 수 있습니다.
학습-제공 편향 확인
학습-제공 편향은 학습 중의 입력 데이터가 제공 중의 입력 데이터와 다르다는 것을 의미합니다. 다음 표에서는 중요한 두 가지 왜곡 유형을 설명합니다.
유형 | 정의 | 예 | 솔루션 |
---|---|---|---|
스키마 왜곡 | 학습 및 제공 입력 데이터가 동일한 스키마를 준수하지 않습니다. | 모델이 이전 데이터로 계속 학습하는 동안 제공 데이터의 형식 또는 분포가 변경됩니다. | 동일한 스키마를 사용하여 학습 데이터와 제공 데이터의 유효성을 검사합니다. 누락된 값의 비율과 같이 스키마에서 확인하지 않는 통계는 별도로 확인합니다. |
특성 편향 | 엔지니어링된 데이터는 학습과 제공 간에 다릅니다. | 학습과 제공 간에 특성 엔지니어링 코드가 다르므로 엔지니어링된 데이터가 다르게 생성됩니다. | 스키마 편향과 마찬가지로 학습 및 처리된 데이터 제공 전반에 동일한 통계 규칙을 적용합니다. 감지된 왜곡된 특성의 수와 특성당 왜곡된 예시의 비율을 추적합니다. |
학습-서빙 편향의 원인은 미묘할 수 있습니다. 항상 예측 시 모델에 사용할 수 있는 데이터를 고려하세요. 학습 중에 제공 시 사용할 수 있는 기능만 사용하세요.
연습문제: 이해도 확인
온라인 상점을 운영하고 있으며 특정 날짜에 얼마나 많은 수익을 올릴지 예측하려고 한다고 가정해 보겠습니다. ML 목표는 고객 수를 특성으로 사용하여 일일 수익을 예측하는 것입니다.
정답: 문제는 당일 판매가 완료되기 전 예측 시점에 고객 수를 알 수 없다는 점입니다. 따라서 이 기능이 일일 수익을 강하게 예측하더라도 유용하지 않습니다. 이와 관련하여 모델을 학습하고 놀라운 평가 측정항목 (예: 0.99 AUC)을 얻은 경우 라벨에 영향을 줄 수 있는 이러한 유형의 기능을 찾습니다.
라벨 유출 확인
라벨 유출은 예측하려는 정답 라벨이 의도치 않게 학습 특성에 입력되었음을 의미합니다. 라벨 유출은 감지하기 매우 어려운 경우가 있습니다.
연습문제: 이해도 확인
신규 병원 환자에게 암이 있는지 여부를 예측하는 이진 분류 모델을 빌드한다고 가정해 보겠습니다. 모델이 다음과 같은 기능을 사용합니다.
- 환자 연령
- 환자 성별
- 이전 질병
- 병원 이름
- 생체 신호
- 테스트 결과
- 유전
라벨은 다음과 같습니다.
- 불리언: 환자에게 암이 있나요?
데이터를 신중하게 분할하여 학습 세트가 검증 세트 및 테스트 세트와 확실히 분리되도록 합니다. 모델이 검증 세트와 테스트 세트에서 매우 우수한 성능을 보입니다. 측정항목이 훌륭합니다. 안타깝게도 이 모델은 실제 신규 환자에 대해 매우 좋지 않은 성능을 보입니다.
정답: 모델의 특성 중 하나는 병원 이름입니다. 특정 병원은 암 치료를 전문으로 합니다. 학습 과정에서 모델은 특정 병원에 배정된 환자가 암에 걸릴 가능성이 매우 높다는 것을 빠르게 학습했습니다. 따라서 병원 이름이 가중치가 높은 특징이 되었습니다.
추론 시 대부분의 환자는 아직 병원에 배정되지 않았습니다. 결국 모델의 목적은 암의 유무를 진단한 후 그 진단을 사용하여 환자를 적절한 병원에 배정하는 것이었습니다. 따라서 추론 중에 병원 이름 기능을 아직 사용할 수 없었고 모델은 다른 기능에 의존해야 했습니다.
파이프라인 전반에서 모델 노화 모니터링
게재 데이터가 시간 경과에 따라 변화하지만 모델이 정기적으로 재학습되지 않으면 모델 품질이 저하됩니다. 새 데이터로 모델이 재학습된 후 경과한 시간을 추적하고 알림의 임곗값을 설정합니다. 서빙 시 모델의 경과 시간을 모니터링하는 것 외에도 파이프라인 전체에서 모델의 경과 시간을 모니터링하여 파이프라인 중단을 포착해야 합니다.
모델 가중치와 출력이 수치적으로 안정적인지 테스트
모델 학습 중에는 가중치와 레이어 출력이 NaN(숫자가 아님) 또는 Inf (무한대)이면 안 됩니다. 가중치 및 레이어 출력의 NaN 및 Inf 값을 확인하는 테스트를 작성합니다. 또한 레이어의 출력 중 절반 이상이 0이 아닌지 테스트합니다.
모델 성능 모니터링
유니콘 출현 예측 도구가 예상보다 인기가 높았습니다. 예측 요청이 많고 학습 데이터가 더 많이 있습니다. 모델을 학습하는 데 점점 더 많은 메모리와 시간이 소요된다는 사실을 깨닫기 전까지는 괜찮다고 생각합니다. 다음 단계에 따라 모델의 성능을 모니터링하기로 합니다.
- 코드, 모델, 데이터 버전별로 모델 성능을 추적합니다. 이러한 추적을 통해 성능 저하의 정확한 원인을 파악할 수 있습니다.
- 새 모델 버전의 초당 학습 단계를 이전 버전과 고정된 임곗값을 기준으로 테스트합니다.
- 메모리 사용량의 임곗값을 설정하여 메모리 누수를 포착합니다.
- API 응답 시간을 모니터링하고 백분율을 추적합니다. API 응답 시간은 개발자가 제어할 수 없지만 응답 속도가 느려 실측 측정항목이 저하될 수 있습니다.
- 초당 응답된 쿼리 수를 모니터링합니다.
게재된 데이터에서 실시간 모델의 품질 테스트
모델을 검증했습니다. 하지만 유니콘 동작과 같은 실제 시나리오가 유효성 검사 데이터를 기록한 후에 변경되면 어떻게 해야 할까요? 그러면 제공되는 모델의 품질이 저하됩니다. 그러나 실제 데이터에 항상 라벨이 지정되는 것은 아니므로 게재의 품질을 테스트하기는 어렵습니다. 게재 데이터에 라벨이 지정되지 않은 경우 다음 테스트를 고려하세요.
예측에 통계적 편향이 유의미하게 나타나는 모델을 조사합니다. 분류: 예측 편향을 참고하세요.
모델의 실제 측정항목을 추적합니다. 예를 들어 스팸을 분류하는 경우 예측을 사용자 신고 스팸과 비교합니다.
일부 쿼리에 새 모델 버전을 제공하여 학습 데이터와 제공 데이터 간의 잠재적 불일치를 완화합니다. 새 게재 모델을 검증할 때 모든 쿼리를 새 버전으로 점진적으로 전환합니다.
이러한 테스트를 사용하여 예측 품질의 갑작스러운 저하와 느린 저하를 모두 모니터링해야 합니다.
임의 순서로 선택
데이터 생성 파이프라인을 재현 가능하게 만듭니다. 특성을 추가하여 모델 품질에 미치는 영향을 확인하려고 한다고 가정해 보겠습니다. 공정한 실험을 위해 데이터 세트는 이 새로운 기능을 제외하고 동일해야 합니다. 따라서 데이터 생성에서 무작위 처리를 결정론적으로 실행할 수 있는지 확인합니다.
- 랜덤 숫자 생성기 (RNG)의 시드를 설정합니다. 시드를 설정하면 RNG를 실행할 때마다 동일한 순서로 동일한 값을 출력하여 데이터 세트를 다시 만듭니다.
- 불변 해시 키를 사용합니다. 해싱은 데이터를 분할하거나 샘플링하는 일반적인 방법입니다. 각 예시를 해싱하고 결과 정수를 사용하여 예시를 배치할 분할을 결정할 수 있습니다. 해시 함수의 입력은 데이터 생성 프로그램을 실행할 때마다 변경되어서는 안 됩니다. 해시에서 현재 시간 또는 랜덤 숫자를 사용하지 마세요. 예를 들어 주문형으로 해시를 다시 만들려는 경우
위의 접근 방식은 데이터 샘플링과 분할 모두에 적용됩니다.
해싱 고려사항
검색어를 수집하고 해싱을 사용하여 검색어를 포함하거나 제외한다고 가정해 보겠습니다. 해시 키가 쿼리만 사용한 경우 여러 날의 데이터에서 해당 쿼리를 항상 포함하거나 항상 제외합니다. 쿼리를 항상 포함하거나 항상 제외하는 것은 좋지 않습니다. 그 이유는 다음과 같습니다.
- 학습 세트에는 쿼리가 덜 다양하게 표시됩니다.
- 평가 세트는 학습 데이터와 겹치지 않으므로 인위적으로 어렵습니다. 실제로 게재 시 학습 데이터에서 일부 실시간 트래픽을 확인할 수 있으므로 평가에 이를 반영해야 합니다.
대신 쿼리 + 날짜를 해싱하면 매일 다른 해싱이 생성됩니다.