최근에 다시 추천 관련 작업을 좀 진행하고 있다. 급하게 마무리해야할 코딩작업이 다 끝나고 나니, 향후에 발생할 것같은 다른 이슈들은 없는지 생각하는 시간이 길어졌다. 그러던 중에 중요하게 해결해야할 문제를 하나 생각했다. 바로 추천 알고리즘이 적용될 그리고 추천될 제품의 수를 늘리는, 즉 커버리지 확대 문제가 대두되었다. 언젠가는 풀고 가야할 것같아서 일단 깊이 고민하기로 했다.
그런데 이 커버리지 문제를 해결하기 위해서는 그저 더 많은 메모리와 더 많은 시간만 있으면 쉽게 해결된다. 데이터를 메모리 상에 올리든 아니면 하드 디스크에 중간 데이터를 남기든 어쨌든 메모리량만 많으면 쉽게 해볼 수 있는 모든 시도를 다 할 수 있다. 그리고 분석시간이 지금의 몇 배 더 들어가면 또 바로 해결된다. 그러나 현실적으로 무한정 메모리를 늘릴 수도 없고 무한정 결과가 나올 때까지 기다릴 수도 없다. 매일 업데이트해야하는 데이터를 위해서 며칠동안 프로그램을 돌릴 수는 없는 노릇이다. (어쩌면 그래서 나온 것이 분산처리로 메모리를 늘리고 시간을 줄이는 것이긴 하다.) 그래서 또 페이스북에 주제넘은 글을 남겼다.
메모리와 시간만이 문제를 해결해주겠지만 바람직한 해결책이 아니다.
보통 그렇다. 평소에 접하지 않던 생소한 문제를 만나면 당황하고 생각할 시간이 필요하다. 그런데 새로운 문제를 만났을 때 바로 떠오르는 해결책이 있다면 그것은 별로 좋은 해결책이 아닐 가능성이 높다. 앞의 추천 문제에서 메모리를 늘리고 충분한 시간이 주어지면 해결해드리겠습니다와 같은 해결책이 바람직하지 않다. 그런데 또 새로운 문제를 만났을 때 바로 해결책이 떠오르지 않는다면 이런 문제도 영원히 제대로 못 풀 가능성이 높다. 참 아이러니한 말이다. 문제를 처음 접했을 때, 틀린 감이더라도 감은 잡아야 그 문제를 더 깊이 파고 들 수가 있다. 그런데 아무런 감흥이 없다면 관심에서 멀어지거나 해결할 능력이 없음을 스스로 인정하는 꼴이다.
문제를 느꼈으면 더 깊이 고민해서 더 좋은 솔루션을 찾도록 노력해야 한다. 추천에서 커버리지 문제를 생각했을 때, 비록 올바른 방법은 아닐지 몰라도 메모리와 시간을 요하는 방법을 생각하지 못했다면 그것을 개선 또는 대체할 더 좋은 생각을 꺼집어내지 못했을 거다. 문제를 느꼈을 때만이 문제의 완벽한 솔루션을 찾지 못하더라도 적어도 타협안을 제시할 수 있다. 주어진 문제에 새로운 가정을 더 넣는다거나 기존 가정을 제거해서 비슷하지만 새로운 문제로 전환할 수도 있다. 추천 문제에서 모든 제품의 커버리지를 확대할 것이 아니라, 최근에 추가/조회된 제품들만 커버리지를 넓힌다와 같이 문제를 변형해서 대안을 제시해줄 수가 있었다.
잘못된 해결책, 없는 해결책... 일단 문제가 있으면 해결책이 없을 수가 없다. 적어도 잘못된 해결책이더라도 있다. 그러나 잘못된 해결책만 있으면 슬픈 현실이다. 바른 해결책이 필히 있다고 믿는다. 비록 그것이 매우 어려울 수는 있다. 문제를 접했을 때 떠오른 잘못된 해결책을 끝까지 고수하는 것이나 그런 해결책도 생각해내지 못하는 것이나 다 슬프다. 그리고 해결책에 맞는 문제를 찾아서 문제에서 해결책을 찾아낸 것같이 사기를 치지도 말았으면 좋겠다. 요즘 내가 그런 것같다. 그냥 해결책을 가지고 그것에 맞는 문제를 찾아나서는 것같다. 그러니 적당한 문제를 찾지 못하고 애를 먹는다. 해결책이 있는 문제에 과정이 빠지면/없으면 그건 사기다.
(2013.04.23 작성 / 2013.04.30 공개)
페이스북 페이지: https://www.facebook.com/unexperienced