Evidence¶
This section collects tangible proof that the system works as described. It is the verification layer — where architecture claims are backed by artifacts.
What is proved by this project¶
| Claim | Proof |
|---|---|
| Pipeline is reproducible | dvc repro from clean checkout produces same model; DVC lock + MLflow run IDs. |
| Validation is leakage-safe | Property tests with hypothesis verify rolling features don't see future data. |
| Inference API is live | curl POST /predict returns probabilities with latency ~20ms p50. |
| Model is tracked and versioned | MLflow run IDs, parameter logs, and registry aliases in mlruns/. |
| Tests cover behaviour contracts | pytest tests/ — 316 tests: unit / property / service / contract / load. |
| Infrastructure is code | Docker, K8s manifests, Helm charts, GitLab CI pipeline — all in repo. |
| Secrets are encrypted | SOPS + age; encrypted files committed to repo; no plaintext credentials. |
Evidence map by competency¶
| Competency | Evidence page | Key artifact |
|---|---|---|
| Reproducibility | MLflow Evidence | MLflow run IDs; dvc status output |
| Validation rigor | System Proofs | pytest tests/property/ output; DVC split artifacts |
| Serving design | Serving Evidence | Live API responses; GET /metrics output |
| Deployment readiness | System Proofs | kubectl get pods output; Helm release |
| Observability thinking | Monitoring Evidence | Prometheus metrics; runbook links |
| Operational maturity | System Proofs | Test output; CI pipeline pass |
| System thinking | Architecture docs | C4 diagrams; ADRs; layer contracts |
Strongest artifacts¶
dvc dag+dvc status— proves pipeline is defined and reproducible- MLflow experiment UI — shows tracked runs, parameters, metrics, model versions
POST /predictresponse — proves model is loaded and servingpytest tests/ -qoutput — proves 316 tests passkubectl get pods -n soccer— proves deployment is liveGET /metricsresponse — proves Prometheus instrumentation is active
Recommended reading order¶
For a quick proof check (5 min): 1. Implementation Status — what exists vs. what's planned 2. MLflow Evidence — experiment runs and model registry 3. Serving Evidence — live API call example
For a complete review (20 min): 1. System Proofs — infrastructure and pipeline running 2. MLflow Evidence — training discipline 3. Serving Evidence — API contract and behaviour 4. Monitoring Evidence — observability coverage 5. Lessons Learned — retrospective and honest limitations
How to verify locally¶
# Reproduce the ML pipeline from scratch
git clone <repo> && cd soccer
dvc pull
dvc repro
mlflow ui --backend-store-uri ./mlruns --port 5001
# Run all tests
pytest tests/ -q
# Check serving (if API is running)
curl http://api.time2bet.ru/healthcheck/
curl -X POST http://api.time2bet.ru/v1/predict \
-H "Content-Type: application/json" \
-d '{"home_team":"Arsenal","away_team":"Chelsea","match_date":"2025-05-10","league":"premier_league"}'
Evidence pages¶
| Page | Contents |
|---|---|
| System Proofs | K8s pods, DVC dag, pipeline state, test output |
| MLflow Evidence | Experiment runs, metrics, model registry screenshots |
| Serving Evidence | API responses, latency, endpoint behaviour |
| Monitoring Evidence | Prometheus metrics, coverage gaps |
| Lessons Learned | Retrospective: what was hard, what I'd change |
| Evaluation Reports | Quarto-rendered EDA, model comparison, ablation |