eaglelandsonce commited on
Commit
8375ca7
·
verified ·
1 Parent(s): dc79e45

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -0
app.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import gradio as gr
4
+
5
+ # ---------------------------------------------------------
6
+ # Industry-style MLP for Customer Churn Risk
7
+ # ---------------------------------------------------------
8
+ class ChurnRiskMLP(nn.Module):
9
+ def __init__(self, input_size=20, hidden_size=64, output_size=1, dropout_p=0.5):
10
+ super().__init__()
11
+ self.fc1 = nn.Linear(input_size, hidden_size)
12
+ self.relu = nn.ReLU()
13
+ self.dropout = nn.Dropout(p=dropout_p)
14
+ self.fc2 = nn.Linear(hidden_size, output_size)
15
+ self.sigmoid = nn.Sigmoid()
16
+
17
+ def forward(self, x):
18
+ x1 = self.fc1(x)
19
+ x2 = self.relu(x1)
20
+ x3 = self.dropout(x2)
21
+ x4 = self.fc2(x3)
22
+ out = self.sigmoid(x4)
23
+ return x1, x2, x3, out
24
+
25
+
26
+ # ---------------------------------------------------------
27
+ # Inference function for Gradio
28
+ # ---------------------------------------------------------
29
+ def run_inference(batch_size, hidden_size, dropout_p, mode):
30
+ # Create dummy customer data
31
+ dummy = torch.randn(batch_size, 20)
32
+
33
+ # Build model
34
+ model = ChurnRiskMLP(
35
+ input_size=20,
36
+ hidden_size=hidden_size,
37
+ output_size=1,
38
+ dropout_p=dropout_p
39
+ )
40
+
41
+ # Set mode
42
+ if mode == "train (dropout ON)":
43
+ model.train()
44
+ else:
45
+ model.eval()
46
+
47
+ # Forward pass
48
+ with torch.no_grad():
49
+ fc1, relu, drop, out = model(dummy)
50
+
51
+ # Convert tensors to readable text
52
+ result = (
53
+ f"=== Dummy Customer Input (batch={batch_size}) ===\n{dummy}\n\n"
54
+ f"=== After fc1 ===\n{fc1}\n\n"
55
+ f"=== After ReLU ===\n{relu}\n\n"
56
+ f"=== After Dropout ({mode}) ===\n{drop}\n\n"
57
+ f"=== Final Churn Risk Predictions ===\n{out}\n"
58
+ )
59
+
60
+ return result
61
+
62
+
63
+ # ---------------------------------------------------------
64
+ # Gradio Interface
65
+ # ---------------------------------------------------------
66
+ with gr.Blocks(title="Customer Churn Risk Explorer") as demo:
67
+ gr.Markdown(
68
+ """
69
+ # 📊 Customer Churn Risk Explorer
70
+ Investigate how a real industry-style MLP behaves with **dropout**,
71
+ adjustable **hidden size**, and **batch size**.
72
+
73
+ This tool helps you visualize:
74
+ - Layer activations
75
+ - Dropout effects
76
+ - Final churn-risk predictions
77
+ """
78
+ )
79
+
80
+ batch = gr.Slider(1, 32, value=8, step=1, label="Batch Size (# of customers)")
81
+ hidden = gr.Slider(8, 256, value=64, step=8, label="Hidden Layer Size")
82
+ dropout = gr.Slider(0.0, 0.9, value=0.5, step=0.1, label="Dropout Probability")
83
+ mode = gr.Radio(["train (dropout ON)", "eval (dropout OFF)"], value="train (dropout ON)", label="Mode")
84
+
85
+ output_box = gr.Textbox(label="Model Output", lines=25)
86
+
87
+ run_button = gr.Button("Run Model")
88
+
89
+ run_button.click(
90
+ fn=run_inference,
91
+ inputs=[batch, hidden, dropout, mode],
92
+ outputs=output_box
93
+ )
94
+
95
+ demo.launch()