Data-centric Evaluation of ML Models
page: https://dcai.csail.mit.edu/lectures/data-centric-evaluation/
Lab: https://github.com/dcai-course/dcai-lab/blob/master/data_centric_evaluation/Lab%20-%20Data-Centric%20Evaluation.ipynb
Machine Learning performance 향상시키기
모델 평가방법은, 어떤 모델을 적용할 지 고민하는 것 보다 더 중요한 문제임!
loss function: 새로운 데이터 x의 라벨값을 얼마나 잘 예측하는지 확인할 때 사용
1. 예측 값 (y^hat):
- 이게 무슨 말인지 몰라서 chatgpt한테 물어봤다!
암 검진 결과를 예측하는 경우, 거짓 양성은 실제로는 암이 없는데도 암이 있다고 오진한 경우를 의미합니다. 이 경우, 거짓 양성의 결과가 거짓 음성보다 훨씬 더 큰 부정적인 영향을 줄 수 있으며, 이는 비대칭적 보상 설정의 예시입니다. 거짓 음성이 더 나쁜거 아냐? 암이 있는데 없다고 하는게 더 안좋은 거 같은댐..? 무튼 이것도 둘이가 1:1이 아니라 이거지? 그럼 이때! 위에서처럼 딱딱 나눠서 매칭하는 것보다 확률값을 구하는게 낫다~ 이거구만?
이렇게 딱 하나의 값으로 summarize해가지고 이 모델의 성능을 평가하는 건 좋지 않음.
예를 들어, 신용 카드 거래의 사기 vs 비사기 분류할 때 그냥 accuracy만 보면 안되는 이유는??
바로!! 데이터의 불균형이 발생할 수 있으니까! 일반적으로 사기 거래는 비사기 거래보다 훨씬 적은 비율을 차지. 만약 모델이 모든 거래를 비사기로 분류한다고 해도, 전체적인 정확도는 99%로 매우 높은 값을 가질 것임.
2018년 연구에서, 어느 얼굴인식 서비스가 백인 남자 대상으로는 error rate가 0.8퍼인데, 흑인 여성의 경우엔 34.7퍼센트였음.
https://news.mit.edu/2018/study-finds-gender-skin-type-bias-artificial-intelligence-systems-0212
여성의 얼굴은 인식 못하는데, 하얀 마스크 쓰니까 인식해버림
데이터나 모델이 bias하겠지..?? (언급된 사항은 없음.. 있을까하고 제목 적었는데 따로 말하진 않음)
모델이 특정 데이터 슬라이스에 성능이 아주 bad하게 나왔을 때, 학습하기 전에 slice 정보를 삭제해준다면 이런 문제가 해결될까?
NOPE! 하나의 정보를 지웠다고 해도, 여전히 그 정보랑 관련있는 다른 feature들이 predictor로 사용되고 있어서 계속해서 상관관계가 나타날 수 있음. 그래서 아예 정보를 무시하는 것보다 최소한이라고 고려하는 게 나음!
data slice (=cohorts, subpopulations, subgroups: 공통의 특징을 공유하고 있는 하위 집단 (인종, 성별, 나이, 등등)
성능 잘 안나오는 소수의 서브그룹 데이터들 Over-sample or up-weight (가중치 높이기)
아래 그림처럼 한 공간에 두 하위 그룹이 겹치게 있다면? 어떤 모델이여도 잘 예측하는 거 힘들 걸? 또 tradeoff 생길 수 밖에! 그래서 이때는 트레이드오프가 생기긴 하겠지만 오랜지에 가중치를 둬버리는 거임.
데이터 추가 수집 해버리기!
down-sampling같은 거 해서 확실히 많은 게 더 좋더라~ 이런 게 나오면 더 수집하면 좋음.
feature 같은 거 더 뽑아서 그 그룹을 더 잘 설명할 수 있게 하자!
일부 데이터에는 문서 또는 이미지 같이 명확한 슬라이스가 없을 수 있음. 이 경우 모델이 성능이 떨어지는 subgroup을 어떻게 확인할 수 있을까?
1. error analysis: 어떤거 틀렸는지 확인
2. 큰 loss로 틀린 애들끼리 clustering을 해가지고 어떤 특징으로 묶이는지 파악
3. Domino slice discovery method
기존의 clustering 방식은 두 데이터 간에 거리가 얼마나 벌어져있는지만 고려하면되는데, Domino slice discovery method는 loss-value도 확인해서 특징들을 파악한다.
: 특정 데이터가 모델에 얼마나 영향을 미치는가?!
우리가 buyer고 병원으로부터 데이터를 제공받는다고 가정해봅시다! 우리는 병원에 얼마를 주는 게 적절할까?
모두 동일하게 줄 수도 있지만, 그럼 더 값어치 있는 데이터를 제공해준 거면 고려해줘야하지 않겠수? 예를 들어 데이터 라벨링이 너무 많으면 우리는 추가비용이 드니까!!!
(이때 어떤식으로 change를 했냐에 따라서 어떻게 정량화할지 달라진다. 보통 예측값이 어떻게 달라졌는지 보거나, 모델의 성능이 얼마나 달라졌는지 본다.)
Influence는 모델에 가장 큰 영향을 미치는 데이터 포인트를 찾아내줌.
라벨링 잘못된 데이터가 두개 있다할 때, 영향력이 더 큰쪽의 값을 수정하는 게 훨씬 더 모델 개선 효과 있음.
데이터 포인트 (x,y)가 포함된 subset에서 해당 데이터포인트의 LOO influence는 어느정도냐?
보려고 하는 데이터 하나씩 빼서 성능이 얼마나 달라졌는지 확인해본다.
but! 100개 데이터 이미 있는데 한개 뺐다고 해서 영향에 큰 영향이 있다고 할 순 없음!
데이터 포인트 (x,y)가 원래 데이터 세트에서 뿐만 아니라, 나머지 다른 데이터 subset에서도 어떤 역할을 하는지도 고려함! (얘가 이 그룹에선 이만큼 영향이 있는데, 저쪽에서는 이만큼만 있을 수 있음)
그래서 해당 데이터 포인트를 포함한 모든 subset에서의 LOO influence를 계산한 다음에 평균을 내봅니다!
만약에 완전 똑같은 데이터 A,B 두 개가 있는데, 한 개만 삭제하면 성능이 그냥 똑같은데, 둘다 삭제하면 성능이 엄청 떨어짐! 이때 A,B 두개의 데이터에 대한 influence를 구해본다면?
=> LOO influence: 데이터 포인트 하나만 삭제한 후에 성능 비교를 하니까 크게 영향을 안미침!
=> Data Shapely: subset 중에서 두개 다 포함되어있을 때, 같은 데이터 포인트는 모두 삭제해버리니까 엄청 크게 성능 떨어질 것임.
근데! 우리가 이 데이터들 다 하나씩 해가지고 훈련하면 너무 expensive하지 않겠습니까? 그래서 대안책으로 approximate합니다.
몬테카를로 방법은 반복된 무작위 추출을 이용하여 함수의 값을 수리적으로 근사하는 알고리즘을 부르는 용어
Regression setting: Cook's Distance
Nguyenova, L. A little closer to Cook’s distance. Medium, 2020.
Cook's D는 i번째 데이터 포인트를 모델에서 제거하고 회귀를 다시 계산해서 뽑음. 회귀 모델의 모든 값들은 해당 데이터 포인트를 제거한 후에 변경이 감지되었는지를 관찰
Classification setting: O(n \log n) time (복잡도 구하기)
사전 훈련된 신경망을 사용하여 모든 데이터를 임베딩한 후, 임베딩 뽑아서 KNN (K-Nearest Neighbors) 분류기를 적용. 그런 다음 KNN이 비슷한 이미지를 찾아줌. 그럼 이 데이터가 다른 비슷한 이미지 얼마나 잘 찾는지, 얼마나 대표하는 특징을 가졌는지 알 수 있구나?
알고리즘 소요 시간 : 시간 복잡도 - 자료의 수 n이 증가할 때 시간이 증가, n에 비례하는 연산
알고리즘 메모리 사용량 : 공간 복잡도
일반적으로 입력 크기에 따라 복잡도 달라지는 걸로 본다.
출처: https://blog.tomclansys.com/50
Balanced_accuracy:
The balanced accuracy in binary and multiclass classification problems to deal with imbalanced datasets. It is defined as the average of recall obtained on each class.
goal: to produce a model that has much better test accuracy
강의에서 제시된 다양한 아이디어를 고려해서 X와 y를 적절히 변경! 그런 후 더 성능 높은 모델 만들어라!
데이터 확인
idea 1: normalize?
idea 2: outlier 없애기. cleanlab이 잘해주는 구만! 오 rare_class는 없애지 말라고도 했네? 이번엔 성능이 아주 조~금 올랐음.
idea 3 : up-sample
데이터 포인트의 influence 구하는 것도 궁금했는데, 이거 관련해서는 실습을 안했네! 시간 날때 따로 찾아보자