When we talk about wrist temperature as a cycle phase signal, the conversation usually focuses on the progesterone-driven luteal rise. That rise is real and is the most easily visible hormonal signature in skin temperature data. But there is a second, more complicated story in the temperature signal involving cortisol, and understanding that interaction is essential for building models that are accurate across varying stress states, not just in controlled conditions.
How estrogen shapes the temperature baseline
Estrogen's effect on skin temperature operates primarily through vascular tone. Estrogen increases nitric oxide bioavailability, which promotes vasodilation at peripheral sites including the wrist. Vasodilation increases skin blood flow, which increases the thermal flux measured by a wrist sensor. The effect is not a sharp step change; it is a gradual modulation as estrogen rises through the follicular phase toward its pre-ovulatory peak.
What this means in practice is that the follicular phase is not a thermal flat-line. There is a slow, modest upward drift in wrist skin temperature as estrogen climbs. This is small relative to the luteal shift, typically under 0.2 degrees Celsius in most individuals, but it is detectable in clean overnight data with good baseline modeling. More importantly, it provides a useful signal about where in the follicular phase someone is, not just that they are in it.
After ovulation, progesterone's thermogenic effect produces the well-documented luteal rise of roughly 0.3 to 0.6 degrees Celsius above the follicular baseline in most regularly cycling individuals. This is the signal that basal body temperature charting has used for decades. The wrist version is noisier than core-body BBT but has the advantage of continuous sampling rather than a single daily morning reading.
Where cortisol enters the picture
Cortisol is a vasoconstrictor. It acts in opposition to estrogen's vasodilatory effect at peripheral vascular beds. When cortisol rises acutely, wrist blood flow decreases, and skin temperature drops. This is the biological mechanism behind the common observation that chronic or acute stress can disrupt cycle timing and obscure cycle-phase signals in wearable data.
The cortisol-temperature interaction has two distinct temporal patterns that create different kinds of inference problems.
The first is the cortisol awakening response (CAR), the sharp cortisol spike that occurs 20-40 minutes after waking. This produces a brief morning skin temperature depression that we have to account for in how we construct the daily temperature feature. If someone wakes at varying times across the week, their overnight temperature minimum shifts with it in a way that is not cycle-related. Proper temperature feature construction uses late-sleep windows (typically 2-5 AM) rather than early-morning samples to avoid this artifact.
The second pattern is chronic cortisol elevation, which is more insidious. Sustained high cortisol from extended work stress, disrupted sleep patterns, or any major acute life stressor can hold peripheral vascular tone in a constricted state for weeks. In temperature data, this manifests as a depressed follicular baseline and an attenuated luteal rise. A model that does not account for this can misclassify a stressed person's luteal phase as follicular, because their luteal temperature is lower than a typical unstressed luteal temperature would be.
The interaction problem for model calibration
The challenge is that we cannot directly observe cortisol from a wrist biosensor. There is no currently available consumer wearable that measures cortisol non-invasively. What we can observe are the downstream effects: peripheral vasoconstriction, HRV suppression, and heart rate elevation. These are imperfect proxies for cortisol load, but they are not nothing.
Our model handles the estrogen-cortisol interaction through a combination of per-user baseline adaptation and indirect stress-state flagging.
The baseline adaptation component works as follows: the model's follicular reference temperature is not fixed at a single value from the first cycle. It is continuously updated as more data arrives, using a weighted moving average that gives more weight to recent data. This means that if someone's life circumstances change significantly and their cortisol baseline shifts, the model's follicular reference adapts over the following 2-3 cycles. The adaptation is not instantaneous, which means there is a period of degraded inference accuracy when a major stressor begins or ends. We flag this in the confidence interval output rather than hiding it.
The indirect stress-state flagging uses overnight HRV suppression as a cortisol-elevation proxy. When overnight RMSSD is below the user's own 30-day HRV floor, we apply a temperature calibration adjustment that partially corrects for the expected vasoconstrictive effect. This is an approximation. We are not claiming to accurately quantify cortisol load from HRV; we are making a model adjustment based on a correlated observable to reduce the likelihood of a systematic phase misclassification during high-stress periods.
What this means for inference accuracy in real-world conditions
In our internal pilot dataset, the estrogen-cortisol interaction was the most common source of systematic phase misclassification in participants who were not in stable, low-stress life circumstances. The standard model (without cortisol-proxy adjustment) frequently misclassified late follicular as periovulatory in high-cortisol periods because the cortisol-driven vasoconstriction was suppressing the expected pre-ovulatory temperature approach, making participants appear to be earlier in the cycle than they were.
With the cortisol-proxy adjustment applied, this misclassification rate dropped substantially in our preliminary evaluation of a small held-out subset of the pilot data. We want to be careful about how we characterize these results: the sample is small, the evaluation is preliminary, and we have not validated this across demographic groups with systematically different stress profiles. These are promising early signals, not validated clinical results.
The broader point is that anyone building a cycle phase model from wrist temperature data who is only thinking about progesterone and estrogen is building a model for a population that lives in a permanently relaxed, stress-free state. That population exists, but it is not most users. Accounting for cortisol's modulation of the temperature signal is not a refinement; it is a requirement for building something that works in the real world.
What we are still working on
The cortisol-proxy adjustment we have implemented is a first-order correction based on a single proxy signal. There are better approaches we are exploring.
One is a multi-marker stress-state model that combines overnight HRV, resting heart rate elevation above personal baseline, and sleep architecture features (where available from the device) into a composite cortisol-load estimate. Using multiple correlated observables together should give a more reliable signal than HRV alone.
A second is explicit modeling of the estrogen-cortisol interaction in the LSTM input representation, rather than applying it as a pre-processing adjustment. If we represent the estimated stress state as an explicit feature channel alongside temperature and HRV, the LSTM can learn more nuanced interactions between the signals rather than having us hard-code the adjustment logic.
This is an area where the gap between what we can observe from a wrist sensor and what is actually happening hormonally is most apparent. We are not saying the problem is unsolvable; we are saying that any wrist-temperature-based cycle inference product that does not address this interaction is presenting overconfident outputs in the subset of cases where it matters most.