박주형 애자일소다 선임연구원

▲ 박주형 애자일소다 선임연구원

[컴퓨터월드] 많은 분석가들은 좋은 모델을 통해 원하는 수준의 결과를 얻으려 한다. 하지만 경우에 따라 적절한 데이터로 최상의 결과를 끌어내야 하는 때도 있다.

딥러닝 분야에는 흔히 ‘State of Art’라고 하는 최고의 모델이 있다. 매년 바뀌긴 하지만 현재 최고로 평가받는 모델인데, 그 모델로도 만족할 만한 결과를 얻을 수 없다면 모델 외적인 부분에 변화를 주어야 한다. 필자는 작년, 모 손해보험사에서 추진한 ‘이미지 분석 프로젝트’를 수행하면서 이 점을 크게 느꼈다. 그 경험을 분석가와 분석 프로젝트를 진행하는 사람들과 공유해보고자 한다.


사진으로 파손 정도를 파악하라!

해당 프로젝트의 목표는 인공지능 기술을 활용해 사고 차량을 사진으로 확인하고, 파손 정도를 추론해내는 것이었다. 보통 자동차 사고가 발생하면 손보사와 연계된 공업사로 옮겨지고, 공업사에서는 파손된 부위를 찍어 손보사에 보내 수리비를 청구하게 된다. 이 사진을 분석해 수리 시간을 기준으로 여섯 단계 심도로 구분해 둔 ‘파손 정도’를 파악하는 것이 이 프로젝트의 핵심이었다.

우선 모델의 학습을 위해서 과거 발생했던 사고 이미지들을 고객사로부터 제공받았다. 이 데이터들을 대상으로 별도의 가공 없이 학습을 진행한 결과 검증 데이터의 정확도가 다소 낮게 나왔다. 이미지 인식 대회에서 우수한 성적을 거둔 검증된 모델을 사용한데다 충분한 데이터와 강력한 컴퓨팅 파워를 이용했는데도 정확도가 낮았던 이유를 찾아야 했다.

다각도로 살펴본 결과 학습 데이터에서 문제를 찾을 수 있었다. 제공된 데이터는 각 사진마다 차량의 각 부품별 파손정도를 같이 보내주는데 여기에 문제가 있었다. 똑같은 파손이어도 공업소에 따라 걸리는 시간이 다르고 보험사에 있는 손해사정인들도 인정하는 작업시간이 제각각 다른 까닭이었다.


방법 하나, 데이터 리레이블링

딥러닝의 특성상 잘 섞인 트럼프카드의 순서와 같은 랜덤 레이블에 대해서도 충분한 학습이 이루어지면 그 데이터를 모두 외워버리게 된다.[1] 아무리 좋은 모델을 이용해 학습한다 하더라도 데이터의 레이블링이 잘못 되어있으면 학습데이터에 과적합이 일어나 형편없는 검증결과를 얻게 되는 것이다.

모델의 정확도를 올리기 위해서는 데이터의 레이블링을 다시 진행해야 한다고 생각했다. 파손사진에 파손 정도를 레이블링하는 주체는 손보사 보상직원이었기 때문에 레이블링이 필요하다고 판단되는 그레이존을 모아 리레이블링을 요청했고, 그 결과 모델의 정확도가 어느 정도 향상되었다. 하지만 총 데이터의 수가 100만 장이 넘어 사람이 모든 사진을 눈으로 보기에 무리가 있었다.

이에 필자는 리레이블링을 요청했을 때 레이블이 실제 바뀌어서 돌아오는 사진의 패턴을 파악하고 규칙을 찾아서 기계적으로 레이블링을 바꿀 수 있게 하는 오토-리레이블링 알고리즘을 만들어 인력 투입을 줄이는 방향으로 나아갔다.


새로운 아이디어, 멀티레이블 활용

레이블이 잘못된 경우는 정답에 근접한 파손정도로 붙어있는 건들이 많았다. 예를 들면 파손(소)인데 파손(중)으로 되어있는 경우처럼 바로 옆 심도를 산출한 것이다. 이런 경우는 정말 보는 사람에 따라 파손(소)일 수도 파손(중)일 수도 있겠다는 생각이 들었다. 심지어 보는 사람에 따라 3가지 다른 파손정도를 레이블링한 사진도 있었다.

이처럼 데이터에 정답이 명확하지 않거나 여러 가지일 때 사용하는 방법이 있다. 바로 멀티 레이블 분류(Multi-label classification)다. 이 방식을 사용하면 하나의 인풋으로 여러 개의 아웃풋을 내는 분류기를 만들 수 있다. 일반적으로 흔히 사용되는 방식은 아니지만 이번 프로젝트에서 파손(소)와 파손(중) 사이의 어중간한 파손을 회귀식으로 풀 수 없었기에 이 방법을 사용하는 것을 검토했다.

기존 레이블에 문제가 있어 새롭게 리레이블링이 됐다면 이 두 레이블을 이용해서 멀티 레이블 분류 모형으로 학습을 진행했고, 결과는 여러 개의 아웃풋 중에서 가장 확률이 높은 심도를 채택하는 것으로 구성했다. 그 결과 또 한 번 정확도가 향상될 수 있었다.


정확도를 위한 최종 시도, 인식범위 재정의

머신러닝을 이용해서 분석을 하는 사람들이 주로 하는 실수는 데이터를 일단 넣고 돌리는 데에서부터 출발한다는 점이다. 가령 테니스공을 튕기고 있는 동영상이 있을 때 현재 프레임에서 테니스공의 다음 움직임을 예측하고 싶다고 가정해 보자. ‘동영상은 연속된 이미지로 구성된 데이터이므로 CNN과 LSTM을 적절히 섞어서 모형을 만들면 문제를 풀 수 있겠다’는 생각이 가장 먼저 떠오른다. 하지만 물리학을 알면 테니스공의 무게와 속도, 중력가속도, 저항 등 간단한 자연계 법칙을 이용해 훨씬 쉽게 문제를 풀 수 있을지도 모른다.

아래 그림은 자동차 사진이 들어왔을 때 물체인식 알고리즘을 이용해서 자동차 외관을 인식한 모습이다.

▲ <그림> 자동차 사진이 들어왔을 때 물체인식 알고리즘을 이용해서 자동차 외관을 인식한 모습

이전까지는 자동차 사진을 모두 인식해서 특정 크기를 넘어가면 전체를 인식대상으로 생각했다. 하지만 간단한 이치를 놓치고 있었다. 위 사진을 보면서 “사진을 찍은 사람은 무엇을 찍고 싶었을까?” 생각해 보았다. 과연 우측 앞도어와 뒷도어까지 찍고 싶었던 것일까? 아니다. 그저 우연치 않게 찍혔을 뿐이다.

일반적으로 사진을 찍을 때에는 정 중앙에 포커스를 두고 찍기 마련이다. 아마도 위 사진은 우측 앞휀더를 중심으로 후드 범퍼까지 찍고 싶었을 것이다. 그래서 사진의 중앙에서 작은 원을 그려 그곳에 포함되는 부위만 인식을 하고 나머지 부위는 심도 인식 대상에서 제외시켜 보았다. 10%의 오차마저 최대한 제거하려는 의도였다. 이제 정확도는 최상위 수준으로 높아졌다.

필자는 이번 프로젝트에서 모형을 바꾼 것이 아니라 리레이블링, 멀티 레이블, 인식 범위 재정의를 통해서 세 번의 정확도 향상이라는 결과를 만들어 낼 수 있었다. 이처럼 때로는 모델 보다 데이터 가공이나 단순한 논리를 적용해 모형을 성능을 높일 수도 있다는 점을 배웠다. 지금 이 순간 시행착오를 겪고 있거나 더 높은 정확도를 위해 고민하고 있는 분석가가 있다면 이 사례를 참고로 하여 새로운 시각으로 접근해 볼 수 있기를 바란다.

저작권자 © 컴퓨터월드 무단전재 및 재배포 금지