이번엔 다음
학습된 머신러닝 모델을 사용하는 시간이다
우선 데이터를 입력 받아야 한다
GENDER = st.radio('성별 선택', ['남자','여자'])
AGE = st.number_input('나이', min_value=10, max_value=120,value= 30, step=1)
MARRIAGE = st.radio('결혼 여부', ['미혼 / 비혼','기혼','기타(이혼, 사별 등)'])
INCOME = st.number_input('월 소득을 입력해주세요, 단위는 만원', min_value=100, max_value=50000, value= 250, step=50)
AREA = st.radio('주거지역을 선택하세요', ['서울', '경기', '인천', '충남', '경남',
'부산', '대구', '울산', '광주', '경북', '전북',
'세종', '제주', '강원', '대전', '충북', '전남'])
각각 성별은 라디오버튼으로 남자와 여자를
나이는 최소값은 10 최대값은 120으로 기본값은 30으로 설정하고
+ - 버튼을 눌렀을때 1씩 가감이 가능하도록 설정
그리고 결혼여부는 라디오버튼으로 미혼, 기혼, 기타 등을 선택하게끔
그리고 월소득은 최소값은 100만원 최대값은 50억원 그리고 기본값은 250만원
+ - 버튼으로는 50만원씩 가감이 가능하도록 설정
그리고 거주지역은 각각의 특별, 광역, 자치도등을 라디오버튼으로 클릭 가능하게끔 설정하여
이런 화면을 만들어 준다
그리고 이제 선택된 값들을 내가 만들어둔 모델에 알맞게 적용하도록
if GENDER == '남자':
GENDER = 'M'
elif GENDER == '여자':
GENDER = 'F'
X_label_encoder = joblib.load('./model/X_label_encoder.pkl')
GENDER = X_label_encoder.transform([GENDER])[0]
성별을 M과 F로 원래의 데이터 형식과 같기 바꿔준뒤
학습된 레이블인코더를 불러와 적용시켜준다
new_data = pd.DataFrame({'성별': [GENDER], '나이': [AGE], '결혼': [MARRIAGE], '월_소득': [INCOME], '거주지역': [AREA] })
그런 뒤에 새로운 데이터로서 데이터프레임을 만들어주자
if st.button('예측하기') :
ct = joblib.load('./model/ct.pkl')
encoded_features = ct.transform(new_data)
X_new = encoded_features.toarray()
file = zipfile.ZipFile('./model/model.zip')
file.extractall('./model')
model = joblib.load('./model/model.pkl')
y_pred = model.predict_proba(X_new)
df = pd.read_csv('./data/Changed_Mobile.csv')
df.drop('Unnamed: 0',axis=1,inplace=True)
probabilities = []
for i, pred in enumerate(y_pred):
prob = round(pred[0][0] * 100, 2)
col_name = df.columns[i]
probabilities.append((col_name, prob))
예측하기 라는 버튼을 만들어 다음 행동을 지시하자
우선 학습된 원핫인코더 를 가져와서 변환한다음 어레이로 만들어주자
그리고 이번엔 학습된 머신러닝 모델을 가져와서
predict함수로 예측을 진행하자
그리고 각 컬럼과 예측확률을 저장할 리스트를 만들어주고
이번엔 각 확률을 bar차트와 pie차트로 만들어보자
probabilities.sort(key=lambda x: x[1], reverse=False)
fig_bar = px.bar(x=[p[1] for p in probabilities], y=[p[0] for p in probabilities], orientation='h',
labels={'x': '확률 (%)', 'y': '어플'}, title='각 어플 사용 확률')
st.plotly_chart(fig_bar)
n_rows = 6
n_cols = 3
fig, axs = plt.subplots(nrows= 6, ncols=3, figsize=(9, 15))
probabilities.sort(key=lambda x: x[1], reverse=True)
for i, (col_name, prob) in enumerate(probabilities):
row = i // n_cols
col = i % n_cols
if row < n_rows and col < n_cols:
axs[row, col].pie([prob, 100 - prob], labels=[f'사용확률: {prob}%', '사용안함'], autopct='%1.2f%%', startangle=90)
axs[row, col].set_title(f'{col_name} 어플 사용 확률')
plt.tight_layout()
st.pyplot(fig)
# 각 어플의 예측 확률 정보 출력
for col_name, prob in probabilities:
st.info(f"당신이 '{col_name}' 관련 어플을 사용할 확률은 {prob}% 입니다.")
우선 bar차트에서는 확률이 큰 순서로 내림차순하여 가로보기로 설정해주고
pie차트에서는 각각의 확률을 보기엔 너무 크고 많기에 6행 3열로 설정해주자
그렇게 설정 후 예측하기 버튼을 누르면
우측 상단에 이런 문구가 뜨고
작업시간이 좀 길다
기다려주면 아래와 같이 높은 확률부터 차례차례 나오게 된다
'Project > p1. Streamlit application' 카테고리의 다른 글
모바일어플리케이션 사용여부 예측 - 완료 및 Issue (1) | 2024.12.05 |
---|---|
모바일어플리케이션 사용여부 예측 - 스트림릿 웹페이지 구현 ① (0) | 2024.12.05 |
모바일어플리케이션 사용여부 예측 - 데이터 전 처리 & 머신러닝 모델 학습 (1) | 2024.12.05 |