728x90
반응형
Streamlit은 Python 기반의 애플리케이션을 간단하게 만들 수 있는 도구로, 머신러닝 모델을 웹 애플리케이션으로 전환하는 데 매우 적합합니다. 이번 글에서는 Jupyter Notebook에서 학습한 인공지능 모델을 Streamlit에서 어떻게 사용하는지 자세히 알아보겠습니다.
📂 준비된 파일 및 역할
- regressor1.pkl
- 학습된 머신러닝 모델이 저장된 파일입니다.
- Pickle 형식으로 저장되어 있으며, Streamlit 앱에서 이 파일을 로드하여 예측에 활용합니다.
- car_price.ipynb
- Jupyter Notebook에서 차량 가격을 예측하는 모델을 학습시키고 저장하는 코드를 포함하고 있습니다.
- app.py
- Streamlit 애플리케이션 코드 파일로, 저장된 모델을 불러와 사용자 입력을 기반으로 예측을 수행합니다.
1️⃣ Jupyter Notebook에서 모델 학습 및 저장하기
먼저 Jupyter Notebook에서 데이터를 사용해 모델을 학습시키고 저장합니다.
주요 코드 설명
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
import joblib
# 데이터 로드
df = pd.read_csv('car_price_data.csv') # 차량 데이터
X = df[['year', 'mileage', 'engine_size']] # 입력 변수
y = df['price'] # 출력 변수
# 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = RandomForestRegressor()
model.fit(X_train, y_train)
# 모델 저장
joblib.dump(model, 'regressor1.pkl')
코드 주요 포인트
- 데이터 로드
- 차량 데이터셋(car_price_data.csv)을 로드합니다.
- 주요 입력 변수(year, mileage, engine_size)와 출력 변수(price)를 정의합니다.
- 모델 학습
- RandomForestRegressor를 사용하여 예측 모델을 학습합니다.
- 모델 저장
- 학습이 완료된 모델을 joblib 라이브러리를 사용해 regressor1.pkl 파일로 저장합니다.
2️⃣ Streamlit 앱에서 학습된 모델 불러오기
이제 저장된 모델 파일(regressor1.pkl)을 Streamlit 앱에서 불러오고 사용자 입력을 통해 예측 결과를 출력하는 방법을 알아보겠습니다.
주요 Streamlit 코드 (app.py)
import streamlit as st
import pandas as pd
import joblib
# 학습된 모델 로드
model = joblib.load('regressor1.pkl')
# Streamlit 앱 제목
st.title("차량 가격 예측")
# 입력 폼 생성
st.sidebar.header("차량 정보 입력")
year = st.sidebar.number_input("연식 (년)", min_value=2000, max_value=2025, value=2015)
mileage = st.sidebar.number_input("주행 거리 (km)", min_value=0, value=50000)
engine_size = st.sidebar.number_input("엔진 크기 (리터)", min_value=1.0, max_value=5.0, value=2.0)
# 예측 버튼
if st.sidebar.button("예측하기"):
# 입력 데이터를 Pandas DataFrame으로 변환
input_data = pd.DataFrame([[year, mileage, engine_size]], columns=['year', 'mileage', 'engine_size'])
# 예측 수행
prediction = model.predict(input_data)[0]
# 결과 출력
st.success(f"예상 차량 가격은 {prediction:,.0f}원입니다.")
3️⃣ 주요 구현 단계
1. Streamlit의 기본 구조
Streamlit 애플리케이션은 다음과 같은 구조를 가집니다.
- 모델 로드
- joblib 라이브러리를 사용하여 저장된 모델 파일을 불러옵니다.
model = joblib.load('regressor1.pkl')
- 사용자 입력
- 사용자로부터 연식, 주행 거리, 엔진 크기를 입력받습니다.
- st.sidebar.number_input를 사용하여 간단한 UI를 생성합니다.
year = st.sidebar.number_input("연식 (년)", min_value=2000, max_value=2025, value=2015)
- 예측 수행 및 출력
- 입력값을 Pandas DataFrame으로 변환 후, 모델에 입력하여 예측값을 출력합니다.
prediction = model.predict(input_data)[0] st.success(f"예상 차량 가격은 {prediction:,.0f}원입니다.")
2. Streamlit 실행 방법
- app.py 실행
streamlit run app.py
- 아래 명령어를 실행하여 Streamlit 애플리케이션을 실행합니다.
- 브라우저에서 확인
- 실행 후, 브라우저에서 **http://localhost:8501**로 접속하면 앱이 실행됩니다.
4️⃣ 완성된 애플리케이션 동작 흐름
- 사용자 입력
- 연식: 2000~2025 사이의 값 입력.
- 주행 거리: 주행 거리를 km 단위로 입력.
- 엔진 크기: 차량 엔진 크기를 리터 단위로 입력.
- 예측 수행
- 입력값을 모델에 전달하여 차량 가격 예측.
- 결과 출력
- 예측된 차량 가격을 화면에 표시.
5️⃣ 실행 결과
입력 화면
- 연식, 주행 거리, 엔진 크기를 입력받는 UI가 제공됩니다.
결과 화면
- 입력값을 기반으로 모델이 예측한 차량 가격이 출력됩니다.
- 예: "예상 차량 가격은 18,500,000원입니다."
6️⃣ 코드 상세 설명
1. 데이터 입력 처리
st.sidebar.number_input로 입력값을 처리하며, 기본값과 범위를 설정할 수 있습니다.
year = st.sidebar.number_input("연식 (년)", min_value=2000, max_value=2025, value=2015)
2. 모델 예측 수행
사용자의 입력값을 DataFrame으로 변환하여 모델에 전달합니다.
input_data = pd.DataFrame([[year, mileage, engine_size]], columns=['year', 'mileage', 'engine_size'])
prediction = model.predict(input_data)[0]
3. 결과 표시
st.success로 예측값을 보기 좋은 형태로 출력합니다.
st.success(f"예상 차량 가격은 {prediction:,.0f}원입니다.")
7️⃣ 요약 및 정리
- Jupyter Notebook에서 모델을 학습하고 저장(Pickle 사용).
- Streamlit으로 간단한 웹 애플리케이션 구현.
- 사용자 입력을 받아 예측 결과를 실시간으로 출력.
Streamlit은 Python 모델을 웹 애플리케이션으로 배포하는 데 최적화된 도구로, 데이터 과학자와 머신러닝 엔지니어에게 강력한 도구가 됩니다.
🚀 활용 팁
- 데이터 시각화 추가: 예측 결과와 함께 입력값의 분포를 시각화하면 더 직관적입니다.
- 모델 변경: 다른 머신러닝 알고리즘을 적용하여 성능을 비교해 보세요.
- 배포: Streamlit Cloud를 통해 애플리케이션을 배포하여 누구나 접근 가능하게 만드세요.
728x90
반응형
'Streamlit > 실습' 카테고리의 다른 글
151.[Backend] [Jupyter Notebook] : 상관계수를 이용한 추천 시스템 🎬 (0) | 2025.02.10 |
---|---|
150.[AI] [LlamaIndex RAG] Mistral 모델로 PDF 텍스트 추출 (0) | 2025.02.10 |