diff --git a/ProyectoIA_Gestion/modelo_anomalias_dist.joblib b/ProyectoIA_Gestion/modelo_anomalias_dist.joblib index 8f01a7f..d8dfe85 100644 Binary files a/ProyectoIA_Gestion/modelo_anomalias_dist.joblib and b/ProyectoIA_Gestion/modelo_anomalias_dist.joblib differ diff --git a/ProyectoIA_Gestion/modelo_danadas.joblib b/ProyectoIA_Gestion/modelo_danadas.joblib new file mode 100644 index 0000000..e4b1bbc Binary files /dev/null and b/ProyectoIA_Gestion/modelo_danadas.joblib differ diff --git a/ProyectoIA_Gestion/modelo_montos.joblib b/ProyectoIA_Gestion/modelo_montos.joblib new file mode 100644 index 0000000..f82a6eb Binary files /dev/null and b/ProyectoIA_Gestion/modelo_montos.joblib differ diff --git a/ProyectoIA_Gestion/train_danadas.py b/ProyectoIA_Gestion/train_danadas.py index 91a5a10..6ed4e13 100644 --- a/ProyectoIA_Gestion/train_danadas.py +++ b/ProyectoIA_Gestion/train_danadas.py @@ -19,10 +19,7 @@ try: print(f"Conectando a la base de datos '{DB_DATABASE}' en '{DB_SERVER}'...") cnxn = pyodbc.connect(CONNECTION_STRING) - fecha_limite = datetime.now() - timedelta(days=365) - - # << CAMBIO IMPORTANTE: Nueva consulta para contar bobinas marcadas como "Dañada" por día y planta >> - # Asumimos que el estado "Dañada" tiene Id_EstadoBobina = 3 y el historial lo registra + fecha_limite = datetime.now() - timedelta(days=730) query = f""" SELECT CAST(h.FechaMod AS DATE) as fecha, @@ -32,8 +29,7 @@ try: FROM bob_StockBobinas_H h WHERE - h.Id_EstadoBobina = 3 -- Asumiendo que 3 es el ID del estado 'Dañada' - AND h.TipoMod = 'Estado: Dañada' -- Filtra por el evento específico del cambio de estado + h.Id_EstadoBobina = 3 -- 3 es el ID del estado 'Dañada' AND h.FechaMod >= '{fecha_limite.strftime('%Y-%m-%d')}' GROUP BY CAST(h.FechaMod AS DATE), diff --git a/ProyectoIA_Gestion/train_distribuidores.py b/ProyectoIA_Gestion/train_distribuidores.py index 007cc8c..633e87f 100644 --- a/ProyectoIA_Gestion/train_distribuidores.py +++ b/ProyectoIA_Gestion/train_distribuidores.py @@ -11,17 +11,16 @@ DB_SERVER = 'TECNICA3' DB_DATABASE = 'SistemaGestion' CONNECTION_STRING = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={DB_SERVER};DATABASE={DB_DATABASE};Trusted_Connection=yes;TrustServerCertificate=yes;' -MODEL_FILE = 'modelo_anomalias_dist.joblib' # <-- Nuevo nombre de archivo para el modelo -CONTAMINATION_RATE = 0.01 # Un 1% de contaminación es un buen punto de partida +MODEL_FILE = 'modelo_anomalias_dist.joblib' +CONTAMINATION_RATE = 0.01 # Un 1% de contaminación # --- 2. Carga de Datos desde SQL Server --- try: print(f"Conectando a la base de datos '{DB_DATABASE}' en '{DB_SERVER}'...") cnxn = pyodbc.connect(CONNECTION_STRING) - fecha_limite = datetime.now() - timedelta(days=365) + fecha_limite = datetime.now() - timedelta(days=730) - # << CAMBIO IMPORTANTE: Nueva consulta para agrupar Salidas y Entradas por distribuidor y día >> query = f""" SELECT Id_Distribuidor AS id_distribuidor, @@ -57,7 +56,7 @@ df.fillna(0, inplace=True) df['porcentaje_devolucion'] = df['porcentaje_devolucion'].clip(0, 100) df['dia_semana'] = pd.to_datetime(df['fecha']).dt.dayofweek -features = ['id_distribuidor', 'porcentaje_devolucion', 'dia_semana'] # <-- Característica clave: id_distribuidor +features = ['id_distribuidor', 'porcentaje_devolucion', 'dia_semana'] X = df[features] # --- 4. Entrenamiento y Guardado --- diff --git a/ProyectoIA_Gestion/train_montos.py b/ProyectoIA_Gestion/train_montos.py index 836e8a4..a4232a0 100644 --- a/ProyectoIA_Gestion/train_montos.py +++ b/ProyectoIA_Gestion/train_montos.py @@ -12,7 +12,7 @@ DB_DATABASE = 'SistemaGestion' CONNECTION_STRING = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={DB_SERVER};DATABASE={DB_DATABASE};Trusted_Connection=yes;TrustServerCertificate=yes;' MODEL_FILE = 'modelo_montos.joblib' -CONTAMINATION_RATE = 0.01 # Asumimos que el 1% de las transacciones podrían ser anómalas (ajustable) +CONTAMINATION_RATE = 0.002 # --- 2. Carga de Datos de Múltiples Tablas --- try: