본문 바로가기
Web/Streamlit

[Web] Streamlit - 예측 모델 구현 구조 및 순서

by skwkiix 2023. 9. 27.
728x90

 

이 포스팅은 MiniPJT를 진행하면서, 구현하며 학습한 내용을 종합한 것으로 streamlit 모델을 스트림릿 웹페이지에서 구현하는 방법이다. 

 

Streamlit 구조 및 순서


streamlit 에서 예측 모델을 구현하는 코드를 간략하게 표현하면 다음과 같다.

모델 파일이 저장된 상태에서, 모델 파일을 불러오고, 해당 모델에 input_data를 넣어줘서 예측을 수행한다.

# 저장된 모델 파일을 불러옴
loaded_model = joblib.load("models/모델.pkl")

# 불러온 모델을 사용하여 예측 수행
predictions = loaded_model.predict(input_data)

즉,  모델을 불러오고 해당 모델이 예측을 수행할 수 있게 불러온 모델.predict(이부분)  에 해당하는 전체 피쳐 값을 넣어주면 모델 예측은 끝난다.

모델 저장 > 모델 불러오기 > 모델 예측(피쳐값 넣어주기)

 


모델 저장


1. 모델. py 생성 후, 모델을 피클 (pkl)로 저장

jupyter나 VScode에서 실행한 예측 모델을 pkl 형태로 저장한다.

저장하는 방법은 모델링 코드를 써준 후, 가장 아래쪽에 다음의 코드를 작성하는 것이다.

# 모델 저장(생략 가능)
# if not os.path.exists("models"): # models 디렉토리가 존재하지 않으면 폴더를 생성하라는 명령
#    os.mkdir("models")

# 핵심
model_file = open("models/모델.pkl", "wb") # 모델을 저장할 파일을 열고, 형식을 지정
joblib.dump(bst, model_file) # 모델을 저장
model_file.close() # 모델을 저장한 파일을 닫음

 

model_file = open("models/모델.pkl", "wb") 

  • model_file : 모델을 저장하기 위한 핸들
  • "wb" : 파일을 열 때 사용하는 모드, "wb"는 이진(binary) 쓰기 모드 > 파일을 열면 데이터를 이진 형식으로 저장(텍스트가 아닌 데이터는 주로 wb 모드를 사용해서 저장한다.)
  • models/모델. pkl : models 디렉토리에 모델을 피클(pkl) 형식으로 저장

 

joblib.dump(bst, model_file)

 > joblib 라이브러리를 사용하여 Python 객체 bst를 파일 model_file에 저장

 

1. 해당 파일을 실행하면 모델 객체를 불러올 때, 그 모델 객체는 변수 bst에 할당된다.

2. joblib.dump 함수는 bst 객체를 직렬화하여 파일 model_file에 저장

joblib 라이브러리 데이터 직렬화 및 복원을 지원하는 파이썬 라이브러리로,  주로 큰 데이터나 복잡한 파이썬 객체를 저장하고 나중에 다시 불러올 때 사용되는 라이브러리로 .특히,  NumPy 배열과 같은 대용량 데이터에 효율적으로 작동한다.

2. 모델 불러오기

모델을 불러올 파일(스트림릿이 동작할 파일)에서 저장한 모델을 불러온다.

(모델을 저장할 때와 같이, joblib 라이브러리를 이용하여 load로 모델이 저장되어 있는 피클파일을 불러온다.)

model1 = joblib.load("models/모델.pkl")

 

모델을 불러오고 다음의 예측 코드를 실행하기 전의 모든 코드는, 최종 예측 코드에 들어갈 리스트( input_data )를 넣는 코드라고 말해도 과언이 아니다. 

 

예를 들어 편의점 매출 예측 모델에 사용한 피쳐 [ 면적당 점포수, 지하철 승하차 수, 상주인구 수 ]라고 한다면

input data = [56, 20000, 1000] 이런 식으로 구성될 것이다. 최종 인풋 데이터에는 모든 피쳐의 값들이 표현되어야 한다.

 


3. 모델로 예측하기

predictions = model1.predict(input_data)

모델을 예측한 결과를 predictions 에 저장하고, 지난 포스팅에서 다루었던 스트림릿 기초문법을 활용해 페이지 상에서 예측 값을 나타낸다(st.write(predictions))

728x90