Ciara Byrne의 Development Workflows for Data Scientists: Enabling Fast, Efficient, and Reproducible Results for Data Science Teams을 번역했습니다.


머릿말

데이터 과학 분야는 모든 산업을 폭풍 속으로 몰아넣었다. 데이터 과학자 직업은 최고 일자리 목록에 계속 올라가있고 데이터 엔지니어나 데이터 분석가 같은 직책에 대한 구인은 채워지는 속도보다 훨씬 빠르게 늘어나고 있다. 데이터 수집 급증과 그에 따라 업계 모두가 준비하는 빅데이터 프로젝트는 “데이터 홍수에 빠져 앞으로 나아가야할 방향을 잃었다.“는 상황을 불러왔다.

소프트웨어 엔지니어링 성장 과정과 함께 지난 20여년을 살아왔던 이들에게 이건 친숙한 장면이다. 고품질 제품을 시장에 신속하게 제공해서 소프트웨어 경쟁력을 유지하기 위해 소프트웨어 개발 방법론과 공정에 관한 혁신을 이끌었다. 애자일 소프트웨어 개발, 애자일 운영, 데브옵스, 지속적인 통합 및 지속적인 공급 등에 대한 선언문 말이다.

이 급성장하는 분야에서 과학자가 수행한 분석의 대부분은 R과 Python 같은 언어를 사용하여 소프트웨어 실험을 통해 발생한다. 이건 데이터 과학이 소프트웨어 개발에서 무얼 배울 수 있을까라는 질문을 묻게 한다.

Ciara Byrne은 이 질문에 답하기 위해 여러 회사의 데이터 과학 및 분석팀을 둘러본다. 그녀는 팀 내 관행과 우선 순위, 도구와 기술, 기능과 관심사의 주제들로 우리를 이끈다. 변화의 속도가 엄청 빠르고 데이터 속 지식과 통찰에 대한 수요가 매우 커지더라도 소프트웨어 공학과 데이터 과학의 이중 체계를 통해 과제를 수행해낼 수 있음을 알려주는 여정이다.

— GitHub의 추천사

데이터 과학자를 위한 개발 작업 흐름

소프트웨어 개발 고전인 The Mythical Man Month 저자 Fred Brooks에 따르면 엔지니어는 빌드하기 위해 배우는 반면 과학자는 배우기 위해 빌드한다. “데이터 과학”이라는 용어에 “과학’이란 단어가 실수로 붙은 게 아니다. 엔지니어나 소프트웨어 개발자 작업과 달리 데이터 과학 프로젝트 결과물은 코드가 아니다. 결과물은 쓸모있는 통찰이다.

“데이터 과학자와 코딩과의 관계는 개발자와 매우 다릅니다.” Alluvium의 CEO이자 해커 스타일로 배우는 기계학습의 공저자인 Drew Conway가 말한다. Conway는 계속 얘기한다.  

저는 코딩을 관심있는 질문에 대해 통찰을 얻기 위한 도구로 봅니다. 사용한 코드는 어느 정도 1회성입니다. 개발자는 더 큰 시스템 내에서 빌드할 목적으로 코드를 작성합니다. 그들은 어떻게 하면 재사용할 수 있게 작성할까 고민하지요.

그러나 쓸모있는 통찰을 얻기 위해 데이터 과학자는 코드를 종종 작성하며 얻은 통찰을 쉽게 이용할 수 있도록 코드 형태로 포장한다. 그 결과 데이터 과학 팀은 업무 향상을 위해 소프트웨어 모범 사례를 빌려오고 있다. 그러나 어떤 모범 사례가 데이터 과학과 가장 관련있을까? 데이터 과학자의 어떤 영역에서 새로운 모범 사례 개발이 필요할까? 데이터 과학 팀은 어떻게 작업흐름을 향상시켜왔고 어떤 이익을 봤을까? 이게 이 보고서가 답하고자 하는 질문이다.

내가 얘기 나눴던 데이터 과학자 대다수는 무엇을 빌드할까 좋은 아이디어를 미리 갖고 있다면 소프트웨어 개발 모범 사례가 매우 유용하리라고 본다. 프로젝트 초반에 데이터 과학자는 그게 뭔지 항상 모른다. “프로젝트 범위를 사전에 알기 어렵기 때문에 데이터 과학 프로젝트를 계획하는 건 까다로울 수 있습니다.” Conway는 말한다. “프로젝트 종료 기준을 정하기 위해 반드시 치뤄야 하는 탐색적 자료 분석 또는 실험의 영(0) 단계가 종종 있지요.”

좋은 데이터 과학 작업 흐름이란 무엇일까?

작업 흐름이란 사람과 시스템 간 작업 및 정보 조율을 목적으로 업무 절차를 정의하고 실행하고 자동화하는 걸 뜻한다. 소프트웨어 개발에서는 계획, 개발, 테스트, 통합, 배포 그리고 이것들을 연결하는 작업 흐름이 수십 년 동안 진화해왔다. 데이터 과학은 신생 분야이므로 절차가 여전히 유동적이다.

특정 팀에게 좋은 작업 흐름이란 작업을 보다 신속하고 효율적이고 정확하고 순응적이고 민첩하고 투명하고 재현 가능하게 만들어주는지 여부와는 관계없다. 그건 해당 팀의 작업, 목표와 가치에 따라 다르다. 서로 다른 목표와 가치 사이에는 상충 관계가 종종 있다. 신속하게 성과물을 얻고 싶은가, 아니면 다음 번에 신속한 성과를 내기 위해 지금은 시간을 좀 더 들이고 싶은가? 작업 흐름을 정의하고 적용하고 자동화하는 이유에 대해 여러 데이터 과학 팀에게 질문했다.

결과를 빨리 내기위해

인터넷 데이터 기반으로 위협 정보 피드 또는 보안 보고서를 제공하는 스위스 사이버 보안 기업 BinaryEdge 데이터 과학 팀은 엄격하고 객관적이고 재현 가능한 데이터 과학 절차를 만들고 싶어했다. 이 팀은 유효 기간이 있는 데이터로 작업하기 때문에 초기 결과를 신속하게 만든 다음에야 일반적인 함정을 피하며 데이터를 철저하게 분석할 수 있다. 얻은 지식을 가능한 가장 유용한 형태로 전달하는 걸 팀은 최종 과제로 여긴다.

또한 팀은 어떤 결론도 이끌어내지 못했더라도 특정 결과에 도달하기 위해 수행했던 단계 모두를 기록하길 원한다. 그렇게 하지 않으면 열심히 탐색해서 막다른 곳이라고 증명한 걸 미래에 반복하게 될 테니까 말이다. 회사 내 데이터 과학자는 프로젝트 탐색 단계에서 실행한 모든 단계, 사용한 도구, 데이터 원천과 도달한 결론을 기록하며 코드북을 생성한다.

BinaryEdge팀은 익숙한 포맷(데이터 구조를 선험적으로 알고 있는)에서 하는 작업의 경우 작업 흐름 중 대부분 단계를 자동화해놨다. 새로운 유형의 데이터를 처리하는 경우 먼저 작업 흐름의 단계 모두를 수동으로 실행하면서 데이터에서 지식을 최대한 이끌어낸다.

결과를 재현하고 재사용하기 위해

  재현성은 소프트웨어 개발의 재사용성만큼이나 과학에서 교리처럼 중요하지만 데이터 과학 프로젝트에서는 종종 둘 다 고려해야 할 사항이다. Airbnb는 재현과 재사용을 위해 이전 데이터 과학 작업을 쉽게 찾아낼 수 있도록 힘을 합쳐 노력했다. 이 회사는 데이터 과학 작업에 기여하고 평가하는 절차를 정의하고 데이터 과학 팀 너머로 작업을 잘 공유할 수 있게 Knowledge Repo라는 도구를 만들었다.

Airbnb는 데이터 과학자가 Knowledge Repo에 새로운 작업을 추가하고 이를 검색할 수 있도록 특별한 작업 흐름을 도입했다. Knowledge Repo 핵심 관리자인 Nikki Ray가 말한다. “기본적으로 장단기 비용 균형을 맞춰야 했습니다.” Ray는 부연한다.

단기적으로 사용자는 특정 양식을 통과해야 하고 좀 더 긴 검토 주기를 거쳐야 합니다. 하지만 장기적으로 질문을 더 적게 받게 되죠. 다른 사람이 나중에 쉽게 찾을 수 있도록 연구를 한 곳에 모아둡니다.

GitHub 기계학습 팀은 기계학습과 빅데이터 기술을 사용하여 사용자 지향 기능을 구현한다. 재사용은 팀 우선 순위 중 하나이다. “우린 각자의 작업 기반으로 빌드를 시도합니다.” 데이터 제품 팀 데이터 과학자 Ho-Hsiang Wu는 말한다. “우리는 모형을 개선하기 위해 작업했던 모형으로 돌아가 추가 작업을 해볼 수 있습니다.”

데이터 과학 업무 흐름을 개선하기 위해 생성한 도구 또한 재사용할 수 있다. “재사용하고 다른 도구와 결합하기 위해 기존 코드가 Python, R 또는 Java로 짜여있더라도 명령행 도구로 쉽게 바꿀 수 있어요.” Data Science Workshop 창립자이자 Data Science at Command Line 저자인 Jeroen Janssens가 얘기한다. “GitHub 덕택에 다른 세상에 사는 사람과 도구를 공유하거나 다른 이가 만든 도구를 쉽게 찾아낼 수 있습니다.”

결과 감사를 위해서

  은행 또는 의료 같은 규제 산업에서 데이터 과학자는 작업 흐름을 설계할 때 모형의 준법 및 감사 가능 여부를 고려해야한다. 예를 들어 캐나다 은행 Scotiabank의 데이터 과학 및 모형 혁신 팀은 신용 카드 지불 내역에서 패턴을 발견하기위해 딥러닝 모형을 구축했다. 모형은 잠재 체납 고객뿐만 아니라 지불을 까먹었을법한 고객을 식별하고 납부 관련해 최적의 접근법을 알려준다.

미래의 은행 내부 감사인은 새로운 모형이 규정을 준수하고 실제 고객에 대한 의사 결정을 돕기에 충분한 품질인지 평가해야될 것이다. 감사는 재현 가능하고 고도로 자동화한 작업 흐름을 통해 훨씬 쉬워질 것이다.  

“그러면 더 이상 누군가의 말을 믿거나 수작업으로 직접 해볼 필요가 없겠죠.” Scotiabank 데이터 과학 및 모형 혁신 책임자 Suhail Shergill은 말한다. “실제로 우리는 자동화를 통해 더 큰 자신감을 갖게됩니다. 검토해볼 필요가 있을 때마다 바로 해볼 수 있습니다.”

팀 구조와 역할

데이터 과학자만큼이나 작업, 목표와 기술이 다양하기 때문에 데이터 과학 작업 흐름에 여러 형태가 있다. 탐색 작업 또는 분석 작업을 임시로 수행하는 연구 과학자는 제품 코드를 작성할 필요가 없다. GitHub 기계학습 팀원 같은 데이터 과학자는 확장 가능하게 실행되는 소프트웨어 제품을 위해 코드를 작성한다.

팀 작업흐름을 효과적으로 정의하려면 먼저 팀 내 역할을 명확하게 정의해야한다. Alluvium의 Conway는 데이터 과학자, 기계학습 엔지니어 그리고 데이터 엔지니어 세 가지 역할이 데이터 과학 팀 내에서 가장 잘 기능한다고 말한다.

데이터 과학자는 데이터를 탐색하고 기능, 특성 또는 제품의 최소 실행 가능 제품(MVP) 버전을 구현해본다. 성능과 확장성을 기계학습 엔지니어는 염두에 둔다. 매일 수백만 명이 상호 작용하는 웹 사이트에서 실제로 이 기능이 어떻게 동작할 수 있을까? 데이터 엔지니어는 제품과 데이터 과학자를 위한 도구 그리고 인프라를 설계한다.

Scotiabank의 Shergill은 이 역할을 딱딱하게 구분하기보다는 시간이 지나고 팀이 발전함에 있어 유동적으로, 연속적으로 변하는 것으로 본다.

우리 팀은 많은 엔지니어들, 다시 말해 소프트웨어 또는 데이터 엔지니어가 데이터 과학 관점에서 뛰어난 해답을 제시하고 있는 상황이에요. 데이터 과학자 또한 소프트웨어를 개선하기 위해 여러 제안을 주고 있고요.

Fast Forward Labs의 데이터 과학자인 Friederike Schuur는 자연 언어 처리 (NLP) 또는 심층 학습 같은 특정 유형 알고리즘 전문가를 포함하여 역할의 확산이 나타나고 있다고 말한다. “데이터 과학에서 새로운 전문 분야가 계속 만들어지고 있어요.”라고 Schuur는 말한다. “그에 대해 고객은 매순간 접점을 만들어내고 접점은 잠재적으로 마찰이 발생할 수 있는 지점이 되고 있죠.”

마찰 지점을 없애기 위해서라도 좋은 팀 업무 흐름이 필요하다. 때로는 완전히 새로운 역할까지 필요하다. Baidu의 수석 과학자 Andrew Ng은 모든 비즈니스 요구 사항을 테스트셋으로 바꾸는 AI 제품 관리자 역할을 지지한다. 프로젝트 전체 수명 주기 동안 데이터 과학 팀은 스크럼 마스터, 디자이너, 소프트웨어 개발자, 개발자 심지어 감사원과도 협력할 수 있다.

데이터 과학 업무 절차

(번역 중)