{
  "dataset": {
    "name": "Noroa — mix omnicanal, 156 semaines",
    "version": "1.0",
    "nature": "Données simulées, déterministes et reproductibles",
    "company": "Noroa est une entreprise fictive",
    "period": {
      "start": "2023-01-02",
      "end": "2025-12-22",
      "observations": 156,
      "grain": "semaine"
    },
    "allowedUse": [
      "Reproduire le cas de décision",
      "Tester une méthode MMM ou une allocation",
      "Former à l’analyse de sensibilité"
    ],
    "prohibitedUse": [
      "Présenter les résultats comme une performance observée sur un marché réel",
      "Utiliser les paramètres comme benchmark sectoriel"
    ]
  },
  "decision": {
    "question": "Comment réallouer 1,2 M€ par trimestre entre cinq canaux sans augmenter le budget ?",
    "objective": "Maximiser la contribution brute incrémentale après média",
    "decision": "Déployer la réallocation en deux paliers avec six semaines de validation",
    "budget_eur": 1200000
  },
  "model": {
    "responseCurve": "R_i(s) = A_i * s^alpha_i / (H_i^alpha_i + s^alpha_i)",
    "riskAdjustment": "Score_i(s) = R_i(s) * (0.75 + 0.25 * confiance_i)",
    "optimization": "Allocation discrète par pas de 10 000 €, sous minimums et maximums par canal",
    "channels": [
      {
        "id": "paid_search",
        "label": "Paid search",
        "maximum_contribution_eur": 1250000,
        "half_saturation_eur": 280000,
        "alpha": 1.05,
        "confidence": 0.88,
        "minimum_eur": 220000,
        "maximum_eur": 460000
      },
      {
        "id": "paid_social",
        "label": "Paid social",
        "maximum_contribution_eur": 950000,
        "half_saturation_eur": 320000,
        "alpha": 1.18,
        "confidence": 0.62,
        "minimum_eur": 140000,
        "maximum_eur": 360000
      },
      {
        "id": "online_video",
        "label": "Vidéo en ligne",
        "maximum_contribution_eur": 1100000,
        "half_saturation_eur": 460000,
        "alpha": 1.15,
        "confidence": 0.7,
        "minimum_eur": 120000,
        "maximum_eur": 340000
      },
      {
        "id": "television",
        "label": "Télévision",
        "maximum_contribution_eur": 1300000,
        "half_saturation_eur": 600000,
        "alpha": 1.25,
        "confidence": 0.66,
        "minimum_eur": 140000,
        "maximum_eur": 380000
      },
      {
        "id": "retail_media",
        "label": "Retail media",
        "maximum_contribution_eur": 800000,
        "half_saturation_eur": 220000,
        "alpha": 1.1,
        "confidence": 0.8,
        "minimum_eur": 80000,
        "maximum_eur": 260000
      }
    ]
  },
  "allocation": [
    {
      "channel": "Paid search",
      "current_eur": 440000,
      "pilot_eur": 360000,
      "target_eur": 290000,
      "change_eur": -150000
    },
    {
      "channel": "Paid social",
      "current_eur": 340000,
      "pilot_eur": 260000,
      "target_eur": 220000,
      "change_eur": -120000
    },
    {
      "channel": "Vidéo en ligne",
      "current_eur": 140000,
      "pilot_eur": 180000,
      "target_eur": 230000,
      "change_eur": 90000
    },
    {
      "channel": "Télévision",
      "current_eur": 200000,
      "pilot_eur": 240000,
      "target_eur": 270000,
      "change_eur": 70000
    },
    {
      "channel": "Retail media",
      "current_eur": 80000,
      "pilot_eur": 160000,
      "target_eur": 190000,
      "change_eur": 110000
    }
  ],
  "result": {
    "current_incremental_contribution_eur": 1946408,
    "target_incremental_contribution_eur": 2067807,
    "expected_gain_eur": 121400,
    "expected_gain_rate": 6.2,
    "prudent_gain_eur": 42000,
    "favorable_gain_eur": 187000,
    "probability_gain_positive": 0.88
  },
  "validation": {
    "temporal_holdout_weeks": 12,
    "holdout_mape": 0.068,
    "interval_80_coverage": 0.917,
    "calibrationEvents": [
      {
        "name": "Test géographique vidéo",
        "observed_lift": 0.056,
        "model_lift": 0.051
      },
      {
        "name": "Test géographique retail media",
        "observed_lift": 0.084,
        "model_lift": 0.079
      }
    ]
  },
  "decisionRules": {
    "continue": "Passer au palier cible si le gain de contribution est supérieur à 30 000 € et si les garde-fous restent respectés.",
    "maintain": "Maintenir le palier pilote si l’intervalle inclut zéro mais que la perte prudente reste inférieure à 20 000 €.",
    "stop": "Revenir à l’allocation initiale si la borne prudente descend sous -40 000 € ou si la disponibilité passe sous 95 %."
  },
  "dictionary": {
    "week": "Lundi de la semaine, format ISO",
    "observed_revenue_eur": "Chiffre d’affaires hebdomadaire observé, euros",
    "gross_contribution_after_media_eur": "38 % du chiffre d’affaires moins les dépenses média, euros",
    "paid_search_spend_eur": "Dépense paid search, euros",
    "paid_social_spend_eur": "Dépense paid social, euros",
    "online_video_spend_eur": "Dépense vidéo en ligne, euros",
    "television_spend_eur": "Dépense télévision, euros",
    "retail_media_spend_eur": "Dépense retail media, euros",
    "average_price_index": "Indice de prix moyen, base 1 au début de période",
    "promotion_rate": "Part moyenne de remise, entre 0 et 1",
    "availability_index": "Disponibilité pondérée, entre 0 et 1",
    "stores_open": "Nombre de magasins ouverts",
    "holiday_index": "Indice de saisonnalité commerciale",
    "calibration_event": "Événement utilisé pour calibrer une réponse média",
    "data_status": "Observation d’entraînement ou de validation temporelle"
  }
}
