DeepSoft-Tech commited on
Commit
aa416cd
·
verified ·
1 Parent(s): 9590077

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +93 -117
src/streamlit_app.py CHANGED
@@ -10,121 +10,97 @@ from sklearn.metrics import classification_report, accuracy_score
10
  import streamlit_authenticator as stauth
11
 
12
 
 
 
13
 
14
- # --- Hardcoded credentials ---
15
- USER_CREDENTIALS = {
16
- "admin": "admin123",
17
- "akshay": "user123"
18
- }
19
-
20
- # --- Login Panel ---
21
- st.set_page_config(page_title="Login to App", layout="centered")
22
- st.markdown("<h2 style='text-align: center;'>🔐 Login Panel</h2>", unsafe_allow_html=True)
23
-
24
- with st.form("login_form", clear_on_submit=False):
25
- username = st.text_input("Username")
26
- password = st.text_input("Password", type="password")
27
- login_btn = st.form_submit_button("Login")
28
-
29
- if login_btn:
30
- if username in USER_CREDENTIALS and USER_CREDENTIALS[username] == password:
31
-
32
- st.success(f"✅ Welcome, {username}!")
33
- st.write("🎉 You are now logged in. Your app content goes here.")
34
-
35
- MODEL_FILENAME = "/tmp/insurance_churn_model.pkl"
36
- st.title("Insurance Churn Prediction App")
37
-
38
- menu = st.sidebar.radio("Navigation", ["Predict Churn","Train Model"])
39
-
40
- if menu == "Train Model":
41
- # st.header("Upload Dataset and Train Model")
42
- # uploaded_file = st.file_uploader("Upload Insurance Churn Dataset (CSV)", type=["csv"])
43
- # if uploaded_file is not None:
44
- data = pd.read_csv("src/insurance.csv")
45
- st.subheader("Dataset Preview")
46
- st.dataframe(data.head())
47
-
48
- st.subheader("Summary Statistics")
49
- st.write(data.describe())
50
-
51
- if 'churn' in data.columns:
52
- st.subheader("Churn Distribution")
53
- fig, ax = plt.subplots()
54
- sns.countplot(x='churn', data=data, ax=ax)
55
- st.pyplot(fig)
56
-
57
- st.subheader("Model Training")
58
- target_column = st.selectbox("Select Target Column", options=data.columns, index=data.columns.get_loc('churn') if 'churn' in data.columns else 0)
59
- feature_columns = st.multiselect("Select Feature Columns", options=[col for col in data.columns if col != target_column])
60
-
61
- #if feature_columns and target_column:
62
- # X = pd.get_dummies(data[feature_columns])
63
- # y = data[target_column]
64
-
65
- # input features
66
- # Automatically exclude identifier columns
67
- # exclude_columns = ['Customer', 'Policy', 'Policy Number', 'Response']
68
- # feature_columns = [col for col in data.columns if col not in exclude_columns]
69
- # target_column = 'Response'
70
-
71
- # feature_columns = data.drop(columns=[target_column]).select_dtypes(include=[np.number]).columns.tolist()
72
- X= data[feature_columns]
73
- y = data[target_column]
74
-
75
-
76
- # X = data.drop('Response', axis = 1)
77
- # # output labels
78
- # y = data['Response']
79
-
80
- agree = st.checkbox("Continue Training")
81
- if agree:
82
- st.write("Great! ML Model Training Started..")
83
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
84
-
85
- model = RandomForestClassifier()
86
- model.fit(X_train, y_train)
87
-
88
- y_pred = model.predict(X_test)
89
- st.subheader("Model Performance")
90
- st.write("Accuracy:", accuracy_score(y_test, y_pred))
91
- st.text("Classification Report:")
92
- st.text(classification_report(y_test, y_pred))
93
-
94
- joblib.dump((model, X.columns.tolist()), MODEL_FILENAME)
95
- st.success(f"Model trained and saved as {MODEL_FILENAME}")
96
-
97
- elif menu == "Predict Churn":
98
- st.header("Insurance Churn Predictor")
99
- st.markdown("To use Predictor, Please Train the ML Model if not done yet! ")
100
-
101
-
102
- try:
103
- model, feature_names = joblib.load(MODEL_FILENAME)
104
- st.success("Model loaded successfully.")
105
- except:
106
- st.error("Model not found. Please train the model first.")
107
- st.stop()
108
-
109
- st.subheader("Enter Customer Details")
110
- input_data = {}
111
- for feature in feature_names:
112
- input_data[feature] = st.text_input(f"{feature}", "")
113
-
114
- if st.button("Predict Churn"):
115
- try:
116
- input_df = pd.DataFrame([input_data])
117
- input_df = pd.get_dummies(input_df)
118
-
119
- for col in feature_names:
120
- if col not in input_df.columns:
121
- input_df[col] = 0
122
- input_df = input_df[feature_names]
123
-
124
- prediction = model.predict(input_df)[0]
125
- st.subheader("Prediction Result")
126
- st.write(f"Churn: {'Yes' if prediction == 1 else 'No'}")
127
- except Exception as e:
128
- st.error(f"Error in prediction: {e}")
129
- else:
130
- st.error("❌ Invalid username or password")
 
10
  import streamlit_authenticator as stauth
11
 
12
 
13
+ MODEL_FILENAME = "/tmp/insurance_churn_model.pkl"
14
+ st.title("Insurance Churn Prediction App")
15
 
16
+ menu = st.sidebar.radio("Navigation", ["Predict Churn","Train Model"])
17
+
18
+ if menu == "Train Model":
19
+ # st.header("Upload Dataset and Train Model")
20
+ # uploaded_file = st.file_uploader("Upload Insurance Churn Dataset (CSV)", type=["csv"])
21
+ # if uploaded_file is not None:
22
+ data = pd.read_csv("src/insurance.csv")
23
+ st.subheader("Dataset Preview")
24
+ st.dataframe(data.head())
25
+
26
+ st.subheader("Summary Statistics")
27
+ st.write(data.describe())
28
+
29
+ if 'churn' in data.columns:
30
+ st.subheader("Churn Distribution")
31
+ fig, ax = plt.subplots()
32
+ sns.countplot(x='churn', data=data, ax=ax)
33
+ st.pyplot(fig)
34
+
35
+ st.subheader("Model Training")
36
+ target_column = st.selectbox("Select Target Column", options=data.columns, index=data.columns.get_loc('churn') if 'churn' in data.columns else 0)
37
+ feature_columns = st.multiselect("Select Feature Columns", options=[col for col in data.columns if col != target_column])
38
+
39
+ #if feature_columns and target_column:
40
+ # X = pd.get_dummies(data[feature_columns])
41
+ # y = data[target_column]
42
+
43
+ # input features
44
+ # Automatically exclude identifier columns
45
+ # exclude_columns = ['Customer', 'Policy', 'Policy Number', 'Response']
46
+ # feature_columns = [col for col in data.columns if col not in exclude_columns]
47
+ # target_column = 'Response'
48
+
49
+ # feature_columns = data.drop(columns=[target_column]).select_dtypes(include=[np.number]).columns.tolist()
50
+ X= data[feature_columns]
51
+ y = data[target_column]
52
+
53
+
54
+ # X = data.drop('Response', axis = 1)
55
+ # # output labels
56
+ # y = data['Response']
57
+
58
+ agree = st.checkbox("Continue Training")
59
+ if agree:
60
+ st.write("Great! ML Model Training Started..")
61
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
62
+
63
+ model = RandomForestClassifier()
64
+ model.fit(X_train, y_train)
65
+
66
+ y_pred = model.predict(X_test)
67
+ st.subheader("Model Performance")
68
+ st.write("Accuracy:", accuracy_score(y_test, y_pred))
69
+ st.text("Classification Report:")
70
+ st.text(classification_report(y_test, y_pred))
71
+
72
+ joblib.dump((model, X.columns.tolist()), MODEL_FILENAME)
73
+ st.success(f"Model trained and saved as {MODEL_FILENAME}")
74
+
75
+ elif menu == "Predict Churn":
76
+ st.header("Insurance Churn Predictor")
77
+ st.markdown("To use Predictor, Please Train the ML Model if not done yet! ")
78
+
79
+
80
+ try:
81
+ model, feature_names = joblib.load(MODEL_FILENAME)
82
+ st.success("Model loaded successfully.")
83
+ except:
84
+ st.error("Model not found. Please train the model first.")
85
+ st.stop()
86
+
87
+ st.subheader("Enter Customer Details")
88
+ input_data = {}
89
+ for feature in feature_names:
90
+ input_data[feature] = st.text_input(f"{feature}", "")
91
+
92
+ if st.button("Predict Churn"):
93
+ try:
94
+ input_df = pd.DataFrame([input_data])
95
+ input_df = pd.get_dummies(input_df)
96
+
97
+ for col in feature_names:
98
+ if col not in input_df.columns:
99
+ input_df[col] = 0
100
+ input_df = input_df[feature_names]
101
+
102
+ prediction = model.predict(input_df)[0]
103
+ st.subheader("Prediction Result")
104
+ st.write(f"Churn: {'Yes' if prediction == 1 else 'No'}")
105
+ except Exception as e:
106
+ st.error(f"Error in prediction: {e}")