Spaces:
Sleeping
Sleeping
Update model_utils.py
Browse files- model_utils.py +20 -10
model_utils.py
CHANGED
|
@@ -247,6 +247,9 @@ class ChurnModelPipeline:
|
|
| 247 |
|
| 248 |
# --- 1. Simulação Rápida (Última Previsão Interativa ou Exemplo) ---
|
| 249 |
sample_customer_df = None
|
|
|
|
|
|
|
|
|
|
| 250 |
if last_interactive_input_df is not None and not last_interactive_input_df.empty:
|
| 251 |
sample_customer_df = last_interactive_input_df
|
| 252 |
elif self.X_test is not None and not self.X_test.empty:
|
|
@@ -375,32 +378,39 @@ class ChurnModelPipeline:
|
|
| 375 |
latex_story.append(NoEscape(r'\textbf{Características do Cliente "Simulado":}\n'))
|
| 376 |
latex_story.append(NoEscape(sample_display_df.to_latex(index=False, caption='Características do Cliente Simulado', label='tab:sim_customer_example', longtable=False)))
|
| 377 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 378 |
markdown_story.append("**Passos do Cálculo para o Cliente 'Simulado':**\n")
|
| 379 |
-
markdown_story.append(f"1. **Calcular o Logit (L):** O Logit é a soma ponderada de todas as características do cliente (já processadas pelo pré-processador do modelo) multiplicadas por seus respectivos coeficientes, mais o intercepto do modelo. Para o cliente simulado, o modelo calculou um Logit de:\n`L = {
|
| 380 |
|
| 381 |
# LaTeX for Logit calculation
|
| 382 |
latex_story.append(NoEscape(r'\textbf{Passos do Cálculo para o Cliente "Simulado":}\n'))
|
| 383 |
latex_story.append(NoEscape(r'\begin{enumerate}'))
|
| 384 |
latex_story.append(NoEscape(fr'\item \textbf{{Calcular o Logit (L):}} O Logit é a soma ponderada de todas as características do cliente (já processadas pelo pré-processador do modelo) multiplicadas por seus respectivos coeficientes, mais o intercepto do modelo. Para o cliente simulado, o modelo calculou um Logit de:'))
|
| 385 |
-
latex_story.append(Math(data=[NoEscape(fr'L = {
|
| 386 |
|
| 387 |
-
markdown_story.append(f"2. **Calcular a Probabilidade de Churn (P) usando a função Sigmoide:** A probabilidade é obtida aplicando-se a função sigmoide ao valor de `L`:\n`P(Churn) = 1 / (1 + e^(-L))`\n`P(Churn) = 1 / (1 + e^(-({
|
| 388 |
|
| 389 |
# LaTeX for Probability calculation
|
| 390 |
latex_story.append(NoEscape(r'\item \textbf{Calcular a Probabilidade de Churn (P) usando a função Sigmoide:} A probabilidade é obtida aplicando-se a função sigmoide ao valor de $L$:'))
|
| 391 |
latex_story.append(Math(data=[NoEscape(r'P(\text{Churn}) = \frac{1}{1 + e^{-L}}')]))
|
| 392 |
-
|
| 393 |
-
latex_story.append(Math(data=[NoEscape(fr'P(\text{Churn}) = \frac{1}{1 + e^{{-{
|
| 394 |
-
|
|
|
|
|
|
|
| 395 |
latex_story.append(NoEscape(r'\end{enumerate}\n'))
|
| 396 |
|
| 397 |
markdown_story.append(f"**Resultado da Simulação para o Cliente 'Simulado':**\n")
|
| 398 |
-
markdown_story.append(f"A probabilidade de Churn para este cliente específico é de **{
|
| 399 |
-
markdown_story.append(f"Este resultado indica que o cliente possui uma probabilidade de churn de {
|
| 400 |
|
| 401 |
latex_story.append(NoEscape(r'\textbf{Resultado da Simulação para o Cliente "Simulado":}\n'))
|
| 402 |
-
latex_story.append(NoEscape(fr'A probabilidade de Churn para este cliente específico é de \textbf{{{
|
| 403 |
-
latex_story.append(NoEscape(fr'Este resultado indica que o cliente possui uma probabilidade de churn de {
|
| 404 |
else:
|
| 405 |
markdown_story.append("Não foi possível gerar o exemplo de simulação numérica, pois nenhum cliente simulado foi fornecido.\n")
|
| 406 |
latex_story.append(NoEscape(r'Não foi possível gerar o exemplo de simulação numérica, pois nenhum cliente simulado foi fornecido.\n\n'))
|
|
|
|
| 247 |
|
| 248 |
# --- 1. Simulação Rápida (Última Previsão Interativa ou Exemplo) ---
|
| 249 |
sample_customer_df = None
|
| 250 |
+
logit_sample = 0.0 # Inicializar com valores padrão
|
| 251 |
+
prob_sample = 0.0
|
| 252 |
+
|
| 253 |
if last_interactive_input_df is not None and not last_interactive_input_df.empty:
|
| 254 |
sample_customer_df = last_interactive_input_df
|
| 255 |
elif self.X_test is not None and not self.X_test.empty:
|
|
|
|
| 378 |
latex_story.append(NoEscape(r'\textbf{Características do Cliente "Simulado":}\n'))
|
| 379 |
latex_story.append(NoEscape(sample_display_df.to_latex(index=False, caption='Características do Cliente Simulado', label='tab:sim_customer_example', longtable=False)))
|
| 380 |
|
| 381 |
+
# Pré-formatar os valores antes de inseri-los nas f-strings LaTeX
|
| 382 |
+
logit_sample_formatted = f"{logit_sample:.4f}"
|
| 383 |
+
prob_sample_formatted = f"{prob_sample:.4f}"
|
| 384 |
+
prob_sample_percent_formatted = f"{prob_sample:.2%}" # Para exibição em percentual
|
| 385 |
+
|
| 386 |
markdown_story.append("**Passos do Cálculo para o Cliente 'Simulado':**\n")
|
| 387 |
+
markdown_story.append(f"1. **Calcular o Logit (L):** O Logit é a soma ponderada de todas as características do cliente (já processadas pelo pré-processador do modelo) multiplicadas por seus respectivos coeficientes, mais o intercepto do modelo. Para o cliente simulado, o modelo calculou um Logit de:\n`L = {logit_sample_formatted}`\n")
|
| 388 |
|
| 389 |
# LaTeX for Logit calculation
|
| 390 |
latex_story.append(NoEscape(r'\textbf{Passos do Cálculo para o Cliente "Simulado":}\n'))
|
| 391 |
latex_story.append(NoEscape(r'\begin{enumerate}'))
|
| 392 |
latex_story.append(NoEscape(fr'\item \textbf{{Calcular o Logit (L):}} O Logit é a soma ponderada de todas as características do cliente (já processadas pelo pré-processador do modelo) multiplicadas por seus respectivos coeficientes, mais o intercepto do modelo. Para o cliente simulado, o modelo calculou um Logit de:'))
|
| 393 |
+
latex_story.append(Math(data=[NoEscape(fr'L = {logit_sample_formatted}')]))
|
| 394 |
|
| 395 |
+
markdown_story.append(f"2. **Calcular a Probabilidade de Churn (P) usando a função Sigmoide:** A probabilidade é obtida aplicando-se a função sigmoide ao valor de `L`:\n`P(Churn) = 1 / (1 + e^(-L))`\n`P(Churn) = 1 / (1 + e^(-({logit_sample_formatted})))`\n`P(Churn) = 1 / (1 + e^{{-{logit_sample_formatted}}})`\n`P(Churn) ≈ {prob_sample_formatted}`\n")
|
| 396 |
|
| 397 |
# LaTeX for Probability calculation
|
| 398 |
latex_story.append(NoEscape(r'\item \textbf{Calcular a Probabilidade de Churn (P) usando a função Sigmoide:} A probabilidade é obtida aplicando-se a função sigmoide ao valor de $L$:'))
|
| 399 |
latex_story.append(Math(data=[NoEscape(r'P(\text{Churn}) = \frac{1}{1 + e^{-L}}')]))
|
| 400 |
+
# Linha 392 corrigida: usando logit_sample_formatted
|
| 401 |
+
latex_story.append(Math(data=[NoEscape(fr'P(\text{Churn}) = \frac{{1}}{{1 + e^{{-({logit_sample_formatted})}}}}')]))
|
| 402 |
+
# Próxima linha também corrigida
|
| 403 |
+
latex_story.append(Math(data=[NoEscape(fr'P(\text{Churn}) = \frac{{1}}{{1 + e^{{-{logit_sample_formatted}}}}}}')]))
|
| 404 |
+
latex_story.append(Math(data=[NoEscape(fr'P(\text{Churn}) \approx {prob_sample_formatted}')]))
|
| 405 |
latex_story.append(NoEscape(r'\end{enumerate}\n'))
|
| 406 |
|
| 407 |
markdown_story.append(f"**Resultado da Simulação para o Cliente 'Simulado':**\n")
|
| 408 |
+
markdown_story.append(f"A probabilidade de Churn para este cliente específico é de **{prob_sample_formatted}**, ou seja, **{prob_sample_percent_formatted}**.\n")
|
| 409 |
+
markdown_story.append(f"Este resultado indica que o cliente possui uma probabilidade de churn de {prob_sample_percent_formatted}, guiando a interpretação do risco.\n")
|
| 410 |
|
| 411 |
latex_story.append(NoEscape(r'\textbf{Resultado da Simulação para o Cliente "Simulado":}\n'))
|
| 412 |
+
latex_story.append(NoEscape(fr'A probabilidade de Churn para este cliente específico é de \textbf{{{prob_sample_formatted}}}, ou seja, \textbf{{{prob_sample_percent_formatted}}}. '))
|
| 413 |
+
latex_story.append(NoEscape(fr'Este resultado indica que o cliente possui uma probabilidade de churn de {prob_sample_percent_formatted}, guiando a interpretação do risco.\n\n'))
|
| 414 |
else:
|
| 415 |
markdown_story.append("Não foi possível gerar o exemplo de simulação numérica, pois nenhum cliente simulado foi fornecido.\n")
|
| 416 |
latex_story.append(NoEscape(r'Não foi possível gerar o exemplo de simulação numérica, pois nenhum cliente simulado foi fornecido.\n\n'))
|