작년 언젠가 회사 PD분이 위 질문을 했다.
아마도 그때 답변은 미지의 데이터에 대해서 학습된 데이터를 기반 예측을 해서 자동으로 어떠한 처리하기 위해 ML을 사용한다고 한거 같다.
쩝~ ML 공부만 하고 실무는 전혀 안해본 샌님이나 할 수 있는 대답이다.
오늘 분류데이터를 분석하면서 왜 ML을 사용해야 하는지 정말 절절하게 깨달았다. 이 느낌은 이전에 스팸관련 논문을 쓰면서 ML실험을하는 과정에서 얻은 그런 느낌하고는 차원이 달랐다. 왜 내가 ML을 하고 있는지 이유에 대해서 여태 추상적이고 애매했다고 한다면 이제는 왜 ML을 해야 하는지 사명감이 생겼다고나 할까?
일반적으로 위와 같은 분류기가 얻어진다. 진한선의 분류함수가 더 나은가 아니면 점선의 분류 함수가 더 나은가?
내 생각에는 진한선의 분류함수가 정답에 가깝다고 생각한다.
아마도 O 과 +는 training set과 test set일 것이다. 그러니 저 데이터들이 전체 데이터들의 대표성을 띄기에는 약간 힘든 데이터일 거라 생각한다. 왜냐면, editorial judgment 는 사람이 직접 판단을 하는거고 그 판단 리소스는 대상이 되는 데이터 전체 셋에 비해 항상 부족하고 그 부족함에 비례해 사람의 판단 error에 민감해 지기 때문이다.
따라서 저 점선은 training set에 대해서 over fitting된 데이터가 될 것이다.
문제는 그러면 저 진한선이 점선보다 더 좋다는 근거가 있느냐이다.
그 근거에 대한 좋은 예제를 일하는 도중에 찾았다.
사실 요즘 가장 많이 하고 있는 작업이 데이터를 핸들링 하는 작업과 그것을 가지고 Machine Learning을 하는것이다. 저번 Platformday 2008 발표하는곳에 와서 내 발표를 들었다면 대충 어떤일인지 감이 올 것이다. 물론 Hadoop하고는 전혀 관련없다. ^^;
전문적인 Editor님께서 데이터를 분류해 주셨고 그것을 기반으로 분류기 테스트를 수했하면서 각 feature당 데이터 분포그래프를 그려서 그 결과와 정답셋을 비교해 봤다.
다차원 벡터여서 그래프 그리는게 좀 빡셨지만 그 결과 그래프들간의 유사성을 보고 상당히 많이 놀랐다. 게다가 editor분이 특정 주제에 bias되었든지 그때 졸려서 그랬던지 그래프에서 쭉 삐져 나온 데이터에 대해서 상당히 이 ML분류기가 정규화를 잘 시켜주는 것이였다.
예를 들어보자.
위 그래프는 training set의 6개의 feature의 분포를 의미하는 데이터이다.
이걸 잘 보고 아래 두가지 그래프 셋에서 경향이 더 가까운 것을 고르는 테스트를 해보자.
(1), (2) 그래프 중에서 어떤것이 training set과 유사한가?
솔직히 사람이 분류한 데이터의 그래프와 ML로 분류한 데이터의 그래프를 누가 judge했는지 숨기고 어떤 데이터가 상당히 배경지식에 맞게 잘 나왔는지 선택하라고 한다면 나와 내 옆의 과장님은 둘다 ML을 통해서 나온 결과라고 말할 것이다.(실제 그랬다. ^^)
그렇다 ML에서 나온 결과가 (2)번 결과이다.
그러면 사람이 기계보다 못한건가? 사람은 한순간 감정 상태나 여러 상황에 의해 판단이 달라질 수 있다. 그것에 과도하게 맞춰지는 분류기는 이래저래 휘둘리고 그런 판정 에러 데이터 덕분에 많은 judge error를 낼 수 있다. 그렇지만 우리의 분류기는 흡사 두 그래프 사이의 중간존재를 의미하는것처럼 상당히 normalization을 잘 해주고 있다.
그러면 사람이 판단한게 필요없다는건가? 그건 절대 아니다. 사람이 판단한 데이터 셋이 많을수록 특정 feature는 방향성을 띄게 되어 있고 위와 같은 판정 에러를 이길수 있는 그런 background 정보가 누적된다.(흡사 정규분포 곡선에서 평균점을 찾는것처럼 ) 그렇게 함으로써 기존에 들어오지 않았던 데이터에 대해서 그럴듯한 판정을 내려줄 수 있는 강건한 분류기가 되는 것이다.
그래서 특정한 서비스의 목적에 맞게 editorial을 함에 있어서 명확한 판단 기준을 정해주고 그런 editor분들의 정신이 녹아 있는 데이터를 소중히 여기고 관리하는 자세가 필요하다고 생각한다. (앞으로 editor들을 editor님이라고 부를꺼라 맹세하겠다. ㅡㅡ; )
나역시 성공적으로 분류기를 실행하고 데이터 분석을 하면서 가장 먼저 생각이 났던것이 저 알고리즘을 구현하게 중요한 힌트를 제공해준 본사의 박사님들이 아니라 저것을 분류해줬던 editor분이였다. 사실 training set과 test set 두개의 분포를 보더라도 상당히 유사한 경향을 띄고 있다는걸 알수 있다. 그렇다는건 그분이 어느 특정한 기준에 의해서 스코어를 매겼다는것이고 그만큼 고민도 많이 했다는 것이다. 알고리즘도 중요하지만 저런 editorial을 하기 위한 준비된 기준과 자세는 아마도 알고리즘을 설계하고 코딩하는 작업 이상일지도 모른다는 생각을 해봤다.
위에서 (1)번 그래프와 training set그래프 사이에 (2) 번 그래프가 흡사 위치해 있는것 같다고 말했다. 아마도 overfitting이되었다면 training set그래프와 99% 닮아 있었을거고 그 그래프는 아마도 처음 표에서 점선으로 표시된 분류함수가 되었지 않았을까 생각해 본다.
학습이라고 해서 조금 알려주면 다 판단 할 수 있는것처럼 ML이 미화되기도 하는데 이제는 좀 알것같다.
그래서 그냥 사람이 수동으로 분류하지 왜 굳이 리소스를 순간적으로 더 들여 ML로 하려 하느냐? 고 다시 묻는다면 이렇게 말하겠다.
“순간 순간 판단 에러가 있을수 있는 불완전한 우리네 사람들이 진실로 의도하고 판단하고자 하는 기준이 뭔지를 알기 위해서다.” 라고 말이다.
그리고 몇가지를 메모해본다.
1. 에디터는 정규 에디터 교육을 받은 사람이 해야 한다.
2. 에디팅 판정 결과들이 어떻게 production에 영향을 미치는지 충분한 설명과 사명감 고취가 필요하다.
3. 에디터를 단순 편집자로 여겨 비정규직으로 고용하는건 반대다. (에디터 경험은 돈주고 사지 못할 경력이다.)
4. 우리가 생각하는 것보다 에디터분들은 훨씬 중요하고 그 중요도를 판단하는건 시스템을 지능화 하려는 의지이다.
5. 네이버를 비롯해 국내 여타 포털에서 단순 에디팅 작업을 하는 에디터는 내가 말하는 에디터가 아니다.
6. 내 경험상 네이버를 비롯한 국내 여타 포털은 진정한 자동화와 지능화를 위한 에디터활용을 할 생각이 그닥 없다. (아니면 그런걸 결정하는 사람이 ML을 이해하지 못하는걸수도 있고.)
오늘 근래에 겪기 힘든 정말 소중한 경험을 한 날이 아닐 수 없다.
그래서 잠이 안온다. ㅋㅋ
ps. 솔직히 6개의 feature중에서 가장 제 구실을 못하는 것이 위에서 3번째 feature다. 이놈은 차원의 저주를 일으킬 수 있는 놈이니 하루빨리 제거해 버려야 한다.
왜 Machine Learning을 사용하는가? by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.