A company’s performance relative to its peers will be ultimately driven by management’s strategic decision making ability to drive growth and position the organisation for changing market conditions.
Whilst investors ultimately care about picking stocks with management teams that can generate returns for shareholders, it is also important to be able to correctly time these investments or trades. An extreme example would be to short a stock that where goes bankrupt, but in the near term skyrockets, forcing you to close at a loss.
In practice, you won’t see too many mismanaged companies like Wirecard or Enron floating about. However, market timing is still important for investors to efficiently deploy scarce capital. In other words, you don’t want to be allocating capital to stocks that may not appreciate much in the nearer term, considering there may be other stocks that could achieve higher returns today.
With this in mind, I focus on particular market timing questions for which I can obtain some data, apply statistical techniques to and come up with some heuristics for investors. Consider the following question:
How long does it take for the replacement of the CEO of a US public company to impact on the company’s performance / share price?
The remainder of this article thus focuses exclusively on how best to time an investment strategy in the aftermath of a management change.
I will assume that as an investor you have some idea of whether the new CEO is capable of driving positive (or negative) change at the company and thus whether you intend to be short or long is already known to you. Thus I will focus exclusively on the timing aspect of the strategy to minimize downside and efficiently deploy capital.
Defining The Approach
Over the years we’ve seen many successful CEO’s transform companies, the Elon Musk’s and Steve Job’s of the world come to mind. However, there are many more unfamiliar examples with more benign but not insignificant returns on investment (both +ve and -ve).
In this article, I analyze a universe of 2000 publicly listed US companies and their share prices in the aftermath of the most recent CEO change. There are obviously more companies that are publicly listed, but the data available constrains us to a smaller but still large subset of equities.
Below is an outline of the steps in my analysis.
- Isolating Management Impact: Isolate the component of company returns attributable exclusively to management / individual company performance factors
- Identify Impact Event Quarter: Identify the turning point (The “Impact Event”) at which historical returns proceeding quarters after the new CEO appointment begin to change trend (eg. to largely positive or largely negative).
- Aggregating To Sector Level: Compute hazard rates which describe the aggregate probability of an arbitrary company being first impacted by these changes “q” quarters after the new appointment
- Bayesian / Survival Modelling: Attempt to model this process to establish a smooth probability distribution describing the probability of these impact events over quarters by (GICS) Equity Sectors.
- Cox Regression: Identify any company-specific factors which may increase or decrease the probability of the Impact Event being observed in a given quarter.
Throughout this process, I will include some level of mathematics, which I will attempt to explain at an intuitive level. There will also be code snippets provided for the important parts at the end of this blog.
Isolating Management Impact
If we were to simply attempt to attribute the management effect by examining the raw stock price data we would be unable to avoid including general market and sector trends which would be inseparable from the cumulative returns (denoted “CR”) due to management impact (denoted with the subscript “m(c)”).
Instead, I subtract the cumulative returns of the corresponding Sector Index “s[c]” from the cumulative returns of the company’s stock “c”. This serves to remove market trends as well as industry-specific cycles. In other words, I have treated the stock returns by removing the effects of a control group (the weighted performance of all other stocks in the sector) leaving only returns attributable to management/company-specific performance.
Identifying Impact Event Quarter
Assessing how much the appointment of a new CEO impacts the share price and over what time interval is a somewhat tricky question to answer and quantify.
Instead, I define the time at which the trend in share price performance first deviates from its pre-appointment trend as the “Impact Event” after which an investor may start to see real gains (or losses) due to the new management regime.
Specifically, I specify the time of the Impact Event in quarters since the CEO change, striking a balance between having too few observations of impact events in any given quarter and having sufficient resolution to provide meaningful guidance to investors.
As an example consider the following two cases, one in which I have cherry-picked as an excellent example of management driving the share price (TSLA-we all know this one!), and one I’ve selected at random — and obviously it is not so clear cut (ABBV — a pharmaceuticals company).
This is clearly not going to be as easy to decide in some cases as in others. We should really do rigorous research to ascertain whether we can attribute this to the management (particularly for the latter types like ABBV). However, I don’t have the time (or patience!) to do this manually for 2000 equities so I needed an automatic and reasonably consistent method for identifying the impact event.
Change-point Detection Algorithm
To our rescue comes the Python package Ruptures which has a suite of ‘Change-point Detection’ methods. In particular, I use the Greedy Linear Algorithm. In my case I want 2 breakpoints to fit 3 linear trends to any cumulative return series:
- The first will be the period of inactivity pre-management impact
- The second where management impact is resulting in a trend change
- A third area that I don’t care about but keep to ensure the is sufficient flexibility in the model to detect the first breakpoint (Think of the ABBV example which is an upside-down V shape, we would need 3 straight lines here to “fit” the curve and sufficiently to find the first breakpoint).
You can really think about this like giving someone a pencil and a ruler and asking them to draw a few lines and a big X at the point where the first join between rules occurs (obviously a little bit more complicated to implement as we will get into later, but you get the idea).
In fact, the package could indeed provide more flexibility, rather than choosing the number of breakpoints I could just penalize for a larger number of them. However, this is an “active area of research” according to one review paper so there’s not really much to go one with how to choose the penalty to fit all shapes and sizes so we won’t be using this feature.
Mathematically speaking how this works is we fit a linear trend in two pieces (let's ignore the 3rd piece for the sake of brevity) to the cumulative management returns of the stock. The location at which the breakpoint between the two linear segments is chosen as that which maximizes the statistical likelihood of the data in each segment being drawn from two linear models. Necessarily we exclude any stocks which have less than a year since the last CEO was appointed as it's unrealistic to see a substantial change in this period. The mathematics can be written as follows:
The maths above enables us to evaluate the likelihood that the data observed was drawn from the model with chosen parameters and breakpoints. In practice, we can’t solve analytically and hence the Ruptures Package implements a Greedy Search Algorithm to find the most likely breakpoint out of many it “tries out”. As an example, we apply it to the two stocks we looked at earlier.
This works for me in the sense that it finds the location of the impact event and measures the performance change reasonably. I will point out that the linear models I’m fitting are clearly not appropriate and would probably fail all the tests of a linear regression model. However I don’t intend to use this model for inference and I don’t care about coefficient significance, I just want to fit segmented trends to the data so this will work just fine.
Aggregating To Sector Level
At this point, I’ve applied the breakpoint detection algorithm to 1339 stocks from the initial 2000 (reduced in size due to various data availability constraints). To obtain a table that looks like the below.
Data is organized by equity symbol (and exchange of listing) and segmented by industry and GICS sector classification. We have the start and end change-points measured in days, the change in performance in the period between those change-points, and the effect-start binned to quarters in the final column.
Crude Poisson Models
Using actuarial procedures for computing the risk of an event of interest (eg. death) occurring after a specific duration of observation (eg. years), I repurpose this model to study the probability of a management impact/trend change event occurring in a given quarter, using the data in the previous table.
The “crude” method is to count the number of Impact Events in each quarter (Denoted Theta_q) and divide by the total number of companies for which an event hasn’t occurred at the beginning of the quarter (“The Exposed To Risk”, denoted E_q). This ratio is known as the crude hazard rate (Mu_q) estimated exclusively from the data and is equivalent to the instantaneous probability of the Impact Event occurring in quarter q. In practice, the denominator we use is actually the “Central Exposed to Risk” (E^c) which is the average number of companies between quarters q and q+1, as then we have correspondence between the numerator and denominator time intervals and can thus use a Poisson model to model the count of Impact Events in each quarter.
For those uncomfortable with what a Poisson distribution is, it essentially provides a map between the number of observed Impact Events and the probability that this number of events would be observed if we were able to repeat the study many times.
The single parameter of the Poisson is the average number of events we would expect to see (rate of event occurrence * number exposed to risk). Under a crude model, we would replace the true expected value with the crude values observed from the data in the table (denoted with hats above the greek letters), however, these estimates will naturally be quite noisy because a single observation of the rates in the real world will not necessarily reflect what we would see after many repeated studies and we will revisit this issue in a minute.
Kaplan-Meier Estimator Based on Crude Rates (And Associated Issues)
Let's now see an example of how these crude rates can be used to construct a survival function or in other words, compute the probability that for any given company the Impact Event has not occurred after q quarters.
We first note that the hazard rate is equivalent to the instantaneous probability of the Impact Event occurring in the q’th quarter and thus 1 minus this hazard is the probability of the event not occurring. Chaining these together we obtain the Kaplan Meier Estimator of the survival function evaluated at quarter q (I.e no impact after q quarters).
This is all great and below I give an example of some fictitious hazard rates and the associated survival function constructed. We see that as all hazard rates are positive the survival function is necessarily decreasing over time (i.e it is increasingly likely that the Impact Event has occurred at later and later quarters). However, in dashed lines, I suppose that we don’t have observations for some quarters, due to a finite number of observed companies in each sector. As a result, we see that the survival function becomes heavily biased to the upside, and non longer represents the true survival function well.
Whilst this example has been randomly generated using Numpy missing data is quite common as I have pointed out. This problem becomes apparent when I stratify the real data into GICS sectors, as I start to see a significant loss of observed quarters in the below chart and hence the crude rates would not be reliable inputs for the true survival function when we split the data in this way.
Bayesian / Survival Modelling
Recalling my objective was to estimate “How long its take for the replacement of the CEO of a US public company to impact on the company’s performance / share price”. To do this accurately we can’t treat all companies as homogeneous boxes that generate cash, as different industries have different characteristics, i.e we wouldn’t compare say a power utility with a software company. Thus it is necessary to compute the survival functions on at least a per sector basis. However, the challenge with doing this is I can’t trust our crude rates if there are missing quarter observations which could bias the results.
Instead of using the crude rates, actuaries would typically graduate the data by fitting a polynomial or other function to the crude rates, but we don’t have enough data for that to not overfit. Similarly, we don’t have any “standard tables” that we could look up and compare with the rates from the data.
In this case, it actually makes sense to try to fill in or “impute” some of the missing entries by using what we know about the hazard rate at the overall market level. The rates at the market level are much smoother transitioning as well as being almost completely available at all quarters and thus we would like to transfer some of this information to the sector level to help remove some of the bias due to missing information.
My proposed solution to this issue is to fit the market rates as normal but to then use the market rates as a prior belief about what the sector rates should be. If we have data at the sector level (which will be noisier due to the smaller sample size of available companies) we will combine our prior belief about the rates with the data available to obtain smoother and hopefully less biased estimates of the hazard rates and thus survival function.
What I have just described is a bayesian approach that employs informative hierarchical priors, where market-level information will inform the estimation of sector-level hazards. Thus we can create a model as follows:
The grey nodes in the diagram represent Poisson Likelihoods for each of the Sectors count of Impact Events observed at quarter q. Thus the likelihood of the data being drawn from the model above is the multiplication of the probabilities that the data in each sector and overall market are drawn from the Poisson distributions with parameters specified.
The white nodes represent the model’s latent or unobserved parameters. The hazard rate for each Poisson likelihood is specified as a gamma distribution (So as to permit only positive values for the hazard) and the mean and standard deviation of the gamma distribution are described by Beta Distributions which permit values for the mean and std to be between zero and one thus discouraging hazard rates greater than one (which is undesirable and lacks any sensible interpretation). Precisely the beta priors are all set with alpha =2 and beta=5 parameters.
Additionally, you will notice here that the mean_m (Mean of Market Hazard Rate) variable not only feeds to the likelihood for the overall market but also feeds the likelihood for each sector. Thus this enables the market hazard rates to influence the noisier or missing rates at the sector level.
What you see in the diagram, is in fact one of 65 models that are estimated independently for each quarter, this turns out to provide decent results and avoids the need to compile a single model with hundreds of parameters. Furthermore, we employ the Variational Inference (VI) to estimate parameter distributions rather than Markov Chain Monte Carlo (MCMC) methods, as the size of the model is relatively large and has some degree of correlation between parameters resulting in incredibly slow convergence with MCMC methods (Perhaps further reparameterization could be done here to speed things up).
Results of Bayesian Model
Below I provide some results of the Bayesian model applied to the dataset, the hazard rates and their upper and lower confidence intervals in each quarter are calculated and then used to produce an average, upper and lower bound on the Kaplan Meier Estimator of the survival function for the overall market and each sector (Indicated by the black line and grey shaded areas). We note that this methodology provides results that agree reasonably well with the crude rates (highlighted in red) and also the industry sub-sectors (in light blue) which all lie within the confidence intervals.
Whilst the model is relatively confident in its fit for the overall market level data, it is less confident for sector-level data, the level of confidence is typically much wider when there is a lot of missing data (eg. telecommunications) and narrower for the most complete (eg. industrials). I also note that the Bayesian estimates of the mean survival function are much smoother thanks to the market level data filtering down into the sector level priors and thus also help to dramatically alleviate the upward bias in sector-level crude rates due to missing data.
The success of this method is obviously being able to infer an entire probability distribution, with the above charts for each industry indicating the probability that after q consecutive quarters post CEO change that no impact on the stock cumulative returns trend has yet occurred.
However, it may be equally useful for investors to have a simpler diagram that more clearly illustrates sectoral differences. Below I have plotted confidence intervals for the time at which it is equally probable that changes have impacted the stock price as that they have not had any impact yet (Draw a horizontal line at 0.5 on the y axis of the above charts). This is equivalent to the Median Survival Time before management changes impact the stock price trend.
Statistically speaking we would argue that there is not enough information here to say any of the sectors have a significantly different Median survival time, as the confidence intervals can be quite wide due to data limitations. However, we can say that it will take on average somewhere between 1 and 4 years average to see the impacts of the change in CEO. Whilst this is not a particularly helpful conclusion, we have at least established a sensible lower bound of how long you should wait before committing capital. Additionally, it is clearly preferable to develop your market timing strategy using the full probability distribution of the previous figure rather than on a point estimate such as this one as this will naturally provide richer insights than the cross-section displayed above.
But stick around to the end of the article! We can still do more with this model to make it more useful — remember that performance impact metric I captured during the break-point detection which estimated the gain/loss in returns after management effects start to take place?
Cox Regression (Proportional Hazards Model)
In the previous section, I created a baseline model for the survival function for each industry, however, naturally the theoretical survival function per individual company could vary by other factors, eg. financial health of the company at the time of CEO replacement, company culture, etc. In this section, we will specifically consider factors that will proportionally scale the hazard rates across all quarters based on company specific characteristics.
This is in fact exactly the same process that actuaries use to rescale hazard rates from a life table to incorporate an individual’s health factors. Examples of covariates would include whether an individual smokes, the presence of underlying health conditions, BMI, etc. The model used to incorporate these effects is known as a proportional hazards or cox regression model, with each covariate re-scaling the baseline hazard as follows.
I simply express this in the above formula, where each of p covariates specific to the individual company is labeled x_1,…,x_p, and the associated weights are beta_1,…, beta_p. Correspondingly a beta greater than zero increases the hazard whilst a beta less than zero shrinks it (as exp(0) = 1 and exp(x) > 0 for all x). Additionally, the mu_0 parameter is independent of the covariates representing the baseline hazard rate.
I won’t get into the details of the optimization problem here, as a typical implementation will use an iterative solver (you could probably do this in excel if you wanted to). In my case, I’ll use the Lifelines python package to do the work for me. As an added bonus it comes with a check_assumptions() function which will indicate if any covariates void the proportional hazards model assumptions. In my case, I had to remove one or two outliers from the dataset, and then it worked just fine.
Choice of Covariates
In order to build on the bayesian model of the previous section, we use the average hazards for each sector as the baseline hazard. In terms of covariates, I explore several metrics based on income statements and balance sheets at the time of the CEO appointment, however, these all turned up as statistically insignificant. However, the performance impact (PI) metric which we obtained during the change-point analysis did in fact turn out to be significant when stratifying the cox model by sector. The PI Metric has the interpretation of being a larger positive number when cumulative returns after the change point are positive and a negative number when cumulative returns attributable to management are negative.
Results of Cox Model
Taking the beta value for this covariate and using the cox model we can plot the impact of varying the PI metric through values from -400% to 400% and visualize as a heat map how the survival function will vary in each sector.
What we immediately see from this plot is that a large negative impact on performance due to the replacement of the CEO will materialize much faster than a large positive impact. This makes a lot of intuitive sense, as it is likely much easier to do almost anything wrong and takes more time to do things right and achieve the desired result!
I could analyze these results further but I think that's probably enough for now! Hopefully, this has given you an insight into how you might apply bayesian and actuarial models to analyzing event scenarios in finance.
In summary In this article we have isolated effect of management impact on company share prices and identified pivotal change points in the stocks trend. We then used these to create a bayesian model which smooths and imputes crude rates to create a survival function, indicating the probability of management impacts influencing the stock’s trend after a number of quarters since the CEO replacement. I then employed a Cox Model to identify that negative impacts are likely to materialise sooner after the CEO change and that investors should be more patient for positive changes to materialise.
Below i’ve attached some a Github gist for how to do the bayesian modelling from this article.
Some Additional Comments On Robustness
After writing this article I got thinking about potential sources of bias. One that stands out is the breakpoint detection procedure, which mandates a breakpoint must be found irrespective of the length of the time-series. Whilst I exclude equities for which less than a year has elapsed since the CEO change it is possible that the impacts are not truly seen for several years, and thus if we were able to observe a longer time series for the same equity, the change-point could also move! Clearly this would bias the survival function estimates, however it is possible to adjust for this somewhat by the performance impact metric which under the cox model will proportionally scale the survival function so that larger positive impacts which may be rarer in the observed data take on average longer to occur. This might ‘fix’ some of the bias but perhaps there is some way to normalise observations by the performance impact and duration over which the time-series is observed to account for these issues. Just some thoughts in case anyone wishes to experiment with this concept in a similar setting.
You’ve been reading Quantamental the UCD Investors & Entrepreneurs Society Data Science and Financial Research Blog
Interested in learning more about data science?
Join our Data Science Hack on January 22nd — 23rd 2021:
Apply now: https://www.ucdie.com/datalink