Update app.py
Browse files
app.py
CHANGED
@@ -1,85 +1,88 @@
|
|
1 |
-
import streamlit as st
|
2 |
-
import
|
3 |
-
import pandas as pd
|
4 |
-
|
5 |
-
# Load model from file
|
6 |
-
model_path = '
|
7 |
-
with open(model_path, 'rb') as file:
|
8 |
-
model =
|
9 |
-
|
10 |
-
#
|
11 |
-
|
12 |
-
|
13 |
-
#
|
14 |
-
st.
|
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 |
-
|
74 |
-
|
75 |
-
#
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import joblib
|
3 |
+
import pandas as pd
|
4 |
+
|
5 |
+
# Load model from file
|
6 |
+
model_path = 'joblibmodel_rfbest_pipe_rfbest_pipe_rfbest_pipe_rf.pkl'
|
7 |
+
with open(model_path, 'rb') as file:
|
8 |
+
model = joblib.load(file)
|
9 |
+
|
10 |
+
# model_path = 'joblibmodel_rfbest_pipe_rfbest_pipe_rfbest_pipe_rf.pkl'
|
11 |
+
# model = joblib.load(model_path)
|
12 |
+
|
13 |
+
# Judul aplikasi
|
14 |
+
st.title("Prediksi Churn Pelanggan")
|
15 |
+
|
16 |
+
# Form untuk input data
|
17 |
+
st.subheader("Masukkan Data Pelanggan")
|
18 |
+
|
19 |
+
# Input data pelanggan
|
20 |
+
gender = st.selectbox('Gender', ['Female', 'Male'])
|
21 |
+
senior_citizen = st.selectbox('Senior Citizen', [0, 1])
|
22 |
+
partner = st.selectbox('Partner', ['Yes', 'No'])
|
23 |
+
dependents = st.selectbox('Dependents', ['Yes', 'No'])
|
24 |
+
tenure = st.number_input('Tenure (bulan)', min_value=0, max_value=72, value=45)
|
25 |
+
phone_service = st.selectbox('Phone Service', ['Yes', 'No'])
|
26 |
+
multiple_lines = st.selectbox('Multiple Lines', ['Yes', 'No'])
|
27 |
+
internet_service = st.selectbox('Internet Service', ['DSL', 'Fiber optic', 'No'])
|
28 |
+
online_security = st.selectbox('Online Security', ['Yes', 'No'])
|
29 |
+
online_backup = st.selectbox('Online Backup', ['Yes', 'No'])
|
30 |
+
device_protection = st.selectbox('Device Protection', ['Yes', 'No'])
|
31 |
+
tech_support = st.selectbox('Tech Support', ['Yes', 'No'])
|
32 |
+
streaming_tv = st.selectbox('Streaming TV', ['Yes', 'No'])
|
33 |
+
streaming_movies = st.selectbox('Streaming Movies', ['Yes', 'No'])
|
34 |
+
contract = st.selectbox('Contract', ['Month-to-month', 'One year', 'Two year'])
|
35 |
+
paperless_billing = st.selectbox('Paperless Billing', ['Yes', 'No'])
|
36 |
+
payment_method = st.selectbox('Payment Method', ['Electronic check', 'Mailed check', 'Bank transfer (automatic)', 'Credit card (automatic)'])
|
37 |
+
monthly_charges = st.number_input('Monthly Charges', min_value=0.0, value=70.35)
|
38 |
+
total_charges = st.number_input('Total Charges', min_value=0.0, value=346.45)
|
39 |
+
|
40 |
+
# Membuat DataFrame dari input
|
41 |
+
data_baru = {
|
42 |
+
'gender': [gender],
|
43 |
+
'SeniorCitizen': [senior_citizen],
|
44 |
+
'Partner': [partner],
|
45 |
+
'Dependents': [dependents],
|
46 |
+
'tenure': [tenure],
|
47 |
+
'PhoneService': [phone_service],
|
48 |
+
'MultipleLines': [multiple_lines],
|
49 |
+
'InternetService': [internet_service],
|
50 |
+
'OnlineSecurity': [online_security],
|
51 |
+
'OnlineBackup': [online_backup],
|
52 |
+
'DeviceProtection': [device_protection],
|
53 |
+
'TechSupport': [tech_support],
|
54 |
+
'StreamingTV': [streaming_tv],
|
55 |
+
'StreamingMovies': [streaming_movies],
|
56 |
+
'Contract': [contract],
|
57 |
+
'PaperlessBilling': [paperless_billing],
|
58 |
+
'PaymentMethod': [payment_method],
|
59 |
+
'MonthlyCharges': [monthly_charges],
|
60 |
+
'TotalCharges': [total_charges]
|
61 |
+
}
|
62 |
+
|
63 |
+
df_baru = pd.DataFrame(data_baru)
|
64 |
+
|
65 |
+
# Melakukan encoding pada data kategorikal
|
66 |
+
categorical_columns = df_baru.select_dtypes(include=['object']).columns
|
67 |
+
df_baru = pd.get_dummies(df_baru, columns=categorical_columns, drop_first=True)
|
68 |
+
|
69 |
+
# Menampilkan data yang dimasukkan pengguna
|
70 |
+
st.subheader("Data Pelanggan yang Dimasukkan:")
|
71 |
+
st.write(df_baru)
|
72 |
+
|
73 |
+
# Tombol untuk melakukan prediksi
|
74 |
+
if st.button('Prediction'):
|
75 |
+
# Prediksi churn
|
76 |
+
prediksi = model.predict(df_baru)
|
77 |
+
|
78 |
+
# Menampilkan hasil prediksi
|
79 |
+
if prediksi[0] == 1:
|
80 |
+
hasil = 'Yes'
|
81 |
+
else:
|
82 |
+
hasil = 'No'
|
83 |
+
|
84 |
+
st.subheader(f"Hasil Prediksi Churn: {hasil}")
|
85 |
+
|
86 |
+
# Probabilitas churn
|
87 |
+
probabilitas = model.predict_proba(df_baru)[:, 1]
|
88 |
+
st.subheader(f"Probabilitas Churn: {probabilitas[0]:.2f}")
|