by Kaya, 큐피스트 데이터 클래스 리더 | 큐피스트 기술 블로그
이 글의 제목은 "(큐피스트) 데이터 분석 실무에서 필요한 5가지 역량"입니다. 회사의 조직 구조나 업무 환경, 의사 결정 방식에 따라 중요한 가치는 상이할 수 있습니다. 이 내용은 30명 규모의 스타트업이자 빠른 속도와 린(lean)함을 추구하는 큐피스트가 "좋은 데이터 분석가"에 대해 고민하는 과정의 일부입니다.
흔히 데이터 분석 혹은 데이터 과학 분야에서 업무를 잘하기 위해선 컴퓨터 공학, 수학/통계학, 그리고 비지니스까지 세 분야를 아우르는 지식을 갖고 있어야 한다고 합니다. 아마 데이터 분야에 관심이 있다면, 왼쪽의 밴 다이어그램을 못 보신 분들은 거의 없을 거라 생각해요.
그런데 저 세 가지를 다 잘 하라는 건 해도 너무하지 않나요? 솔직히 저 중 하나만 제대로 알기도 힘든데 말이에요. 가령 데이터 분석을 하기 위해 수치해석학을 반드시 알아야 하는 건 아니잖아요? 흠. 그렇다면 방대한 세 분야에 대해 도대체 무엇을 얼마나 공부해야 좋은 데이터 분석가가 될 수 있는 걸까요?
오늘은 큐피스트의 데이터 클래스가 생각하는 "데이터 분석가의 5대 역량"에 대해 이야기하려 합니다. 이 다섯 가지는 현재 큐피스트 데이터 클래스원의 직무 역량 평가 혹은 채용 기준으로 활용할 만큼 의미 있게 여기는 역량입니다. 그럼 밴 다이어그램에서 강조하는 세 분야가 큐피스트에서는 어떻게 활용되고 있는지 살펴보겠습니다 
첫째, 통계 지식에 기반한 분석력
상황에 맞는 분석 기법을 활용하여 통계적 판단을 내릴 수 있는가?
먼저 가장 중요하게 여기는 역량은 통계 지식입니다. 데이터 분석가는 통계적으로 의미 있고 명확한 분석을 실시하며 그에 따른 분석 결과에 책임을 져야 합니다. 통계 지식에 기반한 분석이 결코 '아묻따' 머신러닝을 돌리는 행위를 말하는 것은 아닙니다. "95% 신뢰수준에서 귀무가설이 기각되었다"라는 남들이 이해하지 못할 용어로 리포트를 작성하는 것을 말하는 것은 더더욱 아닙니다. 문제를 풀기 위해 적절한 방법을 선택하고, 불분명한 수치를 보고 유의미한 기준을 바탕으로 판단을 내릴 수 있는 것을 의미합니다.
허나 통계에 대한 기반 지식이 당장의 업무 성과에 가시적으로 기여하지 않을 때도 있습니다. 이를테면 모든 분석에서 차원 축소, 다변량분석 등의 전문적인 통계 기법을 사용하는 것은 아니기 때문이죠. 하지만 통계 '밑천'이 없다면 아래와 같은 결정적인 순간에서 좌절하여 분석이 표류하게 되거나, '분석가의 주관'이라며 어영부영 넘어가는 경우가 많아지면서 분석의 신뢰도를 낮추는 우를 범하기 쉽습니다. 따라서 통계 지식은 데이터 분석가라면 필히 보유해야할 주요한 전문성으로 여깁니다.
분석가를 혼돈에 빠트리는 '과연' 시리즈
•
과연 이 정도 수치 변화가 유의한 차이를 나타내는 것일까?
•
과연 이 문제를 풀기 위해 이렇게 계산하고 판단하는 게 옳은걸까?
•
과연 이 데이터를 바탕으로 현상을 일반화할 수 있을까?
그렇기에 분석가는 통계 지식을 전쟁터에서의 총알과 같이 늘 장전해두어야 합니다. 하지만.. 애석하게도 통계학 공부를 하다보면 당장의 작업과 다소 멀게 느껴지기도 하고, 솔직히 좀 지루합니다. 그래서 의식적으로 시간을 내지 않으면 지식을 쌓는 것이 쉽지 않죠. 그래서 큐피스트의 데이터 클래스는 직무 역량 성장을 위한 다양한 범주의 스터디 중에서도 통계에 관한 것을 최우선순위로 여깁니다. 현재 통계학 스터디를 매주 진행하고 있으며, 앞으로도 통계학에 대한 공부를 영원히 놓지 않으리라 다짐합니다.
둘째, 비지니스 인사이트 도출 능력
좋은 가설을 수립하고, 비지니스와 UX 관점에서 인사이트를 제시할 수 있는가?
데이터 분석가의 업무 범위는 회사마다 다양합니다. 어떤 분석가는 기획자나 전략가가 분석을 할 수 있도록 '백 데이터'를 추출하는 역할을 하거나, 또 다른 회사의 분석가는 분석을 수행할 뿐만 아니라 액션 플랜을 도출하고 이를 직접 실행하는 역할을 하기도 합니다. 큐피스트는 문제 정의부터 분석 결과에 따른 실행안 도출까지를 데이터 분석가의 이상적인 역할로 보고 있습니다. 분석가는 데이터 분석에 기반하여, 궁극적으로 회사가 좋은 의사결정을 내릴 수 있도록 돕기 위해 존재하기 때문입니다.
그래서 누군가 A를 요청한다면, 분석가가 B, C, D, E까지 고려하는 것을 지향합니다. 분석 결과를 전달받은 사람이 "그래서 뭐요?"하는 의문이 생기지 않게끔 말이죠. 또한 결과를 공유받은 사람이 그래프의 수치 하나하나를 다시 보면서 고민하고 재해석하게 만드는 것도 아주 큰 비효율이라고 생각합니다. 아무쪼록 분석가와 실행가, 혹은 의사결정자 사이에 물 흐르듯 자연스러운 인사이트 교류를 만들어 내는 것이 핵심입니다.
바람직하지 않은 분석 결과를 받은 사람들의 흔한 반응
•
근데 그 데이터 변화가 왜 생긴건데?
•
그래서 우리가 잘 했다는거야 못 했다는거야?
•
그래서 우리가 뭘 해야된다는거야?
"불량 유저 현황을 확인해서 지금 우리의 문제가 무엇인지 알려주세요."라는 요청을 받은 적이 있습니다. 질문의 요지는 '현황'입니다. 분석가로부터 현황을 보고 받는다면 담당자는 그를 바탕으로 대안을 고민하기 시작하겠죠? 아래는 큐피스트 데이터 분석가가 불량 유저 현황을 보고한 내용입니다.
데이터 분석을 바탕으로 개선안, 혹은 실행안까지 제시한 것입니다. 분석가가 혼자 북치고 장구치는 것 같나요? 물론 제안 내용이 해당 분야 담당자가 준비한 만큼 뛰어나지 않을 수 있으며, 때로는 기존의 정책을 뒤엎는 터무니 없는 것일 수 있습니다. 그래서 성심성의껏 준비한 내용이 전-혀 반영되지 않을 수도 있습니다. 하지만 그럼에도 분석가는 분석 과정에서 발견한 인사이트와 의견을 충분히 전달함으로써 회사 전체에 기여하는 게 중요합니다.
또한 "나름대로 고민해서 제안했는데 담당 부서에서 기각했나 보네. 몰라, 난 내 할 일 다했엉"과 같은 수동적인 자세를 지양합니다. 앞서 언급했듯 분석가의 역할은 궁극적으로 좋은 의사결정을 돕는 일이기에, 분석에 대해 스스로 대변하고 적극적으로 솔루션을 제안할 수 있어야 합니다. 그래서 때로는 의사 결정자와 강하게 의견 대립을 하기도 합니다. 물론 본인의 판단 뿐만 아니라, 함께 고려해야 하는 리스크와 대안까지 충분히 전달할 수 있어야 하고요.
비지니스 인사이트 도출 능력이 바로 밴 다이어그램의 도메인 지식과 결부되는 부분 같습니다. 한 마디로 요약하자면, 데이터 분석가는 오지랖이 넓어야 한다고 생각해요. 그래야 실무자들의 고민 해결에 도움을 팍팍 줄 수 있습니다. 따라서 평상시에 다른 팀들이 요즘 어디에 관심이 있고 어떤 고민을 하는지, 점심 시간과 같이 편한 자리에선 주로 무슨 이야기를 하는지 알기 위해 관심을 기울일 필요가 있습니다. 평소에 한 명의 유저로서 프로덕트를 많이 경험해봐야 같은 현상을 보고도 더 풍부한 해석을 할 수 있다는 건 자명하고요. 시장 현황에 대한 이해도가 높거나 UX 디자인, 비지니스 개발 등 한 분야에 전문성을 갖고 있는 것도 큰 자산이 되며, 관심을 갖고 해당 영역을 알아나가는 것도 같은 의미에서 자산이 됩니다.
셋째, 커뮤니케이션 역량
분석 결과를 구성원들이 이해하기 쉬운 형태로 전달하는가?
데이터 분석에서 커뮤니케이션 역량이라 하면, 데이터 시각화 능력을 일컫는 경우가 많습니다. 시각화는 데이터 분석가들이 유독 집요하게 즐기는(?) 부분인 것 같아요. 물론 저도 그 중 한 명입니다. 하지만 데이터 시각화를 커뮤니케이션 역량이라 정의한다면, 우리의 커뮤니케이션은 반드시 시각화를 포함한다는 의미가 됩니다. 과연 그게 옳을까요?
우리가 커뮤니케이션을 할 때는 시각화된 자료 없이 구두로 전달하는 경우도 많습니다. 따라서 커뮤니케이션 능력은 시각화 뿐만 아니라 발화 능력을 포함한 더 넓은 범주를 포괄합니다. "8살 꼬마가 이해할 수 있도록 설명해야 한다"는 말을 어디서 주워들은 적이 있는데요, 마찬가지로 데이터를 난생 처음 보는 구성원들도 모든 내용을 빠짐없이 이해할 수 있도록 전달하는 것이 중요하다고 생각합니다. 그런 의미에서, 미드에서 가끔 보이는 "늘 구석에서 혼자 일 하고, 다가가기 부담스러운, 위엄 넘치는 구루(guru)"는 8살 꼬마가 설명을 듣다가 도망갈 것이기 때문에 데이터 분석가로서 이상적인 모습은 아니라고 봐요.
데이터 분석가의 커뮤니케이션 역량
•
데이터 시각화를 포함한 보고서 작성 능력
•
듣는 이가 마치 분석을 직접 한 것처럼 이해할 수 있게 설명하는 발화 능력
•
누구든지 아무 질문을 부담없이 할 수 있을 정도의 친근함
•
분석가로서 무궁한(?) 신뢰를 확보하기
먼저 분석 결과를 사람의 언어로 번역하는 일이 출발점입니다. 여기서 사소한 디테일에 따라 내용의 전달력이 크게 차이가 날 수 있습니다. 회사마다 지향하는 바가 다를 수 있습니다만, 큐피스트는 분석 결과를 전달할 때 불렛 포인트( • )를 통해 몇 가지 핵심 내용으로를 짧게 정리하는 것보다, 다소 길더라도 완전한 문장(full sentence)으로 표현하고 심지어는 필요에 따라 이모지(
)를 붙여가며 강조하는 것을 선호합니다. 가령 '재방문율'이라는 지표는 기준에 따라 다양한 계산법이 존재하기에, 듣는 이의 혼동을 방지하기 위해 "어제 접속한 유저 중 오늘 접속한 유저의 비율"이라는 제목으로 풀어서 기재합니다.
또한 상대방에 따라 다른 방식의 커뮤니케이션을 합니다. 직무나 직급에 따라 중요하게 여기는 가치나 배경 지식, 의사소통 방식, 그리고 얻고자 하는 정보가 다르기 때문입니다. 그래서 같은 주제에 대해 대표님에게, CTO에게, 마케팅 팀, 운영 팀, 디자이너에게 전달하는 정보와 방식이 다소 상이합니다. 이를테면 소숫점을 반올림하는 기준마저 다릅니다. 전사 컨퍼런스처럼, 사내 모든 구성원을 대상으로 설명해야 할 땐 분석 결과를 보고 누군가 "저 정도면 나도 해볼 수 있겠는데?" 혹은 "겨우 이거 하느라 너네 그렇게 야근한거야?"라고 생각할 정도로, 데이터 분석이 만만해 보일 만큼 쉽게 이해할 수 있는 결과를 만들기 위해 퇴고를 반복합니다. 반면 분석가끼리 소통할 때는 그냥 정리 안 된 숫자만 찍 던질 때가 많습니다. 
이렇듯 전달에 리소스를 많이 쓰는 이유는 모든 구성원이 데이터와 친해지기를 바라기 때문입니다. 새로 합류한 구성원 등 누군가가 데이터 관련 이야기를 완전히 따라가지 못한다면, 그 순간부터 데이터는 남의 일이라고 치부할 수 있습니다. 이는 데이터 클래스가 우려하는 상황 중 하나입니다. 그렇게 되면 결국 회사가 지금처럼 좋은 의사결정을 내리기가 어려워질 수 있잖아요? 나아가 모든 구성원이 분석가에게 요청하거나 질문하는 것을 부담스러워 하지 않는, 한 마디로 "만만하게 부탁할 수 있는 편한 관계"를 형성할 수 있는 방안을 고민합니다.
넷째, 분석 툴에 대한 숙련도
원하는 결과를 얻기 위해 데이터를 효율적으로 처리하는가?
어디 가서 "나 데이터 분석하는 일 해."라고 말하면, 많은 사람들은 제가 R이나 Python과 같은 분석 툴을 얼마나 잘 다루는 지에 가장 먼저 관심을 가집니다. 허나 이 항목을 데이터 분석가의 5대 역량 중 네 번째로 꼽은 이유는, 말 그대로 위에서 언급한 세 항목이 훨씬 더 중요하다고 생각하기 때문입니다.
분석가와 엔지니어가 동일한 언어로 코딩을 하더라도, 작업의 목적이 다르기에 중요하게 여기는 부분도 다릅니다. 예를 들어 엔지니어에게 중요한 코드의 가독성이나 이식성은 분석가에게는 생각보다 그렇게 중요하지 않습니다. 알고리즘 설계나 자동화를 위한 작업이 아닌, 인사이트 도출을 위한 분석을 하는 거라면 말이죠. 분석가에게 중요한 것은 빠르고 안전한 분석, 즉 (1) 갖가지 데이터를 탐험하는 과정에서 내 두뇌가 회전하는 속도만큼 빠르게 데이터를 처리하는 것, 그리고 (2) 복잡한 데이터 처리 과정에서 사소한 실수로 인해 틀린 결과를 도출하는 실수를 최소화하는 것입니다.
데이터 처리의 나쁜 예
may_fourth = (daily_active_users['created_at'] >= pd.Timestamp(2019,5,20))
may_fifth = (daily_active_users['created_at'] >= pd.Timestamp(2019,5,27))
june_first = (daily_active_users['created_at'] >= pd.Timestamp(2019,6,3))
june_second = (daily_active_users['created_at'] >= pd.Timestamp(2019,6,10))
daily_active_users.loc[may_fourth, 'week_category'] = 'may_fourth'
daily_active_users.loc[may_fifth, 'week_category'] = 'may_fifth'
daily_active_users.loc[june_first, 'week_category'] = 'june_first'
daily_active_users.loc[june_second, 'week_category'] = 'june_second'
Python
1) 재사용이 불가능함
2) 실수가 발생하기 쉬움
3) Scalable 하지 않음
4) 시계열 indexing이 안 됨
사실 이 부분은 실무를 하다 보면 금방 늡니다. 다양한 작업을 수행하는 과정에서, 유사한 코드를 반복적으로 작성하다 보면 "과거의 내가 왜 이렇게 했을까 부들부들"하며 스스로 깨우치면서 서서히 개선됩니다. 저희는 코드 리뷰를 하면서 개선안을 제안하거나 가끔은 각자의 코드를 리팩토링 하는 방식을 통해 함께 고민합니다. 다만 이를 반영하여 당장 다음 작업부터 시정할 것을 전제하지 않아요. 알아두면 쓸모 있는 꿀팁 정도로 생각하고 다음 작업에 참고합니다. 처음부터 코드의 완성도를 과도하게 신경쓰면서 작업을 하다보면 불필요하게 시간이 지체될 수 있기 때문입니다.
다섯째, 속도와 정확성
짧은 시간 내에 정확한 정보를 발견하는가?
대체로 분석에 투입하는 시간이 길수록, 분석의 신뢰도나 예측의 정확도가 높을 여지가 큽니다. 하지만 분석의 정확도를 극대화하는 것이 능사는 아닙니다. 분석에 소요되는 시간 또한 귀중한 자원이기 때문입니다. 새 기능을 기획하기 위해 1개월의 시간을 분석에 투입한다면 결과는 더 정교해지겠지만 이를 위해 한 달의 시간을 기다려야 합니다. 차라리 간소화한 분석을 3일 내에 마치고 바로 개발을 한다면 유저의 반응을 더 빠르게 살피고 개선할 수 있습니다.
그런 의미에서 큐피스트는 빠른 의사 결정을 더 가치있게 생각합니다. 대체로 90%의 정확도를 얻기 이전 50%의 정확도에 기반하여 신속하게 결정합니다. 이 경우, 분석가는 분석의 정교함이 낮은 점을 감안하고 '신뢰 수준'이 확보되지 않은 데이터를 기반으로 주관적 판단을 내려야 합니다. 때로는 양질의 분석을 향한 집요함보다는 사안의 중요도와 시급성을 파악하고 적시에 결정 기반을 제공하는 센스를 발휘해야 하지요. 물론, 초스피드로 원하는 분석을 바로 뽑아낼 수 있는 것이 제일 이상적입니다.
그보다 제가 더 강조하고 싶은 부분은 정확성입니다. 거창한 게 아니라 그냥 '숫자를 틀리는 실수'를 안 하는 것입니다. 실수를 안 하는 것 또한 실력이며, 이 역량은 어찌 보면 DNA에 붙어 있기 때문에(?) 가장 증진하기 어렵다고 생각합니다. 간혹 숫자를 잘못 기재하는 실수를 범하는 사람이 과연 복잡하고 험난한 분석 과정을 무사히 처리했을 것이라 쉽게 신뢰할 수 있을까요? 물론 저도 실수를 가끔 합니다만 이런 실수를 했던 순간을 전부 기억하고 있을 정도로 매우 심각하게 반성하며 상습범이 되지 않기 위해 안간힘을 씁니다. 아래는 제가 데이터 분석을 처음 시작했을 무렵에 적어두고 지금까지도 마음에 새기고 있는 내용인데, 실수에 관한 부분이 생각나서 덧붙이며 글을 마무리합니다.
데이터 분석가가 잊지 말아야 할 것들
1.
늘 과분한 일이라는 사실을 인지하고, 무한한 책임감을 가지자.
2.
실력이 없으면 노가다라도 하자. 그 시간도 부족하다면 노가다를 더 빠르게 하자. 핑계를 찾을 시간에 자료를 더 살피자.
3.
실수 하나에 걸린 의사결정의 무게를 생각하자. 내가 틀리면 누군가 고쳐주면 그만이라는 안일한 생각은 하지 말자.
큐피스트 데이터 분석에 관한 더 많은 이야기