IT/AI\ML

[AI/ML] 2020년 실무 현장에서 요구되는 데이터 사이언티스트·머신러닝 엔지니어 기술 요건

개발자 두더지 2020. 4. 19. 20:49
728x90

1. 기본적인 사고방식

예전처럼, 스킬 요건은 별로도 아래와 같이 명시해 둔다.

* 작가의 2019년 글을 보고 싶은 사람은 아래의 링크를 참고

https://tjo.hatenablog.com/entry/2019/02/19/190000

- 데이터 사이언트 엔지니어 : 애널리스트의 발전판

- 기계학습 (인공지능) 엔지니어 : 엔지니어의 발전판

 현재 업계 내에 이론이 있다는 것을 인지하고 있으나, 개인적으로는 '데이터 사이언스는 애널리스트', '기계학습 엔지니어는 엔지니어'라고 생각하고 있다. 즉, 각각 '애널리스트의 일은 통계학과 기계학습에 집중하는 것', '엔지니어의 일은 기계학습에 집중하는 것'이라고 생각한다는 것이다.

 2020년 현재에 있어 나의 관측 범위는 여전히 애널리스트는 '모든 정보를 분석해 결과를 리포팅하여 의미를 정의하는 것에 기여하는 것'이 일이며, 엔지니어는 '시스템을 개발하여 무엇인가를 자동화시켜 아웃풋을 산출하는 일에 기여하는 것'이 일이라고 보고 있다. '애널리스트나 엔지니어의 일은 통계분석과 기계학습에 따라 더욱 증폭된다.' 이것이 데이터 사이언티스트 및 기계학습 엔지니어라는 일이라고 생각한다. 그러나 몇 번이고 쓰고 있지만, 먼저 2013년에 먼저 '데이터 사이언티스트'라는 직종이 붐이 일었고 그 다음 인공지능 붐이 2016년에 시작된 이후 '기계학습(인공지능) 엔지니어'라는 직종이 인기가 있게 된 경위가 있었기 때문에, 전자는 광범위한 '데이터 분석' 전반을 담당하는 것이 많고, 한편 후자는 엔지니어 영역에 특화된 부분을 담당한다는 것이 나의 인식이다. 이런 나의 생각을 여겨 두고 스킬 요건에 읽어줬으면 좋겠다.


2. 주니어 레벨(신생) 기술 요구 사항

 먼저 '신생'으로 말한 것 같으면 주니어 레벨의 데이터 사이언티스트·기계학습 엔지니어의 스킬 요건을 살펴 보자. 여기에서는 '신졸로 데이터 분석업을 해보려고 하는 경력 초기의 젊은 사람'이거나 '다른 커리어에서 부터 데이터 분석에 관련된 공부를 하여 데이터 분석직에서의 새로운 경력을 시작하려는 사람들'이 타켓층이라고 할 수 있겠다.

데이터 사이언티스트

1. 일반적인 애널리스트의 스킬

  1) BI 툴 등을 사용한 인사이트 레포트

  2) RCT / DID 등 기본적인 결과 검증 실험과 그것의 디자인하는 것 등

2. <R로 배우는 확률 통계학> 시리즈 정도의 통계 지식

3. <처음배우는 패턴 인식>정도의 일반적인 기계학습의 지식

기계학습 (인공지능) 엔지니어

1. 일반적인 엔지니어 스킬

  1) 시스템 설계

  2) 테스트나 운용

  3) 시스템 개발 방법에 관련된 것 등

2. <Kaggle에서 우승>책 수준의 일반적인 기계학습 지식

3. <Goodfellow> 책 수준의 딥 러닝 지식

4. ML 디자인의 사고 방식

두 직종 공통 요건

1. SQL문법을 포함한 데이터 베이스 조작 기술

2. 클라우드 지식

3. AutoML 기술 지식

4. 데이터 전 처리, 특징량(特徴量) 엔지니어링 기술

5. 무엇인가 비즈니스 영역에서 약간의 실무 경험

 일단 '이 정도의 지식이 있으면 2020년 현재 한 사람 몫으로 간주되는 일반적인 통계분석 and/or 기계 학습의 업무가 가능하다'는 레벨의 스킬요건을 살펴보았다. 종합적으로는 주니어 레벨의 데이터 사이언티스트나 기계학습 엔지니어가 담당하는 업무에 있어서 '애널리스트나 엔지니어로서의 업무에 고급 데이터 활용이 더해진' 정도의 레벨이라고 느껴지므로 '기존 업무 +고급 데이터 분석'이라는 틀의 범위 내에 데이터 분석 업무를 해내는 것이 제일 첫 단계라고 할 수 있다.


3. 시니어 레벨(숙련) 기술 요구 사항

 다음은 시니어 레벨 정도의 지도적인 입장에 있는 사람에게 기대되는 스킬 요건이다. 주니어 레벨의 스킬은 이미 있다는 전제하에 작성한 것으로, 여기에 전문가 혹은 지도자로서 가치를 얼마나 더해 갈 것인가를 점을 중심으로 작성하였다.

데이터 사이언티스트

1. 주니어 레벨의 스킬 전부

2. 베이지안 통계 모델링의 지식과 확률적 프로그래밍 스킬

3. 주니어 레벨의 기계학습 엔지니어의 기계학습에 관한 지식

  1) <Kaggle에서 우승>책 수준의 일반적인 기계학습 지식

  2) <Goodfellow> 책 수준의 딥 러닝

  3) ML 디자인의 사고 방식

4. 통계적 인과 추론 및 그것에 따른 효과 검증 틀 지식과 기술

5. 통계분석을 애널리스트 업무에 응용하는 것에 있어 해석 문제와 의사 결정 과정에의 참여 방법 등 자세한 것들

기계학습 (인공지능) 엔지니어

1. 주니어 레벨의 스킬 전부

2. 코탄사 MLP 시리즈, 황색 책(PRML) 및 카스테라 책(ESL)에 상당하는 범용적인 기계학습 지식

3. 각 종 탑 컨퍼런스나 arXiv의 논문을 포함한 딥 러닝의 다양한 계통의 최첨단 연구 결과 발표 동향에 관한 주요한 정보

4. 기계 학습을 실제 시스템에서 운용하는데 있어서 발생하는 결과 검증 및 시스템 설계 문제나 기술적 책임 및 편향에 관한 자세한 정보

두 직종 공통 요건

1. 일반적인 시니어 애널리시트 혹은 시니어 엔지니어로서의 스킬

2. AutoML 기술의 최첨단 개발 동향에 관한 충분한 캐치업

3. 전문으로 하는 비즈니스 영역에 있어 각 종 데이터 분석 수단을 적용해 본 경험 등과 같은 실무 경험

 '이정도의 스킬이 있으면, 각각의 데이터 분석 현장에서 상급자로서 싸울 수 있으며, 현장에 따라 지도자 위치로 팀을 이끄는 장이 될 수 있다'는 레벨의 스킬을 리스트업해보았다. 이러한 수준이 되면 '데이터 분석의 특질, 특성을 활용한 신규 프로젝트를 0부터 세운다'는 것이 요구된다고 생각하므로, 그것을 가능하게 하는 스킬 세트는 대략 위와 같은 느낌이 된다고 생각한다.


4. 상세 설명 등

*실무의 전문가로서 기계학습이나 통계분석을 하는 사람에게 추천하는 참고서적에 관한 내용은 아래의 링크를 참고

https://tjo.hatenablog.com/entry/2020/02/03/190000

1) 주니어 레벨

 데이터 사이언티스트의 경우, 일반적인 A/B 테스트, 결과검증, 회귀 모델 등의 통계 분석이나, 약간의 기계 학습을 이용한 요인 분석을 실시하는 느낌입니다. 예를 들면 로지스틱회귀로 컨버전으로의 기여 요인을 찾는 것이나, 랜덤 포레스트 등의 비선형 분류 방법에서 변수의 중요도로를 보는 일도 있을 것이다.

 기계학습 엔지니어라면, 일반적인 기계학습 전반에 대한 지식이 있다는 수준에서 딥 러닝의 이론의 개요를 알고 구현할 수 있는 것이 실제로 업무에서의 사용 여부와 상관없이 다양한 의미로 도움이 된다고 생각한다. 개인적으로 'Kaggle에서 우승'이라는 책이 좋은 벤치 마크가 되지 않을까 생각한다. Xgboost / LightGBM과 같은 '비교적 쉽게 높은 정밀도를 산출하는 방법'의 사양이나 나아가 그 튜닝이나 특징량 엔지니어링 및 ML 디자인(자세한 것은 후술)에 대해서도 알고 있는 것이 한 사람 몫으로써 중요하다고 생각한다.

​ 두 직군 모두 공통으로 가지고 있어야할 요건으로써 예전부터 얘기한 'DB기반기술(SQL을 포함한)' , '클라우드', '전처리&특정량 엔지니어링'에 'AutoML기술의 지식'이 추가되었다. DB, 클라우드, 전처리&특징량 엔지니어링에 대해서는 더 이상 설명이 필요없다고 생각하지만, AutoML기술에 관해서는 앞으로 어떤 현장에서도 '에너지 절약으로써 기계 학습(인공 지능) 프로젝트에서 사용될 필수품'이 될 것으로 보인다. 그것을 위해서라도 '한번 봐 보자'정도라도 좋으니 사용지식을 익혀두는 것이 좋을 것이라고 생각된다.

 그리고 이것 또한 예전과 동일한 주장이지만 데이터 사이언티스트를 희망한다면 '애널리스트'로서의 경험이, 기계학습엔지니어를 희망한다면 '엔지니어'로서의 경험이, 각각 있어야 좋다고 생각한다. 즉 애널리스트라면 BI 툴이나 대시 보드를 기반의 인사이트 레포트나 정형화된 A/B테스트 등 의 경험이 있어야겠죠. 기계학습 엔지니어라면 먼저 엔지니어로서 시스템 개발의 일이 가능해야할 수 밖에 없으므로, 그런 의미에서 제대로된 운영 환경을 구축할 수 있는 것도 당연히 요구되는 능력이라고 생각한다. 또한 2019년도의 기술 요구 사항 기사와는 다른 점은 데이터 과학자에 관해서는 RCT / DID 같은 통계적 인과 추론의 초보를 감안한 효과 검증의 지식이 있음을, 기계 학습 엔지니어 관해서는 ML design 생각을 지니고 있는지를 각각 정의했다. 그 이유는 간단하다.  최근에는 사용자의 인지능력이 올른 탓인지 어느 정도 제대로 인과 추론을 바탕으로 한 마케팅 실험의 종류가 요구되는 경우가 애널리스트 업무가 많고 기계 학습 시스템 개발 업무에서도 모델을 만드는 방법 과 그 구현은 할 수 있어도 정작 정확도가 오르지 않는다는 이야기가 드문 드문 있다. 그것은 바로 ML design 계의 지식의 부족으로 인해 발생하는 문제입니다. 주니어 레벨이라도 '통계학이나 기계학습 자체에 대한 지식은 아니지만 이것이 없으면 제대로 된 진가를 발휘할 수 없다'는 지식(위에서 언급한 지식들)을 가지는 것이 한 사람의 데이터 사이언티스트, 기계 학습 엔지니어로서 필요한 포인트라고 개인적으로 생각한다.

 

2) 시니어 레벨

 이쪽은 작년이랑 큰 차이가 없기 때문에 간단하게 정리한다. 먼저 데이터 사이언티스트에 대해 강조하고 싶은 것은 세 가지이다. '어느정도 기계 학습을 취급하는 것', '일정 레벨이상의 통계적 인과 추론 지식이 있는 것', '통계분석의 결과를 비즈니스에 반영하는 방법을 아는 것'이 세 가지이다. 첫 번째는 데이터 사이언티스트가 '평소 통계분석을 하고 있지만 가끔 자동화가 필요한 일이 생기면 기계학습을 사용한 시스템화하고 싶다 '는 니즈에도 대응할 수 있도록 하기 위함이다. 두 번째의 '일정 레발 이상'이란 '효과 검증 입문' 에서 취급하는 것 이상의 통계적 인과추론 지식을 일컫는다. RCT/DID는 당연 그것대로 경향 스코어나 경우에 따라 회귀 불연속 디자인 등도 이용하여 '가능한 한 어떤 사건의 인과 추론도'해낼 것으로 기대하고 싶다. 세 번째는 말할 필요도 없이 통계분석하여 결과를 비즈니스의 의미 결정층에 정확하게 전달하는 것은 경험자라면 안다고 생각하지만, 종종 어려운 일이다. 그렇기 때문에 최적의 증거가 얻을 수 있는 통계분석 접근을 선택하거나, 가시화를 하거나, 스토리를 짜는 것과 같은 것을 제대로 할 수 있길 요구 된다. 또한 '베이지안 모델링의 소양'에 대한 것인데, 애널리스트의 업무에서 빈출의 시계열 데이터의 분석에는 상태공간모델 등 확실히 베지안 통계의 틀을 사용하는 것이 더 쉬운 접근법인 경우가 많기 때문에 시니어 레벨의 데이터 엔지니어라면 자유 자재로 조종이 가능한 것이 유리하다고 생각한다.

 다음은 기계학습 엔지니어에 대한 이야기이지만 작년에 작성한 글과 비교하면 특별히 변경된 것은 없다. 강조하고 싶은 것은 두 가지 이다. 하나는 '최첨단의 연구 개발 동향에 대해 통달하고 있는 것', 다른 하나는 '기기학습의 실제 시스템 개발, 운용의 나쁜 사례를 파악하고 있는 것 '이다. 첫 번째는 아마 작년보다 올해가 더욱 심각해져 현재는 테크놀로지 기업뿐 아니라 일반 사업 회사 등에서도 딥 러닝을 포함한 기계 학습 기술의 연구 개발에 몰두하고 있으며, 정신차려 보니 경쟁 업체가 첨단 기계 학습 알고리즘을 구현하여 비즈니스 성과를 올려 본인의 회사를 갈라 놓는 등의 일은 심심치 않게 일어나고 있다. 그러므로 '최첨단'의 흐름을 계속 잡기 위해서 각종 상위 컨퍼런스 및 arXiv 논문 등을 상시 조사하거나 또는 스스로 연구하고 논문을 내는 것도 중요하다. 두 번째는 유명한 '기계학습의 기술적 책임' 논문에 입각한 요구 사항이다. 최근 ML Ops로서 제창된 사고방식도 있으므로 흥미가 있는 사람은 ML Ops관계의 자료 등을 읽어 보는 것을 추천한다. 또한 여전히 공공의 과제에 기계학습 시스템을 적용하는 경우는 바이러스라고 할 수 있는 '공정성'의 문제가 발생할 수 있다. 그것에 관해서는 TechChrunch Japan의 기사에 잘 정리되어 있으니 흥미가 있으니 참고해보길 바란다. 전의 기사에도 썼지만, '현실의 사회가 무엇인가를 차별을 (유감스럽지만) 하고 잇는 것이라면 거기에서 얻은 데이터를 기반으로 반들어진 기계학습 시스템도 같은 차별을 만든다'고 생각한다. 그러므로 가능하면 수석 기계 학습 엔지니어라면 편향과 형평성의 문제에 대해서도 숙지하고 있어야한다고 생각한다.

​ 최종적으로 두 직업 공통 요건으로는 순수하게 '시니어'로서 스킬이 있는 것과 '사회 구현'의 실무 경험이 있는 것, 그리고 주니어 레벨때보다 더 나아가서 'AutoML기술의 최첨단 개발 동향을 파악하는 것'이 요구된다. 스킬면에 있어서 '시니어'라는 것은 경력과 실력을 의심받는 경우가 있으므로 현실 세계의 업무의 현장에 중요한 것은 '사회실현'의 실무경험을 가지고 있는 것이다. 그리고 AutoML기술에 대한 것인데, 주니어 레발에서는 '사용할 수 있으면 좋다'정도였다면 시니어 레벨에서는 '어느정도 향후 1년쯤의 개발 동향을 예측하고 움직이는 것', '그것에 대한 전망을 포함시켜 프로젝트를 입안하는 것 ', '더욱이 AutoML에 의한 생력화를 전제로 개발 리소스를 관리하는 것'이 요구된다고 할 수 있다.

기계학습 프로젝트를 다룬 적이 있는 분이라면 알고 있을 것으로 생각되지만, 어느정도 규모의 어느 수준의 것이건 기계학습 프로젝트를 실행하는 것은 상당히 힘들다. 상기의 기술적 책임논문에 지적되어 있듯, 단순히 모델의 정밀도를 향상하는 것임에도 상당히 시간이 걸리고 실제로 그것을 행하기 위한 정비도 힘들다. 이 의미는 AutoML 기술 (특히 클라우드에서 제공되어 있는 것)을 활용하는 것은 간소화로 이어지며, 이것은 즉 scalability의 향상도 된다.

 

3) 프로그래밍 스킬에 대한 요건은?

 전의 기사에도 썼지만, 아웃풋으로서는 무엇을 낼 것인가 중시하는 관점에서 보자면, R이 좋다 든가 Python이나 C++를 사용하는 것이 좋다 든가 과 같은 프로그래밍 언어 요구사항과 전면적으로 분리 되어있다. 그러므로 '이 정도의 출력을 낼 수 있다면 필연적으로 상응하는 프로그래밍 스킬을 가지고 있다는 것 '이라는 전제를 두고 얘기하는 것이다.

 

4) '많으면 많을수록 잘 한다(多々益々弁ず)'는 피할 것

 이런 종류의 스킬 요건 담론에 대해 이야기하면, 현재에도 '데이터 사이언티스 및 기계 학습 엔지니어를 자칭한다면 KDD라던가 NeurIPS와 같은 탑 턴퍼런스에 매년 논문이 게재되는 정도의 인재이지 않으면 안돼', '일류 데이터 사이언티스트라면 연구 논문도 쓸 수 있고 비즈니스적 운용도 가능할 것이다', '기계학습을 하고 있다면 Kaggle의 Master이상이여야 한다' 등의 목소리가 들리고 있다. 물론, 그러한 실력의 소유자가 이상적이라는 데에는 동의하는 바이다.

 그러나 여기서 논의가 결여되는 것이 '어느정도의 스킬이 있으면 최저 어느정도의 레벨의 일이 가능한가'와 같은 '최대공약수'의 발상이다. 당연히 기술 요구 사항에 이것 저것을 첨가하면 이상적인 우수한 인재상에 다가가겠지만, 그렇게 하면 오버 스펙이라고 할까 overqualified이 되어버리고 만다. 자사에 예를 들면 엄청난 수의 응용 프로그램을 포함한 엔터테이먼트의 기초가 있고, 거기에 수십 수백개의 응용 프로그램을 순차 기계학습으로 기능 개선을 구현하고 싶다고 해보자. 그때 수 십 명 수 백 명의 사람이 'NeurlPS에 매년 논문을 기재하고 있는' 인재를 무리해서라도 채용하는 것이 과연 옳은 결정일 것인가?

 이전부터 계속 반복해서 쓰고 있지만, 기계학습이든 통계분석이든 데이터 분석 프로젝트는 '적재적소'의 구성으로 이루어진 팀플레이라고 생각한다. 즉, 1인의 시니어 레벨의 인재가 스킬요건의 '전부'를 만족하고 있지 않아도 되는 것을 의미한다. 수 명 수십명이 서로 스킬을 오버랩하여 '합쳐서 전부의 요건을 만족하는 팀을 만들어도 기능적으로는 같지 않을까?' 라는 합리적인 발상을 하지 않고 오로지 '많으면 많을수록 좋다'라는 태도에서 초대형 인재를 계속 찾는 것은 무리라고 생각된다.

 단지 가끔 듣는 이야기로 하나만 보충해두자면 '어떤 기술에 특화된 인재를 채용할 경우 1명이 아닌 최소 2명을 채용하는 것'이 좋다. 그 이유는 팀의 1명만 예를 들면 NeurIPS에 매년 논문을 기재하는 맹자가 있다고 하더라도 그 사람 이외에 팀 구성원이 전혀 그렇지 않은 사람들 뿐이라면 '상담할 수 있는 상대가 없다' '함께 논의할 수 있는 동료가 없다'는 등의 이유로 퇴직하는 경우가 있기 때문이다.

 

5) 전문 팀인 이상 '말로만 과제 해결하는 컨설팅 아저씨'만 모이는 것은 피하라

 이전 글에 이어 이번에도 이 점은 강조하고 싶다. 대체로, 무엇이든지 사람은 쉬운 방향으로 흐르는 법. 대부분의 비즈니스 실무 현장에서 방치하면 '조금 어려운 통계학이나 기계학습과 같은 것을 사용하여 데이터를 돌리는 것보다 Excel과 같은 미숙한 사람이 봐도 알기 쉬운 방법으로 데이터 분석을 해주는 편이 낫다'와 같은 소리가 나오기 쉽상이다. 결과적으로, 세간에서는 데이터 사이언티스트나 기계학습 엔지니어도 '기술적 스킬보다 비즈니스 스킬이 요구된다는' 이야기가 나오기 쉬우며, 위의 주니어 수준의 기술 수준에도 못 미치는 아마추어가 영업 상담만 잘해 데이터 사이언티스트라는 이름을 달고 퀄리티는 나오지 않는 상황이 종종 들린다.

 물론 단순히 매출을 올려 돈을 벌고 싶은 것뿐이라면 괜찮을지도 모르지만, 그렇다면 데이터 사이언티스트라던가 기계 학습 엔지니어를 자칭하는 것은 그만둬야 할 것이다. 이전의 기사에도 썼듯, 기술적 스킬을 중시하지 않고 비즈니스 스킬밖에 중시하지 않는다면 그것은 단순한 '수다로 과제 해결하는 컨설팅 아저씨'에 지나지 않는다.


5. 최종적으로

 

이번에는 별로 업데이트가 없었기 때문에, 전 기사의 마지막에 '다음부터는 데이터 사이언티스트와 기계학습 엔지니어 기사를 나누어 작성할 수 도 있습니다.'라고 썼지만 결국 나누지 않고 작성했다. 아무튼 다음에도 잘 부탁드린다.

 


참고자료

https://tjo.hatenablog.com/entry/2020/03/09/172000

728x90