brunch

You can make anything
by writing

C.S.Lewis

by gimmesilver Apr 01. 2021

예측 모델을 이용한 서비스 개발 시 알아야할 것들 #3

라벨링

3. 라벨링

    내가 예측하려는 대상의 라벨 정보를 충분히 많이, 지속적으로, 그리고 적은 비용으로 구할 수 있는지 검토해야 합니다. 실전 서비스를 개발해 보신 분들은 충분히 공감하시겠지만 대개의 경우 적절한 라벨 정보를 충분히 확보하기가 어렵습니다. 1) 라벨 정보를 어떻게 확보할 수 있는지, 2) 라벨 정보를 충분히 신뢰할 수 있는지, 3) 서비스 운영 단계에서 지속적으로 라벨 정보 확보가 가능한지 파악해야 합니다. 이 중에서 하나라도 충족하지 못하면 실전 서비스는 불가능합니다.

    연구 단계에서는 특히 1)과 2)만 생각하면 되지만, 실전 서비스에서는 3)이 중요합니다. 나중에 유지 보수 및 운영 항목에서 다시 자세히 다루겠지만, 실전 서비스에서는 개발 단계에서 예측 모델을 잘 만드는 것 못지 않게 중요한 것이 모델의 지속적인 유지보수입니다. 이를 위해선 모델의 유지 보수를 위한 지속적인 라벨 정보 구축 프로세스를 미리 생각해야합니다. 


    라벨링 방식은 크게 두 가지, 1) 사람이 직접 라벨을 태깅하는 방식과 2) 라벨링 기준을 정해서 직접 데이터로부터 추출하는 방식으로 나눌 수 있는데 각각에서 고려해야 할 이슈들이 있습니다.


    이미지나 음성, 텍스트 인식, 상품 카테고리 분류 등과 같은 문제는 주로 사람이 직접 라벨을 생성하는 방법을 사용합니다. 최근에 라벨링을 쉽고 저렴하게 생성할 수 있게 도와주는 도구나 서비스, 심지어 전문 업체들이 등장하면서 비용적인 측면에서 많이 효율화되기는 했지만 이것 역시 한계가 있습니다. 


    이미지, 음성, 텍스트 인식 등의 경우 대부분의 사람들이 타고난 도메인 전문가입니다. 따라서 다수의 저임금 노동자를 활용하는 방식이 가능합니다. 반면, 그 외에 많은 문제들은 라벨링을 하려면 해당 분야에 대한 배경 지식이 필요합니다. 예를 들어 음악 장르를 구분하는 문제를 생각해 보시죠. 이를 위한 데이터 라벨링에는 음악적 지식이 풍부한 전문가가 필요할 겁니다. 음악 평론가까지는 아니더라도 최소한 punk 와 funk 의 차이가 뭔지는 알아야 합니다. 그렇지 않으면 green day 와 earth, wind & fire 의 곡들이 같은 장르로 묶이는 불상사가 발생하겠죠(아...생각만 해도 끔찍하네요). 더 나아가 애초에 해당 분야 종사자가 아니면 불가능한 경우도 있습니다. 가령, 금융 사기 탐지라던가 X-ray 판독 등의 문제가 그렇습니다. 


    더 나아가 라벨링에 참여하는 사람의 인식이나 수준의 문제를 떠나서 사람이라면 누구나 피하기 힘든 신뢰도 오류 문제가 있습니다. 정리하자면, 크게 세 가지로 나눌 수 있습니다. 

    첫째, 주관적 편향 (subjective bias) 입니다. 사람은 누구나 편향을 갖고 있으며 이것이 라벨링에 영향을 미칩니다. 

    둘째, 판단 기준 불일치 (labeling inconsistency) 입니다. 사람들은 시기나 장소, 현재의 몸상태 등에 따라 동일한 상황에 대해서 다른 판단을 하는 경우가 종종 있습니다. 라벨링을 할 때에도 유사한 데이터인데 이전에는 A라고 판단했지만 다음에는 B라고 판단할 수 있습니다. 

    셋째, 단순 실수 (human error) 입니다. 쉽게 말해 라벨을 판단할 때는 A라고 생각했는데 막상 라벨을 기입하는 단계에서 실수로 B라고 입력한다거나 혹은 object detection 을 할 때 엉뚱한 위치를 클릭하는 경우 등을 말합니다. 


    제가 경험한 바에 의하면, 라벨 정보의 신뢰성 문제는 서비스 구축에서 큰 골치거리입니다. 라벨이 잘못된 경우 아무리 좋은 데이터와 모델링 기법을 사용하더라도 정확한 모델을 만들 수 없습니다. 대개 우리는 학습 데이터의 라벨을 정답이라고 믿습니다. 하지만 실제로는 많은 오류가 있을 수 있습니다. 심지어 이미지 인식 분야에서 가장 널리 사용되는 데이터인 ImageNet 에도 라벨링 오류가 있습니다 (이에 대해선 https://planspace.org/20170911-problems_with_imagenet_and_its_solutions/ 를 읽어 보시기 바랍니다). 

    따라서 1) 신뢰도를 어떻게 측정할지, 2) 라벨의 신뢰도를 높이려면 어떻게 해야할지, 3) 낮은 신뢰도의 라벨 정보를 이용해서 어떻게 신뢰도 높은 서비스를 구축할 것인지를 해결하는 것은 실전 ML 서비스를 구축할 때 가장 먼저 극복해야 할 문제입니다. 


    특히, 라벨 신뢰도 문제는 학습 데이터의 양이 많지 않거나 혹은 오탐이 있으면 안되는 매우 민감한 분야라면 더욱 중요합니다. 게임 분야에서는 소위 오토라고 부르는 불법 프로그램 사용자를 탐지하는 분야가 그렇습니다. 만약 예측 모델이 정상 사용자를 불법 프로그램 사용자로 잘못 판정할 경우 자칫 법적 분쟁이 발생할 수 있기 때문이죠. 


    라벨 신뢰도 문제를 해결하기 위한 방법은 크게 두 가지로 나눌 수 있습니다. Label noise reduction 과 weak supervised learning 이 그것입니다. 


    Label noise reduction은 라벨에서 오류나 노이즈를 찾아 보정하는 기법입니다. 이와 관련해서는 https://deview.kr/2019/schedule/322 를 참고하시기 바랍니다. 참고로 예전에 저희도 NDSS 2016 에 발표한 논문 (https://www.ndss-symposium.org/wp-content/uploads/2017/09/you-are-game-bot-uncovering-game-bots-mmorpgs-via-self-similarity-wild.pdf) 에서 불법 프로그램 사용자를 탐지하는 모델을 만들기 위해 아래와 같은 세 가지 프로세스를 적용하여 라벨 데이터를 구축한 적이 있습니다. 


1) 개인의 주관적 편향 제거 - 동일한 데이터에 대한 라벨링에 3명의 심사자가 판정을 해서 모두 동일한 판정을 한 데이터만 정답 집합으로 이용

2) 라벨 불일치 문제 제거 - 봇과 사람을 판정할 때 판정 사유를 적게 하고 각각의 사유를 다시 정제하여 다음 데이터 판정 시 참고하도록 하여 최대한 동일 기준으로 판정할 수 있게 유도

3) 단순 실수 제거 - 생성된 정답 집합에 대해 Leave-One-Out Cross Validation (LOOCV) 기법을 적용하여 예측 결과와 실제 라벨이 다른 케이스를 탐지한 후 탐지된 결과에 대해 심사자에게 재검증 요청


    참고로 LOOCV 는 전체 데이터 중 하나를 제외한 나머지를 학습 데이터로 사용하고 남은 하나만 예측하는 방식입니다 (아래 그림 참조). 극단적으로 많은 학습 데이터를 이용하기 때문에 대개의 경우 예측 결과가 틀릴 가능성은 매우 낮습니다. 따라서 만약 예측이 틀렸다면, 해당 라벨이 실수로 인해 잘못 기입되었을 가능성이 높겠죠. 그래서 이를 통해 단순 실수에 의한 오류를 제거하였습니다. 

Leave One Out Cross Validation (LOOCV)


    위 방법을 통해 매우 신뢰도 높은 라벨 데이터를 구축할 수 있었지만 대신 너무 많은 비용이 드는 문제가 있었습니다. 엄밀한 연구를 위해선 괜찮을지 모르겠지만, 지속성이 필요한 실전 서비스에는 적합하지 않은 방법이었습니다. 실전 서비스를 위해서는 라벨의 신뢰도뿐만 아니라 구축 비용을 고려해야 합니다. 


    Weak supervised learning 은 신뢰도는 낮지만 비교적 쉽고 저렴하게 생성할 수 있는 라벨 정보를 이용해서 신뢰도 높은 모델을 학습하기 위한 기법입니다. 이건 저희가 최근에 관심을 갖고 연구하고 있는 방법입니다. 

    개인적인 생각에는 weak supervised learning 이 실전 서비스에 좀 더 적합한 방법이 아닌가 싶습니다. 그 이유는 크게 두 가지입니다. 첫째, 회사에는 여러 도메인 전문가들이 있고, 이들은 풍부한 경험과 직관을 통해 (모델링에 충분할 만큼 엄밀하지는 않지만) 비교적 괜찮은 라벨을 생성할 수 있는 휴리스틱 룰을 갖고 있습니다. 둘째, 이런 도메인 전문가들과 자연스럽게 협업하는 프로세스를 구축할 수 있습니다. 

    특히 두번째 이유가 중요한데, 예측 모델 서비스가 현업에 적용되려면 리더의 의지 못지 않게 기존 실무진들의 협조가 필요합니다. 대체로 기존 실무진은 새로운 기술이 자신들의 자리를 위태롭게 만들지 않을까 두려움이 있습니다. Weak supervised learning 은 기존 실무진의 도메인 지식과 예측 모델이 협업을 통해 시너지를 발휘하는데 있어 ('21세기판 인형 눈알 붙이기'라는 인식이 강한) human labeling 보다 좋은 구조인 것 같습니다. 

    Weak supervised learning 을 위해 저희가 진행하는 작업에 대해서는 https://danbi-ncsoft.github.io/works/2020/10/19/snorkel-label.html 를 참고하시기 바랍니다. 


    제가 생각하기에 라벨링은 사람이 직접 생성하는 방식보다는 가급적 라벨링 기준을 정해서 데이터로부터 직접 추출하는 방식을 찾는 것이 좋습니다. 그런데 이 경우 라벨링 대상에 대한 정의를 어떻게 할 것인지 모호한 경우가 있습니다. 

    예를 들어, 비구독 (non-contractual setting) 서비스에서 고객의 이탈을 정의하는 것을 생각해 보시죠. 비구독 서비스는 유저의 가입/해지 절차가 없기 때문에 유저의 잔존/이탈 상태가 불명확합니다. 대개 '서비스를 오랫동안 이용하지 않는 경우' 를 '이탈'로 정의하는데, 얼마나 오랫동안 이용하지 않는 경우를 이탈로 정의해야 할까요? 물론 이것을 통계적으로 정하는 방법이 있습니다. 이를 테면, Negative Binomial 분포를 이용해서 기존에 관측된 방문 빈도를 보고 향후 재방문할 확률을 추정하는 것이죠. 

    이 때 만약 라벨에 대한 신뢰도를 충분히 높이기 위해 이탈에 대한 기준을 너무 길게 정할 경우 (즉, 이탈로 판정하기까지 기다리는 기간을 너무 길게 정할 경우) 회사에서는 그만큼 손해가 될 수 있습니다. 왜냐하면, 이탈 기준에는 미치지 못하지만 장기간 재방문을 하지 않는 고객에게 아무런 판촉 활동을 하지 않는 것보다는 다소 신뢰도가 떨어지더라도 좀 더 기민하게 고객에게 반응하는 것이 더 좋을 수 있기 때문이죠. 따라서 라벨 기준을 정의하는 문제는 비용 편익을 고려해서 예측 대상과 목표를 정하는 문제와도 연관이 있습니다.


    더 나아가 라벨링 기준은 모델링과도 밀접하게 연관됩니다. 위에 예에서 이탈 기준을 정할 때 재방문 기간을 너무 길게 잡으면 그만큼 학습 데이터와 실제 모델이 사용되는 시점 사이에 기간이 멀어집니다 (아래 그림을 참고하세요). 이렇게 되면 모델은 최신 경향을 학습하지 못합니다. 

    예를 들어 온라인 쇼핑몰에서 고객 이탈 예측 모델을 만든다고 생각해 보죠. 만약 최근 3개월 간 서비스에 접속하지 않는 경우를 이탈로 정의한다면, 이 모델은 올 여름에 방문한 고객의 이탈 패턴을 예측할 때 기껏해야 작년 여름에 방문한 고객의 패턴 정보를 사용할 수 있을 뿐입니다. 이것이 무조건 잘못되었다는 뜻은 아닙니다. 다만 예측 모델을 이용한 서비스를 만들 때 이런 연관성을 충분히 인지하고 있어야 합니다.


    위 문제는 'concept drift' 문제와도 연결됩니다.  'Concept drift' 는 시간이 지남에 따라 예측 대상의 통계적 특성이 변하는 상황을 뜻하는 용어입니다 (https://en.wikipedia.org/wiki/Concept_drift). 예를 들어 온라인 게임의 경우 게임 컨텐츠가 바뀌거나 혹은 캐릭터의 레벨이 성장함에 따라 행동 특성이 바뀌게 되고 이로 인해 이탈 고객의 게임 활동 패턴 역시 바뀔 수 있는 것이죠.

    따라서 만약 고객 이탈 기준의 신뢰도를 높이기 위해 고객의 미접속 기간 기준을 지나치게 길게 할 경우 concept drift 로 인해 모델이 탐지한 행동 패턴과 실제 예측에 사용하는 시점의 행동 패턴 사이에 차이가 발생하게 됩니다. 그럼 예측의 정확도가 떨어지게 되죠. 반대로 concept drift 문제를 완화하기 위해 고객의 미접속 기간 기준을 짧게 하면 이번엔 고객 이탈 기준의 신뢰도가 낮아지게 됩니다. 그럼 역시 부정확한 라벨을 사용한 예측 모델의 정확도가 떨어지게 됩니다. 결국 미접속 기간을 이용해서 이탈의 기준을 정하게 될 경우 라벨의 신뢰도와 행동 패턴의 신뢰도 사이에 trade-off 문제가 발생합니다. 

    위에서는 이탈 기준을 예로 들었지만, 꼭 이런 경우가 아니더라도 라벨 데이터를 구축하는데 시간이 오래 걸리는 경우라면 역시 비슷한 문제가 발생할 수 있겠습니다. 


    지금까지의 내용을 정리하자면, 라벨링의 기준과 방법을 정하는 것은 1) 라벨의 신뢰도, 2) 라벨링에 필요한 비용과 그로인한 편익, 3) concept drift 로 인한 모델의 오차 사이의 trade-off 를 고려해야 하는 최적화 문제가 됩니다. 물론 모든 상황에서 이렇게 문제를 복잡하게 풀어야 한다는 것은 아닙니다. 대개 데이터를 어떻게 가공하고 어떤 모델링 기법을 쓸 것인지에 대한 고민은 많이 하는 반면, 라벨링은 크게 신경쓰지 않는 경우가 많은데 이처럼 라벨링도 고려해야할 점이 많다는 것을 상기시키는 취지에서 글을 적어봤습니다. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari