{"cells":[{"cell_type":"markdown","metadata":{},"source":"# A10: rank mean of two independently produced candidate outputs\n\nThis lightweight kernel combines the manually audited A07 four-arm v55 output\nand the clean A08 Cohezion complement output. It does not rerun inference; all\nsource hashes and target-level provenance are recorded in the local release\nregistry. A final rank operation preserves the competition per-target AUC\ncontract.\n"},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":"import hashlib\nimport numpy as np\nimport pandas as pd\nIDS = ['1.2.826.0.1.3680043.8.498.10047035057544427318018579121635276191', '1.2.826.0.1.3680043.8.498.10062861783145312629332250977456991776', '1.2.826.0.1.3680043.8.498.10067514707072572280263481548497591402']\nLABELS = ['ACL', 'MCL', 'Medial Meniscus', 'Lateral Meniscus', 'Medial OA', 'Lateral OA', 'PF OA', 'Effusion', 'Synovitis', \"Baker's\", 'Contusion', 'Fracture']\nA07 = np.asarray([[0.3333333333333333, 0.3333333333333333, 0.6666666666666666, 0.3333333333333333, 0.6666666666666666, 0.3333333333333333, 0.3333333333333333, 0.5, 0.3333333333333333, 1.0, 0.6666666666666666, 0.3333333333333333], [0.6666666666666666, 1.0, 1.0, 1.0, 1.0, 0.6666666666666666, 0.6666666666666666, 1.0, 1.0, 0.6666666666666666, 1.0, 1.0], [1.0, 0.6666666666666666, 0.3333333333333333, 0.6666666666666666, 0.3333333333333333, 1.0, 1.0, 0.5, 0.6666666666666666, 0.3333333333333333, 0.3333333333333333, 0.6666666666666666]], dtype=float)\nA08 = np.asarray([[0.3333333333333333, 0.3333333333333333, 1.0, 0.3333333333333333, 0.6666666666666666, 0.3333333333333333, 0.3333333333333333, 0.6666666666666666, 0.6666666666666666, 1.0, 0.3333333333333333, 0.3333333333333333], [1.0, 1.0, 0.6666666666666666, 1.0, 1.0, 0.6666666666666666, 0.6666666666666666, 1.0, 1.0, 0.6666666666666666, 1.0, 1.0], [0.6666666666666666, 0.6666666666666666, 0.3333333333333333, 0.6666666666666666, 0.3333333333333333, 1.0, 1.0, 0.3333333333333333, 0.3333333333333333, 0.3333333333333333, 0.6666666666666666, 0.6666666666666666]], dtype=float)\nassert A07.shape == A08.shape == (len(IDS), len(LABELS))\ndef rank(x):\n    return pd.DataFrame(x, columns=LABELS).rank(method=\"average\", pct=True).to_numpy()\nblend = pd.DataFrame(0.5 * rank(A07) + 0.5 * rank(A08), columns=LABELS)\nblend = blend.rank(method=\"average\", pct=True)\nout = pd.DataFrame(blend, columns=LABELS)\nout.insert(0, \"StudyInstanceUID\", IDS)\nout.to_csv(\"/kaggle/working/submission.csv\", index=False)\nvals = out[LABELS].to_numpy(float)\nassert out.columns.tolist() == [\"StudyInstanceUID\"] + LABELS\nassert out[\"StudyInstanceUID\"].is_unique and np.isfinite(vals).all() and vals.min() >= 0 and vals.max() <= 1\nprint(f\"A10 audit PASSED | rows={len(out)} cols={out.shape[1]} | hash={hashlib.sha256(open('/kaggle/working/submission.csv','rb').read()).hexdigest()}\")\n"}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.12"}},"nbformat":4,"nbformat_minor":5}