오늘부터 마지막 미니프로젝트에 들어갔습니다.
CRISP-DM
ML코드만으로 시스템을 구축할 수 없어서 주변에 방대하고 복잡한 인프라가 있습니다.
MLOps란 기계 학습 운영을 위한 프로세스, 도구 및 방법론입니다. 기계 학습 모델을 개발, 배포, 관리 및 유지 보수하는 전체 생명주기를 지원하는 자동화된 프로세스를 의미합니다.
MLOps의 구성요소
원래는 지금까지 단계별로 분석, 전처리, 모델링, 평가를 진행했지만 pipelie은 데이터 발생부터 예측결과까지 물 흐르듯이 흘러가게 만드는 것입니다.
모델이 생성된 이후 새로운 데이터로 예측할 때 해당 데이터는 학습될 때의 구조와 값의 의미가 동일해야합니다. 따라서 pipeline은 새로운 데이터를 학습될 때의 데이터 구조와 의미로 만들어야합니다.
데이터분할은 x,y로 분할해줍니다. y는 target값이고 x는 feature입니다.
또 train, validatuin, test 데이터로 분할합니다. 데이터분할의 이유는 일반화된 성능을 얻기 위해서 사용합니다. 여기서 train의 size는 중요합니다. Training Set의 크기가 커지면(데이터가 많아지면) 모델 성능이 향상됩니다.
범주형 데이터를 숫자로 변환하는 과정을 말합니다. One-Hot-Encoding이라고도 합니다.
범주는 정책적으로 미리 정의하고 Data Dictionary에 미리 정리해야됩니다.
범주형은 항상 categorical을 진행해야합니다!
train['x1'] = pd.Categorical(train['x1'], categories = ['a','b','c'])
test['x1'] = pd.Categorical(test['x1'], categories = ['a','b','c'])
categories는 정책적으로 설정한 범주에 대해서 설정해주는 것입니다.
스케일링은 거리를 계산하는 알고리즘에서 변수의 중요도롸 상관없이 범위가 큰 변수가 거리에 많은 영향을 끼치기 때문에 값의 범위를 맞춰 줄 필요가 있습니다.
스케일링을 하면 분포는 변하지 않고 범위를 맞추게 됩니다.
NA는 빈값 혹은 사용할 수 없는 의미합니다.
각 컬럼별로 NaN값을 확인하는 방법으로 data.isnull().sum()
을 사용해줍니다.
조치하는 방법으로 제거, 채우기, 분리하는 방법이 있습니다.
제거하는 방법으로는 행을 제거하거나 열을 제거하는 방법이 있습니다. 열의 결측치가 더 많으면 열을 기준으로 지우고 반대로 행이 더 많으면 행을 지웁니다. 또는 열의 기준으로 결측치가 있는데 결측 건수가 더 작으면 행을 기준으로 지웁니다.
채우는 방법으로는 특정 값, 앞, 뒤의 값, 추정값으로 채우는 방법이 있습니다.
import joblib
파이프라인으로 만든 함수를 저장하기 위해 joblib을 사용합니다.
joblib.dump(model, 'model.pkl')
위와 같은 형태로 pkl확장자로 저장할 수 있습니다.
k_imputer = joblib.load('k_imputer.pkl')
저장된 파일을 불러오는 코드는 위와 같습니다.
마지막 프로젝트에서 배우고 싶었던 파이프라인을 배워서 설레입니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.