File size: 3,073 Bytes
d305ca4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import streamlit as st
import pandas as pd
import numpy as np
import pickle 

# Load All Files
with open('windsorizer.pkl', 'rb') as file_1:
  winsorizer_inf = pickle.load(file_1)

with open('scaler_final.pkl', 'rb') as file_2:
  scaler_final = pickle.load(file_2)

with open('model_forest_opt.pkl', 'rb') as file_3:
  model_forest_opt = pickle.load(file_3)


def run() :
  # Membuat Title 
  st.markdown("<h1 style='text-align: center; color: black;'>Death Event Prediction</h1>", unsafe_allow_html=True)

  # Menambahkan Deskripsi
  st.write('Page ini berisi model untuk memprediksi *Death Event* (potensi meninggalnya pasien) dari pasien')
  st.write('Mohon persiapkan **data Age, Creatinine Phosphokinase (mcg/L), Ejection Fraction (%), Platelets (kp/L), Serum Creatinine (mg/dl), Serum Sodium (mEq/L) dan Time (days) sesuai satuan yang tertera sebelum melakukan prediksi**')

  #Membuat Form
  with st.form(key= 'form_health_parameter'):
      #Deklasrasi input
      age = st.number_input('Age', min_value=40, max_value=100, value=40 ,step=1, help='Usia Pasien')
      creatinine_phosphokinase = st.number_input('Creatinine Phospokinase (mcg/L)', min_value=20, max_value=8000, value=250 ,step=1, help='Kadar creatine kinase dalam darah (mcg/L)')
      ejection_fraction = st.slider('Ejection Fraction (%)', min_value=10, max_value=100, value=40 ,step=1, help='Kemampuan jantung untuk memompa darah dengan oksigen ke seluruh tubuh (%)')
      platelets = st.number_input('Platelets (kp/L)', min_value=25000, max_value=850000, value=250000 ,step=1, help='Jumlah trombosit pada darah (kp/L)')
      serum_creatinine = st.number_input('Serum Creatinine (mg/dl)', min_value=1, max_value=10, value=1 ,step=1, help='Kadar Kreatinin (Zat Limbah) pada darah (mg/dl)')
      serum_sodium = st.slider('Serum Sodium (mEq/L)', min_value=100, max_value=150, value=130 ,step=1, help='Kadar natrium serum pada darah (mEq/L)')
      time = st.number_input('Time Follow Up (days)', min_value=1, max_value=300, value=100 ,step=1, help='Waktu Follow Up Pasien (days)')
      #Membuat Button
      submitted = st.form_submit_button('Predict')

  #Membuat Data Inference    
  data_inf = {
      'age': age, 
      'creatinine_phosphokinase': creatinine_phosphokinase, 
      'ejection_fraction': ejection_fraction, 
      'platelets': platelets, 
      'serum_creatinine': serum_creatinine, 
      'serum_sodium': serum_sodium, 
      'time': time
  }

  #Membuat Dataframe
  data_inf = pd.DataFrame([data_inf])
  data_inf

  #Prediksi
  if submitted :
    #Windsoriser pada data inferencing dengan modul windsoriser
    data_inf = winsorizer_inf.transform(data_inf)

    #Feature Scaling 
    data_inf_final = scaler_final.transform(data_inf)

    #Predict using Random Forest Parameter Tuning
    y_pred_inf = model_forest_opt.predict(data_inf_final)

    #Print hasil prediksi
    if y_pred_inf == 1:
      prediction = 'Deceased (Class 1)'
    else:
      prediction = 'Not Deceasead (Class 0)'
      
    st.write('# Death Event : ', prediction)

if __name__ == '__main__':
    run()