#load "../../Infer/SvgChartHelper.cs"
// Visualisation recapitulative : Comparaison VoI sur tous les exemples du notebook
Console.WriteLine("=== Tableau Recapitulatif : Valeur de l'Information ===\n");
// Donnees des exemples vus dans le notebook
var exemples = new[] {
("Parapluie", "Oracle meteo", 15.0, 15.0, 100.0, "Oui", "pts"),
("Forage", "Test sismique", 390_000.0, 253_000.0, 65.0, "Oui", "EUR"),
("Tresor", "Detecteur", 20.0, 7.8, 39.0, "Oui", "EUR"),
("Medical 3 etats", "Test rapide", 355.0, 155.0, 44.0, "Oui", "EUR"),
("Medical 3 etats", "IRM", 355.0, 273.0, 77.0, "Non (cout)", "EUR"),
("Medical rare", "Test 95/90", 215.0, 0.0, 0.0, "Non", "EUR")
};
// En-tete
Console.WriteLine($"{"Exemple",-16} {"Test",-14} {"EVPI",-10} {"EVSI",-10} {"Eff%",-8} {"Rentable",-12}");
Console.WriteLine(new string('-', 80));
foreach (var (exemple, test, evpi, evsi, eff, rentable, unite) in exemples)
{
string evpiStr = evpi >= 1000 ? $"{evpi/1000:F0}k" : $"{evpi:F0}";
string evsiStr = evsi >= 1000 ? $"{evsi/1000:F0}k" : $"{evsi:F0}";
Console.WriteLine($"{exemple,-16} {test,-14} {evpiStr,-10} {evsiStr,-10} {eff,-7:F0}% {rentable,-12}");
}
Console.WriteLine();
Console.WriteLine("Observations cles :");
Console.WriteLine();
Console.WriteLine(" 1. EVSI <= EVPI toujours (information imparfaite ne peut depasser parfaite)");
Console.WriteLine(" 2. Efficacite varie de 0% (test inutile) a 65% (tres bon test)");
Console.WriteLine(" 3. Meme un test performant peut etre inutile si prior trop extreme");
Console.WriteLine(" 4. Cout vs valeur : IRM (77% eff) moins rentable que test rapide (44% eff)");
Console.WriteLine();
// Visualisation en barres de l'efficacite : la couleur encode la rentabilite (par-barre).
{
var labels49 = exemples.Select(e => e.Item2).ToArray();
var effs49 = exemples.Select(e => Math.Round(e.Item5, 1)).ToArray();
// Couleur conditionnelle par barre : bleu si rentable (colonne "Rentable" commence par
// "Oui"), orange sinon. Rend visible le paradoxe cout/valeur - l'IRM affiche 77 %
// d'efficacite mais reste NON rentable a cause de son cout - qu'une couleur unique masquait.
var colors49 = exemples.Select(e => e.Item6.StartsWith("Oui") ? "#4C72B0" : "#DD8452").ToArray();
var legend49 = new List<(string, string)> { ("#4C72B0", "rentable"), ("#DD8452", "non rentable") };
display(SvgChartHelper.Bar(
"Efficacite des tests (EVSI/EVPI) - couleur = rentabilite",
labels49, effs49, width: 720, colors: colors49, legend: legend49));
}
Console.WriteLine(" Chart : hauteur = efficacite (EVSI/EVPI, %), couleur = rentabilite (voir legende).");