머신러닝 디자인패턴

디자인 패턴 9 : 중립 클래스

판교데싸 2022. 6. 1. 12:06

3.5 디자인 패턴 9 : 중립클래스

중립 클래스

머신러닝 예측 대상을 이진 분류기('예' , '아니오' )로 학습하는 대신 '아마도' 라는 총 3가지의 클래스 분류기를 학습 시키기도 하는데
(보통 학습패턴은 하나의 클래스에만 속할 수 있으므로) 이 경우 '아마도'를 중립 클래스라고 이야기함


3.5.1 문제

진통제 사용에 대한 지침을 제공하는 모델을 만든다고 할 때 과거 데이터를 보면 보통 이부프로펜과 아세트 아미노펜이라는 두가지 약품이 중에

  • 아세트 아미노펜 -> 위장문제가 있는 환자에게 처방
  • 이부프로펜 -> 간 손상 위험이 있는 환자에게 우선적으로 처방
  • 그외 -> 무작위 ( 위 둘중 하나)

이런 경우 모델은 '그외'의 케이스를 둘 중 하나의 클래스로 정확히 분류해야하는 이진분류기로 처리하면 정확도가 떨어짐


3.5.2 솔루션

아세트아미노펜 처방을 받은 환자가 이미 예전에 이부프로펜을 처방받아서 가지고 있다면 이부프로펜을 사용해도 되는가?
라는 질문을 받는 경우 이를 위해 중립 클래스라는 것이 필요함

이런 중립클래스를 만들 때 가장 중요한 과정

  1. 근본적으로는 데이터 수집을 적절하게 설계
  2. -> 데이터 수집 설계가 올바르지 않다면 중립클래스를 만들 수 없음
  3. 올바른 머신러닝 문제 정의
  4. -> 문제 정의를 정확히 할때 중립 클래스에 대한 범위를 명확히 할 수 있음

3.5.3 작동원리

길이 N의 합성 데이터셋을 만들 때 10프로는 아세트 아미노펜 나머지 10프로는 이부프로펜를 처방 받을 때

나머지 80% 그룹은 두약물중 하나로 임의 배정 될수 밖에 없음

학습 예제의 80%가 임의의 라벨을 가지고 있으므로 모델이 할 수 있는 것은 그 절반을 정확하게 추측하는 것

절반을 정확하게 예측 한다면 정확도는 40%가 되고 나머지 정해져있는 20프로(아미노펜,이부프로펜) 까지 모두 맞춘다면 전체 정확도가 60%정도 될 것

결국 이런 방법 보다 세번째 클래스를 만들고 무작위로 할당된 모든 처방을 해당 클래스 즉 중립클래스에 넣으면 100%정확도 까지 얻을 수 있음

이런 합성 데이터 셋의 목적은 중립클래스 디자인 패턴이 모델 정확도 손실을 방지 할수 있음을 설명하고 있음


for label in ['prescription', 'prescription_with_neutral']:
    ntrain=8*len(df)//10
    lm=linear_model.LogisticRegression()
    lm = lm.fit(df.loc[:ntrain-1, ['jaundice', 'ulcers']], df[label][:ntrain])
    acc = lm.score(df.loc[ntrain:, ['jaundice', 'ulcers']], df[label][ntrain:])
    print('label={} accuracy={}'.format(label, acc))```

   

output


3.5.4 실제 상황

실제 상황의 데이터셋에 있는 임의의 라벨 은 합성 데이터셋 처럼 완전한 무작위는 아닐 가능 성이 높음
ex)신생아가 태어나고 1분이 지나면 아기에게 1~10사이의 숫자인 아프가점수가 할당되는데 10은 출산과정을 완벽하게 거친 신생아에게 부여되는 점수.
신생아가 건강한 출산과정을 거쳤는지, 또는 즉각적인 조치가 필요한지 에측하도록 모델을 학습시켜보면

건강한 신생아 -> 아프가 점수가 9이상
주의가 필요한 신생아 -> 아프가점수 8이하

그러나 아프가점수는 상당히 주관적인 여러평가를 포함하여 점수 부여에 의사의 주관적 판단이 투여됨
이런경우 10점이 정상 8,9점이 중립 7점 이하는 주의 3개의 클래스로 만들어야 하고
이 경우 모델의 정확도가(0.79) 이진분류 때보다(0.56) 훨씬 높아짐 을 알 수 있음

CREATE OR REPLACE MODEL `emart-dt-dev-ds.samples.natality_robin`
OPTIONS(model_type='logistic_reg', input_label_cols=['health']) AS

SELECT 
  IF(apgar_1min >= 9, 'Healthy', 'NeedsAttention') AS health,plurality,mother_age,gestation_weeks,ever_born
FROM `bigquery-public-data.samples.natality`
WHERE apgar_1min <= 10

-> 이진 분류기로 모델링 case

-> 중립클래스를 포함한 모델링 case


3.5.5 트레이드 오프와 대안

1. 전문가의 의견이 일치 하지 않을 때

전문가의 의견차이에 의해 아세트 아미노펜과 이부프로펜 처방이 달라질 수 가있는데 이런 경우
중립 클래스를 사용하여 처리 할 수 있음

2. 고객 만족도

고객이 자신의 경험을 1~10으로 평가한 설문조사 응답을
1 ~ 4 점을 '나쁨' 8 ~ 10점을 '좋음' 5 ~ 7점을 '중립' 으로 분류할 수 있음
만약 중립 클래스를 사용하지 않으면 모델은 사실상 '좋음'과 '나쁨'중 하나로 분류하기 위해 에러를 만들 수 있음

3. 중립 클래스의 리프레이밍

주식 자동 거래시스템을 학습 할 때 주식 시장의 변동성과 새로운 정보가 주가에 반영되는 속도로 인해
작은 상승 및 하락 예측을 바탕으로 거래를 시도하면 시간이 지남에 따라 거래 비용은 높아지고 수익은 낮아짐
이런 상황에서는 상승할 것으로 예상되는 모든 주식을 매수할 수도 없고 보유하지 않은 주식을 매도할 수도 없는 상황이 발생
그렇다면 세가지 클래스로 구성된 학습 클래스로 분류 모델을 만드는 것이 가장 확실한 예측

5% 이상 상승한 주식 -콜
5% 이상 하락한 주식 -풋
나머지 주식 -중립

반응형
반응형