Published
- 3 min read
Szafometr: A Minimal Model for Personal Thermal Comfort
Most people ask
How’s the weather?
to decide what to wear.
That question is mostly not helpful enough.
Visual cues are unreliable. Forecasts are averages. Other people’s opinions are calibrated to their bodies, not mine.
What I actually want to know is more specific:
How did I feel last time in similar conditions?
The problem is that humans are bad at remembering that accurately.
So I built a small system to externalize that memory.
The Core Idea
Szafometr doesn’t try to predict the weather.
It tries to model how one specific person experiences it.
It does this by combining a deterministic baseline model that estimates required insulation from weather conditions with a single adaptive parameter that personalizes its output.
The adaptive parameter is a personal thermal bias, expressed in CLO units.
CLO is a standard unit from thermal comfort research:
- 1.0 CLO ≈ insulation needed to be comfortable at 21°C while resting
- T-shirt + shorts ≈ 0.5 CLO
- Business suit ≈ 1.0 CLO
- Winter layers ≈ 2–3 CLO
Using CLO turns a vague regret
I should’ve worn a jacket
into a numeric error.
Weather variables (temperature, humidity, wind, cloud cover) are feed into a fixed estimation formula. Next, the personal bias shifts the result up or down to match how that individual actually experiences those conditions.
System Overview (Deliberately Small)
Inputs:
- Temperature
- Humidity
- Wind
- Cloud cover
- Hourly forecast (Open-Meteo)
Outputs:
- Recommended insulation level (CLO)
- Simple hourly outlook
Feedback:
- Too cold
- Perfect
- Too hot
No activity tracking.
No outfit generation.
No attempt to generalize across people.
Learning Mechanism
The model starts neutral:
- Thermal bias: 0.0 CLO
- Learning rate: 0.2
Each recommendation ends with feedback, converted into a directional error:
- Too cold → +0.15 CLO
- Too hot → −0.15 CLO
- Perfect → no change
After each update, the learning rate decays slightly.
This does a few things:
- Early feedback matters more
- The system converges instead of oscillating
- Short-term anomalies (wind gusts, brief activity) don’t dominate
This is not gradient descent.
It’s a conservative online adjustment rule.
That’s intentional.
Confidence (Not Probability)
Szafometr reports a confidence score, but it’s not a probability of correctness.
It’s a measure of how much historical evidence supports the current bias:
- Low confidence: few data points, large updates
- Medium confidence: pattern emerging
- High confidence: small, infrequent adjustments
Until confidence is reasonably high, the system behaves cautiously.
It prefers to be slightly wrong rather than confidently wrong.
Limitations (Explicit and Accepted)
This model ignores:
- Activity level
- Age-related physiology
- Clothing material-specific effects
It also assumes that comfort errors are roughly symmetric and that a single scalar bias is sufficient.
These are not oversights, they are scope boundaries.
The goal isn’t realism.
It’s useful compression.
Does It Help?
Yes, within its constraints.
I still sometimes get it wrong.
But when I do, I know why, and the next recommendation shifts slightly.
That’s enough.
Takeaway
This project wasn’t really about clothing.
It was an exercise in modeling something subjective without pretending it could be solved.
A single adaptive parameter, anchored to a real unit, turned uncertainty into something observable and correctable.
App available at: