Fiche de travail — Semaine 12

Exercices : Solvabilité II et FastAPI

Auteur·rice

François Boussengui

Date de publication

25 mars 2026


📦 Livrables

:::{.livrable-title}📋 Livrable 1 — Synthèse Solvabilité II::: :::{.livrable-status .required}Obligatoire:::

Document de synthèse expliquant les 3 piliers et leur impact sur le travail d’un data scientist en assurance. Inclure un schéma des interactions entre piliers et activités techniques.

:::{.livrable-title}🐍 Livrable 2 — API FastAPI de scoring::: :::{.livrable-status .required}Obligatoire:::

API complète avec :

  • Endpoint POST /predict acceptant un profil d’assuré
  • Validation Pydantic des entrées
  • Modèle de scoring (même simple : relativités en dur)
  • Dockerfile pour conteneuriser l’API
  • Documentation Swagger accessible à /docs

:::{.livrable-title}📊 Livrable 3 — Bilan mi-parcours::: :::{.livrable-status .required}Obligatoire:::

La semaine 12 marque la moitié du parcours. Rédige un bilan :

  • Compétences acquises (métier + technique)
  • Points forts et axes d’amélioration
  • Objectifs pour les semaines 13-24 (projet central)

🏋️ Exercices

📝 Exercice M1 — Ratio de solvabilité

Un assureur a des fonds propres de 150 M€, un SCR de 120 M€ et un MCR de 40 M€. Calcule les ratios de solvabilité et interprète.

  • Ratio SCR = 150 / 120 = 125% → Solvable (> 100%), marge confortable
  • Ratio MCR = 150 / 40 = 375% → Très au-dessus du minimum

L’assureur est solvable mais avec une marge de 25% seulement sur le SCR. Un sinistre catastrophique ou une baisse des marchés financiers pourrait rapidement dégrader ce ratio. À surveiller.

🐍 Exercice T1 — Première API FastAPI

Crée une API avec :

  1. GET /health → retourne {"status": "ok"}
  2. POST /quote → accepte {"age": int, "zone": str} et retourne une prime calculée
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class QuoteRequest(BaseModel):
    age: int
    zone: str

@app.get("/health")
def health():
    return {"status": "ok"}

@app.post("/quote")
def quote(req: QuoteRequest):
    base = 300
    rel_age = 1.8 if req.age < 26 else 1.0 if req.age < 65 else 1.2
    rel_zone = {"paris": 1.4, "lyon": 1.2, "rural": 0.8}.get(req.zone, 1.0)
    prime = base * rel_age * rel_zone
    return {"prime": round(prime, 2), "profil": req.dict()}

🐍 Exercice T2 — Dockeriser l’API

Écris un Dockerfile et un docker-compose.yml pour déployer l’API FastAPI du projet.

# Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
# docker-compose.yml
version: "3.8"
services:
  api:
    build: .
    ports:
      - "8000:8000"
    environment:
      - MODEL_PATH=/app/models/glm.pkl

🔗 Pont métier-technique

🤔 Réflexion

  1. Comment ton API de scoring s’intègre-t-elle dans le cadre Solvabilité II ? (traçabilité des décisions, audit trail)
  2. Quels KPIs de l’API faut-il monitorer pour le Pilier 2 ? (latence, erreurs, volume)
  3. Comment documenter ton modèle pour satisfaire la fonction actuarielle (Pilier 2) ? (MLflow + rapport technique)

✅ Checklist

  • Module Métier 12 terminé (Solvabilité II, 3 piliers, ORSA)
  • Module Technique 12 terminé (FastAPI, Pydantic, Docker)
  • Livrable 1 (synthèse Solvabilité II)
  • Livrable 2 (API FastAPI de scoring)
  • Livrable 3 (bilan mi-parcours)
  • Exercices réalisés
  • Mi-parcours atteinte — prêt pour le projet central !

← Retour à la Semaine 12