관리 메뉴

TEAM EDA

[Machine Learning Advanced] 1강. 머신러닝 강의 - 강의 개요 본문

EDA Study/Machine Learning Advanced

[Machine Learning Advanced] 1강. 머신러닝 강의 - 강의 개요

김현우 2023. 10. 1. 09:00

Machine Learning은 기계 학습이라고도 불리며, 컴퓨터에게 데이터를 제공하여 스스로 데이터의 패턴을 학습하고 결정을 내릴 수 있도록 만드는 것입니다. 

 

그러면 우리는 왜 Machine Learning을 알아야 할까요? 

크게는 3가지 이유가 있는 것 같습니다. 

 

1. 구직시장에서의 새로운 기회 

제일 중요한 부분인데 취업에서의 새로운 기회입니다. 머신러닝 분야에서의 전문가들은 현재 매우 높은 수요를 누리고 있으며 실력만 있으면 좋은 회사의 취업이 가능합니다. 저의 경우도 산업공학과를 나와 선배들처럼 생산시스템이나 물류관리쪽을 갈 수도 있었지만, 머신러닝쪽을 공부해서 AI Research Engineer가 될 수 있었습니다. 주변 친구들 중에서도 경영학과나 경제금융학과의 친구들이 머신러닝을 배워 데이터 분석가로 취업하는 경우도 있었습니다. 그리고, 제가 부스트캠프 AI Tech에 마스터로 참여했는데, 해당 코스를 수강하신 분들 중 네이버, 번개장터, 튜닙 등 좋은 회사에 취업하신 분들도 많았습니다. 

 

2. 시장 경쟁력 확보

머신러닝을 통해 새로운 패턴을 발견하고 이를 통해 시장 경쟁력을 확보 할 수 있습니다. 월마트에서 데이터를 통해 기저귀와 맥주간의 구매 상관성이 높은 것을 발견하고, 근처에 두 상품을 같이 두었더니 매출이 올랐다는 얘기가 있습니다. 실제 이게 사실은 아니라고 하지만, 넷플릭스, 아마존, 유튜브 등 머신러닝 기술을 활용해서 기업의 매출과 같은 성과를 많이 오른 기업들을 쉽게 확인할 수 있습니다. 

 

3. 사회 공헌 

위의 시장 경쟁력 확보 사례가 기업의 입장에서의 가치라면, 공익을 위해 머신러닝이 큰 영향을 끼친 사례도 있습니다. 의료 진단, 환경 모니터링, 사회 현상 분석 등 다양한 분야에서 머신러닝이 활용되고 있습니다. 대표적으로 기후 변화 문제를 개선하기 위하거나 밀렵꾼들을 막기 위해 활용되기도 합니다. 

 

이번 Machine Learning Advanced 강의에서는 좀 더 분야를 한정해서 정형 데이터 (Tabular 데이터)를 활용한 머신러닝 기법들에 대해서 공부해보려고 합니다. 정형 데이터는 아래와 같이 표의 형식을 가진 행(Row)과 열(Column)으로 표현 가능한 데이터를 의미합니다. 

위의 예시에서 보라색의(시가, 종가, 종목)을 열(Column)이라고 부르며, 파란색의 부분을 행(Row)라고 부릅니다. 다른 표현으로 행을 인스턴스, 열을 피쳐, 변수라고도 부르니 참고하시기 바랍니다. 

그러면, 이러한 Tabular 데이터를 활용한 머신러닝 기법을 배워야하는 이유는 무엇일까요? 

최근 AI 분야에서 떠오르는 ChatGPT 등의 최신 기술은 이미지, 음성, 자연어와 같은 비정형 데이터에 딥러닝 기법을 적용하는 기술들입니다. 물론 이러한 기술들은 중요하고 유용하지만, 사람, 기업, 사회의 많은 부분들이 정형 데이터로 기록되어있으며 Tabular 데이터는 범용적이고도 기본적인 데이터입니다. 그리고, 이러한 데이터를 효과적으로 다룰 수 있는 도구가 머신러닝입니다. 그렇기에, 이번 강의에서는 Tabular 데이터를 활용한 머신러닝 기법들에 대해 알아볼 예정이고 특히 아래의 3가지 특징을 가지고 있습니다. 

 

1. 포괄적인 머신러닝 모델링 프로세스 이해: 머신러닝 모델링을 위한 전반적인 프로세스를 체계적으로 설명합니다. 머신러닝 과정에서 필요한 세부적인 개념들에 대한 지식을 통해 학습자들이 모델링 단계를 효과적으로 수행할 수 있는 기반을 마련합니다.

2. 실제 사례와 예시: 강의 내에서 다양한 예시와 사례를 통해 각 기법이 어떤 상황에서 활용될 수 있는지를 명확하게 설명합니다.

3. 자체 머신러닝 파이프라인 구축 능력 강화: 이 강의는 이론적인 이해뿐만 아니라, 실습 및 코드 자료를 통해서 실제 데이터로부터 머신러닝 파이프라인을 직접 구축하는 능력을 개발하는 데 초점을 둡니다. 

 

머신러닝 프로세스 및 강의 목차 

1. 데이터 수집

먼저, 목적에 맞는 데이터를 수집합니다. 여기서 우리는 풀려고 하는 문제를 정의하고 이에 맞는 데이터를 수집하게 됩니다. 이러한 데이터는 모델을 학습하고, 평가하는데 활용되며 주어진 문제를 해결하는데 가장 중요한 요소입니다. 예를들어, 내일 주가가 오르는 종목을 맞추는 문제를 생각해보겠습니다. 이러면, 주가와 관련된 데이터를 수집할 수 있습니다. 종목별로 일자별 시가, 종가 등의 정보도 수집할 수 있고 종목의 재무재표를 수집할 수도 있습니다. 

 

2. 데이터 전처리 

1에서 수집한 데이터를 모델이 학습할 수 있는 형태로 변형합니다. 해당 과정에서 데이터를 분석하는 (EDA) 과정을 먼저 수행하면서 어떤 처리를 취해야하는지 알아보게 되고, 대표적으로 많이 하는 처리의 경우 결측치 및 이상치의 처리나 연속형, 범주형 변수의 처리가 있습니다. 예를들어, 어떤 종목이 상장폐지가 되어 폐지된 이후 데이터가 없다면 해당 종목을 삭제할 수도 있고 숫자가 아닌 종목의 섹터 (ex. 금융업, 보험업, 제조업, 영화 ..) 같이 컴퓨터가 이해할 수 없는 범주형 변수가 있다면 이를 처리할 수도 있습니다. 

 

전처리 기법 강의 예시 [카테고리 변수의 변환 방법 종류]

 

이러한 데이터의 전처리는 가장 중요하면서도 양이 방대합니다. 그렇기에 3개의 강의로 나누어서 구성되었습니다. 2강에서는 데이터가 무엇인지, 데이터를 구성하는 요소에 대해서 먼저 살펴보겠습니다. 그리고, 이러한 데이터에서 처리해야하는 전처리를 3가지 유형 (이상치, 결측치, 범주형 및 기타 변수의 변환) 으로 나누어서 한가지씩 보도록 하겠습니다. 참고로 해당 방법들이 어떤 것들을 의미하는지는 뒤의 강의에서 하나씩 볼 예정이니 지금 용어를 모른다고 걱정하실 필요는 없습니다.

 

파생변수 생성 강의 예시

 

추가적으로 모델의 성능을 향상을 위해 파생변수의 생성(Feature Engineering)을 수행하게 됩니다. 파생 변수는 기존의 변수를 통해서 만든 새로운 변수를 의미하며, 모델의 성능을 높이고 효율을 높이는 관점에서 많이들 생성합니다. 이러한 파생변수는 만드는 방법도 많고, 데이터마다 접근해야하는 방법도 다르고 몇년동안 해왔음에도 많이 어려움을 느끼고 있는 부분입니다. 그럼에도 파생변수를 만드는 방법에는 어느정도 정형화된 규칙이 있다고 생각하고 이를 단일 변수 자체의 변환 하는 방법과 변수간의 관계를 활용해서 새로운 변수를 만드는 방법으로 두가지 유형을 나눠서 한번 생성해보겠습니다.

 

변수 선택 강의 예시

 

마지막으로, 기존의 변수들과 새로 만든 파생변수들 중 의미가 없는 변수들을 버리고 유의미한 변수만을 남기는 변수 선택(Feature Selection)의 과정을 거치게 됩니다. 변수선택은 모델의 학습을 하기 전 일부 변수만을 추출하는 방법으로 성능적인 측면에서는 오버피팅을 피하면서 차원의 저주를 줄이기 위해 사용되고 비용적인 측면에서는 변수의 수집비용을 줄이며, 추론 속도를 빠르게 도와줍니다. 해당 강의에서는 전통적으로 많이 사용하는 3가지 방법인 Filter / Wrapper / Embedded 3가지에 대해 먼저 살펴보고 캐글에서 많이 사용하는 Permutation Importance / Adversarial Validation / Null Importance 3가지에 대해 순차적으로 살펴보겠습니다. 

 

3. 모델 선택 

 

기본 ML 강의 예시

 

2에서 생성된 전처리된 데이터를 기반으로 학습할 모델을 선택하게 됩니다. 목적식에 따라서 Classification (분류) / Regression (회귀) 모델로 나뉠 수 있고, 모델의 학습 방식에 따라 Linear (선형) / Non-Linear (비선형) 모델로도 나뉠 수 있습니다. 그리고, 이러한 모델들의 경우 대표적으로 선형회귀 (Linear Regression) / 의사결정 나무 (Decision Tree), 최근접 이웃법 (KNN)이 있으며 Decision Tree를 개선한 Random Forest - Gradient Boosting Machine (GBM) - XGBoost - LightGBM - Catboost 등의 모델이 존재합니다. 이러한 모델들은 매우 많지만 최근 성능이 중요한 대회나 현업에서는 Boosting 모델인 LightGBM - Catboost을 많이 사용하는 경향을 보이는 것 같습니다. 하지만, 목적에 따라 해석이 중요한 경우는 Linear Regression이나 Decision Tree도 많이 사용하고 특정 대회에서는 KNN의 모델도 의미있는 결과를 보이기도했습니다. 데이터의 양이나 목적에 따라서 알고리즘의 선택이 달라지기에 해당 알고리즘을 이해하고 언제 선택할지 판단하는 능력을 기르는게 중요합니다. 후에, 이렇게 모델을 선택한 후 모델의 하이퍼 파라미터를 튜닝하는 과정이 들어갑니다. 하이퍼 파라미터는 모델의 가중치가 아닌, 모델을 학습할때 설정하는 변수들 (학습률, 학습 횟수 등)을 의미합니다. 이러한 값은 경험에 따라 Manual하게도 정하지만, 보통은 Grid Search, Random Search, Bayesian Optimization 등의 기법을 사용하기도 합니다.

 

참고로, 데이터 전처리의 변수 선택이나 하이퍼 파라미터의 튜닝은 2와 3단계으로 분류는 했지만, 해당 변수나 하이퍼 파라미터가 얼마나 괜찮은지 판단하기 위해서는 4의 학습 및 평가하는 부분과도 연관이 있습니다. 그렇기에, 위의 머신러닝 프로세스는 고정된게 아니라 유동적으로 바뀔 수 있다는 것을 염두해두시기 바랍니다. 

 

4. 학습 및 평가 

 

데이터 셋 분할 강의 예시

 

선택한 모델을 학습하고, 이 모델이 어느정도의 성능을 가지는지 평가하는 과정을 거치게 됩니다. 그러기위해, 먼저 주어진 데이터를 목적에 맞게 학습 셋 (Train) / 검증 셋 (Valid) / 평가 셋 (Test)으로 데이터를 분할며 경우에 따라 검증 셋이나 평가 셋이 존재하지 않을 수도 있습니다. 일반적으로 모든 데이터를 수집할 수 없고, 모든 데이터를 학습할 수 없기에 사용하는 데이터는 전체 데이터의 일부분일 수 밖에 없습니다. 그렇기에, 학습 데이터에서 엄청 잘 나온다고 미래에 들어올 데이터나 못본 데이터에 대해 잘 나온다는 보장이 없습니다. 그렇기에, 데이터 셋을 잘 분할해서 미래에 들어올 혹은 학습과 검증에 참여하지 않은 전체 데이터에 대해 일관성 있는 성능을 보장해줘야 합니다. 일반적으로는 학습 셋으로 모델을 학습하고 검증 셋을 통해 모델의 하이퍼파라미터나 성능의 추이를 파악하며 최종적으로 평가 셋을 통해 최종 성능을 평가합니다. 이 과정에서모델의 성능 측정뿐만 아니라 측정된 성능과 모델의 결과를 해석하게 됩니다.예를들어, 내일 주가가 오르는 종목을 맞추는 모델이 어느정도로 잘 맞추는지? 이 모델을 통해 내일 종목을 선택할때 얼마를 투입해야하고, 위험도는 얼마나 되는지, 내 모델이 어느 경우에 대해서 예측을 잘하고 실패하는지 등의 의사결정과 분석 등이 이루어집니다. 

 

5. 배포 

실제 학습한 모델을 서비스하는 과정입니다. 예를들어, 4에서 학습한 모델로 실제 종목을 선택해 투자하는 과정을 의미합니다. 이 과정에서는 실제 결과가 4에서 평가한 결과가 같은지 비교하고 만일 다르다면 어떤 원인때매 다른지 파악하는 과정이 필요합니다. 

 

1 부터 5까지 분류를 나누긴 했지만 꼭 위의 순서나 분류를 따르는 것은 아닙니다. 위에서 언급한대로 데이터의 전처리나 모델의 선택을 한 후에 모델의 학습과 평가를 진행할 수도 있지만, 모델의 학습과 평가를 먼저 한 후에 2~3단계를 진행하기도 합니다. 머신러닝 프로세스는 대략적으로 위의 5개의 큰 요소들을 아래에서 해당 과정들을 수행하고, 이는 유동적으로 움직일 수 있다 정도를 이해하고 넘어가면 뒷 부분의 강의를 이해하는데 도움이 될 것 같습니다. 

 

강의에서는 데이터 수집과 배포를 제외한 데이터 전처리, 모델 선택, 학습 및 평가에 대해 순차적으로 살펴볼 계획이며 특히, 보라색으로 칠한 부분에 중점적으로 살펴볼 계획입니다. 

 

그렇기에, 데이터의 특성, 양, 그 외 여러 조건들을 따져서 분할을 하는 여러 방법들(HoldOut / KFold / StratifiedKFold 등)에 대해 해당 강의에서 다뤄보도록 하겠습니다. 

 

[그 외] 

[실전 프로젝트 예시]

추가로 머신러닝 프로세스 과정에서는 다루지 않았던 좀 더 실전에서 겪을 수 있는 상황에서 적용해볼만한 기술들에 살펴볼 예정입니다. 대표적으로 실험을 하기 전에 해야하는 것들 (디버깅, 시드 고정, 기록)부터 시작해서 성능을 높이기 위한 시도들(앙상블, 수도 레이블)까지 다루며 마지막으로 모델의 성능을 기록 및 추적하고 데이터를 자동화하여 분석하기 위한 도구들까지 다루어보도록 하겠습니다. 

 

다음 강의에서는 본격적으로 데이터의 전처리에 대해 살펴보도록 하겠습니다.