Akki2228 commited on
Commit
b686fad
Β·
verified Β·
1 Parent(s): 308d819

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -24
app.py CHANGED
@@ -19,9 +19,8 @@ except:
19
  # πŸ”Ή Load Dataset (REAL or DUMMY)
20
  # =========================
21
  try:
22
- data = pd.read_csv("churn_data.csv") # πŸ”₯ Replace with your dataset
23
  except:
24
- # fallback dummy dataset
25
  np.random.seed(42)
26
  data = pd.DataFrame({
27
  "gender": np.random.choice(["Male","Female"], 300),
@@ -53,13 +52,10 @@ def get_kpis(df):
53
  # =========================
54
  def apply_filters(gender, contract):
55
  df = data.copy()
56
-
57
  if gender != "All":
58
  df = df[df["gender"] == gender]
59
-
60
  if contract != "All":
61
  df = df[df["Contract"] == contract]
62
-
63
  return df
64
 
65
  # =========================
@@ -125,6 +121,15 @@ def predict_churn(age, gender, tenure, usage, support, delay,
125
  if model is None:
126
  return "Model not loaded ❌", "", "", None, ""
127
 
 
 
 
 
 
 
 
 
 
128
  gender_val = 1 if gender == "Female" else 0
129
 
130
  sub_premium = 1 if subscription == "Premium" else 0
@@ -156,14 +161,14 @@ def predict_churn(age, gender, tenure, usage, support, delay,
156
  else:
157
  risk = "🟒 Low Risk"
158
 
159
- # probability chart
160
  fig, ax = plt.subplots()
161
  ax.bar(["No Churn","Churn"], [1-prob, prob])
162
  ax.set_ylim(0,1)
163
  ax.set_title("Prediction Probability")
164
  plt.close(fig)
165
 
166
- # explanation
167
  reasons = []
168
  if delay > 15: reasons.append("High payment delay")
169
  if tenure < 6: reasons.append("Low tenure")
@@ -188,8 +193,8 @@ with gr.Blocks() as demo:
188
  # ---------------------
189
  with gr.Tab("πŸ“Š Dashboard"):
190
 
191
- gender_filter = gr.Dropdown(["All","Male","Female"], value="All", label="Filter by Gender")
192
- contract_filter = gr.Dropdown(["All","Monthly","Quarterly","Yearly"], value="All", label="Filter by Contract")
193
 
194
  kpi_text = gr.Markdown()
195
  chart1 = gr.Plot()
@@ -207,35 +212,34 @@ with gr.Blocks() as demo:
207
  risk_pie(df)
208
  )
209
 
 
 
 
210
  gender_filter.change(update_dashboard, [gender_filter, contract_filter],
211
  [kpi_text, chart1, chart2, chart3, chart4])
212
 
213
  contract_filter.change(update_dashboard, [gender_filter, contract_filter],
214
  [kpi_text, chart1, chart2, chart3, chart4])
215
 
216
- # initial load
217
- demo.load(update_dashboard, [gender_filter, contract_filter],
218
- [kpi_text, chart1, chart2, chart3, chart4])
219
-
220
  # ---------------------
221
- # πŸ” PREDICTION TAB
222
  # ---------------------
223
  with gr.Tab("πŸ” Prediction"):
224
 
225
  with gr.Row():
226
- age = gr.Slider(18,80,value=30)
227
- gender = gr.Radio(["Male","Female"], value="Male")
228
- tenure = gr.Slider(0,60,value=12)
229
- usage = gr.Slider(0,50,value=10)
230
 
231
  with gr.Row():
232
- support = gr.Slider(0,20,value=2)
233
- delay = gr.Slider(0,30,value=5)
234
- subscription = gr.Radio(["Basic","Standard","Premium"], value="Basic")
235
- contract = gr.Radio(["Monthly","Quarterly","Yearly"], value="Monthly")
236
 
237
- spend = gr.Slider(0,10000,value=2000)
238
- interaction = gr.Slider(0,100,value=20)
239
 
240
  btn = gr.Button("Predict")
241
 
 
19
  # πŸ”Ή Load Dataset (REAL or DUMMY)
20
  # =========================
21
  try:
22
+ data = pd.read_csv("churn_data.csv")
23
  except:
 
24
  np.random.seed(42)
25
  data = pd.DataFrame({
26
  "gender": np.random.choice(["Male","Female"], 300),
 
52
  # =========================
53
  def apply_filters(gender, contract):
54
  df = data.copy()
 
55
  if gender != "All":
56
  df = df[df["gender"] == gender]
 
57
  if contract != "All":
58
  df = df[df["Contract"] == contract]
 
59
  return df
60
 
61
  # =========================
 
121
  if model is None:
122
  return "Model not loaded ❌", "", "", None, ""
123
 
124
+ # πŸ”Ή Convert inputs safely
125
+ age = float(age)
126
+ tenure = float(tenure)
127
+ usage = float(usage)
128
+ support = float(support)
129
+ delay = float(delay)
130
+ spend = float(spend)
131
+ interaction = float(interaction)
132
+
133
  gender_val = 1 if gender == "Female" else 0
134
 
135
  sub_premium = 1 if subscription == "Premium" else 0
 
161
  else:
162
  risk = "🟒 Low Risk"
163
 
164
+ # πŸ“Š Probability Chart
165
  fig, ax = plt.subplots()
166
  ax.bar(["No Churn","Churn"], [1-prob, prob])
167
  ax.set_ylim(0,1)
168
  ax.set_title("Prediction Probability")
169
  plt.close(fig)
170
 
171
+ # 🧠 Explanation
172
  reasons = []
173
  if delay > 15: reasons.append("High payment delay")
174
  if tenure < 6: reasons.append("Low tenure")
 
193
  # ---------------------
194
  with gr.Tab("πŸ“Š Dashboard"):
195
 
196
+ gender_filter = gr.Dropdown(["All","Male","Female"], value="All")
197
+ contract_filter = gr.Dropdown(["All","Monthly","Quarterly","Yearly"], value="All")
198
 
199
  kpi_text = gr.Markdown()
200
  chart1 = gr.Plot()
 
212
  risk_pie(df)
213
  )
214
 
215
+ demo.load(update_dashboard, [gender_filter, contract_filter],
216
+ [kpi_text, chart1, chart2, chart3, chart4])
217
+
218
  gender_filter.change(update_dashboard, [gender_filter, contract_filter],
219
  [kpi_text, chart1, chart2, chart3, chart4])
220
 
221
  contract_filter.change(update_dashboard, [gender_filter, contract_filter],
222
  [kpi_text, chart1, chart2, chart3, chart4])
223
 
 
 
 
 
224
  # ---------------------
225
+ # πŸ” PREDICTION TAB (UPDATED)
226
  # ---------------------
227
  with gr.Tab("πŸ” Prediction"):
228
 
229
  with gr.Row():
230
+ age = gr.Number(value=30, label="Age")
231
+ gender = gr.Dropdown(["Male","Female"], value="Male", label="Gender")
232
+ tenure = gr.Number(value=12, label="Tenure")
233
+ usage = gr.Number(value=10, label="Usage")
234
 
235
  with gr.Row():
236
+ support = gr.Number(value=2, label="Support Calls")
237
+ delay = gr.Number(value=5, label="Payment Delay")
238
+ subscription = gr.Dropdown(["Basic","Standard","Premium"], value="Basic")
239
+ contract = gr.Dropdown(["Monthly","Quarterly","Yearly"], value="Monthly")
240
 
241
+ spend = gr.Number(value=2000, label="Total Spend")
242
+ interaction = gr.Number(value=20, label="Last Interaction")
243
 
244
  btn = gr.Button("Predict")
245