티스토리 뷰
[Model Drift] Model Drift에 대한 A to Z # 2. Detection 방법과 Handling 방법
calmmimi 2023. 5. 29. 15:20앞서 Model Drift 개념과 유형에 대해서 알아보았습니다.
이번 글에서는 Model Drift를 감지하는 방법과 Model Drift를 방지하고 해결하는 방법에 대해서 정리해 보겠습니다.
Model Drift Detection 방법
첫 번째, input 변수와 target 변수의 변화를 통계적으로 분석하거나 모니터링하는 방법 [Data Drift Detection]
- Descriptive statistics, Distribution changes(KS Test, PSI 등), Model Based Approach, Adaptive Windowing, Page-Hinkley method
두 번째, 모델 예측 결과를 평가하여 성능 변화를 감지하는 방법 [Concept Drift Detection]
- 모델 성능이 사전에 정한 임계값 이상으로 저하 (ex. DDM(Drift Detection Method)
- Feature Importance 변화
- 모델 불일치-새로운 모델은 이전 모델과 동일한 알고리즘과 하이퍼파라미터를 사용한다고 할 때, 새로 학습한 모델의 예측치와 기존 모델의 예측치가 동일하거나 유사하다면 concept drift가 발생하지 않았다고 할 수 있음
아래는 첫 번째 관점의 Detection 상세 설명입니다.
1) Descriptive statistics
- 데이터셋의 최솟값, 최댓값, 중앙값, 평균, 상관계수 등 기술적 통계량을 모니터링에 활용
2) Distribution Changes
- 데이터 분포의 변화를 통계적으로 검증하는 것으로, input변수나 output변수의 변화를 빠르게 파악 가능(모델 재학습 전에 미리 파악 가능)
- 검증 방법 종류
- Population Stability Index(PSI), Kullback-Leibler (KL) divergence, Jensen-Shannon, Kolmogorov-Smirnov(KS) test, Cramér-von Mises, Fisher’s Exact Test, Maximum Mean Discrepancy (MMD), and Least-Squares Density Difference
- Kolmogorov-Smirnov test (or KS test) : 두 개 샘플의 누적확률분포를 비교하는 비모수 검정으로 두 분포의 최대 차이를 측정. 두 샘플(학습 데이터와 모델 배포 후 수집되는 데이터)이 동일한 분포에서 생성되었는지를 확인하기 위해 사용되는 것으로 KS test의 귀무가설은 '두 데이터셋의 분포가 동일하다'이고 귀무가설이 기각되면 데이터에 drift 발생했다고 판단
[파이썬 패키지 scipy.stats.ks_2samp] - Population Stability Index (PSI) : 데이터셋이 시간이 지남에 따라 어떻게 이동(변화)했는지 측정. 특정 변수나 Output에 대한 두 개의 서로 다른 샘플들의 차이를 숫자 하나로 표현한 것. (PIS < 0.1 : no significant change, PIS < 0.2 : moderate change, PIS >= 0.2 : siginificant change)
[파이썬 패키지 https://github.com/mwburke/population-stability-index/blob/master/psi.py]
3) Model-Based Approach
- 프로덕션에서 현재 모델을 빌드하는 데 사용된 데이터에 0으로 레이블 지정하고, 테스트 데이터에 대해서는 1로 라벨링을 지정
- 데이터가 어떤 데이터셋에 속한 것인지 분류하는 이진 분류 모델을 생성하여 적용
- 모델의 정확도를 drift 판단 기준으로 삼음
- 정확도(AUC-ROC)가 높게 나올수록 "두 데이터셋의 차이가 크다"라는 의미
- 만약 정확도가 0.5 정도 수준이라면 두 데이터셋의 분류가 어려운 것으로 유의미한 데이터 변화가 발생하지 않은 것을 의미
- 장점 : 전체 데이터셋을 대상으로 감지할 수 있음, 개별 변수의 분포에는 변화가 없으나 변수들 간의 관계가 변화한 경우 감지할 수 있음
- 단점 : 새로운 데이터를 입력할 때마다 학습 및 테스트 과정이 반복되어야 하므로 계산 비용이 많이 들 수 있음
- 단변량 drift 감지를 할 경우에도 해당 하나의 변수를 설명변수로, 어떤 데이터셋에 속하는지를 나타내는 Target변수로 하여 이진 분류 모델 생성
4) Adaptive Windowing(ADWIN)
- 슬라이딩 윈도우 방식을 적용하는 방법으로, 새로운 데이터를 Adaptive 윈도우에 추가하고 drift를 감지하기 위해 윈도우 내 데이터를 분석
- 모든 가능한 조합의 서브 윈도우를 만들면서 drift를 감지할 때까지 윈도우 사이즈를 증가시키고, 두 개의 서브 윈도우의 분포가 달라지면 drift를 감지하고 과거 데이터를 삭제하여 다시 윈도우 사이즈를 줄이는 방식으로 처리
- 장점 : 미리 윈도우 사이즈를 지정할 필요 없고, drift감지를 위한 임계값만 설정하면 됨
- 단점 : 주로 단변량 데이터의 drift에서 주로 사용되며 연산량이 많고 메모리 사용이 많다는 단점이 있음
5) Page-Hinkley method
- 데이터셋의 평균을 계산하고 새로운 데이터가 발생할 때마다 평균을 계속 업데이트하는 방식
- 특정 시점의 평균이 threshold보다 커지게 되면 drift 감지
Python Library For Model Drift Detection
Model Drift 감지를 위한 오픈소스 라이브러리들입니다.
1) Evidently : validation에서 배포까지 ML모델의 평가, 테스트, 모니터링을 도와주는 오픈 소스 라이브러리
2) whylogs : 모든 종류의 데이터를 로깅하기 위한 오픈 소스 라이브러리로, 데이터셋의 변화를 탐지하고 데이터가 원하는 방식으로 표시되는지 확인하기 위해 제약 조건을 생성하고 데이터에 대한 주요 요약 통계를 신속하게 시각화하는 데 사용할 수 있음. 데이터에 대한 주요 요약 통계를 신속하게 시각화할 수 있음
3) Alibi Detect : 이상치 및 adversarial, drift 감지에 중점을 둔 오픈 소스 라이브러리
4) Deepcheck : 데이터 무결성 확인 및 Train데이터와 Test 데이터의 drift 확인, 모델 validation을 확인할 수 있는 오픈 소스 패키지
Model Drift Handling 방안
Model Drift를 방지하거나 해결하는 방법에는 세 가지가 있습니다.
첫 번째, 사전 방지 방법으로, 모델 개선 없이 모델 재학습을 하는 방법
두 번째, drift 감지 후 해결 방법으로, 모델 개선 하는 방법
세 번째, 역시 drift 감지 후 해결 방법으로, 데이터를 개선하는 방법
[모델 개선 없이 모델 재학습]
1) 온라인 러닝(Online-learning)
- 실제 대부분의 애플리케이션은 실시간(스트리밍) 데이터로, 모델이 한 번에 하나의 샘플을 처리고 바로 모델을 업데이트할 수 있음
- 모델이 항상 데이터 분포의 변화를 반영하게 되어 Drift를 피하는데 도움이 됨
- 단점) 하나의 데이터를 증분식 학습이 가능한 머신러닝이 아닐 경우 적용되기 어려움
2) 주기적인 재학습(Periodically Re-Train)
- drift 감지를 위한 작업은 하지 않고 주기적으로 최신 데이터로 모델을 재학습
- 재학습으로 업데이트된 모델의 지속적인 평가 필요 - 현재 데이터의 테스트 데이터셋에 대해 이전 모델보다 더 나은 성능을 보일 때만 배포
- 단점)모델의 재학습 및 재배포 주기를 결정하는 것이 어려움
(새로운 데이터의 수집 주기, 비즈니스 상황, 모델 재학습 및 배포 시간을 고려해야 함)
[모델 개선]
3) Re-sampling using instance selection
- Data Drift - Covariate Shift - Sample selection bias 상황에서 적용
- 샘플링된 데이터가 전체 데이터 모집단의 특성을 나타내도록 기본 분포(패턴)를 그대로 반영하는 적절한 인스턴스(샘플 데이터)를 선택하여 학습데이터로 적용
4) 모델들에 가중치를 적용한 앙상블 학습(Ensemble learning with model weighting)
- 앙상블 학습은 여러 모델들로 결합된 예측값을 생성하는 방식으로, 최종 예측값은 개별 예측값들의 가중 평균으로 구하며, 가중치는 최근 데이터에 대한 개별 모델의 성능을 반영
- 앙상블 학습의 motivation은 변화 발생 시 데이터가 다중 분포에 의해서 생성된다는 점
- 각 모델이 개별적으로 데이터 분포를 특성화하고 변수와 target변수 간의 관계를 학습하며, 이러한 여러 모델들의 앙상블을 통해 더 잘 학습될 수 있음
5) 변수 제거(Feature dropping)
- drift가 발생한 feature들을 삭제하는 것은 가장 간단하지만 효과적인 방법 중 하나
- 단순히 feature들을 제거하면 정보의 손실도 발생할 수 있으므로, drift가 발생한 feature 중 중요하지 않은(ex. Feature Importance 순위 기준) feature만을 제거하는 것이 필요
- 예시) target변수는 유지하고 한 번에 하나의 input변수만으로 여러 개의 모델을 생성한 후 테스트 데이터로 예측을 수행할 때 특정 임계치보다 성능이 낮은 변수들은 drift가 발생한 것으로 보고 제거하는 방식
6) 최신 데이터에 가중치 부여(Weighting Data)
- 일부 알고리즘은 input 데이터의 중요도에 대해 가중치 부여 가능
- 데이터가 시간에 따라 변하게 되면 최근 데이터에 더 높은 가중치를 부여하고 과거의 데이터에는 작은 가중치를 부여
- 새로운 모델 학습 시 과거 학습 데이터를 제거하기 보다는 오래된 데이터일 수록 가중치를 작게하여 학습 데이터를 구성
[데이터 개선]
7) 데이터 전처리
- Data Drift - Covariate Shift - Upstream data change 상황에서 적용
- 데이터의 측정 단위가 달라지거나, 일시적인 이상치가 발생할 경우 또는 데이터가 관측히 안 된 경우에는 데이터 수집 및 전처리 과정에서 개선
[참고자료]
- Machine Learning Model Drift, https://towardsdatascience.com/machine-learning-model-drift-9cc43ad530d6
- Concept drift detection basics, https://superwise.ai/blog/concept-drift-detection-basics/
Drift Detection, https://medium.com/better-ml/drift-detection-6db05bf75dfe - The Importance of Data Drift Detection that Data Scientists Do Not Know, https://www.analyticsvidhya.com/blog/2021/10/mlops-and-the-importance-of-data-drift-detection/
- 8 Concept Drift Detectoin Methods, https://www.aporia.com/learn/data-drift/concept-drift-detection-methods/
Evidently github, https://github.com/evidentlyai/evidently - whylogs github, https://github.com/whylabs/whylogs
A Gentle inroduction to concept drift in Machine Learning, https://machinelearningmastery.com/gentle-introduction-concept-drift-machine-learning/ - Best practices for dealing with concept drift, https://neptune.ai/blog/concept-drift-best-practices
- Detect data drift(preview) on datasets, https://learn.microsoft.com/en-us/azure/machine-learning/v1/how-to-monitor-datasets?view=azureml-api-1&tabs=python
'Data Science&AI' 카테고리의 다른 글
[생성형AI] Generative BI - Amazon Q & pandas-gpt & pandas-ai (21) | 2024.03.05 |
---|---|
[Model Drift] Model Drift에 대한 A to Z # 1. 정의와 유형 (0) | 2023.05.29 |
[시계열 알고리즘] NHiTS : Neural Hierarchical Interpolation for Time Series Forecasting (0) | 2023.04.04 |
[딥러닝] BERT와 GPT의 기본인 Transformer의 A to Z (1) | 2023.02.26 |
[딥러닝] Attention에 대한 설명 (0) | 2023.02.18 |
- Total
- Today
- Yesterday
- SQLD 정리
- 최신시계열
- SQLD
- Concept Drift
- Generative BI
- 영어공부
- 생성형BI
- Data Drift Detection
- Model Drift Detection
- data drift
- 모델 드리프트 대응법
- Tableau vs QuickSight
- NHITS설명
- pandas-ai
- 오토인코더
- Model Drift
- On-premise BI vs Cloud BI
- 영화 인턴
- 추천시스템
- 비즈니스 관점 AI
- Data Drift와 Concept Drift 차이
- 데이터 드리프트
- amazon Q
- AutoEncoder
- amzaon quicksight
- 모델 드리프트
- 시계열딥러닝
- pandas-gpt
- SQLD자격증
- 모델 배포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |