본문 바로가기
데이터 분석

파이썬으로 분석한 알고리즘 시스템 적용 가이드

by 데이널 2024. 10. 17.

'데이널' 컨텐츠에 포함된 정보는?

    여러분은 분석 프로젝트 결과물이 어떤 형태인지 아시나요?

     
    데이터 분석을 하면 알고리즘을 시각화하거나, 모델 평가 결과를 보고서로 제출하고 끝나는 프로젝트도 있습니다. 이 방식은 인사이트만 제공하고, 실제 구축은 다른 팀이나 조직해서 진행하는 경우입니다.
     

     
    이 글에서는 Python으로 알고리즘을 개발하고, 모델을 만들고, 그 모델을 주기적으로 실행하게 시스템에 적용하는 것까지 알아보도록 하겠습니다. 
     

    분석 알고리즘 개발

    여러분은 아마 주피터노트북으로 개발하시는 것이 편할텐데요. 거기에는 eda한 내용까지 포함돼 있어서, 데이터분석 후에는 실행 파일을 만들어줘야 합니다.

    가장 먼저 할 일은 필요한 라이브러리를 가져올 거예요. 예를 들어, 자주 쓰이는 NumPy나 Pandas 같은 라이브러리를 import 해야 합니다.
     
    그다음엔 데이터를 분석을 위해 준비하는 것인데요. 파일이든, database든 수집한 데이터셋을 불러옵니다. 그리고 eda를 통해 데이터를 이해하고 전처리를 합니다.
     
    최종적으로 알고리즘의 핵심 로직을 구현하게 되는데요. 여기서는 그냥 간단한 예시로 선형 회귀 알고리즘을 만든다고 가정하겠습니다. 

    from sklearn.linear_model import LinearRegression
    import numpy as np

    def linear_regression(X, y):
          model = LinearRegression()
          model.fit(X, y)
          return model

    # 사용 예시
    X = np.array([[1], [2], [3], [4], [5]])
    y = np.array([2, 4, 6, 8, 10])
    model = linear_regression(X, y)
    y_pred = model.predict([[6]])
    print("예측 값:", y_pred)

     
    이 코드는 scikit-learn 라이브러리를 사용해 선형 회귀 모델을 만든 겁니다. X와 y 데이터로 모델을 학습시키고, 새로운 값을 예측하는 것이죠. 
     

    알고리즘 결과물, 모델 생성

    이제 그걸 바탕으로 모델을 만들 차례입니다.


    모델이란 뭘까요? 간단히 말해, 우리가 만든 알고리즘을 실제 데이터에 적용해서 학습시킨 결과물이에요. 이 모델을 파일로 저장해 두면, 나중에 언제든 불러와서 사용할 수 있어 편리합니다.
     
    파이썬에서 모델을 만들고 저장하는 방법은 여러 가지가 있는데요. 가장 많이 사용되는 방법 중 하나는 joblib 라이브러리를 이용하는 겁니다. 

    import joblib
    from sklearn.linear_model import LinearRegression
    import numpy as np

    # 모델 생성
    X = np.array([[1], [2], [3], [4], [5]])
    y = np.array([2, 4, 6, 8, 10])
    model = LinearRegression()
    model.fit(X, y)

    # 모델 저장
    joblib.dump(model, 'linear_model.pkl')
    print("모델이 linear_model.pkl에 저장되었습니다.")

    # 모델 불러오기
    loaded_model = joblib.load('linear_model.pkl')
    print("예측 값:", loaded_model.predict([[6]])) 

     
    이 코드는 선형 회귀 모델을 만들고, 그 모델을 'linear_model.pkl'이라는 파일로 저장합니다. 그리고 나서 그 파일을 다시 불러와서 새로운 값을 예측하는 걸 보여주고 있습니다. 
     
    모델 파일을 만들었을 때 이점은 시간이 오래 걸리는 학습 과정을 매번 반복할 필요가 없다는 것입니다. 다른 프로그램에서도 쉽게 이 모델을 사용할 수 있습니다.

     

    아래 그림처럼 학습 알고리즘 수행 주기와 추론 알고리즘 수행 주기를 분리할 수 있습니다. 또, 이렇게 되면 모델의 버전 관리도 쉬워져서 여러 버전의 모델을 비교하기도 편해집니다.

     

    분석 알고리즘 시스템 적용 프로세스
    분석 알고리즘 시스템 적용 Process

     
    하지만 주의할 점도 있습니다. 모델 파일이 너무 커지면 저장하고 불러오는 데 시간이 오래 걸릴 수 있습니다. 그리고 모델을 만들 때 사용한 라이브러리 버전과 모델을 불러올 때 사용하는 버전이 다르면 문제가 생길 수 있으니 항상 버전을 확인해야 합니다. 
     

    생성 모델을 스케줄링으로 주기적 실행

    이제 이 모델을 실제로 구축해 보겠습니다.

     
    특히 실시간으로 계속 새로운 데이터가 들어오는 경우, 모델을 주기적으로 실행해서 새로운 예측 결과를 얻는 게 중요합니다. 이걸 자동화하는 방법이 바로 '스케줄링'을 거는 겁니다. 
     
    파이썬에서 스케줄링을 구현하는 방법은 여러 가지가 있는데요. 그 중에서 가장 간단한 방법 중 하나는 'schedule' 라이브러리를 사용하는 겁니다. 아래 예제 코드를 보시죠.

    import schedule
    import time
    import joblib
    import numpy as np

    def predict_with_model():
          model = joblib.load('linear_model.pkl')
          new_data = np.array([[6]])
          prediction = model.predict(new_data)
          print(f"현재 시간: {time.ctime()}, 예측 값: {prediction[0]}")

    # 10분마다 모델 실행
    schedule.every(10).minutes.do(predict_with_model)

    while True:
          schedule.run_pending()
          time.sleep(1)

     
    이 코드는 'linear_model.pkl' 파일에 저장된 모델을 10분마다 한 번씩 불러와서 새로운 데이터로 예측을 수행합니다. 결과는 현재 시간과 함께 출력되는 코드입니다.
     
    스케줄링 작업에서 주의할 점은 너무 자주 실행되면 시스템에 부담이 될 수 있습니다. 그리고 오류가 발생했을 때 즉시 대응하기 어려울 수 있으니, 로그를 남기거나 알림 시스템을 구축하는 것도 좋은 방법입니다. 그리고 실시간 처리를 위해 카프카와 같은 실시간 처리 방식으로 변경하는 것이 좋습니다. 
     
    실제 업무 환경에서는 Airflow와 같은 도구를 사용하기도 합니다. 이런 도구들은 더 복잡한 스케줄링 작업을 처리할 수 있고, 여러 작업 간의 의존성도 관리하는데 효과적입니다.
     

    마치며

    여기까지 Python을 이용한 분석 알고리즘을 시스템에 구축해 보았는데요. 알고리즘 개발부터 모델 생성, 그리고 주기적 실행까지, 전체 과정을 살펴봤죠.
     
    실제 시스템에 적용하기 위해서는 Python 문법 뿐아니라 다른 기술들을 더 필요합니다. Linux, Airflow(스케줄링), Kafka, Database, SQL 등 알아야 할 지식들이 많습니다.