Spaces:
Sleeping
Sleeping
| import torch | |
| import torch.nn as nn | |
| import gradio as gr | |
| # --------------------------------------------------------- | |
| # Industry-style MLP for Customer Churn Risk | |
| # --------------------------------------------------------- | |
| class ChurnRiskMLP(nn.Module): | |
| def __init__(self, input_size=20, hidden_size=64, output_size=1, dropout_p=0.5): | |
| super().__init__() | |
| self.fc1 = nn.Linear(input_size, hidden_size) | |
| self.relu = nn.ReLU() | |
| self.dropout = nn.Dropout(p=dropout_p) | |
| self.fc2 = nn.Linear(hidden_size, output_size) | |
| self.sigmoid = nn.Sigmoid() | |
| def forward(self, x): | |
| x1 = self.fc1(x) | |
| x2 = self.relu(x1) | |
| x3 = self.dropout(x2) | |
| x4 = self.fc2(x3) | |
| out = self.sigmoid(x4) | |
| return x1, x2, x3, out | |
| # --------------------------------------------------------- | |
| # Inference function for Gradio | |
| # --------------------------------------------------------- | |
| def run_inference(batch_size, hidden_size, dropout_p, mode): | |
| # Create dummy customer data | |
| dummy = torch.randn(batch_size, 20) | |
| # Build model | |
| model = ChurnRiskMLP( | |
| input_size=20, | |
| hidden_size=hidden_size, | |
| output_size=1, | |
| dropout_p=dropout_p | |
| ) | |
| # Set mode | |
| if mode == "train (dropout ON)": | |
| model.train() | |
| else: | |
| model.eval() | |
| # Forward pass | |
| with torch.no_grad(): | |
| fc1, relu, drop, out = model(dummy) | |
| # Convert tensors to readable text | |
| result = ( | |
| f"=== Dummy Customer Input (batch={batch_size}) ===\n{dummy}\n\n" | |
| f"=== After fc1 ===\n{fc1}\n\n" | |
| f"=== After ReLU ===\n{relu}\n\n" | |
| f"=== After Dropout ({mode}) ===\n{drop}\n\n" | |
| f"=== Final Churn Risk Predictions ===\n{out}\n" | |
| ) | |
| return result | |
| # --------------------------------------------------------- | |
| # Gradio Interface | |
| # --------------------------------------------------------- | |
| with gr.Blocks(title="Customer Churn Risk Explorer") as demo: | |
| gr.Markdown( | |
| """ | |
| # ๐ Customer Churn Risk Explorer | |
| Investigate how a real industry-style MLP behaves with **dropout**, | |
| adjustable **hidden size**, and **batch size**. | |
| This tool helps you visualize: | |
| - Layer activations | |
| - Dropout effects | |
| - Final churn-risk predictions | |
| """ | |
| ) | |
| batch = gr.Slider(1, 32, value=8, step=1, label="Batch Size (# of customers)") | |
| hidden = gr.Slider(8, 256, value=64, step=8, label="Hidden Layer Size") | |
| dropout = gr.Slider(0.0, 0.9, value=0.5, step=0.1, label="Dropout Probability") | |
| mode = gr.Radio(["train (dropout ON)", "eval (dropout OFF)"], value="train (dropout ON)", label="Mode") | |
| output_box = gr.Textbox(label="Model Output", lines=25) | |
| run_button = gr.Button("Run Model") | |
| run_button.click( | |
| fn=run_inference, | |
| inputs=[batch, hidden, dropout, mode], | |
| outputs=output_box | |
| ) | |
| demo.launch() | |