import pandas as pd from sklearn.ensemble import IsolationForest from sklearn.preprocessing import LabelEncoder import joblib # ARQUIVOS CSV_NORMAL = "resultados_carga_normal.csv" CSV_ANORMAL = "resultados_carga_anomala.csv" OUTPUT_MODEL = "modelo_anomalia.pkl" def preprocess(df): # Converte success TRUE/FALSE para 1/0 se necessário if df["success"].dtype == object: df["success"] = df["success"].map(lambda x: 1 if str(x).lower() == "true" else 0) # Apenas colunas importantes return df[["elapsed", "success"]] def train_baseline(): print("🔵 Treinando baseline com resultados normais...") df = pd.read_csv(CSV_NORMAL) X = preprocess(df) model = IsolationForest(contamination=0.05, random_state=42) model.fit(X) joblib.dump(model, OUTPUT_MODEL) print("✅ Modelo salvo como", OUTPUT_MODEL) def validate_anomalies(): print("🔴 Validando com dados anômalos...") df = pd.read_csv(CSV_ANORMAL) X = preprocess(df) model = joblib.load(OUTPUT_MODEL) preds = model.predict(X) percent_anom = (preds == -1).mean() * 100 print(f"🚨 Percentual de anomalias detectadas: {percent_anom:.2f}%") if __name__ == "__main__": train_baseline() validate_anomalies()