Framing a business problem as an ML problem
What it is
A usable framing states four things: the decision the prediction will inform, the unit that is predicted about, the target variable, and the moment of prediction. If any one is missing, the problem is not yet specified.
Why it matters
Most failed ML projects are well-executed answers to unstated questions. 'Reduce churn' does not say whether you need a churn probability per user per month, a ranked list of at-risk accounts for ten sales calls, or an estimate of a discount's effect — and those are three different models with three different datasets.
In the real world: “Reduce churn” becomes: predict which subscribers are likely to cancel in the next 30 days, so the retention team can call them first.
Visual example
Problem framingFour slots. A framing with a blank in any of them cannot be evaluated, because nobody knows what right looks like.
Why this matters
The specified column can be turned into SQL and a label; the vague column cannot. Writing it out is the cheapest step in the whole project and the one most often skipped.
Common misconception
Wrong idea: framing is paperwork you can backfill once the model works.
Correct idea: the framing is the dataset. Change the moment of prediction and every feature has to be recomputed, so a late change usually means starting over.
# A framing, written down before any code, as a dictionary you can review.
framing = {
"decision": "which 500 accounts the retention team calls this week",
"unit": "one account, once per week",
"target": "cancels within the next 30 days (0/1)",
"prediction_time": "Monday 06:00, using data available up to Sunday 23:59",
"metric": "precision@500, plus retained revenue as the business check",
}Letting the available data define the target. 'We have a cancellation flag, so let us predict cancellation' skips the question of whether anyone can act on that prediction — and an unactionable prediction has no value however accurate it is.