OpenChainGraph Suite · ART-489 · Model Risk Management

Model Test Battery

Runs the deterministic quantitative validation battery — Gini coefficient, Kolmogorov-Smirnov statistic, Population Stability Index, Characteristic Stability Index, back-test, and calibration — against thresholds you supply. If a threshold is missing for a test, that test is skipped and labelled so, never defaulted. Pairs with Model Replication Diff as the two deterministic legs of a model validation cycle. Final step of the Model Validation Replication Cycle, where validation sign-off is a §27 dual_control(2) gate whose distinct-identity count is what evidences a validator independent of the developer.

Policy-Supplied Thresholds Only Standard-Named Tests No Soundness Opinion
🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
⚠ This tool never chooses or hardcodes a threshold. A test with no supplied threshold is reported skipped, not passed or failed.
Policy-Supplied Thresholds
As-of date
Threshold set version
Gini min
KS min
PSI max
CSI max
Calibration max diff
Scored Outcomes (Gini / KS)
JSON array: id, score, outcome (0/1)
Population Stability (PSI)
JSON array: bin, expected_count, actual_count
Characteristic Stability (CSI)
JSON array: characteristic, bin, expected_count, actual_count
Back-Test / Calibration Bins
JSON array: bin, predicted_rate, actual_rate, n
Threshold set: · as-of:
Test Results (workpaper section)
Back-Test / Calibration Detail
Execution Hash (SHA-256)

Ask your agent

Copy this paragraph into Claude, OpenClaw, or any MCP-aware agent to run this exact tool, with this sample, and verify the artifact.

Run the AINumbers MCP tool `run_model_test_battery`. Task: Run the deterministic-given-data quantitative model validation battery: discriminatory power (Gini coefficient, Kolmogorov-Smirnov statistic) from scored outcomes, population and characteristic stability (PSI, CSI) between two declared snapshots using the caller's own bins, back-test outcome-vs-predicted per declared bin, and a calibration comparison (predicted vs actual rate, max absolute diff).
Call it with arguments: {"policy_parameters":{"as_of_date":"2026-01-15","threshold_version":"policy-2026-Q1","thresholds":{"gini_min":0.4,"ks_min":0.3,"psi_max":0.25,"csi_max":0.25,"calibration_max_diff":0.05},"discrimination":{"scored_outcomes":[{"id":"a","score":0.9,"outcome":1},{"id":"b","score":0.8,"outcome":1},{"id":"c","score":0.3,"outcome":0},{"id":"d","score":0.2,"outcome":0},{"id":"e","score":0.6,"outcome":1},{"id":"f","score":0.1,"outcome":0}]},"stability":{"population_bins":[{"bin":"low","expected_count":100,"actual_count":90},{"bin":"high","expected_count":100,"actual_count":110}],"characteristic_bins":[{"characteristic":"ltv","bin":"low","expected_count":50,"actual_count":40},{"characteristic":"ltv","bin":"high","expected_count":50,"actual_count":60}]},"backtest":{"bins":[{"bin":"1","predicted_rate":0.05,"actual_rate":0.07,"n":100},{"bin":"2","predicted_rate":0.1,"actual_rate":0.09,"n":80}]}}}
Verify before trusting: call `verify_execution_hash` on mcp.ainumbers.co (https://mcp.ainumbers.co/mcp) with the parameter `claimed_hash` set to the returned `execution_hash`, passing the full artifact the run returned (the object containing `policy_parameters` + `output_payload` + `execution_hash`; equivalently `policy_parameters` + `output_payload` with `claimed_hash`), not the bare hash string.
Return the ledger link https://ledger.ainumbers.co/ so a human can re-verify without contacting us.
PII rule: All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
Open the tool with the sample prefilled: https://ainumbers.co/chaingraph/art-489-model-test-battery.html#p=v1.H4sIAAAAAAAA_wFpA5b8eyJhc19vZl9kYXRlIjoiMjAyNi0wMS0xNSIsInRocmVzaG9sZF92ZXJzaW9uIjoicG9saWN5LTIwMjYtUTEiLCJ0aHJlc2hvbGRzIjp7ImdpbmlfbWluIjowLjQsImtzX21pbiI6MC4zLCJwc2lfbWF4IjowLjI1LCJjc2lfbWF4IjowLjI1LCJjYWxpYnJhdGlvbl9tYXhfZGlmZiI6MC4wNX0sImRpc2NyaW1pbmF0aW9uIjp7InNjb3JlZF9vdXRjb21lcyI6W3siaWQiOiJhIiwic2NvcmUiOjAuOSwib3V0Y29tZSI6MX0seyJpZCI6ImIiLCJzY29yZSI6MC44LCJvdXRjb21lIjoxfSx7ImlkIjoiYyIsInNjb3JlIjowLjMsIm91dGNvbWUiOjB9LHsiaWQiOiJkIiwic2NvcmUiOjAuMiwib3V0Y29tZSI6MH0seyJpZCI6ImUiLCJzY29yZSI6MC42LCJvdXRjb21lIjoxfSx7ImlkIjoiZiIsInNjb3JlIjowLjEsIm91dGNvbWUiOjB9XX0sInN0YWJpbGl0eSI6eyJwb3B1bGF0aW9uX2JpbnMiOlt7ImJpbiI6ImxvdyIsImV4cGVjdGVkX2NvdW50IjoxMDAsImFjdHVhbF9jb3VudCI6OTB9LHsiYmluIjoiaGlnaCIsImV4cGVjdGVkX2NvdW50IjoxMDAsImFjdHVhbF9jb3VudCI6MTEwfV0sImNoYXJhY3RlcmlzdGljX2JpbnMiOlt7ImNoYXJhY3RlcmlzdGljIjoibHR2IiwiYmluIjoibG93IiwiZXhwZWN0ZWRfY291bnQiOjUwLCJhY3R1YWxfY291bnQiOjQwfSx7ImNoYXJhY3RlcmlzdGljIjoibHR2IiwiYmluIjoiaGlnaCIsImV4cGVjdGVkX2NvdW50Ijo1MCwiYWN0dWFsX2NvdW50Ijo2MH1dfSwiYmFja3Rlc3QiOnsiYmlucyI6W3siYmluIjoiMSIsInByZWRpY3RlZF9yYXRlIjowLjA1LCJhY3R1YWxfcmF0ZSI6MC4wNywibiI6MTAwfSx7ImJpbiI6IjIiLCJwcmVkaWN0ZWRfcmF0ZSI6MC4xLCJhY3R1YWxfcmF0ZSI6MC4wOSwibiI6ODB9XX19t96hMWkDAAA