arjun10g commited on
Commit
c6389f5
·
verified ·
1 Parent(s): fe46112

v1 :: seniority classifier (eval={'eval_accuracy': 0.8897, 'eval_f1_macro': 0.8311, 'eval_f1_weighted': 0.8925, 'eval_f1_macro_ci95': [0.7805, 0.8698]})

Browse files
Files changed (1) hide show
  1. README.md +23 -17
README.md CHANGED
@@ -125,28 +125,34 @@ clf.predict(["Senior ML Engineer at Stripe"])
125
 
126
 
127
 
128
- ## Independent-labeler eval (preliminary, pre-human-review)
129
 
130
  To check the classifier didn't just memorize the regex, we sampled 230
131
- diverse rows and had Claude (an independent labeler) propose labels in
132
- parallel. The classifier was scored against those proposals on the
133
- subset of rows where Claude's label is one the classifier was trained
134
- to predict (`117/230` rows
135
- the rest were the regex-default labels we drop from training,
136
- mostly `mid`).
137
-
138
- | Metric | All in-vocab proposals | LLM high-confidence subset |
 
 
 
 
 
 
139
  |---|---|---|
140
- | n | 117 | 96 |
141
- | accuracy | 0.7949 | 0.9062 |
142
- | f1_macro | **0.7975** (95% CI [0.7233, 0.8612]) | **0.8995** |
143
 
144
- These numbers come from a *different labeler* than the training data, so
145
  they're a stronger signal of generalization than the regex-agreement
146
- metric above. Caveats: Claude's labels are themselves not gold, and the
147
- in-vocab filter excludes the regex-default rows. A hand-reviewed gold set
148
- is the v1.1 task the LLM-proposed labels are the starting point for that
149
- review (`scripts/label_classifier --review`).
150
 
151
  ## Citation
152
 
 
125
 
126
 
127
 
128
+ ## Independent-labeler eval (reviewed gold)
129
 
130
  To check the classifier didn't just memorize the regex, we sampled 230
131
+ diverse rows per classifier and ran a two-pass Claude labeling protocol:
132
+ **5 first-pass labelers in parallel** (each labeling one shard with
133
+ strict taxonomy rules), then **5 second-pass reviewers in parallel**
134
+ (each shown the first-pass proposal + the trained classifier's
135
+ prediction, with `default-to-accept` plus override criteria for
136
+ title-vs-label contradictions). 8/460 rows were overridden by the
137
+ reviewers; 1 was skipped as genuinely ambiguous. The resulting test set
138
+ lives at `eval/seniority_test.jsonl` with full provenance per row.
139
+
140
+ The classifier is scored on the subset of rows whose final label is one
141
+ it was trained to predict (`117/230` rows — the rest are the
142
+ regex-default labels we drop from training, mostly `mid`).
143
+
144
+ | Metric | All in-vocab | LLM high-confidence subset |
145
  |---|---|---|
146
+ | n | 117 | 117 |
147
+ | accuracy | 0.812 | 0.812 |
148
+ | f1_macro | **0.8116** (95% CI [0.7347, 0.8729]) | **0.8116** |
149
 
150
+ These numbers come from a different labeler than the training data, so
151
  they're a stronger signal of generalization than the regex-agreement
152
+ metric above. Caveats: Claude's labels (even after review) are not human
153
+ gold; the in-vocab filter excludes the regex-default rows; the
154
+ classifier is a specialist over the explicit labels, not a 9-way
155
+ general-purpose classifier.
156
 
157
  ## Citation
158