Calibration Explorer · Assessment record

Handwritten digits · real classifier

Policy locked before test inspection in this session

1797 observations in test. Generated 2026-10-04T08:41:18.279Z.

Findings

MeasurementOriginalAfter temperature scaling
Accuracy94.9%94.9%
ECE0.03650.0101
NLL (nats / observation)0.17600.1575

Confidence and correctness

15 equal-width bins. ECE is on a 0–1 scale; lower is not proof of calibration.

● Original◆ After scaling
0%0%20%20%40%40%60%60%80%80%100%100%Confidence = accuracyOriginal, bin 5: 1 predictions, confidence 32.2%, accuracy 100.0%, ECE contribution 0.0004Original, bin 6: 11 predictions, confidence 36.6%, accuracy 45.5%, ECE contribution 0.0005Original, bin 7: 27 predictions, confidence 43.8%, accuracy 63.0%, ECE contribution 0.0029Original, bin 8: 30 predictions, confidence 49.9%, accuracy 53.3%, ECE contribution 0.0006Original, bin 9: 44 predictions, confidence 56.2%, accuracy 61.4%, ECE contribution 0.0013Original, bin 10: 34 predictions, confidence 63.1%, accuracy 67.6%, ECE contribution 0.0009Original, bin 11: 55 predictions, confidence 70.3%, accuracy 78.2%, ECE contribution 0.0024Original, bin 12: 60 predictions, confidence 76.4%, accuracy 86.7%, ECE contribution 0.0034Original, bin 13: 110 predictions, confidence 83.4%, accuracy 92.7%, ECE contribution 0.0057Original, bin 14: 172 predictions, confidence 90.4%, accuracy 97.7%, ECE contribution 0.0070Original, bin 15: 1253 predictions, confidence 98.2%, accuracy 99.8%, ECE contribution 0.0116After scaling, bin 6: 4 predictions, confidence 38.8%, accuracy 50.0%, ECE contribution 0.0002After scaling, bin 7: 9 predictions, confidence 43.0%, accuracy 55.6%, ECE contribution 0.0006After scaling, bin 8: 23 predictions, confidence 50.3%, accuracy 56.5%, ECE contribution 0.0008After scaling, bin 9: 30 predictions, confidence 56.6%, accuracy 60.0%, ECE contribution 0.0006After scaling, bin 10: 25 predictions, confidence 63.6%, accuracy 56.0%, ECE contribution 0.0011After scaling, bin 11: 42 predictions, confidence 70.2%, accuracy 61.9%, ECE contribution 0.0019After scaling, bin 12: 29 predictions, confidence 77.4%, accuracy 79.3%, ECE contribution 0.0003After scaling, bin 13: 63 predictions, confidence 83.4%, accuracy 79.4%, ECE contribution 0.0014After scaling, bin 14: 113 predictions, confidence 90.7%, accuracy 90.3%, ECE contribution 0.0003After scaling, bin 15: 1459 predictions, confidence 99.2%, accuracy 99.5%, ECE contribution 0.0028Mean confidenceObserved accuracy
Bin / seriesCountConfidenceAccuracyECE contribution
Original 10No observationsUnavailable0.0000
Original 20No observationsUnavailable0.0000
Original 30No observationsUnavailable0.0000
Original 40No observationsUnavailable0.0000
Original 5132.2%100.0%0.0004
Original 61136.6%45.5%0.0005
Original 72743.8%63.0%0.0029
Original 83049.9%53.3%0.0006
Original 94456.2%61.4%0.0013
Original 103463.1%67.6%0.0009
Original 115570.3%78.2%0.0024
Original 126076.4%86.7%0.0034
Original 1311083.4%92.7%0.0057
Original 1417290.4%97.7%0.0070
Original 15125398.2%99.8%0.0116
After 10No observationsUnavailable0.0000
After 20No observationsUnavailable0.0000
After 30No observationsUnavailable0.0000
After 40No observationsUnavailable0.0000
After 50No observationsUnavailable0.0000
After 6438.8%50.0%0.0002
After 7943.0%55.6%0.0006
After 82350.3%56.5%0.0008
After 93056.6%60.0%0.0006
After 102563.6%56.0%0.0011
After 114270.2%61.9%0.0019
After 122977.4%79.3%0.0003
After 136383.4%79.4%0.0014
After 1411390.7%90.3%0.0003
After 15145999.2%99.5%0.0028

Acceptance at 80.0%

1635 accepted · 162 abstained · 31 accepted mistakes · 1.9% observed error among accepted predictions.

0%0%50%50%100%100%Coverage · share of predictions acceptedError rate

Configuration and provenance

{
  "data": {
    "name": "Handwritten digits · real classifier",
    "kind": "logits",
    "sha256": "18f281567b4a749dabe3819a427d32d228b85a7226c7785c10a99d88cf0d46d7",
    "rowCount": 2945,
    "splitCounts": {
      "calibration": 574,
      "policy_validation": 574,
      "test": 1797
    },
    "classes": [
      "0",
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9"
    ],
    "provenance": {
      "source": "Bundled UCI handwritten-digits reference",
      "dataset": "UCI Optical Recognition of Handwritten Digits",
      "datasetDoi": "10.24432/C50P49",
      "datasetUrl": "https://archive.ics.uci.edu/dataset/80/optical+recognition+of+handwritten+digits",
      "datasetVersion": "Original optdigits.tra and optdigits.tes; identified by SHA-256 below",
      "license": "CC BY 4.0",
      "attribution": "Alpaydin, E. & Kaynak, C. (1998). Optical Recognition of Handwritten Digits. UCI Machine Learning Repository.",
      "model": {
        "id": "optdigits-logistic-regression-v1",
        "revision": "sha256:fc400aabfabd726df19d674b31863db1ee588cc60850796689a48472d6e5b8bd",
        "estimator": "sklearn.linear_model.LogisticRegression",
        "logitDefinition": "decision_function scores; softmax probabilities; columns follow model.classes_"
      },
      "preprocessing": {
        "dtype": "float64",
        "transform": "64 original integer features divided by 16",
        "learnedTransforms": false
      },
      "generation": {
        "script": "scripts/prepare_digits.py",
        "scriptSha256": "df730e9c9ad62882aef79f419452db27769c8884f951c41f4762443e1440ab07",
        "command": "python scripts/prepare_digits.py",
        "requirements": "scripts/requirements-reference.txt"
      },
      "splitMethod": {
        "name": "Two deterministic stratified train_test_split calls within optdigits.tra; official optdigits.tes preserved",
        "membershipSha256": "66306e9bc90ca705114ec4f152d4f7fa7e6f99016988911691e2a26d55f79308",
        "firstHoldoutSize": 1148,
        "secondHoldoutSize": 574
      }
    }
  },
  "configuration": {
    "split": "test",
    "bins": 15,
    "strategy": "equal-width",
    "temperature": 0.7259783904070843,
    "threshold": 0.8,
    "group": null
  },
  "policy": {
    "testViewed": true,
    "changedAfterTest": false,
    "locked": {
      "temperature": 0.7259783904070843,
      "threshold": 0.8
    }
  },
  "fit": {
    "temperature": 0.7259783904070843,
    "nllBefore": 0.15739905266200538,
    "nllAfter": 0.1413242121853789,
    "improved": true,
    "atBound": null,
    "status": "converged",
    "iterations": 26
  },
  "fitAttempt": {
    "status": "applied",
    "result": {
      "temperature": 0.7259783904070843,
      "nllBefore": 0.15739905266200538,
      "nllAfter": 0.1413242121853789,
      "improved": true,
      "atBound": null,
      "status": "converged",
      "iterations": 26
    },
    "calibrationRows": 574,
    "message": "Temperature was fitted on calibration observations only. Changes on other splits must be measured separately."
  },
  "learning": null,
  "evaluationFailure": null,
  "software": {
    "app": "calibration-explorer/0.2.0",
    "numericalLibrary": "@m-sanchez/calibrated/2.0.1",
    "upstreamCommit": "6e74b92dfc5c545a1cd926f96bd5bc44ae6c887b",
    "appSourceSha256": "9ce40339840b8e81d3c709af90b81d4e9c5108b53872625f0f932cfaebc0d05f",
    "numericalDistributionSha256": "3331be184fa4cb43dd85f42d2dc67abffb03d47b1bbf574c466e80758d057dd2"
  }
}

Limits of this assessment

Raw observations and row identifiers are omitted from this report. This HTML has no scripts, remote assets or telemetry.