Chapter 3. 머신러닝 파이프라인

💡 발표 준비 …… 막막하구만 ….. ㅠㅠ 뭔가 파이프라인에 대해서는 처음 배우는 것 같은데 모르는 용어가 많아서 조금 당황스럽기도 하다. 이거 다… 배우게 되겠지?… 그건 또 그거대로 곤란하네 ;;

👻 머신러닝 파이프라인이란 무엇인가

모델 훈련 = 프로세스의 일부분일 뿐 … 데이터 정리/변환/준비하는 데 시간 ⬆️

**파이프라인( pipeline )** = 한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조 → 그러나 실제로 머신러닝 파이프라인은 단방향이 아닌 주기적이고 반복적일 수 있음

적절한 수집 메커니즘 선택, 데이터 정리, 특성 공학 등… 파이프라인의 초기 단계 매우 중요 !

또한 모델 성능 측정 및 모니터링, 모델을 재훈련하는 시기와 방법에 따라서도 결과가 크게 달라짐

→ 파이프라인 구현을 위해 다양한 머신러닝 솔루션 존재 … ( 파이썬, 하둡, R, 스파크, AWS, 데이터 브릭스 등 )

머신러닝 파이프라인의 주요 단계

  1. 문제 정의
  2. 데이터 수집
  3. 데이터 준비
    • 결측치 대치 및 중복 레코드 제거
    • 값 정규화 ( 공통으로 사용하기 위해 데이터 세트의 숫자 값 변경 )
    • 다른 유형의 정리나 매핑 수행
    • 완전한 특성 추출
    • 상관 특성 제거
    • 특성 공학 수행
  4. 데이터 분리 → train / varidation / test
  5. 모델 학습
  6. 후보 모델 평가 → 검증용 데이터와 테스트용 데이터 사용해 성능 측정
  7. 모델 배포 → 모델 선택 후 제품으로 배포
  8. 성능 모니터링 → 재교육 및 보정을 통해 개선 … 새 데이터 사용 !

🦨 문제 정의

파이프라인 설정 시 가장 중요한 단계, 올바른 질문을 하고 틀을 잡는 것이 가장 중요 !

예시 ) 채무 불이행 예측 결정 파이프라인을 위한 질문 → 돈을 얼마나, 언제 받는가

✨ 대출이 결정되면, 이 대출에 대해 채무불이행이 발생할지 혹은 정상적으로 대출금을 회수할 수 있을지를 결정할 수 있을까?

→ 첫 달 채무불이행 / 20년의 대출 채무불이행 구분 X → 수익성 달라짐

✨ 채무불이행은 언제인가?

→ 차용인이 지불금을 보내는 방식에 따라 달라질 수 있음 ( 아예 보내지 X, 산발적으로 보냄 등 )

✨ 주어진 대출에 대해 돈을 얼마나 받게 되는가

→ 언제 지불하는가에 따라 이자, 즉 수익이 달라짐

✨ 대출 이자는 얼마인가?

→ 기본 채무불이행률을 결정 시 법률에 따라 사용할 수 없는 입력 변수 ( 성별, 인종 등 ) 존재

✨ 허용되지 않는 입력 특성을 사용하지 않고 주어진 대출에 대한 이익은 무엇일까?

문제에 대한 진술은 지속적으로 수정, 필요에 따라 조정


😣 데이터 수집

질문을 답하는 데 도움이 되는 원시 데이터 수집 → 문제에 따라 관련 데이터 세트를 얻기 어려울 수 있음

  • 어떤 데이터 공급자 또는 공급 업체를 사용해야 하는가? → 신뢰성
  • 데이터를 어떻게 수집하는가? ( 하둡, 임팔라, 스파크, 파이썬 … )
  • 수집한 데이터를 파일로 저장해야 하는가, 아니면 데이터베이스에 저장해야 하는가?
  • 어떤 유형의 데이터베이스를 사용하는가? ( RDBMS, NoSQL … )
  • 데이터를 저장해야 하는가? → 실시간 피드가 있다면 저장 필요 X거나 효율 X일 수 있음
  • 입력 형식은 무엇인가? ( 파케이, Json, CSV … ) → 결정하지 못할수도 있고, 어떻게 변환해야 할지도 정해야 함 … → 소스 종류가 여러 개라면 통합, 병합, 결합 필요

도메인 지식

관련 입력 변수를 선택하고 성공적인 모델을 설정하려면 데이터 과학자에게 도메인 지식이 필요함

→ 사용 가능한 여러 특성 중 선택해야 하는데, 단독으로는 의미가 없어 결합해야 할 수도 있음

특성 이름특성에 관한 설명유용한 이유
연체된 계좌연체된 계정 수청구서 지불 X → 새로운 대출금도 지불 X
현재 잔고모든 계좌의 평균 잔고단독으로는 가치 X, 상대적일 때 가치 O
이자율대출 금리대출 금리가 높을수록 상환하기 어려움

결합해서 만든 새로운 변수 ( 특성 공학의 예시 )

특성 이름특성에 관한 설명유용한 이유
신용도 활용모든 거래에 대한 신용 한도 잔액, 신용 한도 대비 현재 잔액비율이 높으면 차용인이 ‘최댓값’에 도달했으며 새 신용을 얻는 데 문제 O
소득 대비 부채모기지와 해당 대출을 제외한 총 채무에 대한 월 지불액 / 차용인이 자체 보고한 월 소득소득 대비 부채 비율이 낮으면 채무 상환할 자원이 충분 → 문제 X

😏 데이터 준비

원시 데이터 → 데이터 정리, 필터링, 집계, 증강, 통합, 보관 필요

  • 인기있는 클라우드 스택
    • 애저 ML 서비스, 아마존 세이지 메이커, 구글 클라우드 ML 엔진, SAS, 래피드 마이너, KNIME
  • 데이터 저장소
    • 아파치 하둡 분산 파일 시스템 ( HDFS ), 아파치 HBase, 아파치 카산드라

    • 아마존 S3, 애저 블롭 스토리지

      → 머신러닝을 위한 데이터를 DB 내부에서 처리할 수도 있음

  • 실시간 데이터 처리 솔루션 → 내결함성, 확장 가능, 지연 시간 짧음
    • 아파치 카프카, 애저 이벤트 허브, 아마존 키네시스

결측치( MISSING VALUE ) 대치

빈 값, 0, N/A 등 … 처리 방법

  1. 아무것도 하지 않음

    → XG부스트 등의 알고리즘은 결측치 작업 수행하지 않아도 됨

  2. 중앙값 사용 대치

    → 상관관계 고려 x, 정확도가 높지 않음, 계산이 쉬우며 소규모에 적합

  3. 최빈값, 상수 대치

    → 변수에 의해 작동하는 장점, 상관 관계 고려 x … 편향 도입 가능

중복 레코드 또는 값

값이 정말 동일하다면 문제 x … 동일하게 식별해야 하지만 약간의 차이가 있는 경우는 문제 !

→ 정확하게 일치하는 값을 찾는 대신 데이터 유사성을 평가하는 fuzzy matching 사용 …

특성 스케일링

데이터 세트에 포함되는 특성은 크기가 다를 때가 많음 → 정확성에 나쁜 영향을 미치기도 함

크기 조정( 최소-최대 정규화 ), 평균 정규화, 표준화( Z-점수 정규화 ), 단위 길이로 스케일링

일관되지 않은 값

약어, 주소처럼 일관되지 않은 형태로 데이터가 들어올 수 있음 → 인간은 판단 가능 …

일관되지 않은 날짜 형식의 경우에도 표준화 필요함!

  1. 규칙 기반 접근 방식

    데이터의 변동성이 적고 빠르게 변하지 않을 때 잘 작동

  2. 예제 기반 접근 방식

    머신러닝 사용… 빠르게 변하는 경우 더 유용함

→ 두 가지 다 사용하는 하이브리드 접근 방식 사용도 가능


🦋 데이터 분리

모델 훈련을 위해 데이터를 훈련 / 테스트 혹은 훈련 / 검증 / 테스트의 하위 집합으로 나누어줌

→ 훈련 데이터를 사용해 모델을 훈련, 테스트 데이터를 사용해 예측 진행


🦀 모델 훈련

일련의 모델에 대한 훈련 및 테스트, 성능 평가 → 반복적인 프로세스로 최적화된 모델 찾기

후보 모델 평가 및 선택

항상 최고의 성능을 내는 모델을 선택하지는 X → 문제에 가장 적합한 모델을 선택 !

훈련 데이터에 잘 작동해도 overfitting 되었을 수도 있음

모델 배포

모델은 일반적으로 API를 통해 사용되며, 의사 결정 프레임워크에 포함됨 → 비지니스 요구사항에 따라 결정

  • 실시간으로 예측을 수행할 수 있어야 하는가 ( 그렇다면 단위는 ? )
  • 모델을 얼마나 자주 업데이트 해야 하는가
  • 볼륨이나 트래픽 양은 어느 정도로 예상되는가
  • 데이터 세트의 크기는 어느 정도인가
  • 따라야 할 규정, 정책 및 기타 제약이 있는가

🐬 네 가지 배포 아키텍처

RESTful API공유된 DB스트리밍모바일 앱
학습 모델배치배치스트리밍스트리밍
예측 방법실시간배치스트리밍실시간
결과 전송 방법RESTful API공유 DB메시지 큐 스트리밍모바일 내부 API
예측 지연낮음높음매우 낮음낮음
시스템 유지성보통쉬움어려움보통

→ 세부 사항 선택 시에는 더 많은 고려 사항 … ( 모듈화된 마이크로서비스 or 모놀리식 … )

🐌 아키텍처 선택 원칙

  • 재현성 : 모델 입/출력, 메타데이터를 모두 저장 → 최신 버전 관리 사용 여부
  • 자동화 : 가능한 한 빨리 학습 및 모델 게시를 자동화
  • 확장성 : 정기적으로 업데이트해야 하는 경우 처음부터 계획
  • 모듈화 : 작업 코드를 모듈화 → 각 모듈을 제어하는 환경 전반에서 파이프라인 재현 여부 확인
  • 테스트 : 파이프라인을 테스트하는 데에 충분한 시간 할당 … TDD와 BDD 살펴보기

성능 모니터링

모델이 배포된 후 만족스럽게 작동하는지 자세히 모니터링 필요 ! → 적절한 보정을 통해 점진적 개선 …

새로운 데이터를 수집, 다양한 관점에서 주의를 기울여야 함

🐧 모니터링 지표

  1. 모델 성능 : 모델 실행 속도가 아닌 예측의 정확성

    Drift( 모델과 관련이 없는 데이터거나 유용한 입력이 아닐 때 발생 )를 살펴보기

    → 데이터는 변경돼 예측 가치를 잃을 수 있으므로 데이터 포인트를 확인해야 함

  2. 운영 성능

    리소스 소비 모니터링 ( CPU, 메모리, 디스크, 네트워크 I/O 트래픽, 지연 시간, 처리량 … )

  3. 총 소유 비용( TCC )

    회사는 비용 대비 모델에서 얻는 이점에도 초점을 맞춰야 함 → 비용을 낮추거나 새로운 기회 활용

    파이프라인이 충분한 가치를 제공하는지 → 변경 or 종료 여부 결정

  4. 서비스 성능

    이전에 합의한 Service Level Agreement ( SLA )를 설정, 모니터링 및 충족


Chapter 4. 특성 선택과 특성 공학


😗 특성 선택과 특성 공학이란?

특성 선택( Feature Selection ) → 초기 데이터 세트에서 특성의 하위 집합( 변수, 차원 ) 선택 시 사용하는 방법 …

  • 올바르고 관련 있는 특성 사용 시 과적합 발생 가능성 낮아짐 → 잡음이 있는 특성 사용 X
  • 입력 특성이 적을수록 모델 학습에 걸리는 시간이 짧음
  • 모델을 단순화하고 더 쉽게 해석할 수 있도록 함

입력 변수 간의 높은 상관관계, 중복성, 특정 특성의 무관련성 → 큰 정보 손실 없이 특성 삭제 가능

특성 공학( Feature Engineering ) → 특성 선택과 반대되는 개념, 새로운 변수 생성 ( 도메인 지식 사용 )

😳 특성 선택

어떤 특성을 모델에 대한 입력으로 사용할지 … 대부분 몇몇 특성이 대부분의 정보 신호를 담당, 나머지는 잡음

  • 입력 특성의 다중공선성( 회귀 모델에서 하나의 특성으로 예측 가능하다면 해당 데이터 세트의 다른 특성을 사용하더라도 예측이 가능함… 독립변수들 간에 강한 상관관계가 나타나는 문제 )을 줄이면 모델 매개변수를 더 쉽게 해석할 수 있음
  • 모델을 실행하는 데 드는 시간과 모델에 필요한 저장 공간 줄이면 더 빠르고 나은 결과 !
  • 입력 특성 수가 적을수록 설명하기 쉽고, 낮은 차원으로 축소한 시각화도 쉬움
  • 차원 수가 증가하면 가능한 구성은 기하급수적으로 증가하고, 관측치에 포함되는 구성 수가 감소
    특성이 많을수록 데이터를 정확히 설명 가능하지만 과적합 가능성 커짐
    → `차원의 저주` 발생 … 

중복과 관련 없음

모델의 정밀도에 영향을 주지 않고 삭제할 수 있는 특성의 두 가지 범주

  • 중복( redundant ) → 다른 입력 특성과 상관관계가 높고, 신호에 새로운 정보를 많이 추가하지 않음
  • 관련 없음( irrelevant ) → 대상 특성과 상관 관계가 낮으며, 따라서 신호보다 잡음을 더 많이 제공함

→ 가정이 올바른지 확인하려면 가정 사용 여부에 따른 훈련 결과의 정확도 측정

특성 중요도( Feature Importance )

데이터 세트의 각 특성에 대한 점수 → 높을수록 출력 특성과 관련해 더 중요함

일반적으로 Tree 기반 분류기와 함께 제공되는 내장 클래스 ( ex. model.featureimportances )

일 변량 선택

통계 테스트를 사용해 출력 변수와 상관 관계가 가장 강한 특성 확인

ex) scikit-learn의 SelectKBest

히트맵이 있는 상관 행렬

Untitled

두 특성에 대한 값들 간에 관계가 있음 = 특성 간에 상관관계 존재

상관관계는 -1과 1 사이의 연속값임

  • 1 → 완전한 직접 상관관계, 특성 값이 증가할 때 목표 변수의 값이 증가
  • -1 → 완전한 역상관관계, 특성 값이 증가할 때 목표 변수의 값이 감소
  • 0 → 상관관계 없음

seaborn 라이브러리를 사용해 상관 특성의 히트맵을 출력할 수 있음

🐻 래퍼 기반 방법

✨ 특성 선택 문제는 다음 단계를 사용해 검색 문제로 축소됨
  1. 특성의 하위 집합을 사용해 모델을 훈련함
  2. 각 반복의 결과에 따라 특성이 하위 집합에 추가되거나 제거됨
  • 포워드 선택( forward selection ) :
  • 백워드 제거( backward elimination ) : 모든 특성 → 반복될 때마다 중요도가 낮은 특성 제거, 향상 여부 확인
  • 재귀적 특성 제거( recursive feature elimination ) : 반복적으로 모델을 생성, 성능이 최고 또는 최저인 특성을 저장 → 남은 특성으로 다음 모델을 구성하여 특성이 소진될 때까지 반복

🐲 필터 기반 방법

✨ 지표를 지정하고 해당 지표를 기반으로 특성 필터링 다중공선성을 제거하지 않으므로 특성 다중공선성을 처리하는 절차 필요함
  • 피어슨 상관관계( Pearson’s correlation ) : 두 연속 변수 X와 Y 사이의 선형 종속성을 정량화하는 척도 ( -1 ~ 1 사이의 값 )
  • 선형 판별 분석( Linear discriminant analysis, LDA ) : 범주형 변수에서 두 개 이상의 레벨( 또는 클래스 )에서 특성을 뽑아내거나 분리하는 선형 조합을 찾는 데 사용
  • 분산 분석( Analysis of Variance, ANOVA ) : LDA와 유사, 하나 이상의 범주형 독립 변수와 하나의 연속 종속 변수 사용 → 평균 통계 테스트 제공
  • 카이제곱 : 범주형 변수 그룹에 적용되는 통계 테스트, 빈도 분포를 통해 상관/연관 가능성 결정

🐒 임베디드 방법

✨ 필터 방법과 래퍼 방법의 장점을 결합, 일반적으로 특성 선택 방법이 내장됨 알고리즘 사용
  • 라쏘 회귀( Lasso regression ) : 계수 크기의 절댓값에 해당하는 페널티 추가 ( L1 정규화 )
  • 릿지 회귀( Ridge regression ) : 계수 크기의 제곱에 해당하는 페널티 추가 ( L2 정규화 )
  • 미미틱 알고리즘
  • 무작위 다항 로짓
  • 정규화 트리

🐱‍👤 특성 공학

특성을 제거해 모델을 개선하듯, 특성 공학을 통해 새로운 특성을 추가해 동일한 효과 !

특성 공학의 프로세스

  1. 관련성이 있는 특성에 대해 브레인스토밍
  2. 모델 성능을 향상할 수 있는 특성 결정
  3. 새로운 특성 생성
  4. 새로운 특성이 모델 성능을 향상하는지 확인 → 향상 X시 제거
  5. 모델 성능이 기대에 미칠 때까지 반복

특성 공학에 유용한 기술

도메인 지식이 있고 데이터 세트에 익숙하다면 특성 공학에 유용하지만, 일반적인 데이터 과학 기술도 존재함 ! ( 대치, 이상치 관리, 원-핫 인코딩, 로그 변환, 스케일링, 날짜 처리 … )

대치

일관성 없는 데이터 세트, 사무적 오류, 개인 정보 보호 문제 등으로 결측치가 발생함

  • 결측치가 있는 행/열 제거 ( 일정 비율 이상 누락된 경우 삭제 )
  • 수치 대치 대치( imputation ) = 결측치를 이해할 수 있는 다른 값으로 대체 0, mean값, average값 등 … ( average 값은 이상치의 영향을 받기 쉬움 )
  • 범주 대치 범주 변수는 숫자가 아닌 범주 포함 → 일반적으로 최빈값 사용

이상치 관리

이상치( outlier ) → 몇몇 비정상적인 값 …

일반적인 데이터 포인트의 예측에 영향을 주지 않도록 특잇값 제거

🐏 이상치를 처리하는 일반적인 방법

  1. 표준 편차를 구하고, 이 값의 특정 배수( 보통 2~4 )에 해당하는 이상치 제거
  2. 백분위 수를 사용해 일정 비율을 이상치로 가정 … 주관적이고 도메인에 따라 달라짐
  3. 값을 삭제하는 대신 제한하는 것 → 실제 값이 아닌 추정치가 되므로 영향을 미칠 수 있음

원-핫 인코딩( one-hot encoding )

머신러닝에서 특성 공학에 자주 사용되는 기술 ; pandas.get_dummies

범주 특성을 숫자 특성으로 변환하는 방법 → 각 범주의 값에 숫자를 매칭

특정 범주에 따라 어떤 규칙이 있다면 ( 빨강은 나쁨, 초록은 좋음, 노랑은 보통 … ) 성능 향상됨

해당 범주일 경우 1을, 아닐 경우 0을 넣으면 한 가지의 특성을 정보 손실 없이 삭제 가능

로그 변환( log transform )

일반적인 특성 공학 변환, 지나치게 치우친 값을 수정하는 데 도움 → 데이터 분포 정규화

모든 데이터 포인트가 양숫값일 때만 로그 변환 적용 ! ( 변환 적용 전에 데이터 1을 더해 양수가 되도록 할 수 있음 )

스케일링

데이터 세트의 숫자 특성들을 규모가 서로 크게 다를 수 있음 → 척도가 더 높은 특성에 더 높은 가중치 부여 가능 → 스케일링을 적용해 연속된 특성을 범위 측면에서 비교 가능

  • 정규화( normalization ; 최소-최대 정규화 ) : 특성 값을 모두 0~1의 값으로 조정, 표준 편차가 감소하므로 이상치 영향 커짐 → 이상치를 먼저 처리하는 것이 좋음
  • 표준화( Z-점수 표준화 ) : 표준 편차를 계산의 일부로 포함 → 이상치의 영향을 최소화하는 스케일링 방법

날짜 처리

어떤 문제에는 시간 특성이 매우 중요 → 도메인 지식을 사용하면 정보 가치를 크게 높일 수 있음

  • 패턴( 특정 날짜 이전/이후 등 … )
  • 날짜를 다른 구성 요소로 나누기 ( 연, 월, 일 등 )
  • 현재 날짜와 해당 값 사이의 기간 계산
  • 날짜에서 특정한 특성 추출
  • 요일
  • 주말, 휴일 여부

[질문] 다중 공선성 제거 방법

  • 변수 선택법으로 의존적인 변수 삭제VIF(Variance Inflation Factor)를 사용, VIF는 독립변수를 다른 독립변수로 선형회귀한 성능을 나타낸 것
  • PCA(principal component analysis) 방법으로 의존적인 성분 삭제
  • 정규화(regularized) 방법 사용
profile
노는 게 제일 좋은데 공부는 하고 싶어요 😗

0개의 댓글