ViniciusKhan commited on
Commit
fdc319c
·
1 Parent(s): 1c6c8a6

Deploy inicial do app no Hugging Face Space

Browse files
Files changed (1) hide show
  1. app.py +46 -13
app.py CHANGED
@@ -1,22 +1,55 @@
1
  import gradio as gr
 
2
 
3
  def predict(text):
4
- # Aqui você pode integrar seu modelo real de churn!
5
- # Exemplo básico de regra para simulação
6
  texto = text.lower()
7
- sinais_risco = ["cancelamento", "migrando", "deixando", "insatisfeito", "não quero mais", "vou sair"]
 
 
8
  if any(sinal in texto for sinal in sinais_risco):
9
  return "🚨 Classe prevista: FUGA (alto risco de churn)"
10
  return "✅ Classe prevista: Não fuga (baixo risco de churn)"
11
 
12
- demo = gr.Interface(
13
- fn=predict,
14
- inputs=gr.Textbox(lines=4, label="Texto do relacionamento/NPS do cliente"),
15
- outputs=gr.Textbox(label="Predição"),
16
- title="ChurnSentinel API 🏢",
17
- description="Sentinela inteligente para detectar risco de fuga de cliente. Cole aqui um texto de relacionamento ou NPS para analisar o risco."
18
- )
19
 
20
- if __name__ == "__main__":
21
- demo.launch()
22
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ import pandas as pd
3
 
4
  def predict(text):
5
+ # Aqui pode integrar o modelo real de churn!
 
6
  texto = text.lower()
7
+ sinais_risco = [
8
+ "cancelamento", "migrando", "deixando", "insatisfeito", "não quero mais", "vou sair"
9
+ ]
10
  if any(sinal in texto for sinal in sinais_risco):
11
  return "🚨 Classe prevista: FUGA (alto risco de churn)"
12
  return "✅ Classe prevista: Não fuga (baixo risco de churn)"
13
 
14
+ def analisar_arquivo(file):
15
+ try:
16
+ df = pd.read_excel(file, engine="openpyxl")
17
+ except Exception as e:
18
+ return f"Erro ao ler o arquivo: {e}", None
 
 
19
 
20
+ # Checa coluna Resumo
21
+ if "Resumo" not in df.columns:
22
+ return "❌ Coluna 'Resumo' não encontrada.", None
23
+
24
+ # Converte para minúsculo, processa cada linha
25
+ df["Resumo"] = df["Resumo"].fillna("").astype(str).str.lower()
26
+ predicoes = df["Resumo"].apply(predict)
27
+ df["Predição"] = predicoes
28
+ # Exibe até 50 linhas no preview
29
+ preview = df[["Resumo", "Predição"]].head(50).to_markdown(index=False)
30
+ # Salva resultado
31
+ saida = "resultado_analise.xlsx"
32
+ df.to_excel(saida, index=False)
33
+ return preview, saida
34
+
35
+ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray")) as demo:
36
+ gr.Markdown("""
37
+ # 🏢 **ChurnSentinel API**
38
+ Sentinela inteligente para detectar risco de fuga de cliente.<br>
39
+ _Analise frases individualmente ou em lote via planilha Excel._
40
+ """)
41
+ with gr.Tab("🔎 Análise de Texto"):
42
+ gr.Markdown("Cole um feedback de relacionamento ou NPS abaixo para analisar:")
43
+ inp = gr.Textbox(label="Texto do relacionamento/NPS do cliente", lines=4, placeholder="Digite ou cole aqui...", elem_id="text-input")
44
+ out = gr.Textbox(label="Predição", elem_id="pred-output")
45
+ btn = gr.Button("Analisar", variant="primary")
46
+ btn.click(predict, inp, out)
47
+ with gr.Tab("📁 Análise em Arquivo"):
48
+ gr.Markdown("Envie uma planilha `.xlsm` ou `.xlsx` contendo a coluna **Resumo**.")
49
+ inp_file = gr.File(label="Arquivo Excel (.xlsm ou .xlsx)", file_types=[".xlsm", ".xlsx"])
50
+ out_markdown = gr.Markdown()
51
+ out_file = gr.File(label="Download da planilha analisada")
52
+ btn2 = gr.Button("Analisar Arquivo", variant="primary")
53
+ btn2.click(analisar_arquivo, inputs=inp_file, outputs=[out_markdown, out_file])
54
+
55
+ demo.launch()