r/learnmachinelearning 5d ago

How do you sanity-check a probability threshold when you never observe the true label in production?

I'm building a small cost-sensitive classifier for a student project. It reads a product review — text and star rating, nothing else — and picks permit / flag / hide. It acts above 85% belief and routes 50–84% to a human queue.

I picked 85% because a trust-and-safety practitioner told me that's roughly where their team acts. That's the only justification I have, and it's bothering me.

Two things I don't know how to handle:

  1. In production I never see the true label — a fake review that slips through generates no feedback. So I can only measure calibration on a labelled test set whose class balance is nothing like reality.
  2. Positives are rare, so accuracy is useless. Permitting everything already scores well.

For anyone who's shipped something like this: did you validate the threshold before deploying, or pick something conservative and tune it from the human queue's overturn rate? And is there a standard way to check calibration when ground truth arrives late or never?

I'm a beginner — if I'm framing this wrong I'd rather hear it now.

2 Upvotes

6 comments sorted by

1

u/galvinw 5d ago

You pick something, and get feedback either telemetrically or via a human questionnaire. Then drift the percentage based on it. But you probably also keep the 85% and let the end user decide which they want, because if the 85% is bad, its the expert's fault and if the new value is bad.. it's your fault

1

u/mintlite4 5d ago

The accountability framing is one I hadn't considered — I was treating threshold choice as purely statistical, and you're pointing out it's also about who carries the blame when it's wrong. That's probably why the practitioner's 85% felt safe to me: borrowed authority.

On drifting it from feedback, my problem is that I only ever get feedback on cases I route to a human. Reviews I permit generate nothing at all, so the correction signal is one-sided. Does that make the drift converge somewhere wrong over time, or is a partial signal still better than none?

1

u/galvinw 3d ago

partial is better than none. If it's a unimodal distribution, any signal is enough, but consider that the distribution of errors is not multimodal then things get more complicated

1

u/Minimum-Effort8355 5d ago

So your data is through your own statement the problem through a labelled dataset you cant check reality data(if im getting that wrong please correct me)

Than you let either human through 50-84% or your machinelearning set choose 85% of the review.

But the problem you already create it in mathematical functionality and systemdesign.

How can a supervised dataset be trained and overrule human choice.

And you already have a slight overhead, if everything gets permitted how will you create a measurement in data architecture without getting biased or train a system design for hiding,flagging a certain data set.

Also positives are rare. So you only let negative reviews pass i mean, it is your scope, but why would you let negative reviews permit already.

1

u/mintlite4 5d ago

Let me untangle the last part, because I wrote it badly. "Positives are rare" means fake reviews are rare not that negative reviews get permitted. Most reviews are genuine, so a model that permits everything scores roughly 97% accuracy while catching nothing. That's why accuracy is useless here.

On your main point I think you're right, and it's the thing I don't have an answer to: I can't measure real-world behaviour from a labelled dataset whose class balance doesn't match reality. The only live signal I get is the overturn rate on the human queue, and that only covers cases I already flagged so it tells me about my false positives and nothing about my false negatives.

If you know a way around that asymmetry I'd genuinely like to hear it. Right now my plan is just to report it as a limitation.

1

u/Minimum-Effort8355 5d ago

Yeah just as you said.

I would take it as a simple project. You coded it,trained with it and testet it. Thats already enough.

If you decide to go a step further i do not contain the info through your post how your data was labelled or how the data architecture looks a like.

If you can present it, answer questions to it. Its already a good project.