Skip to content

Repository files navigation

Student Placement Prediction - MLOps Project

Servei de classificacio binaria per predir si un estudiant sera placed o not placed, amb pipeline de dades, entrenament versionat, API FastAPI, persistencia de prediccions, containeritzacio Docker, quality gates de testing i validacio CI/CD en cada push.

Dataset

Atribut Detall
Nom Student Placement Dataset
Font Kaggle - sonalshinde123
URL https://www.kaggle.com/datasets/sonalshinde123/student-placement-dataset
Mida 50.000 registres sintetics (45.000 train / 5.000 test)
Problema Classificacio binaria: predir placement
Llicencia CC0 Public Domain

Distribucio target aproximada: 36.2% Placed i 63.8% Not Placed.

Features i target

Columna original Columna normalitzada Tipus Rang
Age age int 18-24
Gender gender int 0=Female, 1=Male
Degree degree int 0=B.Tech, 1=BCA, 2=MCA, 3=B.Sc
Branch branch int 0=ECE, 1=ME, 2=Civil, 3=CSE, 4=IT
CGPA cgpa float 4.5-9.8
Internships internships int 0-3
Projects projects int 1-6
Coding_Skills coding_skills int 1-10
Communication_Skills communication_skills int 1-10
Aptitude_Test_Score aptitude_test_score int 35-100
Soft_Skills_Rating soft_skills_rating int 1-10
Certifications certifications int 0-3
Backlogs backlogs int 0-3
Placement_Status target int 0=Not Placed, 1=Placed

Preprocessament

  • Esborra Student_ID (metadada sense valor predictiu).
  • Renomena columnes a format estandard en minuscules.
  • Codifica categoriques dins del pipeline:
    • gender: Female=0, Male=1
    • degree: B.Tech=0, BCA=1, MCA=2, B.Sc=3
    • branch: ECE=0, ME=1, Civil=2, CSE=3, IT=4
  • Converteix target a binari:
    • Placed=1
    • Not Placed=0

Arquitectura del projecte

  • app/pipeline.py: ETL + normalitzacio + splits 60/20/20.
  • app/train.py: entrenament, quality gate i versionat de model.
  • app/api.py: endpoints health, predict i predictions.
  • app/pred_store.py: persistencia JSONL de prediccions.
  • .cicd/hooks/validate.sh: fase 1 de CI (tests dins Docker a cada push).
  • .cicd/hooks/pre-deploy.sh: fase 2 de CI (quality gate de deployment_ready).
  • models/: artifacts del model (.pkl).
  • metadata/: metadata de versions (.json).
  • data/: dades d'entrada, splits i predictions.jsonl.
  • .env.production: configuracio del servidor CI comesa al repositori.

Nota important: metadata i model estan separats en directoris diferents:

  • models/ nomes te fitxers model_vN.pkl
  • metadata/ nomes te fitxers metadata_vN.json

Execucio rapida local

make setup
make pipeline
make train
make dev

API disponible a:

Exemple de prediccio

curl -X POST http://localhost:8000/predict \
  -H "Content-Type: application/json" \
  -d '{"age":21,"gender":1,"degree":0,"branch":3,"cgpa":7.5,
       "internships":1,"projects":3,"coding_skills":7,
       "communication_skills":6,"aptitude_test_score":72,
       "soft_skills_rating":7,"certifications":2,"backlogs":0}'

Resposta esperada (format):

{
  "prediction": 1,
  "probability": 0.72,
  "model_version": "1.0.0"
}

Monitoratge de prediccions (Sessio 8)

Cada crida a predict guarda una entrada JSON Lines amb:

  • timestamp
  • input
  • prediction
  • probability
  • model_version

Path configurable via .env:

PREDICTIONS_LOG_PATH=data/predictions.jsonl

Consulta historial:

curl "http://localhost:8000/predictions?limit=5"

Docker (Sessio 9)

Build:

make docker-build

Run amb persistencia de dades i logs:

make docker-up
make health

El servei en contenidor:

  • usa usuari no root
  • te healthcheck configurat
  • persisteix data i logs via volums

Stop:

make docker-down

Testing i quality gates (Sessio 11)

Suite implementada amb pytest en tres blocs:

  • tests/test_pipeline.py: preprocessament + schema
  • tests/test_model.py: carrega de model + format de prediccio
  • tests/test_api.py: endpoints + validacions + logging

Executar tests local:

make test

Executar tests dins Docker:

make docker-test

Estat actual: 12 tests passing local i 12 tests passing en contenidor.

CI/CD - Validacio automatica (Sessio 12)

Sessio 12 separa clarament validacio i desplegament:

  • git push: executa validacio (fases 1 i 2), sense deploy.
  • git tag: disparara deploy a la Sessio 13 (fases 3 i 4).

Fitxers afegits a la sessio:

  • .env.production
  • .cicd/hooks/validate.sh
  • .cicd/hooks/pre-deploy.sh

Fase 1 (validate.sh):

  • copia .env.production a .env
  • executa make docker-test
  • falla si qualsevol test falla

Fase 2 (pre-deploy.sh):

  • llegeix METADATA_PATH
  • valida que el fitxer metadata existeix
  • extreu version, f1_score i deployment_ready amb jq
  • bloqueja si deployment_ready no es true

Verificacio local recomanada abans de push:

bash .cicd/hooks/validate.sh
bash .cicd/hooks/pre-deploy.sh

Sortida esperada:

  • Validation passed al final de fase 1
  • Pre-deploy checks passed al final de fase 2

Requisits tecnics de Sessio 12:

  • jq disponible per parsejar JSON en shell scripts
  • Makefile amb targets docker-test, docker-up, docker-down, docker-build, health i predict
  • metadata amb camp deployment_ready a l'arrel del JSON

Configuracio de servidor CI usada al projecte:

MODEL_PATH=models/model_v6.pkl
METADATA_PATH=metadata/metadata_v6.json
PORT=8085
HOST=0.0.0.0
LOG_LEVEL=INFO
LOG_FILE=logs/api.log
APP_NAME="Student Placement Prediction API"
APP_VERSION=1.0.0
PREDICTIONS_LOG_PATH=data/predictions.jsonl

Primer push a CI (sense deploy):

git push origin master

Si el servidor completa fase 1 i fase 2, el codi queda validat i llest per la Sessio 13.

Model

  • Algoritme: Logistic Regression (max_iter=2000)
  • Preprocessing: StandardScaler
  • Accuracy interna reportada durant training: ~86.67%
  • Artifact principal: models/model_vN.pkl
  • Metadata versionada: metadata/metadata_vN.json

Variables d'entorn clau

MODEL_PATH=models/model_v1.pkl
METADATA_PATH=metadata/metadata_v1.json
PREDICTIONS_LOG_PATH=data/predictions.jsonl
PORT=8000
HOST=0.0.0.0
LOG_LEVEL=INFO
LOG_FILE=logs/api.log
APP_NAME=Student Placement Prediction API
APP_VERSION=1.0.0

About

A implementation for student placement prediction. Features versioned artifacts, Docker containerization, and automated CI/CD quality gates to bridge the gap between model development and production deployment.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages