MLFlow 실습(1): 모델 생성

rowingRoot·2022년 5월 9일
0

MLFlow

목록 보기
1/3
post-thumbnail
!pip install opendatasets
import opendatasets as od
od.download('https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud','./')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_auc_score , plot_roc_curve, confusion_matrix
from sklearn.model_selection import KFold
import mlflow
import mlflow.sklearn

실습에 필요한 라이브러리들 import 해줌
opendatasets 라이브러리를 통해 웹에서 바로 데이터 끌어다 쓸 수 있음
kaggle의 creditcardfraud 데이터 사용하여 실습 진행 (신용카드 이상 탐지 데이터셋)
*opendatasets로 kaggle 데이터 다운받기 위해서는 username 과 key가 필요함(즉 아이디가 필요함)

해당 실습에서는 scikit-learn 의 LogisticRegression 모델 사용

df = pd.read_csv('./creditcardfraud/creditcard.csv')
df

df.drop(columns='Time',inplace=True)

normal = df[df.Class ==0]
anomaly = df[df.Class==1]

print(normal.shape)
print(anomaly.shape)

Time 변수는 모델에 긍정적인 영향을 끼치지 않는다고 판단했기 때문에 drop처리

정상데이터(class==0)를 normal, 이상데이터(class==1)를 anomaly로 선언

normal_train , normal_test = train_test_split(normal,test_size=0.2,random_state=2022)
anomaly_train , anomaly_test = train_test_split(anomaly,test_size=0.2,random_state=2022)
normal_train , normal_validate = train_test_split(normal_train,test_size=0.25,random_state=2022)
anomaly_train , anomaly_validate = train_test_split(anomaly_train,test_size=0.25,random_state=2022)

normal 데이터, anomaly 데이터 각각 train,validate,test 데이터로 나누어준다 (비율은 6-2-2)

X_train=pd.concat([normal_train,anomaly_train])
X_test=pd.concat([normal_test,anomaly_test])
X_valiadate=pd.concat([normal_validate,anomaly_validate])

y_train=X_train.Class
y_test=X_test.Class
y_validate=X_valiadate.Class

X_train.drop(columns='Class',inplace=True)
X_test.drop(columns='Class',inplace=True)
X_valiadate.drop(columns='Class',inplace=True)

normal 과 anomaly 로 나누어져 있는 데이터를 X 데이터로 합쳐준다 (train,validate,test 모두)
타겟변수(class)를 y데이터로 설정해준다.

scaler = StandardScaler()
scaler.fit(pd.concat([normal,anomaly]).drop(columns='Class'))
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
X_valiadate = scaler.transform(X_valiadate)

StandardScaler를 이용하여 데이터 정규화 진행

def train(model,X_train,y_train):
    ## 학습 진행 함수 ##
    model = model.fit(X_train,y_train)
    train_acc = model.score(X_train,y_train)
    mlflow.log_metric('train_acc',train_acc)
    print('Train_accuracy',train_acc)

모델 학습 함수 선언
mlflow.log_metric() 라인에서 mlflow 모듈 적용
mlflow가 train_acc 지표를 logging 하여 mlflow가 실행했을때 이 값을 추적하도록 함

def evaluate(model,X_test,y_test):
	## 모델 검증 진행 함수##
    eval_acc = model.score(X_test,y_test)
    preds = model.predict(X_test)
    auc_score = roc_auc_score(y_test,preds)
    mlflow.log_metric("eval_acc",eval_acc)
    mlflow.log_metric("auc_score",auc_score)
    print('Auc Score',auc_score)
    print('Eval Accuracy',eval_acc)
    roc_plot = plot_roc_curve(model,X_test,y_test,name='ML ROC CURVE')
    plt.savefig('model_roc_plot.png')
    plt.show()
    plt.clf()
    conf_matrix = confusion_matrix(y_test,preds)
    ax=sns.heatmap(conf_matrix,annot=True,fmt='g',cmap='YlGnBu_r')
    plt.ylabel('Actual')
    plt.xlabel('Predicted')
    plt.title("Confusion Matrix")
    plt.savefig('model_conf_matrix.png')
    mlflow.log_artifact('model_roc_plot.png')
    mlflow.log_artifact('model_conf_matrix.png')

모델 검증 함수 선언

train 함수와 같이 여기서도 mlflow.log_metric() 모듈을 통해 특정 지표를 logging하여 추적 가능하게 함, 또한 디렉터리에 저장된 파일을 mlfow.log_artifact() 모듈로 기록해 아티팩트로 관리함

*mlflow에서 아티팩트(artifact)란 그림파일,pkl파일,데이터 파일 등의 모든 형식의 파일을 일컫음

model = LogisticRegression(random_state=2022,max_iter=200,solver='lbfgs')
mlflow.set_experiment('model_experiment')

with mlflow.start_run():
    train(model,X_train,y_train)
    evaluate(model,X_test,y_test)
    mlflow.sklearn.log_model(model,'log_reg_model')
    print('Model run:',mlflow.active_run().info.run_uuid)
mlflow.end_run()

LogisticRegression 모델을 선언한 후 mlflow.set_experiment()를 통해 mlflow실험 이름을 지정하고 실행을 준비한다

파이썬의 with 절을 통해 mlflow.start_run() 모듈이 실행됨에 따라 순차적으로 코드가 실행된다

다음 포스팅에서 진행할 것:
실험과 모델을 직접 볼 수 있는 MLFlow UI 접속하여 실습

*참고자료: MLFlow를 활용한 MLOps(Beginning MLOps with MLFlow: Deploy Models in AWS SageMaker, Google Cloud, and Microsoft Azure)

0개의 댓글