Como Construir um Preditor de Empregabilidade com Machine Learning e Streamlit

Aprenda a criar um preditor de empregabilidade em Python usando Regressão Logística e Streamlit. Da engenharia de atributos ao deploy interativo.

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’), cat
features)
] )

Pipeline final com Regressão Logística ajustada

placementpipeline = Pipeline(steps=[
(‘preprocessor’, preprocessor),
(‘classifier’, LogisticRegression(class
weight=’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(placement
pipeline, ‘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 load
model():
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.number
input(“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([{
‘coeficiente
rendimento’: rendimento,
‘horasestudo’: horas,
‘projetos
completos’: projetos,
‘areaestudo’: area,
‘experiencia
estagio’: 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.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.