데이터가 아니라 문제를 보자
머신러닝은 주로 2가지 유형의 문제를 해결하고 있습니다. 소프트웨어 서비스의 경우 사람이 구현하기에 너무 복잡한 문제를 머신러닝으로 대신 로직을 만들 수 있고, 데이터 분석의 경우 사람이 유의미한 패턴과 통계적 의의를 찾기 어려울 때 머신러닝이 그 역할을 대신해줄 수도 있습니다.
머신러닝을 공부하기로 마음먹었다면, 머신러닝을 둘 중 어디에 쓰려고 하는지 생각해보는 것이 좋겠습니다. 적어도 데이터 분석에서의 머신러닝은 '문제 해결'이라는 목적을 두고서야 그 의미가 있으니까요.
머신러닝을 처음 접할 때 연습용으로 타이타닉, 붓꽃 데이터를 많이 다룹니다. 확실히 머신러닝을 배우고 싶다면 그 만한 예제가 없죠. 문제는 데이터 분석 자체가 처음인데 머신러닝이 핫하다고 하니 그것부터 다뤄보는 것입니다. '머신러닝'만 떼놓고는 어떤 분석도 할 수 없습니다. 모델 하이퍼 파라미터를 자유자재로 튜닝하는 경지에 이르렀다 해도 그걸로 데이터를 분석하라 하면 어디서부터 뭘 해야 할지 모르는 경우가 많습니다.
머신러닝은 혼자서 데이터를 분석해주는 분석도구가 아니라 패턴을 찾는 알고리즘일 뿐입니다. 어떤 문제가 있고, 그 문제를 해결하기 위해 어떤 패턴을 찾을지, 그리고 그것으로 어떤 분석을 이어갈지는 모두 분석가의 몫입니다. 문제를 정의하고 데이터를 통해 문제를 해결해나가는 분석 경험이 없는 채로 머신러닝을 접하면 마치 머신러닝이 다 해결해줄 것만 같은 환상이 생길 것입니다.
데이터 분석에 있어서 만큼은 온전히 '실무'와 맞닿아 있어야 하며 '비즈니스' 관점에서 접해보는 것이 좋습니다. 아무리 생각해봐도 승객 정보로 생존자를 맞추는 게임이나 꽃잎의 크기로 꽃 종류를 분류하는 것이 현실 문제 해결에 어떤 의의가 있는지 모르겠습니다. 데이터 분석을 위해서 머신러닝은 선택입니다. 머신러닝은 그저 수많은 통계 알고리즘 중 하나로, 필요하면 쓰면 됩니다.
프로그래밍 공부를 생각해보면, 프로그래밍은 처음 배우면 문법에 익숙해진 다음 구구단이나 계산기를 만드는 예제부터 시작하게 됩니다. 이렇게 로직을 설계하고 반복문과 조건문을 최소한으로 사용하면서 프로그램을 구현한다는 것은 입문자 레벨에서 굉장히 큰 의미가 있습니다. 그것이 발판이 되어서 기능을 추가하고, 더 복잡한 로직을 만들어보고 서버를 구축하거나 웹으로도 띄워보면서 적성과 전문성을 찾아가기 때문입니다.
그러나 데이터 분석은 다릅니다. 데이터 분석은 프로그래밍처럼 추상적인 무언가를 개발하고 구현해내는 작업이 아닙니다. 문제를 스스로 정의하고, 데이터와 데이터 속에 존재하는 무언의 규칙을 통해 해결 방법을 찾아내는 과정입니다. 그렇기 때문에 문제와 결과가 이미 딱 떨어지게 정해진 '타이타닉 프로젝트'를 하는 것이 실제로 문제를 맞닥뜨릴 때 아무런 도움이 되지 않는다는 것입니다. 더 정확히는 '문제에 대해 생각할 필요가 없는 타이타닉 프로젝트'를 하는 것이 무의미하다는 것입니다.
머신러닝은 알고리즘을 구현하는 엔지니어링의 영역이므로 개발을 처음 배우는 것처럼 엔지니어링 스킬을 습득하는 것 자체로 즉시 도움이 됩니다. 모델링을 잘하게 될 수는 있다는 것입니다. 그러나 안타깝게도 머신러닝을 배우는 것은 분석을 배우는 것이 아닙니다.
그러니 이 부분을 명확히 하면 좋습니다. 머신러닝 모델을 연구하고 개발하고 싶은지, 아니면 머신러닝을 활용해 고객의 행동 패턴과 매출 곡선을 분석하고 싶은지 말입니다. 이 글을 여기까지 읽고 계신다면 아마도 후자겠습니다.
머신러닝 알고리즘을 연구/개발한다는 것은 '데이터 분석' 행위와 완전히 다른 일입니다. 논문을 보고 알고리즘을 구현하고 개발하는 영역으로, 아직 잘 만들어진 알고리즘을 가져다 사용하는 것도 어설픈 '초심자'가 이러한 모델링에 대해 공부하는 것은 시기상조라 생각합니다.
만약 데이터 분석을 하고 싶다면 일단 머신러닝이 아니라 '문제'에 먼저 집중해보세요. 그 다음 데이터로 문제를 해결해나가면서 필요에 따라 머신러닝을 사용해 보세요. 그렇게 분석을 어느 정도 하게 되면 필요한 모델을 구현하고 다양한 목적에 맞게 설계할 필요도 생깁니다. 이때 cs지식이나 모델링/엔지니어링 기술을 배우며 '데이터 사이언스' 영역으로 역할을 확장하면 됩니다. 아직은 분석에만 먼저 집중하세요. 모든 분석은 문제 정의부터 시작합니다. 문제가 없다면 분석도 없고 머신러닝을 사용할 일도 없습니다.
코딩을 떠올리면 창의성이나 멋진 아이디어로부터 영감을 받아서 멋진 결과물을 만들어내는 것을 생각하곤 하는데, 데이터 분석은 창의나 아이디어로 시작하지 않을뿐더러 애초에 코드 없이 잘만 해왔던 일입니다. 코드는 단지 (어떤 사람에게는) 더 효율적인 도구로 존재할 뿐이며 집중해야 할 곳은 코드가 아니라 '문제'입니다. 프로그래밍과 성향이 너무 다름에도 불구하고 코드를 사용한다는 것 때문에 처음 접할 때 항상 오해가 생깁니다.
데이터 분석의 결과는 분석가가 문제를 어떻게 정의하냐에 따라 완전히 달라집니다. 결과가 모두 같은 프로젝트는 절대 있을 수 없습니다. 문제가 이미 주어지고 결과도 예상 가능하다면 그것은 이미 죽은 분석이니까요.
그러니 처음 데이터 분석을 배울 때는 파이썬 문법이나 머신러닝 알고리즘을 달달 외울게 아니라 특정 현실 혹은 가상의 문제를 정의하고 결론까지 도출해보는 것이 먼저입니다. 코드 한 줄 없이 글로 써도 좋습니다. 심지어 머릿속으로만 생각해도 된다. 아무 생각 없이 코드만 따라 적는 것보다는 훨씬 많은 공부가 될 것입니다. 단, 항상 스스로 문제를 정의하고 새로운 분석만 해야 하는 것은 아닙니다. 좋은 분석이 있다면 따라 작성해도 좋습니다. 물론 '아무 생각 없이'가 아니라 생각을 해야 합니다. 그 과정에서 분석가의 시점을 느껴보면 어떻게 문제를 정의하고 어떻게 그것을 해결해나 가는가에 대한 가르침을 얻을 수 있습니다. 중요한 것은 코드가 아니라 문제와 문제 해결에 대한 생각, 그리고 고민입니다.
저 역시 이런 과정을 거쳐왔으며 직접 문제를 정의하고 분석할 때 많은 도움이 되었습니다. 요점은, 스킬을 외우는 것에서 시작하지 말고, 간단한 분석 경험도 없이 머신러닝 기술을 써먹지 말자는 것입니다. '문제 정의'에 대한 이해가 없는 상태에서 '캐글 타이타닉' 같은 것을 훌륭하게 해낸다고 해도 '문제를 어떻게 풀어나가는가에 대한 배움'은 전혀 얻지 못할 것입니다. 문제을 정의하고, 분석해보는 게 먼저입니다.
데이터 분석을 처음 접할 때 겪는 어려움은 다뤄볼 만한 적절한 데이터가 무엇인지 모르겠다는 것입니다. 이는 캐글이나 통계 사이트에 떠도는 데이터를 있는 그대로 사용하려고 해서 그렇습니다. 확실히 머신러닝을 처음 배우기 위한 데이터셋은 그렇지 많지 않지만 데이터 분석은 그렇지 않다. 그럼에도 불구하고 모두 다 똑같은 데이터를 분석하고 있고, 분석 결과까지 같습니다. '문제'에 대해 고민하지 않으면 이런 일이 생깁니다. 그러니 항상 '데이터'보다 '문제'를 먼저 생각해보세요.
데이터 분석을 처음 접하는 많은 입문자 분들이 '문제'보다는 어떤 '데이터'가 분석하기 쉬운지를 1순위로 고려합니다. 그러나 '쉬운 것'이 기준이라면 '쉬운 데이터'가 아니라 '쉬운 문제'를 생각해야 합니다. 문제를 먼저 생각하면 연습할 데이터는 그것에 맞게 찾거나 필요에 따라 조금 수정해서 쓰면 될 일입니다.