File size: 3,527 Bytes
5c009d8
 
 
 
 
 
4277bd8
 
5c009d8
4277bd8
5c009d8
4277bd8
 
5c009d8
 
4277bd8
5c009d8
 
 
 
4277bd8
5c009d8
 
 
4277bd8
5c009d8
 
4277bd8
5c009d8
 
 
 
 
 
 
 
 
 
 
 
4277bd8
 
 
 
 
5c009d8
 
 
 
 
 
 
 
 
 
 
 
 
4277bd8
5c009d8
 
4277bd8
5c009d8
 
 
 
 
4277bd8
5c009d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4277bd8
5c009d8
 
4277bd8
5c009d8
4277bd8
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
85
86
87
88
89
90
91
import gradio as gr
import pandas as pd
import joblib
from huggingface_hub import hf_hub_download
import os

# Define the model path and file name on Hugging Face Hub.
# The filename now includes the 'data/' subdirectory.
repo_id = "Web4/LS-W4-Mini-RF_Addiction_Impact"
model_file = "data/LS-W4-Mini-RF_Addiction_Impact.joblib"

# Get the Hugging Face token from environment variables.
# This is required for gated repositories.
token = os.environ.get("HF_TOKEN")

# Download the model file from the Hugging Face Hub using the token.
try:
    model_path = hf_hub_download(repo_id=repo_id, filename=model_file, token=token)
    print(f"Model downloaded to: {model_path}")
except Exception as e:
    # This error indicates that the file was not found or access was denied.
    print(f"Error downloading model: {e}")
    raise

# Load the scikit-learn pipeline from the downloaded joblib file.
pipeline = joblib.load(model_path)

# Define the prediction function for the Gradio interface.
def predict_impact(
    gender,
    academic_level,
    most_used_platform,
    relationship_status,
    age,
    avg_daily_usage_hours,
    sleep_hours_per_night,
    mental_health_score,
    addicted_score,
    conflicts_over_social_media
):
    """
    Takes user inputs, creates a pandas DataFrame, and makes a prediction
    using the loaded scikit-learn pipeline.
    """
    # Create a pandas DataFrame from the user inputs.
    input_data = pd.DataFrame({
        'Gender': [gender],
        'Academic_Level': [academic_level],
        'Most_Used_Platform': [most_used_platform],
        'Relationship_Status': [relationship_status],
        'Age': [age],
        'Avg_Daily_Usage_Hours': [avg_daily_usage_hours],
        'Sleep_Hours_Per_Night': [sleep_hours_per_night],
        'Mental_Health_Score': [mental_health_score],
        'Addicted_Score': [addicted_score],
        'Conflicts_Over_Social_Media': [conflicts_over_social_media]
    })
    
    # Make a prediction. The pipeline handles the preprocessing automatically.
    prediction = pipeline.predict(input_data)[0]
    
    # Return a user-friendly result based on the prediction.
    if prediction == 1:
        return "Prediction: Yes, social media use is likely to impact academic performance."
    else:
        return "Prediction: No, social media use is likely not to impact academic performance."

# Define the Gradio interface components.
demo = gr.Interface(
    fn=predict_impact,
    inputs=[
        gr.Dropdown(["Male", "Female"], label="Gender"),
        gr.Dropdown(["Undergraduate", "Postgraduate", "High School"], label="Academic_Level"),
        gr.Dropdown(["Instagram", "Facebook", "Twitter", "YouTube", "WhatsApp", "Other"], label="Most_Used_Platform"),
        gr.Dropdown(["Single", "In a relationship"], label="Relationship_Status"),
        gr.Slider(16, 25, value=20, label="Age"),
        gr.Slider(0, 24, value=3.0, label="Avg_Daily_Usage_Hours"),
        gr.Slider(0, 12, value=7, label="Sleep_Hours_Per_Night"),
        gr.Slider(0, 10, value=5, label="Mental_Health_Score (0-10)"),
        gr.Slider(0, 10, value=5, label="Addicted_Score (0-10)"),
        gr.Dropdown([0, 1], label="Conflicts_Over_Social_Media (0=No, 1=Yes)")
    ],
    outputs="text",
    title="Social Media Addiction Impact on Academic Performance",
    description="A Random Forest model to predict if social media use impacts a student's academic performance. This is not a diagnostic tool."
)

# Launch the Gradio app.
if __name__ == "__main__":
    demo.launch()