## Multiple Factor Model Summary

In this post I want to summarize all the material I covered in the Multiple Factor Models series. The Multiple Factor Model can be used to decompose returns and calculate risk. Following are some examples of the Multiple Factor Models:

- The expected returns factor model: Commonality In The Determinants Of Expected Stock Returns by R. Haugen, N. Baker (1996)
- The expected returns factor model: CSFB Quantitative Research, Alpha Factor Framework on page 11, page 49 by P. N. Patel, S. Yao, R. Carlson, A. Banerji, J. Handelman
- The risk factor model: MSCI Barra United States Equity Multi-Factor Model, page 101

The factors in the model are usually created using pricing, fundamental, analyst estimates, and proprietary data. I will only show examples of factors using pricing and fundamental data because these infromation is readily available from Yahoo Fiance and ADVFN.

Following is a summary of all posts that I wrote about Multiple Factor Models:

- Multiple Factor Model – Fundamental Data – in this post I demonstrate how to get company’s Fundamental Data into R, create a simple factor, and run correlation analysis.
- Multiple Factor Model – Building Fundamental Factors – in this post I demonstrate how to build Fundamental factors described in the CSFB Alpha Factor Framework and compute quantiles spreads. For details of the CSFB Alpha Factor Framework please read CSFB Quantitative Research, Alpha Factor Framework on page 11, page 49 by P. N. Patel, S. Yao, R. Carlson, A. Banerji, J. Handelman.
- Multiple Factor Model – Building CSFB Factors – in this post I demonstrate how to build majority of factors described in the CSFB Alpha Factor Framework, run cross sectional regression to estimate factor loading, create and test Alpha model.
- Multiple Factor Model – Building Risk Model – in this post I demonstrate how to build a multiple factor risk model, compute factor covariance using shrinkage estimator, forecast stocks specific variances using GARCH(1,1).
- Portfolio Optimization – Why do we need a Risk Model – in this post I explain why do we need a risk model and demonstrate how it is used during portfolio construction process.
- Multiple Factor Model – Building 130/30 Index – in this post I demonstrate how to build 130/30 Index based on the CSFB Factors and the Risk Model we created previously. The 130/30: The New Long-Only (2008) by A. Lo, P. Patel paper presents a very detailed step by step guide to building 130/30 Index using average CSFB Factors as the alpha model and MSCI Barra Multi-Factor Risk model.
- Multiple Factor Model – Building 130/30 Index (Update) – in this post I demonstrate how to build Market-Neutral and Minimum Variance strategies and compare their performance to the 130/30 Index.

There is an excellent discussion of portfolio construction problems and possible solutions in the The top 7 portfolio optimization problems post by Pat Burns. I want to highlight two problems that are relevant to the Multiple Factor Models.

- Problem 3: The expected returns provided by Alpha model sometimes need to scaled or converted to be used in optimization. The Converting Scores into Alphas – A Barra Aegis Case Study (2010) by I. Gleiser, D McKenna paper provides a step by step guide.
- Problem 7: Factor alignment problem is present when different factors are used in the Alpha model and Risk model. An Empirical Case Study of Factor Alignment Problems using the United States Expected Returns (USER) Model – Axioma Research Paper (2011) by A. Saxena, R. Stubbs paper investigates this problem and proposes an alternative portfolio construction methodology.

Many thanks for this series. I’ve spent quite a while trying to understand how it works and am stuck at the end of part three, when you suggest to run a multiple regression: do you limit the regression to the most interesting factors (e.g. based on quintile spread), or do you use all possible (about 30ish in your example) factors? Also, do you run a separate multiple regression for each time period (to then somehow average each estimated factor return over these periods), or do you feed the regression with all (normalized) data at once? If the latter, isn’t it a problem dealing with factor exposures varying over time?

I guess once I’ve managed to understand that step my next question might be about “computing factor covariances using a shrinkage estimator” and “forecasting stock variances using GARCH(1,1)”, as you mentioned them only very briefly and in a way that suggests that most of the readers of this blog won’t need any explanation.

When I’d construct such a model in my naive mind, I’d initially figure out which factors have been most promising over the past n periods, then weight these factors by their relevance, reduce weight of the factors that have a high correlation with each other, and then generate a score for each stock by adding the products of each the (normalized and winsorized) factor exposure and the above factor weight. Then I’d have a ranked list of stocks I could build my portfolio with. But I guess this would be too simple. Which is why I’d love if you could suggest what concept I should look into next.

I guess you already explained much of it inside the code, but unfortunately my knowledge in R is very limited – and I’m ashamed to mention that I’m not good at reading math formulae either. I’m neither a quant pro nor a scientist, I’m just a curious reader. So in case you can point me towards external explanations (catered for beginners like myself) which are based on words and not code or formulae, I’d highly appreciate it. I’ve tried reading Fama/French ‘Cross-Section of Expected Stock Returns’ and William Sharpe’s ‘Factor-based Expected Returns, Risks and Correlations’ this weekend, but once I got to the point where e.g. vectors and matrixes are multiplied, I stopped seeing clearly. Sigh.

Alec,

I combine factors into groups (i.e. traditional value, price momentum, small size), so I only have 7 factor groups in the regression. Each factor group is the

averageof all factors in this group.I run cross sectional regression for each time period and use 6 month average of regression coefficients to compute factor returns.

Regarding “computing factor covariances using a shrinkage estimator” and “forecasting stock variances using GARCH(1,1)”, I have wrote about these subjects previously. Please have a look at the following posts for more details:

* Shrinkage estimator – Resampling and Shrinkage : Solutions to Instability of mean-variance efficient portfolios

* GARCH – Trading using Garch Volatility Forecast

Thank you for reading my blog and asking questions.

Thanks for the reply. Allow me to recapitulate and please let me know if I’m wrong – it feels like I’ve made a major step in understanding your work today.

1) I guess you normalize (and winsorize?) the factors before averaging them per group? The groups are probably based on the publications by Credit Suisse, Barra, Northfield and Haugen/Baker?

2) As for the regression: do you use constraints for the weight of each of the seven factor groups? I assume each of these groups needs to have more than 5% but probably less than 25% weight? Or could it happen that the model shifts towards one or two groups only?

3) The averaging of the coefficients of all (monthly?) periods in the six month lookback period is probably the resampling you mentioned, enhanced by some Ledoit-Wolf shrinkage magic? In the chapter “building risk model” the code indicates that you either use 24 or 36 monthly periods (but not six) as input for the shrinkage process – what am I missing here?

4) as for GARCH(1,1), how does one calculate the alpha (for sigma) and beta (for the return) coefficent? Your article doesn’t mention that, and the code does not mention a nor b (other than in a comment). I guess then magic happens inside the bt.forecast.garch.volatility method, but how are a and b generated to forecast the stock specific volatility?

5) I’m still struggling with the portfolio construction: for each available stock you now have a return forecast (based on the factor loadings), a volatility forecast (based on GARCH), the historical beta, and a historical stock correlation to the index – am I missing any additional input value for a solver? Based on a desired risk level of the portfolio there probably is a standard way to calculate the stock weightings via an efficient frontier process? As your code only mentions a solve.QP.bounds method without diving into its innards, can you point me to a publication or (commented) code library that I can look at to understand this part of the process?

Overall, I really appreciate all the work you’ve put into this model. Would you think that the model is something individual investors could work with, or is the series just a theoretical practice, as common trading/rebalancing costs and taxes will eat up most of the returns? After all you’ve published the entire code, and usually people tend not to do that for models that promise decent returns.🙂

Alec,

I think the model is not suitable for an individual investor. There is a cheaper and maintenance free option for an individual investor – just buy ProShares Credit Suisse 130/30 ETF

http://www.proshares.com/funds/csm.html

Thanks, while I’m not into buying it (it had an extremely high correlation to S&P500 and interestingly no alpha over the past years), other readers will appreciate the availability of such an ETF. Personally I’m more into understanding how things work, which is why I swamped you with all these questions.🙂

This is a great set of posts (and great site in general) for someone to learn from.

Have you looked at Morgan Stanley’s factor model? Also, have you done any style analysis using factors derived from a principal components analysis? (I couldn’t find any examples on your site).

Thanks again for all your work.