모델 훈련 = 프로세스의 일부분일 뿐 … 데이터 정리/변환/준비하는 데 시간 ⬆️
**파이프라인( pipeline )
** = 한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조 → 그러나 실제로 머신러닝 파이프라인은 단방향이 아닌 주기적이고 반복적일 수 있음
적절한 수집 메커니즘 선택, 데이터 정리, 특성 공학 등… 파이프라인의 초기 단계 매우 중요 !
또한 모델 성능 측정 및 모니터링, 모델을 재훈련하는 시기와 방법에 따라서도 결과가 크게 달라짐
→ 파이프라인 구현을 위해 다양한 머신러닝 솔루션 존재 … ( 파이썬, 하둡, R, 스파크, AWS, 데이터 브릭스 등 )
문제 정의
데이터 수집
데이터 준비
데이터 분리
→ train / varidation / test모델 학습
후보 모델 평가
→ 검증용 데이터와 테스트용 데이터 사용해 성능 측정모델 배포
→ 모델 선택 후 제품으로 배포성능 모니터링
→ 재교육 및 보정을 통해 개선 … 새 데이터 사용 ! 파이프라인 설정 시 가장 중요한 단계, 올바른 질문을 하고 틀을 잡는 것이 가장 중요 !
예시 ) 채무 불이행 예측 결정 파이프라인을 위한 질문 → 돈을 얼마나, 언제 받는가
✨ 대출이 결정되면, 이 대출에 대해 채무불이행이 발생할지 혹은 정상적으로 대출금을 회수할 수 있을지를 결정할 수 있을까?→ 첫 달 채무불이행 / 20년의 대출 채무불이행 구분 X → 수익성 달라짐
✨ 채무불이행은 언제인가?→ 차용인이 지불금을 보내는 방식에 따라 달라질 수 있음 ( 아예 보내지 X, 산발적으로 보냄 등 )
✨ 주어진 대출에 대해 돈을 얼마나 받게 되는가→ 언제 지불하는가에 따라 이자, 즉 수익이 달라짐
✨ 대출 이자는 얼마인가?→ 기본 채무불이행률을 결정 시 법률에 따라 사용할 수 없는 입력 변수 ( 성별, 인종 등 ) 존재
✨ 허용되지 않는 입력 특성을 사용하지 않고 주어진 대출에 대한 이익은 무엇일까?→ 문제에 대한 진술은 지속적으로 수정, 필요에 따라 조정
질문을 답하는 데 도움이 되는 원시 데이터 수집 → 문제에 따라 관련 데이터 세트를 얻기 어려울 수 있음
어떤 데이터 공급자 또는 공급 업체
를 사용해야 하는가? → 신뢰성데이터를 어떻게 수집
하는가? ( 하둡, 임팔라, 스파크, 파이썬 … )파일
로 저장해야 하는가, 아니면 데이터베이스
에 저장해야 하는가?어떤 유형의 데이터베이스
를 사용하는가? ( RDBMS, NoSQL … )저장해야 하는가
? → 실시간 피드가 있다면 저장 필요 X거나 효율 X일 수 있음입력 형식
은 무엇인가? ( 파케이, Json, CSV … ) → 결정하지 못할수도 있고, 어떻게 변환해야 할지도 정해야 함 … → 소스 종류가 여러 개라면 통합, 병합, 결합 필요관련 입력 변수를 선택하고 성공적인 모델을 설정하려면 데이터 과학자에게 도메인 지식이 필요함
→ 사용 가능한 여러 특성 중 선택해야 하는데, 단독으로는 의미가 없어 결합해야 할 수도 있음
특성 이름 | 특성에 관한 설명 | 유용한 이유 |
---|---|---|
연체된 계좌 | 연체된 계정 수 | 청구서 지불 X → 새로운 대출금도 지불 X |
현재 잔고 | 모든 계좌의 평균 잔고 | 단독으로는 가치 X, 상대적일 때 가치 O |
이자율 | 대출 금리 | 대출 금리가 높을수록 상환하기 어려움 |
결합해서 만든 새로운 변수 ( 특성 공학의 예시 )
특성 이름 | 특성에 관한 설명 | 유용한 이유 |
---|---|---|
신용도 활용 | 모든 거래에 대한 신용 한도 잔액, 신용 한도 대비 현재 잔액 | 비율이 높으면 차용인이 ‘최댓값’에 도달했으며 새 신용을 얻는 데 문제 O |
소득 대비 부채 | 모기지와 해당 대출을 제외한 총 채무에 대한 월 지불액 / 차용인이 자체 보고한 월 소득 | 소득 대비 부채 비율이 낮으면 채무 상환할 자원이 충분 → 문제 X |
원시 데이터 → 데이터 정리, 필터링, 집계, 증강, 통합, 보관 필요
인기있는 클라우드 스택
데이터 저장소
아파치 하둡 분산 파일 시스템 ( HDFS ), 아파치 HBase, 아파치 카산드라
아마존 S3, 애저 블롭 스토리지
→ 머신러닝을 위한 데이터를 DB 내부에서 처리할 수도 있음
실시간 데이터 처리 솔루션
→ 내결함성, 확장 가능, 지연 시간 짧음빈 값, 0, N/A 등 … 처리 방법
아무것도 하지 않음
→ XG부스트 등의 알고리즘은 결측치 작업 수행하지 않아도 됨
중앙값 사용 대치
→ 상관관계 고려 x, 정확도가 높지 않음, 계산이 쉬우며 소규모에 적합
최빈값, 상수 대치
→ 변수에 의해 작동하는 장점, 상관 관계 고려 x … 편향 도입 가능
값이 정말 동일하다면 문제 x … 동일하게 식별해야 하지만 약간의 차이가 있는 경우는 문제 !
→ 정확하게 일치하는 값을 찾는 대신 데이터 유사성을 평가하는 fuzzy matching
사용 …
데이터 세트에 포함되는 특성은 크기가 다를 때가 많음 → 정확성에 나쁜 영향을 미치기도 함
→ 크기 조정( 최소-최대 정규화 )
, 평균 정규화
, 표준화( Z-점수 정규화 )
, 단위 길이로 스케일링
약어, 주소처럼 일관되지 않은 형태로 데이터가 들어올 수 있음 → 인간은 판단 가능 …
일관되지 않은 날짜 형식의 경우에도 표준화 필요함!
규칙 기반 접근 방식
데이터의 변동성이 적고 빠르게 변하지 않을 때 잘 작동
예제 기반 접근 방식
머신러닝 사용… 빠르게 변하는 경우 더 유용함
→ 두 가지 다 사용하는 하이브리드 접근 방식
사용도 가능
모델 훈련을 위해 데이터를 훈련 / 테스트
혹은 훈련 / 검증 / 테스트
의 하위 집합으로 나누어줌
→ 훈련 데이터를 사용해 모델을 훈련, 테스트 데이터를 사용해 예측 진행
일련의 모델에 대한 훈련 및 테스트, 성능 평가 → 반복적인 프로세스로 최적화된 모델 찾기
항상 최고의 성능을 내는 모델을 선택하지는 X → 문제에 가장 적합한 모델을 선택 !
훈련 데이터에 잘 작동해도 overfitting 되었을 수도 있음
모델은 일반적으로 API를 통해 사용되며, 의사 결정 프레임워크에 포함됨 → 비지니스 요구사항에 따라 결정
실시간
으로 예측을 수행할 수 있어야 하는가 ( 그렇다면 단위는 ? )업데이트
해야 하는가볼륨이나 트래픽 양
은 어느 정도로 예상되는가데이터 세트의 크기
는 어느 정도인가규정, 정책 및 기타 제약
이 있는가🐬 네 가지 배포 아키텍처
RESTful API | 공유된 DB | 스트리밍 | 모바일 앱 | |
---|---|---|---|---|
학습 모델 | 배치 | 배치 | 스트리밍 | 스트리밍 |
예측 방법 | 실시간 | 배치 | 스트리밍 | 실시간 |
결과 전송 방법 | RESTful API | 공유 DB | 메시지 큐 스트리밍 | 모바일 내부 API |
예측 지연 | 낮음 | 높음 | 매우 낮음 | 낮음 |
시스템 유지성 | 보통 | 쉬움 | 어려움 | 보통 |
→ 세부 사항 선택 시에는 더 많은 고려 사항 … ( 모듈화된 마이크로서비스 or 모놀리식 … )
🐌 아키텍처 선택 원칙
재현성
: 모델 입/출력, 메타데이터를 모두 저장 → 최신 버전 관리 사용 여부자동화
: 가능한 한 빨리 학습 및 모델 게시를 자동화확장성
: 정기적으로 업데이트해야 하는 경우 처음부터 계획모듈화
: 작업 코드를 모듈화 → 각 모듈을 제어하는 환경 전반에서 파이프라인 재현 여부 확인테스트
: 파이프라인을 테스트하는 데에 충분한 시간 할당 … TDD와 BDD 살펴보기모델이 배포된 후 만족스럽게 작동하는지 자세히 모니터링 필요 ! → 적절한 보정을 통해 점진적 개선 …
새로운 데이터를 수집, 다양한 관점에서 주의를 기울여야 함
🐧 모니터링 지표
모델 성능
: 모델 실행 속도가 아닌 예측의 정확성
Drift( 모델과 관련이 없는 데이터거나 유용한 입력이 아닐 때 발생 )를 살펴보기
→ 데이터는 변경돼 예측 가치를 잃을 수 있으므로 데이터 포인트를 확인해야 함
운영 성능
리소스 소비 모니터링 ( CPU, 메모리, 디스크, 네트워크 I/O 트래픽, 지연 시간, 처리량 … )
총 소유 비용( TCC )
회사는 비용 대비 모델에서 얻는 이점에도 초점을 맞춰야 함 → 비용을 낮추거나 새로운 기회 활용
파이프라인이 충분한 가치를 제공하는지 → 변경 or 종료 여부 결정
서비스 성능
이전에 합의한 Service Level Agreement ( SLA )를 설정, 모니터링 및 충족
특성 선택( Feature Selection )
→ 초기 데이터 세트에서 특성의 하위 집합( 변수, 차원 ) 선택 시 사용하는 방법 …
입력 변수 간의 높은 상관관계, 중복성, 특정 특성의 무관련성 → 큰 정보 손실 없이 특성 삭제 가능
특성 공학( Feature Engineering )
→ 특성 선택과 반대되는 개념, 새로운 변수 생성 ( 도메인 지식 사용 )
어떤 특성을 모델에 대한 입력으로 사용할지 … 대부분 몇몇 특성이 대부분의 정보 신호를 담당, 나머지는 잡음
다중공선성
( 회귀 모델에서 하나의 특성으로 예측 가능하다면 해당 데이터 세트의 다른 특성을 사용하더라도 예측이 가능함… 독립변수들 간에 강한 상관관계가 나타나는 문제 )을 줄이면 모델 매개변수를 더 쉽게 해석할 수 있음→ `차원의 저주` 발생 …
모델의 정밀도에 영향을 주지 않고 삭제할 수 있는 특성의 두 가지 범주
중복( redundant )
→ 다른 입력 특성과 상관관계가 높고, 신호에 새로운 정보를 많이 추가하지 않음관련 없음( irrelevant )
→ 대상 특성과 상관 관계가 낮으며, 따라서 신호보다 잡음을 더 많이 제공함→ 가정이 올바른지 확인하려면 가정 사용 여부에 따른 훈련 결과의 정확도 측정
데이터 세트의 각 특성에 대한 점수 → 높을수록 출력 특성과 관련해 더 중요함
일반적으로 Tree 기반 분류기와 함께 제공되는 내장 클래스 ( ex. model.featureimportances )
통계 테스트를 사용해 출력 변수와 상관 관계가 가장 강한 특성 확인
ex) scikit-learn의 SelectKBest
두 특성에 대한 값들 간에 관계가 있음 = 특성 간에 상관관계 존재
상관관계는 -1과 1 사이의 연속값임
1
→ 완전한 직접 상관관계, 특성 값이 증가할 때 목표 변수의 값이 증가-1
→ 완전한 역상관관계, 특성 값이 증가할 때 목표 변수의 값이 감소0
→ 상관관계 없음seaborn
라이브러리를 사용해 상관 특성의 히트맵을 출력할 수 있음
🐻 래퍼 기반 방법
✨ 특성 선택 문제는 다음 단계를 사용해 검색 문제로 축소됨포워드 선택( 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 정규화 )미미틱 알고리즘
무작위 다항 로짓
정규화 트리
특성을 제거해 모델을 개선하듯, 특성 공학을 통해 새로운 특성을 추가해 동일한 효과 !
도메인 지식
이 있고 데이터 세트에 익숙하다면 특성 공학에 유용하지만, 일반적인 데이터 과학 기술도 존재함 ! ( 대치, 이상치 관리, 원-핫 인코딩, 로그 변환, 스케일링, 날짜 처리 … )
일관성 없는 데이터 세트, 사무적 오류, 개인 정보 보호 문제 등으로 결측치가 발생함
결측치가 있는 행/열 제거
( 일정 비율 이상 누락된 경우 삭제 )수치 대치
대치( imputation ) = 결측치를 이해할 수 있는 다른 값으로 대체 0, mean값, average값 등 … ( average 값은 이상치의 영향을 받기 쉬움 )범주 대치
범주 변수는 숫자가 아닌 범주 포함 → 일반적으로 최빈값 사용이상치( outlier )
→ 몇몇 비정상적인 값 …
일반적인 데이터 포인트의 예측에 영향을 주지 않도록 특잇값 제거
🐏 이상치를 처리하는 일반적인 방법
표준 편차
를 구하고, 이 값의 특정 배수( 보통 2~4 )에 해당하는 이상치 제거 머신러닝에서 특성 공학에 자주 사용되는 기술 ; pandas.get_dummies
범주 특성을 숫자 특성으로 변환하는 방법 → 각 범주의 값에 숫자를 매칭
특정 범주에 따라 어떤 규칙이 있다면 ( 빨강은 나쁨, 초록은 좋음, 노랑은 보통 … ) 성능 향상됨
해당 범주일 경우 1을, 아닐 경우 0을 넣으면 한 가지의 특성을 정보 손실 없이 삭제 가능
일반적인 특성 공학 변환, 지나치게 치우친 값을 수정하는 데 도움 → 데이터 분포 정규화
모든 데이터 포인트가 양숫값일 때만 로그 변환 적용 ! ( 변환 적용 전에 데이터 1을 더해 양수가 되도록 할 수 있음 )
데이터 세트의 숫자 특성들을 규모가 서로 크게 다를 수 있음 → 척도가 더 높은 특성에 더 높은 가중치 부여 가능 → 스케일링을 적용해 연속된 특성을 범위 측면에서 비교 가능
정규화( normalization ; 최소-최대 정규화 )
: 특성 값을 모두 0~1의 값으로 조정, 표준 편차가 감소하므로 이상치 영향 커짐 → 이상치를 먼저 처리하는 것이 좋음표준화( Z-점수 표준화 )
: 표준 편차를 계산의 일부로 포함 → 이상치의 영향을 최소화하는 스케일링 방법어떤 문제에는 시간 특성이 매우 중요 → 도메인 지식을 사용하면 정보 가치를 크게 높일 수 있음
VIF(Variance Inflation Factor)
를 사용, VIF는 독립변수를 다른 독립변수로 선형회귀한 성능을 나타낸 것