JuanJoseMV's picture
add methods for each strategy
9485251
import gradio as gr
import pandas as pd
from sklearn.metrics import classification_report
def timestamp_wise_evaluation(anomalies_cases, anomalies_news, threshold):
print(f"Classification report for threshold {threshold} (timestamp-wise evaluation):")
print(classification_report(anomalies_cases, anomalies_news))
def tolerance_based_evaluation(anomalies_cases, anomalies_news, cases_df, news_df, threshold):
Tp = 0
Fp = 0
Fn = 0
Tn = 0
for i in range(len(news_df)):
news_an = news_df.iloc[i][anomalies_news]
if news_an == 1:
if i == len(news_df) - 1:
if cases_df.iloc[i][anomalies_cases] == 1:
Tp += 1
else:
Fp += 1
elif i == len(news_df) - 2:
if cases_df.iloc[i][anomalies_cases] == 1 or cases_df.iloc[i+1][anomalies_cases] == 1:
Tp += 1
else:
Fp += 1
else:
if cases_df.iloc[i][anomalies_cases] == 1 or cases_df.iloc[i+1][anomalies_cases] == 1 or cases_df.iloc[i+2][anomalies_cases] == 1:
Tp += 1
else:
Fp += 1
else:
if i == len(news_df) - 1:
if cases_df.iloc[i][anomalies_cases] == 1:
Fn += 1
else:
Tn += 1
elif i == len(news_df) - 2:
if cases_df.iloc[i][anomalies_cases] == 1:
Fn += 1
else:
Tn += 1
else:
if cases_df.iloc[i][anomalies_cases] == 1:
Fn += 1
else:
Tn += 1
print(f"Tolerance-based evaluation for method {threshold}:")
print(f"True Positives: {Tp}, False Positives: {Fp}, False Negatives: {Fn}, True Negatives: {Tn}")
precision = Tp / (Tp + Fp)
recall = Tp / (Tp + Fn)
f1 = 2 * (precision * recall) / (precision + recall)
print(f"Precision: {precision}, Recall: {recall}, F1: {f1}")
def prepare_time_series_dataframe(df):
"""Prepare dataframe for time series analysis by setting datetime index and renaming columns"""
df.set_index(df.columns[0], inplace=True)
try:
df.index = pd.to_datetime(df.index)
except ValueError:
raise ValueError("The first column of the CSV file must be a datetime column.")
df.rename(columns={df.columns[0]: "news"}, inplace=True)
return df
def update_controls(method):
"""
Updates the interactivity of control elements based on the selected method.
Args:
method (str): The selected anomaly detection method
Returns:
dict: Update configuration for Gradio components
"""
is_lstm = method == "LSTM"
return [
gr.update(interactive=is_lstm),
gr.update(interactive=is_lstm)
]