5
$\begingroup$

A historical simulation approach to VaR estimation relies on the availability of historical data. What do we do when there is no data (say, spot price and implied volatility surface) as, for example, in cases of new equity issues or new bond issues? ("New" in the previous sentence does not necessarily mean "recent" as for SVaR one would probably need data from 2007-2008).

So, what can we do to "fill that missing data"? What are the best-industry-practice methodologies for that? I can envisage approaches like "proxying" and regression, but these seem somewhat crude and primitive. At the other end, I can also envisage a nonlinear autoregressive neural network with exogenous inputs (NARX), but not sure if these are actually used in practice for data-filling.

I would have thought that this is a very common problem and expected to find a lot of literature on this topic, but alas my search did not reveal anything.

$\endgroup$

2 Answers 2

7
$\begingroup$

This issue is incredibly important and I agree there is little practical information about it. To me, the key idea is to find the right matrix completion algorithm that best suits your needs. I work mostly with equity time series and there are substantial missing values issues due to, e.g., as you cite, IPOs with limited history. Recently I have had good success with probablistic PCA as a completion step. This is well implemented in the python package pca-magic (appropriately named).

As an example, if your returns are in a dataframe indexed by time and the columns are the (unique) identifiers (and, thus, many NaNs in the data), you can simply do

from ppca import PPCA
from sklearn.preprocessing import StandardScaler 

scaler = StandardScaler()
scaler.fit(df.values)
returns = scaler.transform(df.values)

n_comp = 20

ppca = PPCA()
ppca.fit(data=returns, d=n_comp, verbose=False, tol=1e-5)

betas = ppca.C
df_beta_returns = pd.DataFrame(index=df.index, data=ppca.transform())
common_returns = np.dot(df_beta_returns, betas.T)
imputed = scaler.inverse_transform(common_returns)

And here is one asset where I impute returns that never existed in the past. Magic!

enter image description here

In your use case, you could use the imputed dataframe as the input to your historical VaR calculation.

The paper for this algorithm can be found at http://www.robots.ox.ac.uk/~cvrg/hilary2006/ppca.pdf

$\endgroup$
2
$\begingroup$

I think the issue can be addressed in two ways:

  • statistical approach;
  • economic approach.

While I agree that ML/AI and other statistical tools can enhance missing data in time series, these lack economic meaning. One can implement these techniques and generate some numbers for the simulation. However, the derivation and the end result should also be meaningful from economics and finance perspective. I think that is why many people still approach this problem with proxying and using simple OLS to fill in the missing data.

Although it is very subjective, one can make a reasonable case for choosing a certain proxy. For the newly issued stock, where you basically have no information about the company, I'd say that the best approximation is to mimic that company's industry/sector. This can be augmented using the most recent financial statements, from which one can extract some information such as leverage for example, and adjust the time series accordingly.

Very interesting question. Would love to see comments/inputs from the community.

$\endgroup$

Your Answer

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

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