I am investigating ways to calculate the mean reversion half life of a mean reverting series. I am encountering things like the Ornstein – Uhlenbeck Process and various types of regression to estimate this value (the half-life).

What I want to understand is this: If I have a series, why can't I just deduce the half-life in a straightforward/dumb way of just calculating how many mean-reversions happened during the series and divide that by 4 to get the half-life? Isn't that the empirically correct way of calculating the mean half-life for mean reversions for the series? What do I gain by using all this fancier math?

For example, if I have a series 1000 periods long, and 5 reversions happen.. doesn't that mean that on average, one full cycle takes 200 periods on average, meaning that the half-life (time for the value to get pulled halfway back to the mean) is, on average, 50 periods? I guess I'm assuming a symmetric structure (moving away from mean same speed as moving towards mean), but what is fundamentally wrong with this approach?

  • 3
    $\begingroup$ Does this answer your question? Estimating mean reversion $\endgroup$
    – Kurt G.
    Commented Mar 29, 2022 at 19:17
  • 1
    $\begingroup$ @KurtG., are you sure the answer in your linked thread addresses the actual question of this thread? For me these questions look pretty distinct. $\endgroup$ Commented Mar 29, 2022 at 19:35
  • $\begingroup$ how do you define a reversion? $\endgroup$ Commented Mar 29, 2022 at 19:54
  • $\begingroup$ @rubikscube09 I suppose I'm being a bit loose, but I'm thinking a reversion is the movement from a peak distance away from mean to the mean itself (so it's a retro-active definition). $\endgroup$ Commented Mar 29, 2022 at 21:43
  • $\begingroup$ @RichardHardy This was my feeling as well. $\endgroup$ Commented Mar 29, 2022 at 21:44

4 Answers 4


I think your notion of half life is interesting but, technically, it's not the definition of what half life is. The AR(1) is the best way to see it but keep in mind that the principle is the same regardless of what model is being considered.

Suppose one has:

$y_t = \phi y_{t-1} + \epsilon_t $

Also, assume that $y_{0} = 0$ and there is a shock, $\epsilon_{0}$ at $t = 0$ and no other shocks in the future.

Then, the notion of half life captures the answer to the question: "When does a shock's response become half of what it was initially".

So, when does $\epsilon_{0}$ become half of what it was initially ? That will be the case when $\phi^{hl} = \frac{1}{2}$ where $hl$ is the half-life.

Why is that ? This is because the AR(1) can be re-written as

$y_{t} = \sum_{i=0}^\infty \phi^{i} \epsilon_{t-i}$.

So, $\phi^{i} \epsilon_{t-i} $ will be equal to one half of its original value when $\phi^i = \frac{1}{2}$.

Note that one can solve for the value of $i$ by taking logs.

We have, $i \times \log(\phi) = \log(\frac{1}{2}) \rightarrow \exp(i \times \log(\phi)) = \frac{1}{2} \rightarrow \exp(i) = \frac{1}{2 \times \log(\phi)} \rightarrow i = \exp\left(\frac{\frac{1}{2}}{\log(\phi)}\right)$.

So, that's where the formula for the half life comes from assuming you've seen it popping out from nowhere in the time-series literature.



In this case, if there was one shock to the system initially, and nothing else after that, then, if one calculated the halflife using the formula shown, then that value would represent the time it would take for the series to get halfway back to zero (because zero is the mean of the series. if the mean of the series was something else, then it would be getting back to that mean) after the shock occurred.

  • $\begingroup$ Thank you for your answer. I think I understand your idea. So then, how would one go about calculating phi? I suppose in the AR(1) case, I could simply do a regression of the values against their lagged values. However, this assumes that an AR(1) is a reasonable model of my data? How safe of an assumption is this? I suppose I could just try it out and see. $\endgroup$ Commented Mar 30, 2022 at 19:43
  • $\begingroup$ Unfortunately, this method didn't work for me. I think it might be because AR(1) is very unlikely to be a reasonable model for the data, but I'm not sure. I appreciate the derivation, though. $\endgroup$ Commented Mar 30, 2022 at 20:00
  • $\begingroup$ Hi Vladimir: You need to estimate the parameters of whatever model you are using so that you can obtain the hl estimate. In the AR(1) case, once you have the $\phi$ estimate, then you would calc the hl estimate. But I didn't mean to imply that the AR(1) was reasonable for your data. I was showing that the hl is model dependent. You need to derive the hl for your model. But you can usually do it in a similar manner. For the discrete version of ornstein uhlenbeck model, there is most likely a closed form solution out there. What I did was just an example to show how the half life is defined. $\endgroup$
    – mark leeds
    Commented Mar 31, 2022 at 14:06
  • $\begingroup$ Vladimir: In thinking about this some more, you may not have an underlying model but rather only estimated the cointegrating model to test for stationarity. But, in this case, when stationarity is not rejected, there is an impliied model called the error correction form of the model. So, you can use this model to estimate your halflife. The problem with this approach is that it's based on estimates of parameters which will change over time. That's why using estimation techniques to test for cointegration of pairs is not an easy task. $\endgroup$
    – mark leeds
    Commented Mar 31, 2022 at 19:30
  • $\begingroup$ This is why I originally recommended checking for the hedge ratio of -1 rather than estimating it. If you use -1 and find that the residuals are stationary, then you can use the error correction form of the -1 model to estimate the halflife. Then, next month or next week or whenever, check for cointegration using -1 again, rinse, wash and repeat. See Banerjee and Dolado text ( blue ) for the details behind the error correction version of the cointegrating model. I hope this helps some. $\endgroup$
    – mark leeds
    Commented Mar 31, 2022 at 19:33

I actually had the same question you did, ignored my own computational instincts at first, and went about implementing the Ornstein–Uhlenbeck process as academic literature has said is the optimal solution, and I have to say the results are garbage.

I'm getting half-lives of like 40 years. Trust your own initial instinct, I ended up just writing my own function that counts the number of reversions (including a sensitivity threshold) over the length of the time series, and then returns the average time to reversion, the maximum, and how long its been since it's last reversion. It works WAY better than Ornstein–Uhlenbeck.

Occam's Razor very much applies here, the simplest solution is the correct solution. And if it's too complicated to understand instinctively, then it's been engineered that way for a reason.

  • 1
    $\begingroup$ That's great to hear, thank you for sharing your experience! I totally agree with your sentiment/thinking. $\endgroup$ Commented Nov 19, 2023 at 6:16

It is (probably) worth the investment of your time to "make friends" with the Ornstein-Uhlenbeck (OU) process. I suggest getting comfortable converting the parameters between the OU process and it's discrete-time counterpart, the AR(1) process. Then you can simulate and fit with the AR(1). It should also be easy to compute the formula for half-life and see why it contains only the $\theta$ parameter.

I think that there reason that the OU-process comes up so often when we talk about mean-reversion is that it is the simplest process that has a constant half-life. So we can talk about the half-life of the process. That is to say, the half-life of the process $$ dX_t = -\theta \left(X_t - \mu\right) dt + \sigma dW_t $$ with $\theta > 0$ and $\sigma > 0$ is $$ h = \frac{\log \left( 2 \right)}{\theta} $$

What's interesting here is that $h$ depends only on the (constant) parameters of the model: $\theta$, $\mu$ and $\sigma$. In fact, it depends only on $\theta$. But what is important, is that it does not depend on $X_t$ or $t$. That is to say, it doesn't matter how near or far you currently are from the mean nor how much time has passed so far, the amount of time it will take to get half-way back to the mean is constant.

Contrast this with, for example, the Cox-Ingersoll-Ross model of interest rates which clearly exhibits mean reversion but does not have a constant half life. As far as I can tell, nobody has even bothered to compute the half-life of the CIR process, presumably because it would be some complicated expression involving the current state.

You are trying to avoid all this formality but your crossing-times estimation approach is still assuming something about the model. Suppose that your data really was from an OU process. Crossing-times would be a poor choice because your data is likely to include a period where the process is close to the mean and therefore crosses it back and forth many times in quick succession. If you are trying to infer something simply from the number of observed crossings of the mean then your inference will be very sensitive to how accurately you estimate the mean and to the frequency of the available data. It would only really make sense if your process had a lot of momentum around the mean and therefore cleanly crossed it once per cycle.

Judging by this and your other question, it sounds like you have mental model of your process that including some kind of periodic function (e.g., cosine). You would need different math to try to fit a model like that but those models rarely work in finance. You might look at, say, interest rates and think "clearly there are some cycles here and cosine a periodic/cyclic function" but the length of the cycles varies and any periodic function is likely to have a fixed period.

Two other approaches that you might consider in place of periodic functions are the Schwartz-Smith and fractional-OU processes.

The Schwartz-Smith model has two state variables: a long-term mean that evolves according to a (non-mean reverting, low volatility) Brownian motion and a short-term deviation from that mean that evolves according to a (mean reverting, high volatility) OU process.

Fractional Brownian motion exhibits some long-memory properties and can have paths that look more reasonable for some financial time-series, such as interest rates.

Note that both Schwartz-Smith and fractional-OU processes are extensions or generalizations of the OU process, which reinforces my comment about making friends with the OU process.

One final note: I wrote the SDE of the OU-process with a $-\theta$ at the front to make it clearer that if $\mu = 0$ then it becomes $dX_t = -\theta X_t + \sigma dW_t$. Wikipedia does it the other way around but they are the same parameterization.


I think your approach is only correct does only work as a visual example for a variable whose initial state $x_0$ is higher than the mean reverting parameter. Note that a half-life is usually defined starting from $x_0$.

Imagine then that you start right at the mean value (let's label it $\mu$), then your half-life would take some value $T_{x_0}$. Note that reaching the value $x_t = x_0 / 2 = \mu / 2$ goes against the mean-reverting term of the PDE that defines the problem (as your state variable would be moving away from its mean-reverting value).

Now imagine that you start at $x_0 = \mu / 2$. Then your half-life would be much higher, as reaching $x_t = \mu / 4$ implies doubling the mean reverting term in the PDE as compared to the $x_0 = \mu$ case.

The time parameter depends on the starting point. If $x_0 > \mu$, then the mean-reverting term would push the state variable to reach half its value (making the half-life short). If $x_0<\mu$, then the mean reverting term in the PDE would push $x_t$ away from reaching $x_t = x_0/2$.

As you can see, the half life would potentially go to infinity as the initial value gets smaller (compared to $\mu$).

  • $\begingroup$ Could you elaborate a bit? I'm confused by your answer. Why is my half-life related to how close I am to the mean? Isn't half-life a time parameter, irrespective of the distance from the mean? $\endgroup$ Commented Mar 29, 2022 at 21:43
  • $\begingroup$ Hi Vladimir, I edited my answer to make it a bit clearer. Hope it helps more now. $\endgroup$
    – KT8
    Commented Mar 30, 2022 at 5:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.