| 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) | |
| ] |