shivanzzz commited on
Commit
1b98384
Β·
verified Β·
1 Parent(s): d8ddce2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -59
app.py CHANGED
@@ -1,59 +1,58 @@
1
- import streamlit as st
2
- import pandas as pd
3
- import numpy as np
4
- from sklearn.ensemble import IsolationForest
5
- from tensorflow.keras.models import load_model
6
- from sklearn.preprocessing import MinMaxScaler
7
- import joblib
8
-
9
- st.set_page_config(page_title="Anomaly Detection", layout="wide")
10
-
11
- st.title("🚨 Network Traffic Anomaly Detection")
12
- st.markdown("Upload network traffic data (with same structure as training data) and select a model to detect anomalies.")
13
-
14
- # Upload CSV
15
- uploaded_file = st.file_uploader("Upload your CSV file", type=["csv"])
16
-
17
- # Load models
18
- iso_model = joblib.load("iso_model.pkl")
19
- ae_model = load_model("autoencoder_model.h5")
20
- scaler = joblib.load("scaler.pkl")
21
-
22
- # Select model
23
- model_choice = st.selectbox("Choose a model", ["Isolation Forest", "Autoencoder", "Hybrid"])
24
-
25
- if uploaded_file is not None:
26
- df = pd.read_csv(uploaded_file)
27
- X = scaler.transform(df) # assumes same features
28
-
29
- # Isolation Forest
30
- iso_pred = iso_model.predict(X)
31
- iso_pred = np.where(iso_pred == 1, 0, 1)
32
-
33
- # Autoencoder
34
- ae_recon = ae_model.predict(X)
35
- ae_mse = np.mean(np.power(X - ae_recon, 2), axis=1)
36
- ae_pred = np.where(ae_mse > 0.0096, 1, 0) # tuned threshold
37
-
38
- # Hybrid
39
- union_pred = np.logical_or(iso_pred, ae_pred).astype(int)
40
-
41
- # Choose output
42
- if model_choice == "Isolation Forest":
43
- final_pred = iso_pred
44
- elif model_choice == "Autoencoder":
45
- final_pred = ae_pred
46
- else:
47
- final_pred = union_pred
48
-
49
- df['anomaly'] = final_pred
50
- st.write(df.head())
51
-
52
- st.subheader("πŸ“Š Anomaly Distribution")
53
- st.bar_chart(df['anomaly'].value_counts())
54
-
55
- # Download predictions
56
- csv = df.to_csv(index=False).encode()
57
- st.download_button("Download Results", csv, "predictions.csv", "text/csv")
58
-
59
- st.success("βœ… Prediction complete!")
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import joblib
5
+ from tensorflow.keras.models import load_model
6
+
7
+ from sklearn.ensemble import IsolationForest
8
+ from sklearn.preprocessing import MinMaxScaler
9
+
10
+ st.set_page_config(page_title="Anomaly Detection", layout="wide")
11
+
12
+ def load_models():
13
+ iso = joblib.load("iso_model.pkl")
14
+ ae = load_model("autoencoder_model.h5")
15
+ scaler = joblib.load("scaler.pkl")
16
+ return iso, ae, scaler
17
+
18
+ def main():
19
+ st.title("🚨 Network Traffic Anomaly Detection")
20
+ st.markdown("Upload a CSV file and choose a model to detect anomalies in network traffic.")
21
+
22
+ uploaded_file = st.file_uploader("Upload your CSV file", type=["csv"])
23
+
24
+ if uploaded_file:
25
+ iso_model, ae_model, scaler = load_models()
26
+
27
+ df = pd.read_csv(uploaded_file)
28
+ X = scaler.transform(df)
29
+
30
+ iso_pred = iso_model.predict(X)
31
+ iso_pred = np.where(iso_pred == 1, 0, 1)
32
+
33
+ ae_recon = ae_model.predict(X)
34
+ ae_mse = np.mean(np.power(X - ae_recon, 2), axis=1)
35
+ ae_pred = np.where(ae_mse > 0.0096, 1, 0)
36
+
37
+ model_choice = st.selectbox("Choose a model", ["Isolation Forest", "Autoencoder", "Hybrid"])
38
+
39
+ if model_choice == "Isolation Forest":
40
+ final_pred = iso_pred
41
+ elif model_choice == "Autoencoder":
42
+ final_pred = ae_pred
43
+ else:
44
+ final_pred = np.logical_or(iso_pred, ae_pred).astype(int)
45
+
46
+ df['anomaly'] = final_pred
47
+ st.write(df.head())
48
+
49
+ st.subheader("πŸ“Š Anomaly Distribution")
50
+ st.bar_chart(df['anomaly'].value_counts())
51
+
52
+ csv = df.to_csv(index=False).encode()
53
+ st.download_button("πŸ“₯ Download Predictions", csv, "predictions.csv", "text/csv")
54
+
55
+ st.success("βœ… Prediction complete!")
56
+
57
+ if __name__ == "__main__":
58
+ main()