File size: 983 Bytes
e9c150f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# utils.py
import joblib
import pandas as pd
import streamlit as st

@st.cache_resource
def load_model(path: str):
    return joblib.load(path)

def preprocess_input(data: dict) -> pd.DataFrame:
    # Build a single-row DF
    df = pd.DataFrame([data])

    # Map Yes/No to 1/0
    df['Stage_fear'] = df['Stage_fear'].map({'Yes': 1, 'No': 0})
    df['Drained_after_socializing'] = df['Drained_after_socializing'].map({'Yes': 1, 'No': 0})


    feature_order = [
        'Time_spent_Alone',
        'Stage_fear',
        'Social_event_attendance',
        'Going_outside',
        'Friends_circle_size',
        'Post_frequency'
    ]

    # Reorder and return
    return df[feature_order]

def predict_personality(model, X: pd.DataFrame):
    # Make sure to pass a numpy array if your model expects that:
    arr = X.values
    prob = model.predict_proba(arr)[:, 1][0]
    label = "Introvert" if prob > 0.5 else "Extrovert"
    return label, prob