article thumbnail image
Published 2022. 7. 17. 23:59

Single Number Evaluation Metric

to set up a single real number evaluation metric for your problem

 

r머신러닝 학습은 매우 iterative 한 작업

Precision : 고양이라고 분류했을 때 실제로 고양이일 확률 95퍼센트

Recall : 고양이 이미지 중에서 몇 퍼센트를 고양이로 분류했을까

 

Precision과 Recall 간의 trade-off가 있을 수 있음

 

Precision이 좋은 모델 A, Recall이 좋은 모델 B 중에서 뭐가 더 좋을까? 오직 두 개의 evaluation metric을 가지고 좋은 모델을 선정할 수는 있을까?

 

--> Precision과 Recall을 합친 F1 Score : "Average of $P$(Precision) and $R$(Recall)" , "Harmonic Mean"

$$\frac{2}{\frac{1}{P} + \frac{1}{R}}$$

 

well defined Dev Set (이것을 가지고 precision과 recall을 계산하게 됨) + single (real) number of eval metric --> iterating을 스피드업!

 

지역에 따라 다른 error를 보이고 있다고 할 때

이럴 때 average를 계산함으로써 성능이 좋은 모델을 빠르게 선정할 수 있음

 

 

Satisficing and Optimizing Metric

정확도 뿐만 아니라 러닝타임도 고려한다고 할 때

 

정확도와 러닝타임을 하나의 evaluation metric으로 합치기

 

$$cost = accuracy - 0.5 \times runningTime$$

 

하지만 정확도와 러닝타임을 linear weighted sum과 같은 수식으로 합치는 건 좀 억지 같을지도 ...

 

이건 어떨까?

- maximize accuracy
- subject to running time $\leq$ 100 ms 

 

이 경우에 정확도는 optimizing metric, 러닝타임은 satisficing metric이 됨 - 조건만 만족하면 OK

 

--> 만약에 $N$개의 metric을 고려하고 있다면, 그 중의 $1$개를 optimizing 으로 하고, $N-1$개는 satisfincing으로 하는 게 좋음 

 

--

 

wakewords/trigger words의 예 (hey siri)

 

정확도(trigger words 를 불렀을 때 작동할 확률)와 False Positive(부르지 않았을 때 작동하는 경우) 를 합치는 방법

- maximize accuracy
- subject to 24시간마다 최대 한번의 false positive

 

 

Train/Dev/Test Distributions

dev set (= hold out cross validation set)

 

dev set과 test set이 다른 분포 --> 좋지 않은 예시

 

따라서 전체 데이터셋에서 randomly shuffle into dev/test set

 

이때 dev set과 test set은 동일한 분포에서 와야 함

 

 

Size of the Dev and Test Sets

데이터가 비교적 적은 예전에는 train:dev:test = 60:20:20 식으로 하는 것이 국룰이었음 

그러나 데이터 사이즈가 훨씬 커진 지금은 98:1:1 정도면 충분

 

최종 모델의 성능이 얼마나 좋은지 정확한 척도가 필요한 게 아니라면, test set이 너무 클 필요는 없음

 

어떤 경우에는 최종 모델의 전체적인 성능에 대해 high confidence가 필요하지 않을 수도 있음

그렇게 되면 train/dev set만 필요 (추천하는 방식은 아님)

 

train/test split 하곤 했는데.. 이것이 결국 train/dev set 임

 

 

When to Change Dev/Test Sets and Metrics?

모델A의 evaluation metric이 더 좋지만 부적절한 이미지를 더 가지고 있다면? 기업 및 유저 입장에서 모델B가 적절한 모델이라고 볼 수 있음

 

Error(예측값과 라벨값이 일치하지 않는 횟수를 카운트):

$$\frac{1}{m_{dev}}\sum_{i=1}^{m_{dev}}I\{y_{pred}^{(i)} \neq y^{(i)}\}$$

 

이러한 evaluation metric의 문제점: 선정적인 이미지에 대해서도 일관적으로 계산

따라서 가중치를 더할 수 있음

 

$$w^{(i)} =\begin{cases}1 & x^{(i)}\ is\ non-porn\\10 & x^{(i)}\ is\ porn\end{cases} $$

$$\frac{1}{\sum_{i}w^{(i)}}\sum_{i=1}^{m_{dev}}w^{(i)}I\{y_{pred}^{(i)} \neq y^{(i)}\}$$

 

선정적인 이미지에 대한 에러에 10배의 가중치를 부여

이를 위해서는 dev/test 셋에서 선정적인 이미지에 대해 라벨링을 진행해야.

 

--> "defining a new evaluation metric"

 

이 또한 orthogonal한 접근이라고 볼 수 있는데 두 과정을 별개로 진행한다고 보면 됨

(1) 모델을 평가할 metric 을 어떻게 정의할 것인가에 대해서만 이야기하는 knob <-- "place the target"

(2) 이 metric에 어떻게 적용할 것인가를 별도로 고려하는 knob <-- "how to aim at this target accurately"(가중치를 부여하는 식으로 metric을 수정할 수도 있고)

 

 

 

training/dev/test 셋 모두 고품질의 고양이 사진이었는데, 실제 입력되는 유저의 고양이 이미지는 흐릿하고 보다 다양한 모양이이서 오히려 dev/test error가 높았던 모델B가 더 적합함

 

--> 이러한 경우에는 metric을 바꾸거나 dev set을 교체하자

 

'인공지능 > DLS' 카테고리의 다른 글

[3.2.] Error Analysis  (0) 2022.07.18
[3.1.] Comparing to Human-level Performance  (0) 2022.07.18
[3.1.] Introduction to ML Strategy  (0) 2022.07.17
[2.3.] Introduction to Programming Frameworks  (0) 2022.07.13
[2.3.] Multi-class Classification  (0) 2022.07.13
복사했습니다!