Instituições de ensino e plataformas de capacitação enfrentam um desafio contínuo: identificar precocemente quais estudantes necessitam de suporte adicional para garantir sua inserção no mercado de trabalho. Transformar dados acadêmicos e extracurriculares em insights acionáveis exige mais do que análises descritivas; demanda modelos preditivos estruturados e interfaces acessíveis para tomada de decisão em tempo real.
Neste artigo, vamos analisar a evolução técnica de um projeto preditivo de empregabilidade (Student Placement Predictor), saindo de um modelo inicial de Regressão Logística até a entrega de uma aplicação interativa e performática construída em Python com Streamlit.
1. Refinando o Pipeline de Machine Learning
Um modelo baseline de Regressão Logística é uma excelente abordagem inicial devido à sua interpretabilidade e baixo custo computacional. No entanto, para garantir que as previsões reflitam com precisão a probabilidade de contratação, o pré-processamento dos dados precisa ser rigoroso.
Em cenários de contratação estudantil, variáveis comuns incluem:
- Desempenho acadêmico (notas, coeficiente de rendimento)
- Experiências prévias (estágios, projetos de extensão)
- Habilidades técnicas e certificações
- Indicadores de soft skills e participação em workshops
Para automatizar o fluxo e evitar vazamento de dados (data leakage), o uso de Pipelines do Scikit-Learn é indispensável:
python
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.linear_model import LogisticRegression
Definição das colunas
numfeatures = [‘coeficienterendimento’, ‘horasestudo’, ‘projetoscompletos’] catfeatures = [‘areaestudo’, ‘experiencia_estagio’]
Pré-processamento unificado
preprocessor = ColumnTransformer(
transformers=[
(‘num’, StandardScaler(), numfeatures),
(‘cat’, OneHotEncoder(drop=’first’), catfeatures)
]
)
Pipeline final com Regressão Logística ajustada
placementpipeline = Pipeline(steps=[
(‘preprocessor’, preprocessor),
(‘classifier’, LogisticRegression(classweight=’balanced’, solver=’liblinear’, random_state=42))
])
O uso de class_weight='balanced' é fundamental quando a taxa de contratação histórica apresenta desbalanceamento, garantindo que o algoritmo não favoreça a classe majoritária.
2. Otimização de Performance e Avaliação de Métricas
Apenas observar a acurácia geral pode gerar diagnósticos incorretos em previsões de contratação. Falsos positivos (indicar que um aluno conseguirá colocação quando ele precisa de ajuda) podem comprometer intervenções pedagógicas.
Por isso, o processo de avaliação deve focar em:
- ROC-AUC: Avalia a capacidade do modelo de separar as classes em diferentes limiares (thresholds).
- Precision-Recall Curve: Prioriza o equilíbrio entre identificar o maior número de alunos vulneráveis sem saturar as equipes de tutoria.
Com o modelo validado via validação cruzada estratificada (StratifiedKFold), a persistência do artefato final é feita com serialização segura:
python
import joblib
Treinamento e salvamento do modelo completo
placementpipeline.fit(Xtrain, ytrain)
joblib.dump(placementpipeline, ‘models/placement_model.joblib’)
3. Construindo a Interface Interativa com Streamlit
Um modelo preditivo entrega valor quando os coordenadores e analistas conseguem simular cenários de forma autônoma. O Streamlit permite converter scripts Python em interfaces completas de análise.
Para manter a aplicação leve e rápida, aplicamos estratégias de cache para o carregamento do modelo:
python
import streamlit as st
import pandas as pd
import joblib
st.setpageconfig(page_title=”Preditor de Empregabilidade”, layout=”centered”)
@st.cacheresource
def loadmodel():
return joblib.load(‘models/placement_model.joblib’)
model = load_model()
st.title(“Painel de Previsão de Empregabilidade”)
st.write(“Insira os indicadores do estudante para estimar a probabilidade de contratação.”)
with st.form(“studentdataform”):
rendimento = st.slider(“Coeficiente de Rendimento (0 a 10)”, 0.0, 10.0, 7.5)
horas = st.numberinput(“Horas Semanais Dedicadas a Projetos”, minvalue=0, maxvalue=60, value=15)
projetos = st.numberinput(“Projetos Práticos Finalizados”, minvalue=0, maxvalue=20, value=2)
area = st.selectbox(“Área de Especialização”, [‘Tecnologia’, ‘Negócios’, ‘Engenharia’])
estagio = st.radio(“Possui Experiência Prévia de Estágio?”, [‘Sim’, ‘Não’])
submitted = st.form_submit_button("Calcular Probabilidade")
if submitted:
inputdata = pd.DataFrame([{
‘coeficienterendimento’: rendimento,
‘horasestudo’: horas,
‘projetoscompletos’: projetos,
‘areaestudo’: area,
‘experienciaestagio’: estagio
}])
# Predição e probabilidade
prob = model.predict_proba(input_data)[0][1]
st.subheader(f"Probabilidade Estimada: {prob * 100:.1f}%")
if prob >= 0.7:
st.success("Alta probabilidade de colocação profissional.")
elif prob >= 0.4:
st.warning("Probabilidade moderada. Recomenda-se reforço em projetos práticos.")
else:
st.error("Atenção prioritária recomendada pelo time de mentoria.")
Da Prototipagem à Produção
Como especialista em IA e engenharia de software Python, observo com frequência projetos que empacam na fase de protótipo por falta de arquitetura modular e código desacoplado. A transição de um script experimental para um sistema preditivo escalável exige padronização no tratamento de dados, monitoramento de métricas e empacotamento eficiente.
Se sua instituição ou empresa possui dados acumulados e deseja transformá-los em soluções preditivas automatizadas, dashboards interativos ou ferramentas operacionais com inteligência artificial, entre em contato para estruturarmos seu projeto de ponta a ponta.


