Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

service.py 4.7 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  1. import os
  2. import json
  3. import bentoml
  4. import pandas as pd
  5. from pydantic import BaseModel, Field
  6. # Obtiene el nombre del modelo y el input ficticio
  7. model_name = os.getenv("MODEL_NAME", "model_1")
  8. test_input = os.getenv("TEST_INPUT")
  9. # Definir esquema Pydantic para las columnas
  10. class CreditScoringInput(BaseModel):
  11. Edad: int = Field(30, description="Edad del cliente")
  12. Salario_Mensual: float = Field(6000, description="Salario mensual")
  13. Num_Tarjetas_Credito: int = Field(3, description="Número de tarjetas de crédito")
  14. Tasa_Interes: float = Field(15, description="Tasa de interés promedio")
  15. Retraso_Pago: int = Field(0, description="Días de retraso en pagos")
  16. Num_Pagos_Retrasados: int = Field(0, description="Número de pagos retrasados")
  17. Cambio_Limite_Credito: float = Field(0, description="Cambio en el límite de crédito")
  18. Num_Consultas_Credito: int = Field(2, description="Número de consultas de crédito")
  19. Deuda_Pendiente: float = Field(5000, description="Deuda total pendiente")
  20. Edad_Historial_Credito: int = Field(5, description="Años de historial crediticio")
  21. Total_Cuota_Mensual: float = Field(200, description="Cuota mensual total")
  22. Inversion_Mensual: float = Field(100, description="Inversión mensual")
  23. Saldo_Mensual: float = Field(1000, description="Saldo mensual")
  24. Comportamiento_de_Pago_High_spent_Large_value_payments: int = Field(0, description="Comportamiento de pago: Alto gasto, pagos grandes")
  25. Comportamiento_de_Pago_High_spent_Medium_value_payments: int = Field(0, description="Comportamiento de pago: Alto gasto, pagos medianos")
  26. Comportamiento_de_Pago_High_spent_Small_value_payments: int = Field(0, description="Comportamiento de pago: Alto gasto, pagos pequeños")
  27. Comportamiento_de_Pago_Low_spent_Large_value_payments: int = Field(0, description="Comportamiento de pago: Bajo gasto, pagos grandes")
  28. Comportamiento_de_Pago_Low_spent_Medium_value_payments: int = Field(1, description="Comportamiento de pago: Bajo gasto, pagos medianos")
  29. Comportamiento_de_Pago_Low_spent_Small_value_payments: int = Field(0, description="Comportamiento de pago: Bajo gasto, pagos pequeños")
  30. Mezcla_Crediticia_Bad: int = Field(0, description="Mezcla crediticia: Mala")
  31. Mezcla_Crediticia_Good: int = Field(1, description="Mezcla crediticia: Buena")
  32. Mezcla_Crediticia_Standard: int = Field(0, description="Mezcla crediticia: Estándar")
  33. Pago_Minimo_No: int = Field(1, description="Pago mínimo: No")
  34. Pago_Minimo_Yes: int = Field(0, description="Pago mínimo: Sí")
  35. Ocupacion_Architect: int = Field(0, description="Ocupación: Arquitecto")
  36. Ocupacion_Developer: int = Field(1, description="Ocupación: Desarrollador")
  37. Ocupacion_Doctor: int = Field(0, description="Ocupación: Doctor")
  38. Ocupacion_Engineer: int = Field(0, description="Ocupación: Ingeniero")
  39. Ocupacion_Entrepreneur: int = Field(0, description="Ocupación: Emprendedor")
  40. Ocupacion_Journalist: int = Field(0, description="Ocupación: Periodista")
  41. Ocupacion_Lawyer: int = Field(0, description="Ocupación: Abogado")
  42. Ocupacion_Manager: int = Field(0, description="Ocupación: Gerente")
  43. Ocupacion_Mechanic: int = Field(0, description="Ocupación: Mecánico")
  44. Ocupacion_Media_Manager: int = Field(0, description="Ocupación: Gerente de medios")
  45. Ocupacion_Musician: int = Field(0, description="Ocupación: Músico")
  46. Ocupacion_Scientist: int = Field(0, description="Ocupación: Científico")
  47. Ocupacion_Teacher: int = Field(0, description="Ocupación: Profesor")
  48. Ocupacion_Writer: int = Field(0, description="Ocupación: Escritor")
  49. debt_to_income: float = Field(0.833, description="Relación deuda-ingreso")
  50. payment_to_income: float = Field(0.033, description="Relación pago-ingreso")
  51. credit_history_ratio: float = Field(0.167, description="Relación historial crediticio")
  52. # Define el servicio BentoML
  53. @bentoml.service(
  54. name=f"credit_scoring_service_{model_name}",
  55. resources={"cpu": "2"}
  56. )
  57. class CreditScoringService:
  58. def __init__(self):
  59. # Carga el modelo
  60. self.model = bentoml.sklearn.load_model(f"credit_scoring_{model_name}:latest")
  61. @bentoml.api
  62. async def predict(self, input_data: CreditScoringInput = None) -> dict:
  63. """
  64. Endpoint para realizar predicciones con el modelo seleccionado.
  65. Args:
  66. input_data: Objeto con columnas esperadas. Si None, usa TEST_INPUT.
  67. Returns:
  68. Dict con las predicciones.
  69. """
  70. if input_data is None:
  71. input_df = pd.DataFrame(json.loads(test_input))
  72. else:
  73. input_df = pd.DataFrame([input_data.dict()])
  74. predictions = self.model.predict(input_df)
  75. return {"predictions": predictions.tolist()}
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...