Machine learning workflow

오상윤·2023년 1월 8일

데이터 사이언스

목록 보기
3/4

machine learning workflow

  • 머신러닝 알고리즘을 이용하여 문제를 해결하는 방법론 또는 머신러닝 프로젝트 수행 방법
  • 분석 문제 정의 -> 데이터 수집 -> 탐색적 데이터 분석(EDA) -> 피처 엔지니어링 -> 예측 모델 개발 -> 서비스 적용 순서로 진행된다.
  • 머신러닝 기술을 사용하는 것을 전제로 하기 때문에, 각 모듈별로 머신러닝을 이용하여 문제를 해결하는 것에 초첨이 맞춰져 있다.
  • 모듈 1이 제일 중요하다. = 문제 정의가 제대로 되어있지 않으면 모듈들은 아무 의미가 없다
  • 특히 분석 데이터 정의와 머신러닝 문제 정의가 중요하다

분석 문제 정의

  • 어떤 문제를 머신러닝 방법론을 이용해서 해결할 것이냐! 머신러닝 방법론을 기준으로 문제를 정의하는 것

이슈 파악 및 문제 도출

  • 문제 이해를 위해 예시를 하나 정의합니다.
  • 우리는 식물학자입니다.
  • Iris(붓꽃)의 생테계에 대해 연구를 해보려고 합니다
  • 조사를 한 결과 Iris는 3개의 종(setosa, versicolor, virginica)이 있다는 것을 확인
  • 우리는 Iris DB를 구축하려고 합니다
  • 이 DB에는 후대에 Iris를 연구하는 연구자들을 위해 Iris data를 입력하면 어떤 종(species)인지 알려주는 프로그램을 작성하려고 함

분석 데이터 정의

  • 우리는 이 3개의 종에 대한 특징을 기록(저장)하고 싶습니다.
  • 어떤 정보들이 필요할까요?
    • 꽃잎의 모양
    • 꽃받침
    • 줄기 모양
    • 뿌리 모양
    • 수명
    • 어떤 종인지! (target value, label) -> y (=> 제일 중요)

머신러닝 문제 정의

  • 정의한 특징들을 기반으로 Iris 데이터를 종별로 나누려고 합니다.
  • 어떤 머신러닝 작업(task)들이 있을까
    • 분류 : 데이터를 비슷한 부류로 나누는 방법 => 데이터가 어떤 부류로 나뉘는지 이미 알고있는 경우에 사용
    • 회귀 : 데이터의 특정 값을 예측하는 방법 => 데이터의 값을 이미 알고 있는 경우에 사용
    • 클러스터링 : 데이터를 비슷한 부류로 나누는 방법 => 데이터가 어떤 부류로 나뉘는지 몰라도 사용 가능
    • 추천 : 어떤 User에게 어떤 Item을 제안하는 방법 => 주요 과거 이용 기록, 유저의 특징, 아이템의 특징 사용
    • 랭킹 : 주어진 평가 기준에 따라 순위를 매기는 방법
  • 이 중에서 어떤 task가 우리가 하려는 일에 해당할까
    • '분류' & '클러스터링'
  • 둘 중에 어떤 방법이 더 좋을까?
    • 분류! -> 성능이 확실하다

베이스라인 (baseline)선정 -> 기존 사례 조사

  • 우리가 하려는 일을 과거에 한 사례가 있다면, 참고한다.
  • Linear discriminant Analysis(LDA)를 기준 방법으로 사용해보면 좋을것 같다

데이터 수집

  • 정의한 데이터를 실제로 가져와서 Data Mart를 구축하는 작업
  • 분석 데이터 정의에 맞는 데이터를 직접 가져옵니다. (수집) -> 직접 수집을 해야하는 경우라면, Web Crawling을 사용
  • 데이터가 Data Warehouse에 없는 경우라면, Data Engineer에게 요청을 합니다.
  • 어떤 데이터를 가져오느냐에 따라 분석 결과의 품질이 결정됩니다. -> Data Quality
  • 정의한 데이터는 실제 저장되어 있는 데이터와 1:1 매칭이 되지 않을 수 있습니다. -> 데이터 정합성 평가
  • 다양한 source에 있는 데이터를 가져와서 합쳐야할 수도 있습니다.
  • 모든 작업이 끝나면 정의한 분석 도구에 맞게 포멧을 변경해줍니다.

데이터 마트 생성

  • 이미 Data Warehouse에 정의가 되어있다면, SQL(이나 다른 BI 솔류션)
  • 여러 source들에 있다고 하면, 필요하다고 생각되는 데이터들을 일단 모두 가져옵니다.
  • 이 데이터가 원하는 형태로 합쳐지는지 테스트하는 것을 "데이터 정합성 평가"라고 합니다.
  • 분석에 필요한 데이터가 어느 기간에 수집된 데이터인지, 어떤 기관에서 수집한 데이터인지, 정의한 특징을 모두 포함하고 있는지를 확인합니다(sanity check)
  • Iris dataset으로 Data Mart를 만드려면?
    • 만약에, DB에 데이터가 없다면? -> 직접 수집.(나가서 채집, 웹에 있다면 크롤링, .,..)
    • 만약에, DB에 데이터가 있다면 -> 앞에서 정의한 특징들이 포함되어 있는지 확인하고, 해당 데이터셋을 가져옵니다.

데이터 적합성 평가

  • 데이터를 합칠 때 생기는 이슈들을 체크하는 과정
  • 아래 예시를 보고, 이 두 개의 테이블을 합친다면(JOIN operation) 어떤 것들을 체크해야 할까요?
    • user_id, time column이 존재하는가 -> O
    • row가 정의된 단위(unit)이 일치하는가 -> X : time unit이 다르다 -> 초 단위를 시간(hour) 단위로 합쳐줍니다.

데이터 취합

  • 정합성 평가를 통과했다면, 원하는 데이터를 합칩니다.
  • JOIN 연산의 결과가 처음 생각했던 것과 맞는지 체크합니다. (sanity check)

데이터 포맷 통일

  • 취합한 결과가 table(in DBMS)인데, 분석할 때는 csv file이 필요한 경우에는 변경해줍니다.
  • 분석 도구의 input type을 보고 결정합니다.

EDA

  • 데이터에서 분석에 필요한 여러가지 통계량을 계산하고, 시각화를 통해서 확인하는 작업
  • 탐색적 데이터 분석(Exploratort Data Analysis, EDA)은 데이터와 친해지는 과정
  • 분석을 하면서 데이터에서 확인하고 싶은 정보들을 확인하는 과정입니다.
  • 정답처럼 규칙처럼 정해진 프로세스가 따로 업소, 분석가들마다 방법론이 조금씩 다릅니다.
  • 어떤 데이터를 사용하느냐에 따라서 다양한 방법론이 존재합니다
  • 데이터에 대해서 많이 알수록, EDA도 잘할 수 있습니다. (domain knowledge)
  • 나만의 EDA process를 만들 수록, Data Scientist로서의 역량이 갖추어 진다고 할 수 있습니다.

데이터 크기 확인

  • 주어진 Iris dataset의 크기는 150rows, 6columns 입니다.
  • pandas를 기준으로 메모리 사용량은 대략 7.2KB입니다.

데이터 분포 확인

  • target distribution
  • Petal Length VS petal Width
  • Feature Histogram

데이터 시각화

  • pairplot
  • boxplot

통계량 분석

  • Correlation Matrix

피처 엔지니어링

  • 분석에 사용할 데이터를 feature vector로 가공하는 작업, 머신러닝 모델 성능에 직접적인 영향을 준다.
  • 데이터 마트까지 구성된 데이터를 imput vector라고 부릅니다. (row 단위, 정형화된 수치들)
  • 이 input vector를 머신러닝 모델에 사용할 feature vecotr로 바꾸는 작업이 feature engineering입니다.
  • feature vector란 input vector에서 머신러닝 모델이 봐야할 특징(feature)을 정의한 수치값들입니다.
  • feature engineering에 따라 머신러닝 모델의 성능이 굉장히 크게 변할 수 있습니다.
  • feature engineering을 할 때 체크해야하는 사항들을 중점적으로 확인을 해야합니다.
  • feature vector가 표현되는 공간을 feature space라고 합니다.

차원의 저주

  • 차원의 저주 문제는 머신러닝 모델이 고차원 공간에서 데이터의 패턴을 잘 파악하지 못하는 문제를 말합니다.
  • feature space의 차원이 큰 경우, 거리 함수가 제대로 작동하지 않는 문제가 발생합니다.
  • 공간이 sparse해짐에 따라, 저차원 데이터에서 패턴을 파악하는 것보다 고차원 데이터에서 패턴을 파악하는데 기하급수적으로 더 많은 데이터가 필요합니다.

상관관계 분석

  • feature들간의 연관성을 파악하거나, target value와 feature들간의 연관성을 파악하는 것을 말한다.
  • 상관계수 p는 -1과 1 사이의 값으로 정의되며, 음수인 경우에 "음의 상관관계"를 양수인 경우에 "양의 상관관계"를 가진다고 말합니다.
  • 그림을 보면 +1일 때는 완벽한 양의 선형관계를 의미하고, -1일 때는 완벽한 음의 선형관계를 말합니다.
  • 피어슨 상관계수는 두 변수 사이의 선형성(linearity)을 나타내는 지표입니다.

피처 추출

  • input vector의 feature들이 서로 상관성이 강하거나 (이런 경우를 다중공선성(multi-collinearity)을 가진다고 한다) feature가 너무 많아서 고차원이 된 경우엔 feature를 줄일 필요가 있습니다.
  • 그냥 줄일 수는 없고, 유의미한 feature를 만들어야 하는데 이 때 사용되는 기법들을 feature extraction method라고 합니다
  • 대표적인 기법으로 PCA(Principal Component Analysis), AutoEncoder 등이 있다
  • 요즘에는 딥러닝 기법들을 사용하여 임베딩(Embedding) 기법을 사용하기도 한다.
  • 딥러닝 모델이 머신러닝 모델보다 성능이 좋은 경우가 임베딩 성능이 좋아서이기도 하다.

범주형 피처 인코딩

  • input vector에는 수치형 데이터(numeric feature)말고도 종류를 나타내는 범주형 데이터(categorical feature)도 있다
  • 이러한 categorical feature들은 대부분 문자열(string) 형태로 표현되어 있다.
  • 문자열로 구성된 categorical feature들을 수치값으로 바꾸어야 feature vector로 표현이 가능하다.
  • One-hot encoding 말고도 ordinal encoding, Mean encoding, hashing 등의 다른 기법들이 있다.
  • 원본 데이터의 category가 어떤 의미를 가지고 있느냐에 따라 표현하는 방법을 선택할 수 있다

머신러닝 모델링

  • 주어진 학습 데이터로 얻은 정보로 학습하지 않은 데이터에 대해서 예측할 수 있는 시스템
  • 머신러닝 모델링 과정에서 feature vector를 이용하여 학습을 진행한다
  • 학습(learning)의 과정은 모델마다 달라진다.
  • 문제 정의에 따라 모델도 달라진다.
    • 분류 => Naive Bayes, logistic Regression
    • 회귀 => Linear Regression, Random Forest
    • 클러스터링 => K-means, Hierarchical Clusterin
  • 대부분의 머신러닝 문제가 예측 모델(predictive model)을 사용한다
  • 예측 모델은 대부분 분류/회귀 문제를 풀게 된다.

예측 모델 학습

  • [RECAP] Iris dataset을 3개의 Species로 구분하는 문제인 "분류(Classification)"로 정의했다.
  • 분류 문제를 풀기 위해서 간단한 분류 모델인, Linear Classifier를 사용했다.
  • 위 그림은 Linear Classifier를 이용해 4차원 feature space에 표현되는 iris dataset을 3가지로 분류한 모습이다.
  • 경계선(decision boundary)를 기준으로 데이터가 분류되고 있다.
  • 이러한 구분선을 찾아주는 방식이 Linear Calssifier라는 모델이다.(사실은 구분선보다 고차원적인 개념인 hyperplane이다.)
  • 이렇게 구분선을 찾기 위해서는 선을 결정하는 parameter(또는 weight)를 찾아주면 된다.
    • ex) y = ax + b 라는 식을 생각해보면 a와 b를 정하면 직선 하나가 결정된다
  • 그래서 컴퓨터는 이러한 숫자를 찾기 위한 방식으로 학습을 진행하게 된다.

모델 성능 개선

  • 학습이 잘 되지 않은 것(=적절한 숫자를 못 찾은 것)을 확인하기 위해서는 평가 기준이 필요하다.
  • 분류에서 주로 사용하는 평가 기준은 "정확도(Accuracy)"가 있으며 정확도는 전체 데이터 중에 모델이 맞춘 데이터의 비율
  • 정한 평가 기준을 가지고 점차 좋은 점수를 내는 것이 중요하다

성능 평가 지표

  • 분류의 평가 기준에는 정확도만 있을까
  • 분류의 평가 지표(Evalution Metric) : Accuracy, Precision, Recall, F1-score, AUC, MCC, Quadratic Kappa socre 등
  • 정의한 문제를 머신러닝 모델이 잘 예측했는지를 알기 위해서는 적절한 평가 지표가 설정되는 것이 중요하다
  • 이 중에 하나늘 선택했다면, 해당 성능이 설정한 목표(기준 점수)에 도달할 때까지 학습을 진행한다

서비스 적용 및 배포

  • 학습이 완료된 모델을 실제 서비스에 적용하는 단계
  • 학습이 완료된 모델을 실제 상용 프로그램(application)에 적용하기 위해서는 해당 모델을 서비스가 만들어진 프로그램에 넣어야 합니다.
  • 프로그램이 호환되기 위해서는 세가지 방법이 있다.
    • 기존 어플리케이션이 작동되고 있는 framework(프로그래밍 언어를 비롯한 개발 환경)에 맞추어 코드를 다시 짠다.
    • 직접 코드를 짜지 않고, 서로 정보만 API를 통해서 주고 받는다
    • 머신러닝 모델 객체를 저장하고 상용 프로그램에서 이를 불러와 사용한다.
  • 첫번째 케이스는 말도 안되는 경우이므로 거의 없음
  • 두번째와 세번째 케이스를 하기 위해서 Python에서 제공되는 Flask나 Django같은 framework를 통해서 머신러닝 모델 코드와 상용 프로그램이 소통할 수 있게 해준다.
  • 이러한 과정을 모델 배포라고 한다.

최종 모델 배포

  • 보통 모델 배포를 하고 서비스에 넣는다고 끝이 아니다.
  • 머신러닝은 학습(training) 단계를 포함하고 있기 때문에, 지속적인 모니터링을 하면서 계속해서 예측 대상인 데이터에 패턴이 바뀌는지 체크를 해야한다.
  • 데이터의 패턴이 바뀐다면, 학습했던 모델의 성능이 떨어지므로(예측 결과가 않좋아짐) 재학습이 필요하다.
  • 이러한 과정을 머신러닝 모델 개발 사이클(ML Model Development Cycle)이라고 한다.
  • 이 사이클을 완성하기 위해서는 실제로 학습된 모델이 사용 서비스에 적용 되었을 떄, 처음 문제 정의를 서비스 형태로 해결할 수 있는지 체크
  • 예를 들어
    • Iris DB에 적용되는 솔루션을 다시 생각해본다면 4개의 feature값이 들어왔을 때 3개의 종(setosa, versicolor, virginica)으로 분류하는 문제인데 새로운 종에 해당하는 정보가 들어온다면 제대로 예측하지 못하고 3개의 종 중에 하나로 답을 한다(우리가 만든 모델은 3지선다형으로 만들어 졌기 때문에)
    • 이러한 케이스가 발생한다면, 새로운 종에 대한 정보를 모델에 업데이트 해야한다.
    • 업데이트를 위해서 다시 정의하고, 새로운 종을 포함한 4지선다 문제로 재학습을 진행한다.
    • 다시 배포를 해서, 서비스에 원활하게 적용이 되는지 체크한다.
    • 이런 과정을 도와주는 오픈소스 라이브러리 MLFlow가 있다.
profile
가보자가보자~

0개의 댓글