hi All
Я обучил модель SVM, чтобы предсказать трудоспособность студента. В моем ноутбуке Jupyter модель работает хорошо и показывает правильные прогнозы и вероятности, но при развертывании в приложении для потокового часа она всегда предсказывает тот же результат (
Код: Выделить всё
Less Employable
Я подозреваю, что что -то не так с тем, как входы подготовлены/масштабируются, или сама модель, но я не могу понять. Поведение < /h2>
[*] Предсказания должны варьироваться, когда я изменяю входные ползунки или загружаю разные CSV.
Код: Выделить всё
Less Employable< /code>) и вероятности едва изменяются. < /li>
< /ul>
📂 Repository < /h2>
Все соответствующие файлы (ноутбук, приложение, набор данных, .pkl < /code> файлы) />(https://github.com/quinnchoong/employbility_predictors).
Содержит:
Training Notebook (train_employbility_model_final.ipynb)
[*] Набор данных (student_employbility_cp2_2025.xlsx)
Обученная модель & scaler (empopecialbility_predictor.pkl, scaler.pkl.pkl) < /li>
requirements.txt> < /li>
< /ul>
🎓 обучающий код < /h3>
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from imblearn.over_sampling import SMOTE
import joblib
from sklearn.model_selection import train_test_split
# Prepare data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
# Balance with SMOTE
smote = SMOTE()
X_train_res, y_train_res = smote.fit_resample(X_train, y_train)
# Scale
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train_res)
X_test_scaled = scaler.transform(X_test)
# Train SVM
svc = SVC(probability=True, C=10, gamma=0.1, kernel='rbf')
svc.fit(X_train_scaled, y_train_res)
# Save model & scaler
joblib.dump(svc, 'employability_predictor.pkl')
joblib.dump(scaler, 'scaler.pkl')
< /code>
🖥 🖥 wreatlit code < /h3>
import streamlit as st
import pandas as pd
import joblib
# Load model & scaler
model = joblib.load('employability_predictor.pkl')
scaler = joblib.load('scaler.pkl')
# Example input
input_df = pd.DataFrame([{
'GENDER': 1,
'GENERAL_APPEARANCE': 5,
'GENERAL_POINT_AVERAGE': 4.0,
'MANNER_OF_SPEAKING': 5,
'PHYSICAL_CONDITION': 5,
'MENTAL_ALERTNESS': 5,
'SELF-CONFIDENCE': 5,
'ABILITY_TO_PRESENT_IDEAS': 5,
'COMMUNICATION_SKILLS': 5,
'STUDENT_PERFORMANCE_RATING': 5,
'NO_SKILLS': 0,
'Year_of_Graduate': 2022
}])
# Scale & predict
scaled_input = scaler.transform(input_df)
prediction = model.predict(scaled_input)
proba = model.predict_proba(scaled_input)
st.write(f"Prediction: {prediction[0]}")
st.write(f"Probabilities: Employable: {proba[0][1]:.2f}, Less Employable: {proba[0][0]:.2f}")
Example slider values :
Feature
Value
< /tr>
< /thead>
пол < /td>
1 < /td>
< /tr>
general_appearance < /td>
5
5
5 5 5
5
5
/>
general_point_average < /td>
4.0> < /tr>
… < /td>
… < /td>
< /tr>
< /tbody>
< /td>
< /tr>
< /tbody> < /td> < /td>
< /tr>
< /tbody> < /td> < /td>
< /tr>
< /tbody> < /td>… /> Независимо от того, на что я их изменяю, вывод остается прежним. Подготовка и масштабирование.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ame-result