[파이썬] 머신러닝 모델 학습 및 배포 자동화

머신러닝 모델 개발은 많은 과정과 작업을 포함합니다. 이러한 과정 중 학습과 배포는 중요한 단계입니다. 학습은 모델에게 데이터를 제공하고 모델이 데이터의 패턴을 학습하도록 하는 과정입니다. 배포는 학습된 모델을 실제 환경에서 사용할 수 있도록하는 과정입니다. 이 블로그 포스트에서는 파이썬을 사용하여 머신러닝 모델 학습 및 배포를 자동화하는 방법을 살펴보겠습니다.

머신러닝 모델 학습

모델 학습은 입력 데이터와 해당 출력 값(레이블)을 가지고 모델을 학습시키는 프로세스입니다. 이를 자동화하기 위해 파이썬의 scikit-learn 라이브러리를 사용할 수 있습니다. scikit-learn은 다양한 머신러닝 알고리즘을 제공하고, 간편한 인터페이스를 제공하여 모델 학습을 용이하게 만들어줍니다.

다음은 scikit-learn을 사용하여 머신러닝 모델을 학습하는 예제 코드입니다:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 데이터 로드
X, y = load_data()

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 인스턴스화
model = LogisticRegression()

# 모델 학습
model.fit(X_train, y_train)

# 테스트 데이터에 대한 예측 수행
y_pred = model.predict(X_test)

# 모델 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"모델 정확도: {accuracy}")

위의 코드는 LogisticRegression 모델을 사용하여 분류 작업을 위한 모델을 학습하는 예제입니다. 데이터는 load_data() 함수를 통해 로드되며, scikit-learn의 train_test_split() 함수를 사용하여 데이터를 학습 및 테스트 세트로 분할합니다. 학습된 모델은 최종적으로 accuracy_score() 함수를 사용하여 평가됩니다.

머신러닝 모델 배포

머신러닝 모델 학습이 완료되면, 이를 배포하여 실제 환경에서 사용할 수 있도록 해야 합니다. 모델 배포를 자동화하기 위해 파이썬의 Flask 프레임워크를 사용할 수 있습니다. Flask는 간단하고 가볍고 확장 가능한 웹 애플리케이션을 구축하기 위한 파이썬 마이크로 프레임워크입니다.

다음은 Flask를 사용하여 머신러닝 모델을 배포하는 예제 코드입니다:

from flask import Flask, jsonify, request
import joblib

# 모델 로드
model = joblib.load("model.pkl")

# Flask 애플리케이션 인스턴스화
app = Flask(__name__)

# 예측 엔드포인트 정의
@app.route("/predict", methods=["POST"])
def predict():
    data = request.get_json()
    predictions = model.predict(data["features"])
    return jsonify(predictions.tolist())

if __name__ == "__main__":
    # 애플리케이션 실행
    app.run()

위의 코드는 “model.pkl”로 저장된 학습된 모델을 로드한 후, Flask 애플리케이션을 인스턴스화하는 예제입니다. /predict 엔드포인트를 정의하여 POST 요청을 받으면 입력 데이터에 대한 예측 결과를 반환합니다.

자동화 스크립트 작성

머신러닝 모델 학습과 배포를 자동화하기 위해, 위의 두 과정을 하나의 스크립트로 작성할 수 있습니다. 이를 통해 반복 작업을 최소화하고, 일관된 결과를 얻을 수 있습니다.

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from flask import Flask, jsonify, request
import joblib

def load_data():
    # 데이터 로드 로직 작성
    ...

def train_model():
    # 데이터 로드
    X, y = load_data()

    # 데이터 분할
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # 모델 인스턴스화
    model = LogisticRegression()

    # 모델 학습
    model.fit(X_train, y_train)

    return model, X_test, y_test

def evaluate_model(model, X_test, y_test):
    # 테스트 데이터에 대한 예측 수행
    y_pred = model.predict(X_test)

    # 모델 평가
    accuracy = accuracy_score(y_test, y_pred)
    return accuracy

def save_model(model):
    joblib.dump(model, "model.pkl")

def load_model():
    return joblib.load("model.pkl")

def run_flask_app(model):
    # Flask 애플리케이션 인스턴스화
    app = Flask(__name__)

    # 예측 엔드포인트 정의
    @app.route("/predict", methods=["POST"])
    def predict():
        data = request.get_json()
        predictions = model.predict(data["features"])
        return jsonify(predictions.tolist())

    # 애플리케이션 실행
    app.run()

if __name__ == "__main__":
    model, X_test, y_test = train_model()
    accuracy = evaluate_model(model, X_test, y_test)
    print(f"모델 정확도: {accuracy}")
    save_model(model)
    run_flask_app(load_model())

위의 코드는 머신러닝 모델 학습, 평가, 저장, 로드 및 Flask 애플리케이션 실행을 자동화하는 예제입니다. load_data(), train_model(), evaluate_model(), save_model(), load_model(), run_flask_app() 함수를 작성하여 각 단계를 수행하고, if __name__ == "__main__": 블록을 통해 스크립트를 실행합니다.

이렇게 자동화된 스크립트를 사용하여 머신러닝 모델의 학습 및 배포 프로세스를 효율적으로 관리할 수 있습니다.