// Donnees OOS : grille 8x8 seed 42 (bruit gaussien 0.3, valeurs a 1 decimale) -- identique au jumeau PyMC
int oosNUsers = 8;
int oosNItems = 8;
int oosRank = 1; // la structure aime/non-aime est un bloc 2x2 -> rang latent 1 suffit
double[,] oosGrid = new double[,] {
{ 5.0, 3.7, 4.2, 4.3, 1.4, 1.0, 2.0, 1.0 },
{ 4.0, 3.7, 4.3, 5.0, 1.0, 2.3, 1.1, 1.7 },
{ 4.1, 3.7, 5.0, 4.0, 1.9, 1.0, 2.4, 1.0 },
{ 3.9, 4.9, 4.2, 4.1, 1.1, 2.1, 1.6, 1.9 },
{ 1.8, 1.0, 2.2, 1.3, 5.0, 3.7, 3.8, 4.2 },
{ 1.2, 2.2, 1.0, 2.1, 4.0, 4.1, 4.3, 5.0 },
{ 2.2, 1.0, 2.1, 1.2, 3.6, 3.9, 4.9, 3.8 },
{ 1.0, 2.4, 1.0, 2.3, 3.5, 4.9, 4.0, 4.2 }
};
// Entrainement : 4 notes par utilisateur (3 aimees + 1 non-aimee) = 32 observations
int[] oosUObs = { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7 };
int[] oosIObs = { 1, 2, 3, 4, 0, 2, 3, 5, 0, 1, 3, 6, 0, 1, 2, 7, 5, 6, 7, 0, 4, 6, 7, 1, 4, 5, 7, 2, 4, 5, 6, 3 };
double[] oosRObs = { 3.7, 4.2, 4.3, 1.4, 4.0, 4.3, 5.0, 2.3, 4.1, 3.7, 4.0, 2.4, 3.9, 4.9, 4.2, 1.9, 3.7, 3.8, 4.2, 1.8, 4.0, 4.3, 5.0, 2.2, 3.6, 3.9, 3.8, 2.1, 3.5, 4.9, 4.0, 2.3 };
// Test (masque) : 2 notes par utilisateur (1 aimee + 1 non-aimee) = 16 observations invisibles
int[] oosTeU = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };
int[] oosTeI = { 0, 5, 1, 6, 2, 7, 3, 4, 4, 1, 5, 2, 6, 3, 7, 0 };
double[] oosTeR = { 5.0, 1.0, 3.7, 1.1, 5.0, 1.0, 4.1, 1.1, 5.0, 1.0, 4.1, 1.0, 4.9, 1.2, 4.2, 1.0 };
// 16 autres paires restent inobservees (masque) : bras cold-start / extension, non utilisees par l'inference
Console.WriteLine($"OOS : {oosUObs.Length} notes train, {oosTeU.Length} masquees (test). Grille {oosNUsers}x{oosNItems} (seed 42).");
// Chaque item doit rester represente en entrainement (sinon la tache devient du cold-start)
for (int k = 0; k < oosNItems; k++) {
int c = 0; for (int o = 0; o < oosIObs.Length; o++) if (oosIObs[o] == k) c++;
if (c == 0) Console.WriteLine($" WARN : item {k} absent du train");
}
Console.WriteLine("Representativite : chaque item present en train (0 WARN attendu).");