AI

[ML Ops] - 지속가능한 AI서비스를 위한 Model Drift의 인지 및 관리

LittleFox 2022. 2. 20. 23:40

Model Drift란

"변화한다는 것만이 인생에서 유일하게 변하지 않는 점이다"

- Heraclitus

 

 

머신러닝이 가정하는 강력한 전제 중 하나는 independent identical data이다.

즉, 모델이 지속적으로 성능을 유지하려면 모델이 처리하는 데이터와 환경이 동일해야 한다는 것이다.

 

하지만 현실 세계의 모든 것은 변한다. 고객, 환경, 상품, 산업 등등 변화는 끊임없이 지속된다.

Model drift란 이렇게 변화하는 환경에 따라 모델의 성능이 저하되는 현상을 의미한다. 


Model Drift의 종류

Model Drift는 그 원인에 따라 아래과 같이 구분할 수 있다.

 

Concept Drift : 예측하려고 하는 변수의 의미가 바뀌는 경우

(예) "금융사기" 예측 모델에서 "금융사기"의 정의가 바뀐 경우

 

Data Drift : 설명 변수의 통계적인 속성이 변하는 경우

특히 예측하고자 하는 변수에 영향을 주는 인자가 explicit한 설명변수로 표현되지 않는 경우 유의해야 한다.

(예) 계절성에 따라 여름에 효과있는 모델이 겨울에는 효력이 없음

(예) 개인의 선호도가 변하며 추천 모델의 성능이 떨어짐

(예) 새로운 상품의 추가

 

Upstream data change : 데이터 파이프라인에서 변화가 생기는 경우

(예) 더이상 변수가 측정되지 않는 경우 / 측도의 변화 등  

 

이외 원인들

- Prediction Drift : 예측된 라벨의 분포가 변하여 모델 인풋과 모델 예측치 사이의 관계가 변화

 

즉, 머신러닝 모델을 구축하는 데에 들어간 것들 중 하나라도 변하게 된다면 모델의 성능은 저하될 수밖에 없다.

따라서 우리는 머신러닝 모델을 배포한 후에도 이러한 drift signal에 귀를 기울이고, 필요에 따라 모델을 재학습/재배포함으로써 지속적으로 모델을 유지/보수해나가야 한다.

 

<MLOps 개념 - 출처: https://www.modelop.com/blog/mlops-and-modelops-whats-the-difference-and-why-it-matters/>


Model Drift를 감지하는 방법

모델의 성능이 떨어졌는지 감지하는 것은 크게 두 개의 스텝으로 나뉠 수 있다. 첫 번째는 model drift를 감지할 수 있는 signal을 정의하고, 두 번째로는 해당 신호가 감지되었을 때에 심도있는 조사를 통해 실제로 drift가 일어났는지 판정하는 것이다. 

 

1) Drift Signal 을 정의하기

모델을 디플로이한 후, 해당 모델이 학습 때 보지 못한 데이터(unseen data)에 대해 drift signal을 정의하고 트래킹해야 한다.

이때 자주 사용되는 지표는 정확도 등이 있다. 예를 들어 숙박 가격을 예측하는 모델이라면, 예측된 가격의 평균과 실제 평균 정가를 비교하여 그 차이가 벌어지면 (drop in accuracy) 모델 드리프트에 대한 신호로 활용하는 것이다. 

 

예를 들어 밴쿠버 지역의 콘도 가격을 예측한 모델에 대해 아래의 차트를 보면, 모델을 디플로이한 후 새로운 콘도에 대해 예측을 실행했을 때, 시간이 지날수록 실제 평균 가격과 예측된 가격의 차이가 커지는 것을 확인할 수 있다.

 

<출처 : https://medium.com/mlearning-ai/concept-drift-52626ec4e013>

  

하지만 종종 accucacy를 모니터링하기 어려운 경우가 있다. 정확도 계산에 필요한 { 예측치 - 정답 } 쌍을 구하기 어려운 경우다. 예를 들어 공공기관의 순이익 예측모델 같은 경우, 기업의 분기보고서에 따라 1년에 4번만 모델 정확도를 측정할 수 있다. 

 

이렇게 모델 정확도의 하락을 직접 모니터링하기 어려운 경우, 다음과 같은 대안 방법들을 활용할 수 있다 :

 

> Komogorov-Smirnov(K-S) test

   - 두 데이터셋의 누적분포를 비교하는 비모수 검정 기법

   - 학습 데이터와 모델 디플로이 후 수집되는 데이터가 같은 분포인지 확인하는 데에 활용

   - 귀무가설 : 학습 데이터 vs post-training 데이터에 대해 <두 데이터셋의 분포가 같다>

      => 이 가설이 기각되면 데이터 분포가 변한 것이고, 모델이 drift되었다는 증거가 될 수 있음

 

> Population stability index (PSI)

   - 변수의 분포가 시간이 지남에 따라 어떻게 변화했는지 측정하는 테스트

   - population의 특성 변화를 모니터링할 수 있는 방법

   - K-S 테스트와 비슷하게 데이터의 분포가 변화하였는지 모니터링하는 방식

 

> Z-score

   - z-score은 관측된 값과 평균 사이의 관계를 측정하는 방법 (z-score=0일 때 데이터포인트 점수가 평균과 같다는 것)

   - 학습 데이터와 live data의 분포를 z-score을 통해 비교하여 모니터링할 수 있음

   - 해당 변수가 주어질 때 live data point의 z-score가 +-3을 넘어가면 변수가 변했을 가능성이 있다고 판단

 

2) Drift signal이 관측되었다면

Drift signal이 감지되었다면, 실제로 drift가 일어났는지 판정하기 위해 다음의 것들을 확인해야 한다.

 

a) Anomaly 확인하기

- 인풋에 이상치(anomaly)가 존재할 수 있고, 이런 경우 이상치가 다른 집단들에서도 지속적으로 발생하는지 확인해야 한다.

- 시계열적인 인풋에서 이상치를 감지하는 대표적인 방법들은 다음과 같다:   

   > Bollinger Band

     - 1980년대 주식에 대한 기술적 분석으로 Bollinger가 제안한 방법에서 시작

     - 시계열 신호의 이동평균과 표준편차를 사용해 upper/lower band를 계산

 

   > Confidence interval 체크하기

 

   > 클러스터링

      예) DBSCAN (Density-based spatial clustering of applications with noise)

     - 비지도학습 기반의 군집분석을 이상치 검출에 활용 가능. 

     - 참고: https://donernesto.github.io/blog/outlier-detection-with-dbscan/

 

 

b) Stationarity 확인하기 (특히 시계열 데이터에서 주의)

- 신호가 주기적으로 평균으로 회귀하지 않는다면, drift signal에 경향성이 있는 것이고, 이는 정확도 하락의 원인이 된다.

- Stationarity test를 통해 입력 데이터 분포에 변화가 없는지 체크해야 한다.

 

 


Model Drift에 대한 해결책

1) 지속적으로 모델을 재적합하여 배포⭐

: CI(Continuous Ingegration) / CD(Continuous Delivery) scoring pipeline을 구축하여 모델 배포를 자동화

 

🙋‍♀️ 모델을 업데이트하는 주기는?

  a) 문제가 발생하였을 때 (모델 성능이 하락했을 때)

      - 물론 문제가 발생할 때까지 기다리는 것은 최고의 방법이 아닐 수 있으나

        기존의 정보가 없는 새로운 모델에 대해서는 모델을 업데이트할 수 있는 유일한 방법이다.

      - 문제가 발생하게 되면 문제가 무엇인지 조사한 후 모델을 수정할 필요가 있다.

b) 데이터의 계절성을 관찰한 후 계절성에 따라 모델 제학습

      - 예를 들어 할인 기간에 고객의 지출이 늘어나는 경우, 이러한 패턴의 변화를 모델에 반영해야 함

c) 지속적인 모니터링

      - 모델의 안정성과 관련된 매트릭을 일정한 주기에 따라 모니터링해야 한다.

      - 도메인에 따라 간격은 주 / 달 / 분기 등에 따라 모니터링 주기를 정할 것

      - anomaly가 발생하는 것을 알려줄 매뉴얼 스크립트 혹은 자동화된 스크립트를 준비하는 것이 좋다

 

2) 데이터가 시간에 따라 변하는 경우 해결책

: 데이터에 가중치를 부여하여 모델을 업데이트하는 전략 사용

   - 예) 최근 데이터가 더 중요한 금융 데이터의 경우 최신 데이터에 더 큰 weight를 줘서 학습해야 함

 

3) 모델 수정

- Boosting : 배포한 static 모델에 대해, 최근 데이터에 따라 새 모델을 사용해 오류를 correction해 나가는 방법

- Deterministic noise : 이미 모델이 많은 영향력을 미치고 있어 모델 디플로이가 어려운 경우, 모델의 예측치에 deterministic noise를 삽입하여 예측 결과를 스무딩할 수 있음

- Online Learning


적용 예시

(1) 추천 시스템

- 추천 시스템의 모델은 가능한 한 빠르게 변화에 적응해야 한다.

- 최신 고객 행동 데이터에 가중치를 줌으로써 고객의 변환 취향에 맞는 추천을 할 수 있다.

- 이러한 모델의 경우 edge 단에서 완전한 자동화를 적용할 수 있음

 

(2) 집/e-commerce 가치 평가 모델

- 새로운 모델을 구축에 있어 리스크가 있는 경우 모델 재배포 자동화가 최선이 아닐 수 있다

- 즉, 이런 경우 완전히 자동화된 모델 업데이트는 지양하고, 사람의 결정을 파이프라인에 포함해야 한다.

   because ...

   a) 비즈니스 고객이 모델 변경의 영향력, metric을 이해하고 모델의 변경을 승인해야 하는 경우

   b) 모델의 예측 결과가 영향력을 미치는 경우

       -> 예를 들어 부동한 가치 평가 모델의 경우 공인중개사 등은 모델 점수를 기준으로 실제 가격을 조정하게 됨

 

# 모델 드리프트 # 데이터 드리프트 # 모델배포 # ML Ops # 비즈니스 AI # 실전 AI


참고자료:

https://towardsdatascience.com/model-drift-in-machine-learning-models-8f7e7413b563

https://medium.com/mlearning-ai/concept-drift-52626ec4e013

https://datatron.com/what-is-model-drift/

https://machinelearningmastery.com/gentle-introduction-concept-drift-machine-learning/