Files
pdf_signature_extraction/paper/v13_build/CANONICAL_NUMBERS_rev9.1.md
T
gbanyanandClaude Opus 4.8 6781c00d5b Paper A v13 rev9.2: firm-key unification + canonical-number reconciliation (rev9.1 review R1-R6)
Resolve the Firm C/D "two-snapshot" inconsistency from the co-author rev9.1 review.
Root cause was NOT stale data but two live firm-assignment keys (assigned_accountant->
registry firm vs the excel_firm column) used inconsistently across tables; standardize
on the registry key, which the headline Table IV/II-b already use. Sole difference = 379
signatures with excel_firm=C but registry firm=D; A and B identical under both keys.

Numbers (all DB-verified, registry key, n=150,442):
- Table II-c Firm C/D recomputed (was mixing keys within firm C across periods, which
  manufactured the spurious "third value" 38,934); now C 22,449+16,164=38,613,
  D 9,945+7,188=17,133, all four firms reconcile.
- Table VI C/D counts + S III-B prose + Fig 3/6 captions -> 150,442.
- S V-B HC-rate text -> Firm C 21.6->26.7%, Firm D 22.0->28.0%.

Note on R4: the reviewer (PDF-only) asked to change S IV-C to 26.5/28.5 to match Table
II-c; DB verification showed the reverse - S IV-C's 26.7/28.0 are correct and Table II-c
was the stale outlier, so II-c was aligned to S IV-C (data-correct, opposite to the
literal instruction).

Accountant counts (R2 reviewer "179>171 impossible" = false positive; three distinct,
all-reproducible universes): Table I + S III-B -> 457 (>=2 sig, owns the 150,442
signatures); Table III documented as the 437 with >=10 signatures (K=3 GMM subset,
reproduces A=82.5/B=0.0/C=1.0/D=1.9% exactly); bootstrap 179/280 unchanged
(accountant_id key, correct and invariant to the A-vs-BCD contrast).

R3 (corpus scope): S III-B reworded - corpus = all retrievable reports, Big-4 as the
primary analysis sample (removes the "corpus = four firms" vs "non-Big-4 in robustness"
contradiction); per-firm counts now explicitly labelled A/B/C/D.
R5 (spelling): unify to American (artefact->artifact x11, centred->centered,
behaviour->behavior, analyse(d)->analyze(d), favours->favors).
R6: delete non-standard "(+)" marker in S IV-C.

Figures regenerated under the registry key: make_fig3_density.py and
make_fig6_sensitivity.py switched to the assigned_accountant join (fig3/fig6 n=150,442);
fig4/fig5 refreshed. FE/LOYO/bootstrap re-validated exactly (ORs 0.116/0.061/0.070,
LOYO 53.1-54.9pp, full 53.7pp).

Add CANONICAL_NUMBERS_rev9.1.md with full provenance, the analyzable/GMM definitions,
and the firm-key root cause.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K35dXhb9XEM1mnYz6SSHpU
2026-06-30 15:19:18 +08:00

4.7 KiB
Raw Blame History

Canonical number set — Paper A v13 rev9.1 (verified 2026-06-30)

Source of truth: signature_analysis.db (/Volumes/NV2/PDF-Processing/signature-analysis/). Verified against scripts in paper/v13_build/scripts/. All firm-level signature counts and within-accountant HC rates below are DB-reproduced to 2 decimals.

ROOT CAUSE of the "Firm C/D two-snapshot" inconsistency

It is NOT a stale snapshot. It is two live firm-assignment keys used inconsistently:

Key Definition C D total
assigned (canonical) assigned_accountant → accountants.firm (registry firm) 38,613 17,133 150,442
excel excel_firm column (source Excel metadata) 38,993 16,752 150,441

Difference = 379 signatures with excel_firm=資誠(C) but registry firm=安永(D) (one/few cross-labeled accountants). A and B are identical under both keys. Because the headline contrast pools B/C/D, the swap is invisible to it (FE/LOYO/bootstrap reproduce exactly under either key); only per-firm-separated tables (IV, II-b, II-c, VI) are affected.

DECISION: standardize on the assigned key — it is what headline Table IV/II-b already use.

"Analyzable signatures" definition (reproduces 150,442 exactly)

Analyzable = signature whose CPA has ≥2 signatures (singleton CPAs have no same-accountant partner). Per-firm singletons (A:2, B:6, C:3, D:0) exactly equal rawSet A.

Canonical signature counts (assigned key)

Firm Full 201323 201319 202023
A 60,448 36,550 23,898
B 34,248 19,677 14,571
C 38,613 22,449 16,164
D 17,133 9,945 7,188
Big-4 150,442 88,621 61,821

Every row sums exactly. (excel-key alternatives, do NOT use for per-firm tables: C 202023 = 16,485, D 202023 = 6,866 — these are what the stale Table II-c rows show.)

Five-way breakdown (HC | MC | HSC | UN | LH | n), low cut = 0.8547

FULL 20132023 (Table IV):

  • A: 81.70 | 10.76 | 0.05 | 7.35 | 0.14 | 60,448
  • B: 34.56 | 35.88 | 0.29 | 28.95 | 0.32 | 34,248
  • C: 23.75 | 41.44 | 0.38 | 33.97 | 0.47 | 38,613
  • D: 24.51 | 29.33 | 0.22 | 45.28 | 0.66 | 17,133
  • Overall: 49.58 | 26.47 | 0.21 | 23.42 | 0.32 | 150,442

20132019 (Table II-b):

  • B: 29.04 | 39.31 | 0.39 | 30.91 | 0.35 | 19,677
  • C: 21.59 | 42.09 | 0.37 | 35.53 | 0.43 | 22,449
  • D: 22.01 | 29.67 | 0.20 | 47.35 | 0.76 | 9,945

20202023 (Table II-c) — C/D are the fix:

  • A: 83.84 | 9.13 | 0.04 | 6.88 | 0.11 | 23,898
  • B: 42.01 | 31.24 | 0.16 | 26.31 | 0.28 | 14,571
  • C: 26.74 | 40.55 | 0.40 | 31.80 | 0.51 | 16,164 (manuscript stale: 26.53/.../16,485)
  • D: 27.98 | 28.85 | 0.24 | 42.42 | 0.51 | 7,188 (manuscript stale: 28.53/.../6,866)

Per-firm period HC rates (§IV-C text / Fig 5 — already CORRECT in manuscript): A 80.3→83.8, B 29.0→42.0, C 21.6→26.7, D 22.0→28.0.

Table VI (any-pair vs same-pair HC) under assigned key

firm n any-pair% same-pair%
A 60,448 81.7 57.3
B 34,248 34.6 9.0
C 38,613 23.7 5.3
D 17,133 24.5 7.7
all 150,442 49.6 27.3

(Manuscript currently shows excel-key: C 38,993, D 16,752, all 150,441, D any-pair 24.7.)

Accountant counts (R2) — reviewer's "179 > 171 impossible" is a FALSE POSITIVE

Different keys, not a contradiction:

  • Bootstrap/FE (accountant_id, is_valid): A=179 (reproduces exactly), BCD=281 (manuscript 280).
  • Table III / accountant-level partition (171/112/102/52 = 437): RESOLVED 2026-06-30 — this is the Big-4 accountants with ≥10 signatures (registry key), reproduces EXACTLY on current DB. GMM recipe: accountant point = (mean max_similarity_to_same_accountant, mean min_dhash_independent); sklearn GaussianMixture(n_components=3, covariance_type='full', random_state=42, n_init=10); templated cluster = highest-cosine component (cos 0.983 / dHash 2.4). Shares reproduce to the digit: A=82.5% (141/171), B=0.0% (0/112), C=1.0% (1/102), D=1.9% (1/52). Script: scratchpad/gmm.py.
  • Analyzable accountant count (registry name key, ≥2 sig) = 457 (A=178, B=119, C=107, D=53) — owns the 150,442 signatures; now stated in Table I and the §III-B prose.

THREE DISTINCT, ALL-REPRODUCIBLE accountant universes (the reviewer collapsed them → false "179>171"): 457 (≥2 sig, owns 150,442) | 437 (≥10 sig, Table III GMM) | 459 = 179/280 (accountant_id bootstrap). Manuscript edits applied 2026-06-30: Table I + §III-B prose → 457; §III-B prose + Table III caption note the 437/≥10-sig subset. Bootstrap 179/280 stays (correct, key-invariant).

F5 robustness (re-validated EXACTLY on current DB, key-invariant)

Firm+Year FE ORs: B=0.116, C=0.061, D=0.070. LOYO gap range [53.1, 54.9]pp, full-sample 53.7pp.