File size: 2,959 Bytes
76d272a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import streamlit as st
import pandas as pd
import joblib
import numpy as np

# 1. Page Configuration
st.set_page_config(page_title="Water Quality AI Predictor", page_icon="💧", layout="centered")

# 2. Load Model and Scaler
@st.cache_resource
def load_assets():
    # Ensure these files are uploaded to your Hugging Face Space
    model = joblib.load('su_kalite_modeli.pkl')
    scaler = joblib.load('su_scaler.pkl')
    return model, scaler

try:
    model, scaler = load_assets()
except Exception as e:
    st.error("Error: Model or Scaler files not found. Please upload .pkl files to the repository.")

# 3. Header & Introduction
st.title("🌊 Water Quality AI Classification")
st.markdown("""

This AI-powered tool classifies water samples as **Healthy** or **Risky** using real-time sensor data. 

Adjust the parameters on the left to see the prediction.

""")

# 4. Sidebar for User Input
st.sidebar.header("Manual Input Parameters")

def user_input_features():
    salinity = st.sidebar.slider("Salinity (ppt)", 0.0, 40.0, 30.0)
    oxygen = st.sidebar.slider("Dissolved Oxygen (mg/L)", 0.0, 15.0, 7.0)
    ph = st.sidebar.slider("pH Level", 0.0, 14.0, 7.5)
    secchi = st.sidebar.slider("Secchi Depth (m)", 0.0, 5.0, 1.0)
    depth = st.sidebar.slider("Water Depth (m)", 0.0, 20.0, 5.0)
    temp = st.sidebar.slider("Water Temp (°C)", 0.0, 40.0, 22.0)
    air_temp = st.sidebar.slider("Air Temp (°C)", -10.0, 50.0, 25.0)
    
    # Constant features based on your model's 15-feature requirement
    year = 2024
    site_b, site_bay, site_c, site_d, site_small_d = 0, 1, 0, 0, 0
    year_feat = 2024
    month_feat = 6

    data = [[salinity, oxygen, ph, secchi, depth, temp, air_temp, year, 
             site_b, site_bay, site_c, site_d, site_small_d, year_feat, month_feat]]
    return data

input_data = user_input_features()

# 5. Prediction Logic
if st.button("Run AI Analysis"):
    # Scaling
    input_scaled = scaler.transform(input_data)
    
    # Prediction
    prediction = model.predict(input_scaled)
    prediction_proba = model.predict_proba(input_scaled)
    confidence = np.max(prediction_proba) * 100

    st.divider()
    st.subheader("Analysis Result")
    
    if prediction[0] == 1:
        st.success(f"✅ **STATUS: HEALTHY**")
        st.metric(label="Confidence Level", value=f"{confidence:.2f}%")
        st.write("The water parameters are within the safe range for aquatic life.")
        st.snow() # Water-drop-like effect instead of balloons
    else:
        st.error(f"🚨 **STATUS: RISKY**")
        st.metric(label="Confidence Level", value=f"{confidence:.2f}%")
        st.write("Warning: Oxygen or pH levels indicate a potential risk to the ecosystem.")

# 6. Model Info Footer
st.divider()
st.info(f"""

**Technical Specs:**

- **Model:** Gradient Boosting Classifier

- **Accuracy:** 84%

- **Top Feature:** Dissolved Oxygen

""")