여기서는 모델 배포 이후에 모델을 지속적으로 모니터링하는 방법과 프로덕션 환경에서 모델이 지속적으로 성능이 떨어지는 이유에 대해 알아보고 해결하는 방법까지 살펴보자.

 

머신러닝 시스템 장애 원인

머신러닝 시스템에서는 기본적인 전통 소프트웨어에서 발생하는 장애와 추가로 ML 에서 발생하는 장애로 나눠서 살펴봐야함.

  • 장애 유형은 크게 소프트웨어 관련 장애와 ML 장애로 나눌 수 있음.

 

소프트웨어 관련 장애

ML 과 관련이 없는 장애를 말한다.

 

구글에서 발표한 자료에 의하면 이 지표가 대부분을 차지하기도 한다고 함. 그러므로 꽤 중요하다.

 

주로 발생하는 장애는 분산 시스템과 관련된 지표나 데이터 파이프라인과 관련된 장애를 말함.

 

분산 시스템 관련 장애:

  • ML 시스템을 구축할 때, 시스템의 요구에 따라 서버를 추가하거나 제거하는 스케일링 문제. 분산 환경에서는 여러 노드 간의 조율과 로드 밸런싱이 중요함.
  • 데이터가 여러 노드 간에 이동하는 과정에서 네트워크 지연이 발생할 수 있음. 특히 대규모 데이터셋을 처리하거나 여러 서비스 간의 통신이 필요한 경우, 지연으로 인해 전체 시스템의 성능이 저하될 수 있다.
  • 분산 시스템에서는 데이터 복제와 동기화가 중요함. 데이터 파이프라인을 통해 여러 소스로부터 데이터를 수집할 때, 일관성이 유지되지 않으면 예측 결과에 영향을 미칠 수 있음.

 

데이터 파이프라인과 관련된 장애:

  • 데이터 파이프라인에서 수집된 데이터가 손상되거나 불완전할 경우, 머신러닝 모델의 훈련 및 예측에 부정적인 영향을 줄 수 있음. 잘못된 데이터로 인한 모델의 오류를 방지하기 위해서는 데이터 품질 검증이 중요하다.
  • 데이터 파이프라인의 속도와 효율성이 낮으면 모델 훈련 및 예측 시간이 늘어날 수 있다. 특히 실시간 예측을 제공하는 시스템에서는 데이터 파이프라인의 처리 시간이 중요한 요소임.
  • 데이터 소스가 변경되거나 새로운 데이터 형식이 도입되는 경우, 데이터 파이프라인을 수정해야 함. 이 과정에서 코드 변경이나 시스템 재구성이 필요할 수 있으며, 이는 시스템의 안정성에 영향을 줄 수 있음.

이런 장애가 발생하는 이유로는 ML 프로덕션을 지원하는 인프라와 도구나 모범 사례가 아직 잘 구축되지 않아서라고 함.

 

좀 더 자료를 찾아보고 싶다면 신뢰도 높은 머신러닝 을 보라고 함.

 

 

Q) 데이터 파이프라인의 속도가 느린게 모델 예측 시간은 왜 연관이 있어? 모델 훈련 시간과만 연관이 있는거 아니야?

 

모델 실시간 예측을 동기식으로 하는게 아니라 파이프라인을 통해 받아오고 비동기식으로 하는 경우가 있음.

 

모델이 실시간으로 예측을 제공하는 경우, 데이터 파이프라인을 통해 데이터를 실시간으로 받아와야 함. 파이프라인의 속도가 느리면 필요한 데이터가 제때 모델에 전달되지 않아 예측에 지연이 발생할 수 있음.

 

 

ML 관련 장애

여러가지 장애 요인이 있음:

  • 데이터 수집과 처리에 문제가 있는 경우
  • 하이퍼파라미터에 문제가 있는 경우
  • 추론 파이프라인의 변경 사항이 학습 파이프라인에 제대로 복사되지 않은 경우
  • 데이터 분포 시프트로 시간에 따라서 데이터가 변경되서 모델의 성능이 떨어지는 경우
  • 에지 케이스 문제
  • 퇴행성 피드백 루프 문제

 

여기서는 데이터 분포 시프트와 에지 케이스 문제 그리고 퇴행성 피드백 루프에 대해서만 살펴봄. 그외의 것들은 이전에 살펴본 적이 있으니까 생략.

 

 

프로덕션 환경 데이터와 훈련 데이터가 다른 경우 (데이터 분포 시프트)

ML 시스템은 학습한 데이터로 훈련을 해서 일반화를 하는 능력을 갖추면 새로운 데이터를 예측할 수 있다는 거다.

 

이 가정에는 새로운 데이터 조차도 학습 데이터와 같은 분포에서 등장한다는 가정이 깔려있는거임. 분포 자체가 달라지게 된다면 ML 시스템은 정상적으로 작동하지 않을 것.

 

그리고 프로덕션의 데이터는 시간에 따라서 계속해서 변화하기도 하며, 훈련 데이터 셋이 프로덕션 데이터와 유사하게 맞추는 것은 매우매우 어렵다. (변형이 정말 무한하기 때문에)

 

 

Q) 훈련 데이터 셋을 프로덕션 데이터에 맞게 큐레이팅 하는 건 정말 어렵다고 하잖아. 그럼 현실에 있는 데이터를 사용하는게 아니라 현실에 있을법한 데이터를 가상으로 만들어서 사용하는 방식은 유용해?

 

이점도 있지만 어려운 점도 있다:

 

이점:

  • 데이터 다양성: 가상 데이터를 사용하면, 현실에 존재하지 않는 다양한 상황과 조건을 모의할 수 있다. 이를 통해 모델이 다양한 데이터 분포에 대해 훈련될 수 있음.
  • 데이터 확장: 가상 데이터는 제한된 양의 실제 데이터를 확장할 수 있다. 특히 데이터가 희소하거나 제한된 경우 유용하다.
  • 데이터 보안 및 프라이버시: 가상 데이터를 사용하면 실제 데이터의 민감한 정보를 보호하면서도 모델을 훈련할 수 있다.

 

도전:

  • 데이터 현실성: 가상 데이터가 현실 세계의 복잡성과 특성을 충분히 반영하지 못하면, 모델이 실제 환경에서 부정확하거나 예측력이 떨어질 수 있다.
  • 분포 일치: 가상 데이터가 프로덕션 데이터의 분포를 정확히 모방해야 합니다. 그렇지 않으면 공변량 시프트 또는 레이블 시프트가 발생할 수 있다.
  • 리소스 및 비용: 가상 데이터를 생성하거나 시뮬레이션하기 위해서는 추가적인 리소스와 비용이 필요할 수 있다. 데이터 생성 기술이나 시뮬레이션 도구가 필요한 경우도 있다.

 

가상 데이터를 사용할 때는 다음과 같은 전략이 도움이 될 수 있을듯:

  • 데이터 검증: 가상 데이터가 현실 데이터를 얼마나 잘 모방하고 있는지 검증해야 함.
  • 모델 검증: 생성된 데이터를 사용하여 훈련된 모델을 실제 데이터에 적용하여 모델의 성능을 확인해야 함.
  • 다양한 데이터 생성 기법 활용: 가상 데이터를 생성할 때, 여러 기법을 사용하여 다양하고 현실적인 데이터를 만들어야함.

 

실제로 이런 기법들이 있다. 이전에 살펴본 데이터 증강 (Data Augmentation) 도 이런 방법이고, 합성 데이터 생성(Synthetic Data Generation) 도 생성 모델을 사용해서 다양한 데이터 유형을 생성하는 것도 이런 방법임.

 

 

에지 케이스 문제

엄청 희소한 학률로 발생하는 데이터에 의해서 모델이 예측을 잘 하지 못하고 장애가 발생하는 문제를 말한다.

 

이런 문제는 특히 자율주행과 같은 시스템에서 크게 문제가 될 수 있음.

 

 

 

Q) ML 시스템이 엣지 케이스 문제를 해결하려면 어떻게 해야해? 엣지 케이스는 데이터도 별로 없는데

 

근본적인 문제인 엣지 케이스 데이터를 확보하는 것은 충분한 도움이 된다.

 

아니면 모델의 앙상블 기법을 하는 것도 일반화 능력이 올라가는거니까 엣지 케이스에서도 도움이 될 수 있다고 함.

 

 

퇴행성 피드백 루프

모델이 예측한 게 피드백으로 학습되는데 점점 잘못된 예측으로 치우침이 생기는 문제를 말한다.

 

잘못된 데이터를 기반으로 학습하거나 부정확한 예측을 반복함으로써 모델 성능이 점진적으로 저하되는 현상을 말함.

 

추천 시스템을 기준으로 설명하면 이해하기 쉬움.

 

멜론 같은 음악 시스템이나 유튜브와 같은 추천 시스템에서 상단에 아이템을 띄어주기만하면 유저는 해당 아이템이 그렇게 큰 관심이 없더라도 눌러볼 수 있을거임.

 

누르게 되면 그거에 대한 피드백을 받아서 모델은 아! 이 아이템은 인기가 있는 거구나 해서 계속해서 상단에 띄울려고 노력할거고 치우침이 생기는거지.

 

그래서 모델의 예측이 단조로워지는 문제가 발생한다.

 

 

Q) 퇴행성 피드백 루프 문제를 해결하는 방법은?

 

틱톡의 경우에는 테스트 기간을 거쳐서 올라오는 동영상은 노출을 어느정도 해준다고 한다.

 

그 기간이 끝난 이후에 점수를 반영해서 더 인기있는 영상으로 판단할지 아닐지를 분류한다고 함.

 

이 방식의 문제점은 인기 없는 영상을 사용자에게 노출하니까 UX 가 떨어지는 문제가 발생한다고 하는데, 이를 어느정도 해결하는 밴딧 알고리즘이 있다는 듯.

 

또 다른 방법은 위치 피처를 두는 거. 아무래도 위치에 따라서 사용자가 클릭을 하는 경향이 있으니 이 정보를 데이터로 만들어서 학습 시키는거지.

 

최상단에 노출된 적이 있다면 해당 클릭은 가중치를 좀 낮게 반영한다던지.

 

 

데이터 분포 시프트

ML 의 데이터 분포 시프트 문제는 학습에 사용된 원본 데이터 분포와 추론에 사용되는 데이터 분포인 대상 분포가 달려져서 생기는거임.

 

데이터 분포 유형 시프트로는 여러가지가 있는데 다음 3가지에 대해 알아보자.

  • 공변량 시프트 (Covariate Shift)
  • 레이블 시프트 (Label Shift)
  • 개념 드리프트 (Concept Drift)

 

공변량 시프트 (Covariate Shift)

입력 변수의 분포가 변화하지만 출력 변수와의 조건부 분포는 변하지 않는 경우를 의미한다.

 

예를 들어, 모델을 학습할 때 사용된 입력 데이터와 실제 추론 시 사용하는 입력 데이터의 분포가 달라지는 것이지만 출력 변수, 즉 레이블이나 타겟 값과 입력 변수 간의 관계는 변하지 않는 것을 말한다.

 

그러니까 입력 데이터의 분포가 달라지니까 그거에 맞춰서 학습되서 추론을 해야하는데 그러지 못하고 있으니 출력의 정확도가 떨어질 수 있다는 문제임.

 

 

Q) 그런데 ML 이라는 시스템이 원래는 학습한 데이터로 일반화를 해서 새로운 데이터에 적용을 하는 방식이잖아. 그래서 입력 데이터가 달라지는것에 대해 문제가 없다고 생각하는데? 공변량 시프트의 문제는 너무 데이터가 달라지는 경우를 말하는건가?

 

맞다. 머신러닝 시스템은 학습한 데이터로부터 일반화하는 것이 기본 개념임.

 

이를 통해 새로운 데이터에도 적용할 수 있게 됨.

 

그러나 공변량 시프트는 데이터 분포의 변화가 일반화의 범위를 넘어설 정도로 크거나 예상치 못한 변화를 포함할 때 문제가 된다.

 

학습 데이터와 추론 데이터의 분포가 크게 달라질 수 있는게 문제다.

 

이 경우, 모델이 학습 과정에서 익힌 패턴이 새로운 데이터의 특성과 부합하지 않을 수 있다.

 

 

Q) 그러니까 예를 들면 유방암 예측 시스템에서 40대 이상의 여자들을 대상으로 학습을 했지만 실제 프로덕션 환경에서는 20~30 대 데이터로 추론을 하는 경우가 공변량 시프트겠네?

 

맞다.

 

유방암 예측 시스템이 40대 이상의 여성 데이터를 바탕으로 학습된 경우, 이 시스템은 해당 연령대의 특징과 패턴에 최적화되어 있을 건데, 프로덕션 환경에서 20대와 30대의 데이터를 기반으로 추론을 한다면, 이는 공변량 시프트가 발생한 상황이라고 볼 수 있다.

  • 유방암 예측 시스템의 경우에는 학습 데이터가 40대 이상일 확률이 많을 수 밖에 없음. 이 나이쯤 가면 받아야 한다고 알려주니까.

 

 

Q) 공변량 시프트는 해당 데이터가 별로 없어서 오버 클래스 샘플링 하는 경우에도 발생할 수 있겠네? 일부 데이터로 일반화를 하려고 하니까.

 

맞다.

 

공변량 시프트는 학습 데이터의 분포가 불균형하거나 일부 데이터에 과도하게 의존하는 경우에도 발생할 수 있다.

  • 데이터 불균형이 문제 아닌가

 

 

Q) 공변량 시프트는 능동적 학습에서도 발생할 수 있곘네? 그때는 데이터를 편향적으로 선택해서 학습하니까.

 

맞다.

 

 

Q) ML 시스템의 대상 타겟이 회사 정책으로 인해 크게 달라지는 경우에도 공변량 시프트가 발생할 수 있곘네?

 

맞다.

 

예를 들면, 모델이 무료 사용자가 유료 사용자로 예측을 하는 기능을 한다고 가정해보자. 근데 회사에서 소득이 큰 사용자를 불러들이는 켐폐인을 시작하면 기존에 학습했던 데이터와 크게 달라질 수 있으니까 공변량 시프트가 발생할 수 있음.

 

 

Q) 공변량 시프트 문제에 대응하는 방법은 새로운 데이터로 재학습을 하는거겠네?

 

맞다. 일반적인 방법 중 하나다.

 

 

 

레이블 시프트

입력 데이터의 분포는 변하지 않았지만 출력 데이터 또는 레이블의 분포가 변하는 상황을 의미한다.

 

레이블 시프트는 주로 분류 문제에서 나타나며, 학습 과정에서 가정했던 레이블 분포와 실제 추론 시의 레이블 분포 간에 차이가 있을 때 문제가 발생한다.

 

 

Q) 그러니까 학습 했을 때는 출력 레이블로 3개를 예상했지만, 시간이 지나면서 출력 레이블이 5개인 경우가 레이블 시프트 문제인거지?

 

맞다.

 

 

개념 드리프트

시간이 지남에 따라 데이터의 근본적인 패턴 또는 개념이 변화하는 현상을 말한다.

 

이 경우, 머신러닝 모델이 학습한 패턴이 더 이상 정확하거나 유효하지 않을 수 있다.

 

예를 들면 코로나 19 이전과 이후의 집 값 예측을 비교해보면 된다. 갑작스러운 코로나라는 변수에 의해서 사람들을 재택근무를 하게 되니까 집 값 가격에 영향을 주게 된다.

 

개념 드리프트가 발생하는 원인은 다양하다:

  • 시간이 흐름에 따라 데이터의 근본적인 패턴이 변경될 수도 있다. (휴가철에는 숙박비가 달라질 수 있다.)
  • 환경적 요인, 기술의 진보, 규제 변화 등이 데이터의 생성과 특성에 영향을 미칠 수 있다.
  • 회사의 비즈니스 전략이 변경되면, 고객 행동이나 제품 수요 등의 패턴이 바뀔 수 있다.

 

 

이외의 데이터 분포 시프트

피처 변화도 있음. 피처가 제거되거나, 새로운 피처가 등록되거나, 피처의 값의 범위가 달라지거나 등.

  • 현업에서는 연령 피처를 연단위에서 월 단위로 변경한 후 성능이 크게 떨어진 적이 있다고한다.

 

레이블 스키마 변화. 분류하는 클래스를 추가하는 경우 같은 것.

 

 

데이터 시프트 감지 방법

모델의 성능 지표를 통해서 성능 저하를 감지하는 방법이 있다:

  • 정확도, F1 점수, 재현율, AUC-ROC 등의 지표를 사용

 

주기적으로 모델의 그라운드 트루스 레이블과 예측 정보를 비교하면서 확인하는 방법도 있다.

 

모델 성능 모니터링으로 입력 분포나 레이블 분포 조건부 확률 분포를 체크하기도 한다: (아래의 방법인 데이터를 시계열로 구분해서 분포를 만들어서 비교하는 것과 유사한듯?)

  • 입력 분포 모니터링: 입력 데이터의 통계적 특성(예: 평균, 표준편차, 최솟값, 최댓값 등)을 모니터링하여 데이터 분포가 예상대로 유지되는지 확인한다.
  • 레이블 분포 모니터링: 예측 대상이 되는 레이블의 분포를 모니터링하여 데이터의 특성이 변하지 않았는지 확인한다.
  • 조건부 확률 분포 모니터링: 모델의 입력과 출력 사이의 조건부 확률 분포를 모니터링하여 모델이 예상대로 작동하고 있는지 확인한다.
  • 이상치 감지: 입력 데이터나 예측 결과에서 이상치를 감지하여 모델의 안정성을 평가한다.

 

통계적인 방법을 이용해서 두 분포를 비교한다:

  • 최소, 최대, 평균, 중앙값, 분산, 다양한 분위수 (e.g 5번째, 25번째, 50번째, 75번째, 95번째), 왜도, 첨도 같은 통계량을 사용해서 두 분포가 동일한지 비교함.
  • 물론 이런 통계 지표가 큰 차이가 없더라도 시프트가 발생하지 않았더라는 보장은 없다고 함. 그러나 이런 통계 지표에서 차이가 발생하면 시프트는 벌써 크게 발생한 거임. 이것보다 정교한 방법은 2-표본 가설 검증 방법이 있다고 한다. 두 모집단 간의 표본이 유의미한지 비교하는 방법이라고 함.
  • 1차원 데이터만 비교하는 거라면 KS 검정 (콜모고로프-스미노로프 검정) 을 이용하는 건 상당히 도움이 된다고 함. 다만 고차원 데이터라면 유효하지 않음. 그래서 적용하려면 차원을 줄이는게 좋기도 하다고 함. 이것 말고도 여러 비교하는 방법이 있음.
  • 통계를 통해서 분포를 비교하는 방법은 텐서플로 익스텐디드에서 내장 도구를 지원한다고 함.

 

통계 검증 방법은 이미지 참고:

 

시프트를 감지하는 방법으로 들어오는 데이터를 시계열로 구분해서 시프트를 감지하는 방법도 있음:

  • 훈련 데이터를 이용한 분포와, 모델이 추론하는 데이터를 시간별로 구분해서 시계열 데이터로 만들어서 시프트가 발생했는지 비교하는 방법임.
  • 중요한 건 시간 윈도우 사이즈에 따라서 시프트 오탐지가 될 수도 있다는 거임. 예시로 들어서 115일 까지를 시간 척도 주기로 잡고 일정한 그래프를 주기적으로 그린다고 생각해보자. 이 경우에 윈도우 사이즈를 12일로 줄이면 시프트 오탐지가 될 확률이 높음.
  • 시간 윈도우가 짧을수록 데이터 시프트 감지가 빠르지만 오탐지가 될 수 있다.
  • 시계열로 구분할 때 누적 통계와 슬라이딩 통계를 구분해야 한다고 함. 누적 통계는 전체 데이터 분포를 말하고, 슬라이딩 통계는 해당 구간 데이터 통계만 말한다. 누적 통계가 아무래도 더 느리게 시프트가 잡히겠지. 이 두 통계치를 사용하고 일정 임계값을 넘었을 때 시프트 감지를 사용하는듯.
    • 누적 통계는 장기적인 추세를 볼 수 있다.

 

 

Q) 프로덕션에 배포한 모델이 정상적으로 잘 작동하는지 검사하기 위해서 모델의 테스트 과정에서 사용한 데이터를 사용해서 주기적으로 검증해보는 과정을 수행하기도 하는가?

 

일반적으로 이렇게 하기도 한다.

 

 

Q) 1차원 데이터와 고차원 데이터의 차이는 뭐지?

 

1차원 데이터는 단일 속성을 가진 데이터로, 각 데이터 포인트가 한 가지 값만 가지는 경우를 말함.

  • 예: 온도 기록: 일주일 동안의 일일 평균 온도 데이터. 15, 18, 20, 22, 19, 17, 16

 

고차원 데이터는 여러 속성을 가진 데이터로, 데이터 포인트가 다수의 값을 가지는 경우를 말함.

  • 예: 학생 성적: 여러 과목에 대한 성적을 포함한 데이터. 학생 1: (국어: 85, 수학: 90, 영어: 78, 과학: 88), 학생 2: (국어: 76, 수학: 85, 영어: 82, 과학: 79)
  • 예: 이미지 데이터: 이미지의 픽셀 값을 나타내는 데이터. 이미지 한 장이 여러 픽셀로 구성되고 각 픽셀이 RGB 값으로 표현됨.
  • 예: 고객 프로필: 고객의 연령, 성별, 구매 기록, 거주 지역 등의 정보를 포함한 데이터. (나이: 25, 성별: 남성, 구매 횟수: 5, 지역: 서울)

 

데이터 시프트 문제 해결

일반적으로 데이터 시프트 문제를 해결하는 방법으로 가장 자주 쓰이는 건 재훈련과 대규모 데이터셋으로 학습하는 방법임.

  • 재훈련:
    • 재훈련은 크게 파인 튜닝과, 처음부터 재학습하는 것으로 나뉜다.
    • 재훈련 주기도 중요한데 지금까지는 개발자들이 감으로도 한다는듯.
    • 재훈련 주기는 모델 상황에 따라 다름. 서울 집 값 예측과 시골 집 값 예측의 재훈련 주기는 다를거니까.
  • 대규모 데이터 셋 학습:
    • 이 방법은 프로덕션에서 만날 수 있는 모든 데이터를 학습에서 커버하자는 가정이 들어있는 거임.

 

재훈련 방법 트레이드 오프 비교는 다음과 같다:

  • 파인 튜닝:
    • 일반적으로 이전 모델의 가중치를 재사용하고, 새로운 데이터로 모델을 미세 조정하여 데이터 시프트에 대응하는 방법
    • 시간 및 리소스 효율: 기존 모델을 기반으로 하기 때문에 학습 시간이 짧고, 리소스 소모가 적다.
    • 제한된 변화 적용: 파인 튜닝은 기존 모델에 기반을 두므로, 큰 데이터 시프트나 새로운 패턴에 적응하는 데 한계가 있을 수 있다.
    • 편향 유지 가능성: 기존 모델의 편향이나 오류가 파인 튜닝을 통해 유지될 수 있다.
  • 새로운 데이터로 처음부터 학습:
    • 새로운 패턴에 대한 적응: 처음부터 학습하기 때문에, 데이터 시프트로 인한 새로운 패턴이나 변화를 효과적으로 수용할 수 있다.
    • 편향 제거: 기존 모델의 편향이나 오류를 제거하고, 더 나은 모델을 구축할 수 있다.
    • 시간 및 리소스 소모: 처음부터 학습하는 과정은 시간이 오래 걸리고, 더 많은 리소스를 필요로 한다.

 

이외의 방법으로 새로운 데이터 레이블을 요구하지 않으면서도 모델 예측을 수정하는 방법이 있다:

  • 공변량 시프트와 레이블 시프트를 감지하고, 모델의 예측을 수정하거나 보안하는 방법임. 이 방법으로 커널 임베딩과 인과적 해석을 쓴다고 한다.
  • 아직 업계에서는 널리 사용되는 방법은 아니라고 함.

 

모니터링과 관찰 가능성

모니터링과 관찰 가능성 비교:

  • 모니터링은 시스텝 지표를 수집하는 것임. 비정상적으로 작동함을 판단할 수 있도록.
  • 관찰 가능성은 지표를 수집할 수 있도록 가시성을 제공하는 것

 

ML 에서 관찰 가능성을 주는 방법 (이 프로세스를 instrumentation 이라고 함):

  • 타이머 추가하기: 타이머를 추가하여 시스템 내에서 각 단계의 처리 시간을 측정하는 것.
  • 피처의 NaN 개수 세기: 모델에 입력되는 피처 중 NaN(Not a Number) 값의 개수를 세는 것은 데이터 품질을 모니터링하는 한 방법이다.
  • 시스템을 통해 입력이 변환되는 방식 추적하기: 입력이 시스템을 통과하면서 변환되는 과정을 추적하면, 데이터 흐름을 이해하고 잠재적인 문제를 발견할 수 있다.
  • 비정상적인 이벤트 로깅하기: 시스템에서 비정상적인 이벤트를 로깅하면, 예외적인 상황이나 예기치 않은 동작을 감지할 수 있다.
  • 로깅: 시스템의 주요 이벤트, 에러, 경고 등을 기록하여 시스템 동작을 추적하는 것.
  • 메트릭(metrics): CPU, 메모리, 디스크 사용량, 네트워크 대역폭 등 시스템 리소스 사용량을 모니터링 하는 것.
  • 트레이싱(tracing): 트레이싱은 시스템 내에서 데이터나 요청의 흐름을 추적하는 것.
  • 데이터 드리프트 감지: 데이터 드리프트를 감지하여, 입력 데이터의 분포 변화나 모델 성능의 변화를 모니터링하는 것.

 

ML 에서 중요한 지표 (소프트웨어 운영 지표):

  • Latency
  • Throughput
  • 지난 시간 동안 예측 횟수
  • 200 대가 아닌 오류 응답 비율
  • CPU, GPU, 메모리 사용률
  • 가용성 측정

 

ML 과 관련된 지표:

  • 모델 정확도 관련 지표
  • 예측값
  • 피처
  • 원시 입력 값

 

모델 정확도 지표

모델 예측에 대한 사용자 피드백 지표를 수집해야함. (e.g 클릭, 좋아요, 시청 시간, 구매, 북마크 등)

 

이런 피드백 지표로 지연 레이블을 추론해서 모델이 성능 저하를 유발하지 않는지 등을 검출하는거지.

 

예시로는 유튜브 동영상 클릭은 많이 헀지만 시청 시간은 떨어진다면 모델이 잘못 추론했다고 판단하는거지.

 

그리고 직접적으로 사용자 불만 피드백을 수집하도록 시스템을 설계하는 것도 도움이 됨.

 

 

예측값 모니터링

모델 예측을 수집하는 것.

 

데이터 시프트를 감지하는데 사용되거나, 모델의 정확도를 판단하는데 사용되거나, 모델이 비정상적인 예측을 하는지 등을 판단하는데 사용되기도 함

 

 

피처 모니터링

피처 모니터링으로 피처 검증 (feature validation) 이 있음:

  • 데이터 유형 검사: 각 피처의 데이터 유형이 스키마에 정의된 유형과 일치하는지 확인한다. 예를 들어, 정수 피처에 문자열이 들어오지 않는지 확인한다.
  • 피처 범위 검사: 피처 값이 허용된 범위를 벗어나지 않는지 확인한다. 예를 들어, 나이 피처의 경우 0에서 120 사이인지 검증한다.
  • 결측치 검사: NaN 또는 누락된 값이 존재하는지 확인하고, 이를 적절하게 처리한다.
  • 중복 데이터 검사: 피처 값이 중복되는지, 또는 예상치 못한 중복이 발생하는지 확인한다.
  • 데이터 유효성 검사: 피처 값이 합리적인지 확인합니다. 예를 들어, 날짜 피처가 올바른 날짜 형식인지 검사한다.

피처 검증에 자주 사용되는 툴로는 그레이트 익스펙테이션즈와 AWS 에서 제공하는 Deequ 가 있다:

 

다만 피처 검증에서 고려해야 할 점은 다음과 같다:

  • 중요하지 않은 피처들까지 고려해서 시스템 리소스를 사용하는 것
  • 중요하지 않은 피처들의 데이터 시프트를 검증해서 경고에 무뎌지지는 않는지
  • 데이터 자체의 문제일 수도 있지만 처리 단계에서 문제가 생기지는 않았는지 확인해야한다.

 

Q) 피처 스키마가 뭔데?

 

피처의 구조와 속성을 정의하는 규칙이나 표준을 말헌.

 

이를 통해 모델에 입력될 데이터의 형식, 범위, 값 유형 등을 명확하게 규정하는데 사용됨.

 

피처 스키마의 구성 요소:

  • 피처 이름: 각 피처의 고유한 이름 또는 식별자
  • 데이터 유형: 피처가 어떤 유형인지 정의합니다. 예를 들어, 정수, 부동소수점, 문자열, 범주형, 날짜/시간 등이 있다.
  • 피처 범위: 피처의 허용된 값 범위를 지정합니다. 예를 들어, 나이 피처의 경우 0에서 120까지로 범위를 제한할 수 있다.
  • 필수 여부: 피처가 필수인지 선택적인지 여부를 정의한다.
  • 기본값: 피처에 값이 없는 경우 적용될 기본값을 지정한다.
  • 상관관계 또는 종속성: 일부 피처가 다른 피처와 상관관계가 있는지, 또는 특정 조건에 따라 값이 결정되는지 정의한다.

 

피처 스키마 적용 사례:

  • 데이터 수집 및 저장: 데이터베이스나 데이터 파이프라인에서 피처 스키마를 사용하여 데이터를 수집하고 저장할 때 일관성을 유지한다.
  • 모델 훈련: 훈련 데이터가 스키마에 따라 정확하게 준비되었는지 확인하여, 모델의 예측 정확도를 높인다.
  • 모델 배포 및 모니터링: 배포된 모델의 입력 데이터가 스키마를 준수하는지 모니터링하고, 예외적인 데이터가 발생하면 경고를 제공한다.

 

 

원시 데이터 모니터링

아마도 ML 엔지니어는 원시 데이터 모니터링까지는 못할 것. 데이터 엔지니어들이 데이터 웨어하우스에 적재를 해줄거라서.

'Machine Learning' 카테고리의 다른 글

MLOps 를 위한 인프라와 도구  (0) 2024.05.02
연속 학습과 프로덕션 테스트  (0) 2024.04.30
모델 배포와 예측 서비스  (0) 2024.04.21
모델 개발과 오프라인 평가  (0) 2024.04.15
피처 엔지니어링  (0) 2024.04.11

+ Recent posts