Spaces:
Sleeping
Sleeping
| import time | |
| import streamlit as st | |
| from src.utils.database import get_client | |
| from src.utils.logs import log_prediction_request | |
| st.title("Prédiction remboursement de crédit") | |
| user = st.session_state.user | |
| sk_id = st.text_input("Numéro du client (SK_ID_CURR)") | |
| if st.button("Rechercher"): | |
| if not sk_id or not sk_id.strip().isdigit() or int(sk_id) > 2_147_483_647: | |
| st.error("Numéro de client invalide. Saisissez un identifiant numérique entier (ex : 100002).") | |
| st.stop() | |
| client = get_client() | |
| start = time.perf_counter() | |
| response = ( | |
| client.table("predictions") | |
| .select("proba_class_0, proba_class_1") | |
| .eq("sk_id_curr", int(sk_id)) | |
| .execute() | |
| ) | |
| inference_time_ms = (time.perf_counter() - start) * 1000 | |
| found = bool(response.data) | |
| proba_class_1 = float(response.data[0]["proba_class_1"]) if found else None | |
| log_prediction_request( | |
| user_id=user["id"], | |
| username=user["username"], | |
| sk_id_curr=int(sk_id), | |
| inference_time_ms=inference_time_ms, | |
| found=found, | |
| proba_class_1=proba_class_1, | |
| ) | |
| if not found: | |
| st.error(f"Client n° {int(sk_id)} introuvable. Vérifiez l'identifiant et réessayez.") | |
| else: | |
| row = response.data[0] | |
| proba_0 = float(row["proba_class_0"]) | |
| proba_1 = float(row["proba_class_1"]) | |
| predicted = 1 if proba_1 >= 0.0913 else 0 | |
| st.subheader(f"Résultats pour le client {int(sk_id)}") | |
| if predicted == 0: | |
| st.success(f"Classe prédite : {predicted} — Crédit remboursé") | |
| else: | |
| st.error(f"Classe prédite : {predicted} — Défaut de remboursement") | |
| st.metric("Probabilité classe 0 (remboursé)", f"{proba_0:.2%}") | |
| st.metric("Probabilité classe 1 (défaut de remboursement)", f"{proba_1:.2%}") | |
| if user["role"] == "administrateur": | |
| st.divider() | |
| st.caption(f"Debug — SK_ID: {sk_id} | Rôle: {user['role']}") | |