
모델 훈련 = 프로세스의 일부분일 뿐 … 데이터 정리/변환/준비하는 데 시간 ⬆️
**파이프라인( 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는 독립변수를 다른 독립변수로 선형회귀한 성능을 나타낸 것