본문 바로가기
분석이론/기계학습(Machine Learning)

[실용적 머신러닝 시리즈] 들어가며 (Introduction)

by DoBeFree 2023. 3. 5.
반응형

** 코드의 경우 깃허브를  통해 동일한 내용을 더 깔끔하게 확인할 수 있습니다 : https://github.com/int29/PMLP-101 

<실용적 머신러닝 시리즈 목차>
들어가며 : 들어가며(Introduction)

<챕터01 : 머신러닝 이해하기>
01화 : 머신러닝 이해하기(Understanding the Machine-Learning)

<챕터02 : 지도학습 알고리즘-분류>
02화 : 최근접이웃 알고리즘(K.N.N) (작성중)
03화 : 의사결정나무 알고리즘(Decision Tree) (작성중)
04화 : 부스팅트리 알고리즘(Boosting Tree) (작성중)
05화 : 앙상블트리 알고리즘(Ensemble Tree) (작성중)
06화 : 최신 트리 알고리즘(XGBoost, LightGBM, CatBoost) (작성중)
07화 : 나이브 베이즈 알고리즘(Naive Bayes) (작성중)
08화 : 서포트 백터 머신 알고리즘(SVM) (작성중)
09화 : 로지스틱회귀 알고리즘(Logistic Regression) (작성중)

<챕터03 : 지도학습 알고리즘-회귀>

10화 : 분류 알고리즘의 회귀 (Regression) (작성중)
11화 : 정규화 회귀 알고리즘(Regulated Regression) (작성중)

<챕터04 : 비지도학습 알고리즘>
12화 : 군집 알고리즘(Clustering) (작성중)
13화 : Representative Learning(PCA, TSNE) (작성중)


왜 머신러닝 프로젝트를 혼자 하려면 막막할까?

머신러닝을 이제 입문한 독자가 시중에 기초 머신러닝 서적, 혹은 강의를 듣고 머신러닝 프로젝트를 스스로 진행할 때 필자가 만난 대부분의 사람들은 "어떻게 할지 막막하다" 라는 어려움을 공유했었다. 필자도 대학시절 처음 머신러닝에 대해서 접하고 실제로 공모전이나 프로젝트를 진행할 때는 데이터를 다운받고 이 다음에는 무엇을 어떻게 해야하는지 막막하였고 결국은 해당 공모전을 포기한 경험이 있다. 그 당시 머신러닝과 관련된 책도 읽었는데 도대체 무엇이 문제였을까?

(1) 프로세스에 대한 대입 및 응용의 부재

각 분야의 전문가는 본인이 진행할 문제를 올바르게 정의할 수 있고, 지금 무엇을 어떻게 해야하는지 어떻게 해나가야 하는지 기본적인 테스크 프로세스를 보유하고 있다. 하지만, 실세계의 문제들은 언제나 복잡하고 정리되어 있지 않다. 그렇기 때문에 복잡한 상황을 간단명료하게 정의하고 프로세스를 기획할 수 있는 것이 전문가의 역량이 되는 것이다.

하지만 이제 막 머신러닝을 접한 독자는 이러한 프로세스에 대한 숙련도가 매우 부족 하기 때문에 실제 머신러닝을 통해 문제를 해결할 때, 무엇부터 시작해야 하는지 어려움에 빠진다. 하지만 놀랍게도 대부분의 책에서 이러한 프로세스를 반드시 다룬다.

즉, 독자가 갖는 막막함은 프로세스 자체에 대한 지식을 학습하지 않았다기 보다는 학습한 프로세스와 실제 프로젝트 사이의 대입(응용)이 되지 않는 부분으로 인해 발생하것임을 생각해 봄직 하다.

[그림 00-01] 머신러닝 프로세스

예를 들어 책에 "머신러닝 프로세스" 라는 내용으로 문제정의 -> 데이터 획득 -> .... -> 모델학습 -> 모델평가... 라고 나와있고 독자가 숙지하더라도 각 과정에서 실제 문제해결을 위해서는 구체적으로 어떻게 해야하는지에 대한 이해가 부족하여 응용할 수 없곤한다.

실제로 가장 처음 "문제를 정의"해보라고 제안 한다면, "주가를 예측하는 모형을 만든다.", "얼굴을 인식하는 어플리케이션을 만든다" 와 같이 굉장히 나이브한 정의를 답변하곤한다. 결국 "주가를 예측하는 모형을 만든다" 라는것은 정의보다는 프로젝트 목적에 가깝지 머신러닝 프로세스의 문제 정의와는 거리가 있다. [1]

일반적으로 머신러닝에서 문제를 정의한다는 것은 목표를 구체화 시키는 과정으로 "주가를 예측하는 모형을 만든다." 라는 목표를 달성하기 위해 머신러닝 알고리즘을 어떻게 사용해야 하는가에 대한 전략을 세우는 구체화 과정에 가깝다.

실제 문제정의 단계에서 진행해야할 내용(예시)

  • 테스크 목표 : 주가를 예측을 위한 머신러닝 예측 모형 개발
  • 테스크 종류 : 지도학습(예측)
  • 활용 데이터 : 10년치 전체 코스피 상장 족목의 주가 시계열 데이터
  • 예측 변수 타입 / 알고리즘 타입 : 수치형 / 회귀 알고리즘
  • 모델평가방법 : RMSE

(2) 프로세스 초반 자체의 어려움 : 많은 사전지식이 필요하기 때문이다.

두번째 원인은 프로세스 초반의 기획(문제정의) 단계와 데이터 전처리, 탐색적 데이터분석, 피쳐엔지니어링 단계가 선행 되어야 실제로 책에 존재하는 머신러닝 모델을 모델링할 수 있는 머신러닝 프로세스의 태생적인 어려움이 있다.

결국 기획단계에서 어떤 알고리즘을 써야하는지?에 대한 것은 알고리즘에 대해서 전체적으로 명확하게 알고 있어야 함을 의미하고, 탐색적 데이터분석과 전처리를 어떻게 해야하는지? 는 데이터의 특성에 따라서 진행해야할 전처리와 분석방법론에 대해 명확하게 알고 있어야 함을 의미한다.

전체 머신러닝 프로세스의 절반 이상은 알고리즘에 대한 이해와 더불어 데이터분석 방법론 자체에 대한 이해도 필요한 부분이다 보니, 통계 분석, 데이터분석 경험이 없는 독자나 입문자가 설계하기 애초에 어려운 부분인 것이다.

결국 입문서를 본 독자는 모델을 사용해본 경험이 존재하는 것이지 실제 복잡한 실세계의 문제에 책으로 학습한 내용에 도달하려면 선수지식이 필요함으로 결국 벽에 봉착하는 것이다. (책에 존재하는 모델 학습 전 까지만 도달시켜준다면, 그 결과의 유용성과는 무관하게 모델을 통한 결과는 만들어 낼것이다.)

따라서 독자는 머신러닝이 실세계의 문제를 해결하기 위한 공학이고 시중 기초 서적에 포함된 내용의 기저에는 문제를 해결하기 위해 여러 학문의 철학과 컨셉이 포함되어 있다는 사실을 인지해야 한다. (그렇기 때문에 여러 도서에서 선형대수, 확률과 통계를 필수로 여기고 간략한 컨셉을 포함하며, 각 분야에 따라서 추가적으로 내용이 들어가기도 한다. 심지어 NLP의 경우 그 원리를 이해하기 위해서는 언어학 분야의 지식이 필요하기도 하다. )

그렇다면 어떻게 공부해야 할까?

The Art 라는 특성을 받아들이고 프로젝트 위주로 공부한다.

위에 기술한 연유로 머신러닝은 홀로서기 위한 방대한양의 공부가 필요하다. 하지만, 이를 위해 선형대수를 전부 공부하고 통계와 확률을 전부 공부하고, NLP를 위해 언어학을 전부 전공자 만큼 순차적으로 공부해야 할까? 딥러닝을 위해 뇌 과학 전공자만큼 공부해야 딥러닝을 활용할 수 있을까?

다행이도 각 분야의 전공자 만큼 알아야 막막함을 떨쳐 내고 다음스탭으로 나갈 수 있는 것은 아니다. (여기서 주의할 점은 기존의 막막함을 떨치고 어떻게 해결해야 할지 탐색하는 방법을 아는것이지 전문가를 의미하는 것은 아니다.)

하나의 원칙으로 진행하는 것이 아닌 각 상황마다 직관적으로 판단하고 진행하는것을 영어로 The art 라고 한다. 데이터분석, 머신러닝 모두 일괄적인 방법론이 존재하는 것이 아니라 각 데이터, 프로젝트 케이스마다 적절한 방법을 사용애햐 하고 지속적으로 바꿔줘야 하는 The art의 영역이다.

그렇기 때문에 프로젝트 위주로 수많은 케이스를 겪어보는 것이 굉장히 중요하다. "아니! 애초에 프로젝트를 못하는데 어떻게 프로젝트 경험을 쌓는지" 모순될 수 있다. 하지만 다행이도 기본과 근본이 되는 프로세스는 있고 이 문서에서 이 점을 중점적으로 다룰 것이다.

범위가 너무 넓다보니, 프로젝트를 진행하며, 이번에 해결하기 위해서는 A가 필요하다면 A에 대해서 찾아 공부하고, 다음 프로젝트에서는 B가 필요하다면 B를 학습하며 조금씩 발전해가는 식으로 공부해야 한다. 이러한 A와 B는 혼자서는 깨닫기 어렵기 때문에, 동시에 다른 사람은 어떻게 진행하고 있는지 진행하였는지 계속 확인하며 필요한 지식에 대한 단서를 얻고, 실제 적용하는 모습을 눈으로 보고 따라해야 한다.

따라서 실제 프로젝트를 진행하는 것 뿐만 아니라, Kaggle의 수많은 competition의 winning solution과 discussion, code들을 살펴보는 것 또한 중요하며 공부해야 한다. (혹은 국내 공모전이나 사례, 논문 등)

Problem solver 로서 능동적인 학습이 필요하다.

Readme.md 에 있듯 이 문서의 목적은 징검다리의 역할이기 때문에 모든 사항에 대해서 커버하는 것은 아니다. 또한 여러분이 수능이나, 대학시험이나 자격증처럼 정답을 알고 있는 사람이 있고, 의도에 맞게 문제가 출제되며, 수동적으로 정해진 범위와 정해진 방향이 주어져 공부하고 그 정답을 맞추는 식으로는 절대로 공부할 수 없고, 발전할 수 없다. (현실의 박사, 교수급, 시니어급 현직자를 과외나 수업으로 고용할 수 있는 능력이 있다면 논외다.)

아마 여러분이 프로젝트를 진행하며 겪는 대부분의 문제는 수많은 엔지니어와 학자들이 같이 겪고 잇고 풀고자 노력하는 현실의 문제와 맞닿아 있고 현재 진행중인 문제들이다. 때문에 passive한 학생이 아닌 Problem solver 로서 연구하고, 공부하고 고민하며 나아가길 바라며, 이 문서가 이러한 첫 단추이자 징검다리로서 도움이 되길 바란다.

반응형

댓글