약 9년의 소프트웨어 엔지니어 생활에서 데이터 분석분야로 업무 분야를 바꾼 뒤 약 3년 정도의 시행착오 끝에 현재 데이터 분석가로 탈바꿈을 했고, 어느정도 안정궤도에 올랐다는 생각이 들어 관련 내용을 정리하고자 이렇게 글을 써본다.
“데이터를 분석한다”
많은 사람들이 위 문장을 사용하고 인식하는데 매우 큰 차이를 보이고 있다. 단순히 데이터 전처리 및 단어 카운팅을 하는것을 분석행위라 하는 것 부터, 시각화, 고급 모델링 및 통계분석 추론하는 행위까지 포함하고 있는 문장이기 때문이다. 이 때문에 데이터 분석가라는 직업 자체가 매우 폄하되거나 과대 포장되는 경우가 상당히 많을 것으로 생각된다. 하지만 이 글에서는 “분석한다”라는 의미는 “의사결정에 도움이 되거나 자동화를 위해 데이터에서 통계적으로 유의미한 정보를 추출하는 행위”로 정의하도록 하겠다.
이런 이유 때문에 다수의 소프트웨어 개발자들이 데이터 전처리를 하면서 간단하게 분석을 수행하기도 하고, 오히려 고급 통계분석이나 데이터마이닝을 업무에 적용해 스스로가 데이터 분석가로 거듭나는 사람들이 종종 있다. 반면에 데이터 분석가로 탈바꿈 하고 싶지만 그렇게 하지 못하는 소프트웨어 개발자들도 많이 봐왔다.
소프트웨어 개발자에서 데이터 분석가로 성공적으로 업종 변경을 하는건 경험자의 한사람으로 봤을때 그리 간단한 문제가 아니다. 흡사 오랫동안 오른손을 주로 사용해서 조각을 해온 사람에게 왼손만 사용하게 하는 것과 같은데 예외 사항으로 조각을 위한 도구를 만들때는 오른손을 사용하게 해서 필요한 다양한 도구를 만드는 시간을 단축할 수 있게 하는 상황과 매우 유사하다.
변신을 위해 몇가지 유념해야 될 사항이 있다.
- 그동안 주력 기술과 경력을 쌓았던 소프트웨어 개발 능력이 앞으로는 주력이 되서는 안된다. 이걸 너무도 잘해 계속 성과로 내세우다가는 영영 데이터 분석 업무로 갈 수 없다.
- 소프트웨어 개발은 본인의 분석 업무를 매우 쾌적하게 만들어줄 환경과 빠른 분석을 위한 보조 수단으로 활용한다.
- 데이터 분석가의 KPI와 소프트웨어 개발자의 KPI는 다르다.
위 세번째 항목이 매우 중요한데, 데이터 분석 업무의 궁극적인 목적은 의사 결정을 위한 유의미한 정보 발견이다. 이는 특정 기능을 하는 소프트웨어를 제작하는 행위가 목적인 소프트웨어 개발과는 매우 다른 목적이다. 몇몇 이를 혼동해서 특정 기능을 수행하는 통계 알고리즘을 직접 구현하는데 80%의 시간을 소모하고 20%의 시간을 데이터 분석에 할애하는 개발자들이 종종 있는데, 이는 데이터 분석 업무에서는 도박행위하고 같다. 이 행위는 필자도 수년전 직접 시행착오를 했던 부분인데, 그당시 Neural Network를 Erlang이라는 언어로 직접구현(노드를 worker로 할당해 학습을 분산시키는 개념)하고 데이터 분석을 하고자 했는데, 알다시피 Neural Network와 같은 데이터를 입력으로 받고 데이터로 모델링을 하는 학습 알고리즘의 경우 디버깅이 매우 어렵다. 게다가 Neural Network 자체가 블랙박스 모형이라는 점도 큰 장애물로 작용을 했다. 이렇게 80% 이상의 프로젝트 시간을 구현에 허비하고 남은 20%의 시간만 실제 데이터 분석에 투자하는 과오를 범하고 말았다. 결국 프로젝트는 앞으로 이렇게 하지 말아야 겠다는 교훈만을 남긴채 실패하고 말았다.
이 당시 나는 개발자적인 만족감에 도취되 Erlang언어로 Neural Network를 직접 구현하는 만행을 저질렀다. 이런 만족감 이면에는 통계분석의 경험 부족을 개발 결과물로 어느정도 보완하고자 하는 무의식적인 의도가 있었던 것이 아니였을까 회상해 본다. 이 당시 부족한 경험과 실력이지만 그당시 가능했던 통계분석 방법으로 데이터 분석 목적 달성을 위해 노력했다면 어땠을까 하는 생각을 가끔씩 해보기도 하나 개발자에서 데이터 분석가로 가기 위해 어느정도 피할 수 없는 시행착오가 아니였을까 하는 생각이 들기도 한다.
데이터 분석을 하는데, 소프트웨어 개발 기술 및 이해정도는 요즘같은 시기에 매우 큰 힘이된다. 하지만 데이터 분석의 KPI를 잊은채 소프트웨어 개발 결과물을 내세우고 싶은 유혹 또한 있기 마련이다. 이런 유혹을 떨칠 수 있는 사람만이… 다른 능력이 있더라도 데이터 분석 업무의 시행착오를 묵묵히 견뎌낼 수 있는 사람이 데이터 분석 업무로 성공적인 안착을 할 수 있다고 생각한다. 물론 데이터 분석 KPI를 달성하기 위해 새로 습득해야 될 지식과 경험이 생각보다 매우 많다는 함정이 있지만 말이다.
흥미롭게도 소프트웨어 개발과는 다르게 데이터 분석에서 소프트웨어 혹은 코드조각은 그저 중간 결과물에 지나지 않는다. 한번의 분석을 위해 수백라인의 R코드를 작성하지만 분석 결과가 무의미 하다면 코드는 쓰레기통에 들어가고 만다. 코드가 가치가 있으려면 데이터 분석 결과가 유의미 해야되고 이를 배치잡으로 동작시킬 필요가 있을때 비로소 분석 코드가 소프트웨어로 되살아날 기회가 생긴다. 따라서 분석과정에서는 개발과정과 같이 심혈을 기울여 최적화된 코드를 미리 작성할 필요가 없으며 이미 존재하는 알고리즘을 재구현할 이유도 없는 것이다. 프로토타이핑을 하듯이 데이터 분석코드는 작성할 필요가 있고, 이미 존재하는 알고리즘은 사용과 해석에 필요한 지식을 습득하는데 투자를 하고 가져다 쓰는게 가장 좋다. 이는 데이터 분석 및 모델링에 ‘은제탄환(Silver Bullet)’이 존재하지 않기 때문이며, 목적에 맞는 탄환을 빠르게 찾아서 선택사용하는게 데이터 분석 KPI를 달성하는데 가장 좋은 접근방법이기 때문이다.
“직접 만들지 않고 이렇게 가져다 쓰기만 하면 내가 얻는게 뭐가 되나요?” 하고 소프트웨어 개발자 관점의 질문을 할 수 있다고 생각하는데, 데이터 분석을 하다보면 해석과 추론을 위해 알아야 될 통계지식이 너무도 많이 요구된다. 그 지식을 실무에 적용 시키는 훈련이 곧 학습이 되고 경험이 되는 것이다. 흥미롭게도 위와 같은 질문 자체가 아직 소프트웨어 개발의 KPI에서 벗어나지 못했다는것을 의미하기도 한다.
데이터 분석가의 KPI 그리고 소프트웨어 개발자의 KPI by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.