Upload Files
Browse files- Churn_Modelling.csv +0 -0
- app.py +27 -0
- model.pkl +3 -0
- prediction.py +65 -0
- requirements.txt +5 -0
Churn_Modelling.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
app.py
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Import Library
|
2 |
+
import streamlit as st
|
3 |
+
|
4 |
+
# Import the created Streamlit Page
|
5 |
+
# import eda
|
6 |
+
import prediction
|
7 |
+
|
8 |
+
# Navigation button
|
9 |
+
navigasi = st.sidebar.selectbox(label='Select Page:', options=['Home Page', 'Prediction']) # 'Exploratory Data Analysis',
|
10 |
+
|
11 |
+
# Looping for navigation
|
12 |
+
if navigasi == 'Home Page':
|
13 |
+
st.markdown("<h1 style='text-align: center;'>Customer Churn Prediction</h1>", unsafe_allow_html=True)
|
14 |
+
st.image("https://miro.medium.com/v2/resize:fit:1358/0*dzmm3qresODlScte")
|
15 |
+
st.caption("<p style='text-align: center;'>Source : Medium.com</p>", unsafe_allow_html=True)
|
16 |
+
st.write('')
|
17 |
+
st.write('**Author : Salsa Sabitha Hurriyah**')
|
18 |
+
st.write('**Classification Model for Predicting Customer Churn**')
|
19 |
+
st.caption('Please select another menu in the Select Box on the left of your screen to start!')
|
20 |
+
|
21 |
+
# # Displays the EDA page
|
22 |
+
# elif navigasi == 'Exploratory Data Analysis':
|
23 |
+
# eda.run()
|
24 |
+
|
25 |
+
# Displays the Predict page
|
26 |
+
elif navigasi == 'Prediction':
|
27 |
+
prediction.run()
|
model.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:985651bcb21c2658e75a8cf804a01f3d2c4073e5cb5f71e5846ac23eb3218a2d
|
3 |
+
size 4212727
|
prediction.py
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# import library
|
2 |
+
import streamlit as st
|
3 |
+
import pandas as pd
|
4 |
+
import numpy as np
|
5 |
+
import pickle
|
6 |
+
|
7 |
+
# Load Model
|
8 |
+
with open('model.pkl', 'rb') as file:
|
9 |
+
model = pickle.load(file)
|
10 |
+
|
11 |
+
# Function to run streamlit model predictor
|
12 |
+
def run():
|
13 |
+
|
14 |
+
# Set Title
|
15 |
+
st.title("Customer Churn Prediction")
|
16 |
+
st.markdown('---')
|
17 |
+
|
18 |
+
# Create a Form for Data Inference
|
19 |
+
st.markdown('## Input Data')
|
20 |
+
with st.form('my_form'):
|
21 |
+
RowNumber = st.number_input('Row Number', min_value=10000, max_value=200000)
|
22 |
+
CustomerId = st.number_input('Customer ID', min_value=100000, max_value=20000000)
|
23 |
+
Surname = st.text_input('Surname or Last Name', '')
|
24 |
+
CreditScore = st.number_input('Credit Score', min_value=350, max_value=850)
|
25 |
+
Geography = st.selectbox('Select Geography', ['Spain', 'Germany', 'France'])
|
26 |
+
Gender = st.selectbox('Select gender', ['Male', 'Female'])
|
27 |
+
Age = st.number_input('Age', min_value=18, max_value=95)
|
28 |
+
Tenure = st.number_input('Tenure', min_value=0, max_value=11)
|
29 |
+
Balance = st.number_input('Balance', min_value=0, max_value=300000)
|
30 |
+
NumOfProducts = st.selectbox('Number of Products', (1,2,3,4))
|
31 |
+
HasCrCard = st.selectbox('Has Credit Card or not? 0 = No, Yes = 1', (0,1))
|
32 |
+
IsActiveMember = st.selectbox('Is Active Member or not? 0 = No, Yes = 1', (0,1))
|
33 |
+
EstimatedSalary = st.number_input('Estimated Salary', min_value=12, max_value=300000)
|
34 |
+
|
35 |
+
# Create a button to make predictions
|
36 |
+
submitted = st.form_submit_button("Predict")
|
37 |
+
|
38 |
+
# Dataframe
|
39 |
+
data = {'RowNumber': RowNumber,
|
40 |
+
'CustomerId': CustomerId,
|
41 |
+
'Surname': Surname,
|
42 |
+
'CreditScore': CreditScore,
|
43 |
+
'Geography': Geography,
|
44 |
+
'Gender': Gender,
|
45 |
+
'Age': Age,
|
46 |
+
'Tenure': Tenure,
|
47 |
+
'Balance': Balance,
|
48 |
+
'NumOfProducts': NumOfProducts,
|
49 |
+
'HasCrCard': HasCrCard,
|
50 |
+
'IsActiveMember': IsActiveMember,
|
51 |
+
'EstimatedSalary': EstimatedSalary
|
52 |
+
}
|
53 |
+
|
54 |
+
df = pd.DataFrame([data])
|
55 |
+
st.dataframe(df)
|
56 |
+
|
57 |
+
if submitted:
|
58 |
+
y_pred_inf = model.predict(df)
|
59 |
+
if y_pred_inf[0] == 0:
|
60 |
+
st.subheader('~ This Customer is Predicted Not to Churn ~')
|
61 |
+
else:
|
62 |
+
st.write('~ This Customer is Predicted to Churn ~')
|
63 |
+
|
64 |
+
if __name__== '__main__':
|
65 |
+
run()
|
requirements.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
seaborn
|
2 |
+
pandas
|
3 |
+
matplotlib
|
4 |
+
plotly
|
5 |
+
scikit-learn==1.2.2
|