Comprehensive Capital
Analysis and Review, or CCAR, is one of Federal Reserve’s capital planning initiatives
for big banks. The Federal Reserve has published broad contours of the baseline
scenario, the adverse scenario, and the severely adverse scenario. Forecasting
macroeconomic variables under these different scenarios serve as starting
points for loan loss prediction, financial portfolio modeling and comprehensive
reporting under CCAR. The Fed Reserve also provided updated historical time
series accompanying the scenarios (see www.federalreserve.gov/bankinforeg/stress-tests-capital-planning.htm).
This post shows how to use SAS Forecasting Server (FS) to build 28 time series forecasting from the link above. It took me a little over 2 hours to get the 28 models set up and run with FS including data prep. The SAS code program "fedmodeifed2.sas" in the appendix of this post converts original charter data types into numeric data type, and creates quarterly time ID necessary to model with FS.
After creating new project, point to the data set that has all 28 time series
Decide to run 'pure' time series forecast or to include explanatory variables
Great flexibility to decide which subset of the series to be used for forecast. This is a huge productivity boost since the modeler does not need to toggle back and forth between the design window and data steps, or carry many different conditioning flags in the data set
Point and click to access 47 model selection criteria. Slide validation data window to suite your needs
A set of quality models are built in 2 minutes. You can copy the built models, make changes to vary into different criteria, validation, measurement combinations for quick comparison. The model building process produces diagnostics, residual plots, whitening capability and transformations, among others. You can design event variables to adjust forecast by business cycles and external shocks/treatment. FS also supports custom overrides (although in many veins manual overrides are not recommended)
SAS Forecast Server essentially is GUI counterpart of the renown SAS ETS software. It is built and optimized towards the latest trend in forecast theory and practice towards forecast data mining. The productivity boost and model documentation are the top reasons I fall in love with FS. I spent about 2 hours and 20 minutes to build up all 28 series. They are baseline and you certainly can and should spend more time polishing them. Below is a summary of the 28 models. My favorite method is UCM
Enjoy!!
"
libname ccar "c:\sasdata";
%let indsn =ccar.ccartest2; /*use Import facility to read in FED spreadsheet directly*/
%let outdsn =sashelp.fedmodified2;
data &outdsn.;
set &indsn. ;
length Q2 $2 y2 $4 ;
Q2 =substr(compress(OBS), 2,1);
Y2 =substr(compress(OBS), 3,4);
YYQ =yyQ(y2,Q2);
format yyq yyq6.;
if _n_<=151;
rename _0_year_Treasury_yield=Ten_year_Tre_yield
__month_Treasury_rate =Three_mon_Tre_rate
__year_Treasury_yield=Five_year_tre_yield;
/*the three raw names above cause problems with FS without renaming*/
DJTSMI=Dow_Jones_Total_Stock_Market_Ind*1;
Developing_Asia_Inflation2 =Developing_Asia_Inflation*1;
Developing_Asia_Real_GDP_Growth2=Developing_Asia_Real_GDP_Growth*1;
Euro_Area_Bilateral_Dollar_Exch2=Euro_Area_Bilateral_Dollar_Excha*1;
Euro_Area_Inflation2=Euro_Area_Inflation*1;
Developing_Asia_Bilateral_Dolla2=Developing_Asia_Bilateral_Dollar*1;
Market_Volatility_Index__VIX2=Market_Volatility_Index__VIX_*1;
/*the original data are very clean and regularized. There is no need to write fancy code to do the type conversion. Just get it done*/
drop Developing_Asia_Inflation
Developing_Asia_Real_GDP_Growth
Euro_Area_Bilateral_Dollar_Excha
Euro_Area_Inflation
Market_Volatility_Index__VIX_
Dow_Jones_Total_Stock_Market_Ind
Developing_Asia_Bilateral_Dollar
Q2 y2;
run ;
"
Appendix: SAS code to clean up original data for FS modeling, fedmodeifed2.sas"
libname ccar "c:\sasdata";
%let indsn =ccar.ccartest2; /*use Import facility to read in FED spreadsheet directly*/
%let outdsn =sashelp.fedmodified2;
data &outdsn.;
set &indsn. ;
length Q2 $2 y2 $4 ;
Q2 =substr(compress(OBS), 2,1);
Y2 =substr(compress(OBS), 3,4);
YYQ =yyQ(y2,Q2);
format yyq yyq6.;
if _n_<=151;
rename _0_year_Treasury_yield=Ten_year_Tre_yield
__month_Treasury_rate =Three_mon_Tre_rate
__year_Treasury_yield=Five_year_tre_yield;
/*the three raw names above cause problems with FS without renaming*/
DJTSMI=Dow_Jones_Total_Stock_Market_Ind*1;
Developing_Asia_Inflation2 =Developing_Asia_Inflation*1;
Developing_Asia_Real_GDP_Growth2=Developing_Asia_Real_GDP_Growth*1;
Euro_Area_Bilateral_Dollar_Exch2=Euro_Area_Bilateral_Dollar_Excha*1;
Euro_Area_Inflation2=Euro_Area_Inflation*1;
Developing_Asia_Bilateral_Dolla2=Developing_Asia_Bilateral_Dollar*1;
Market_Volatility_Index__VIX2=Market_Volatility_Index__VIX_*1;
/*the original data are very clean and regularized. There is no need to write fancy code to do the type conversion. Just get it done*/
drop Developing_Asia_Inflation
Developing_Asia_Real_GDP_Growth
Euro_Area_Bilateral_Dollar_Excha
Euro_Area_Inflation
Market_Volatility_Index__VIX_
Dow_Jones_Total_Stock_Market_Ind
Developing_Asia_Bilateral_Dollar
Q2 y2;
run ;
"