{
  "ctgame_version": "0.1.0",
  "data": {
    "students": 120,
    "tasks": 40,
    "attempts": 3648,
    "observed_share": 0.586
  },
  "nmf": {
    "components": 3,
    "rmse": 0.3213,
    "iterations": 151,
    "converged": true,
    "holdout_rmse": 0.3727,
    "baseline_rmse": 0.4376,
    "holdout_improvement": 0.148
  },
  "clusters": {
    "k": 3,
    "silhouette": {
      "2": 0.388,
      "3": 0.421,
      "4": 0.392,
      "5": 0.392,
      "6": 0.33
    },
    "explained_variance": [
      0.544,
      0.221,
      0.146
    ],
    "sizes": [
      41,
      40,
      39
    ]
  },
  "ancova": {
    "summary": "F(1, 57) = 11.16, p = .001, partial eta^2 = 0.16; adjusted difference = 4.04 [95% CI 1.62, 6.45]",
    "p_value": 0.0015,
    "partial_eta_sq": 0.164,
    "adjusted_means": {
      "control": 52.42,
      "treatment": 56.45
    },
    "assumptions_met": true
  }
}