As with last week, this is a deeper dive into seeing how hyperparamater changes in LASSO models can affect the test-statistics for predicting bank failures.
source("Each Variable Models.R")
source("Smart LASSO 2.R")
cores = detectCores()
Lambda tuning, given a training set contains at least one failure (MSE)
First, I’m trying out lambda-tuning by selecting the ratio between the number of failures in a selected training set (at least 1) n and the number of predictors used by the LASSO model. The model used must have that ratio be whatever is specified. Holding some other parameters constant, we see how changing the ratio changes our outcome:
- Date considered: Q4 2006
- Training set size: 100
- Number of simulations: 100 (quite stable)
- (Ignore the “first” parameter for now – it relates to how our optimal lambda is chosen. Right now, were using the same criterion we used last week – where the first lambda to satisfy the ratio constraint is chosen.)
run_models("1.1 Ratio = 1", "MSE", 100, "2006-12-31", 100, 1, 1, "first")

run_models("1.2 Ratio = 2", "MSE", 100, "2006-12-31", 100, 1, 2, "first")

run_models("1.3 Ratio = 3", "MSE", 100, "2006-12-31", 100, 1, 3, "first")

Here, we see the (unsurprising) result that (1) the lambda selected by the model (on average) gets larger as our declared failures/predictors ratio increases, and (2) at this training set size, the full model and individual models don’t look that different from an MSE standpoint. This begs the question, how do the same reports look for other test statistics?
Lambda tuning, given a training set contains at least one failure (AUC)
Here’s AUC (with the same series of hyperparameters):
run_models("2.1 Ratio = 1", "AUC", 100, "2006-12-31", 100, 1, 1, "first")

run_models("2.2 Ratio = 2", "AUC", 100, "2006-12-31", 100, 1, 2, "first")

run_models("2.3 Ratio = 3", "AUC", 100, "2006-12-31", 100, 1, 3, "first")

Hmm, some less than impressive out-of-sample performance for AUC on the full model. As a general pattern, raising the failures/predictors ratio seems to improve the bias between in-sample and out-of-sample stats.
More generalized AUC tuning
While we’re looking at AUC, some changes in the other hyperparamaters look like this:
run_models("3.1 Ratio = 1, 2007", "AUC", 10, "2007-12-31", 100, 1, 1, "first")

run_models("3.2 Ratio = 1, 2008", "AUC", 10, "2008-12-31", 100, 1, 1, "first")

run_models("3.3 Ratio = 1, 2007, larger sample", "AUC", 50, "2007-12-31", 500, 1, 1, "first")

run_models("3.4 Ratio = 1, 2008, larger sample", "AUC", 50, "2008-12-31", 500, 1, 1, "first")

run_models("3.5 Ratio = 3, 2008, smaller sample", "MSE", 50, "2008-06-30", 100, 10, 3, "first")

run_models("3.6 Ratio = 4, 2008, smaller sample", "MSE", 50, "2008-06-30", 100, 10, 4, "first")

run_models("3.7 Ratio = 3, 2008, smaller sample", "AUC", 50, "2008-06-30", 100, 10, 3, "first")

run_models("3.8 Ratio = 4, 2008, smaller sample", "AUC", 50, "2008-06-30", 100, 10, 4, "first")

My interpretations of the above graphs would be:
- AUC seems to offer more visibility into a model’s “correctness” than MSE does, and maybe part of the reason for that is that it varies more often than MSE does (for full vs. individual models). Even in relatively small training set sizes, it becomes apparent that full-variable models produce higher AUCs than most of the individual variables (3.1, 3.2). It becomes esp. apparent when sample sizes are larger (3.3, 3.4), at which point bias between in-sample and out-of-sample disappears too.
- The goofy charts from last week remain goofy (at least to my intuition). 3.6 and 3.7 have identical parameters to what we saw last week: MSE, for training sets of 100 where > 10 failures are selected, all seem to overfit and perform inaccurately. The AUC version of the same parameters, though, don’t show the same story – they look similar to the other AUC charts. I would have expected a discrepency for AUC and MSE, so I’m unsure how to interpret?
Lambda tuning by selecting the optimal lambda given our ratio constraint
This is where the last parameter I’m calling comes in. In every instance thus far, I’ve selected (as with last week) the very first lambda that satifsies the ratio constraint. In practice, though, glmnet provides us with a series of lambda tests that satisfy the ratio constraint, and which in some cases knocks out even more variables than it “should”. The below does lambda selection by (1) selecting all candidate lambdas as the inputs for a cross-validation, and selecting for prediction the one lambda that minimizes training error.
run_models("4.1 Ratio = 2", "MSE", 50, "2006-12-31", 100, 5, 2, "best")

run_models("4.2 Ratio = 2", "AUC", 50, "2006-12-31", 100, 5, 2, "best")

run_models("4.3 Ratio = 4", "MSE", 50, "2006-12-31", 100, 5, 4, "best")

run_models("4.4 Ratio = 4", "AUC", 50, "2006-12-31", 100, 5, 4, "best")

- For our MSE graphs, there is a similar “underfitting effect” that we saw in our chart (3…) above, but we also see that AUC for the full model becomes noticably worse with this lambda selection.
- Different ratios seem to produce negligible differences.
What’s next?
- Elastic-net applied to the first/second sections above
- Cox / proportional-hazards modeling
LS0tCnRpdGxlOiAiTW9yZSBMQVNTTyBFeHBlcmltZW50cyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKQXMgd2l0aCBsYXN0IHdlZWssIHRoaXMgaXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHNlZWluZyBob3cgaHlwZXJwYXJhbWF0ZXIgY2hhbmdlcyBpbiBMQVNTTyBtb2RlbHMgY2FuIGFmZmVjdCB0aGUgdGVzdC1zdGF0aXN0aWNzIGZvciBwcmVkaWN0aW5nIGJhbmsgZmFpbHVyZXMuIAoKYGBge3J9CnNvdXJjZSgiRWFjaCBWYXJpYWJsZSBNb2RlbHMuUiIpCnNvdXJjZSgiU21hcnQgTEFTU08gMi5SIikKY29yZXMgPSBkZXRlY3RDb3JlcygpCmBgYAoKIyMjIyBMYW1iZGEgdHVuaW5nLCBnaXZlbiBhIHRyYWluaW5nIHNldCBjb250YWlucyBhdCBsZWFzdCBvbmUgZmFpbHVyZSAoTVNFKQoKRmlyc3QsIEknbSB0cnlpbmcgb3V0IGxhbWJkYS10dW5pbmcgYnkgc2VsZWN0aW5nIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgZmFpbHVyZXMgaW4gYSBzZWxlY3RlZCB0cmFpbmluZyBzZXQgKGF0IGxlYXN0IDEpICpuKiBhbmQgdGhlIG51bWJlciBvZiBwcmVkaWN0b3JzIHVzZWQgYnkgdGhlIExBU1NPIG1vZGVsLiBUaGUgbW9kZWwgdXNlZCBtdXN0IGhhdmUgdGhhdCByYXRpbyBiZSB3aGF0ZXZlciBpcyBzcGVjaWZpZWQuIEhvbGRpbmcgc29tZSBvdGhlciBwYXJhbWV0ZXJzIGNvbnN0YW50LCB3ZSBzZWUgaG93IGNoYW5naW5nIHRoZSByYXRpbyBjaGFuZ2VzIG91ciBvdXRjb21lOgoKKiBEYXRlIGNvbnNpZGVyZWQ6IFE0IDIwMDYKKiBUcmFpbmluZyBzZXQgc2l6ZTogMTAwCiogTnVtYmVyIG9mIHNpbXVsYXRpb25zOiAxMDAgKHF1aXRlIHN0YWJsZSkKKiAoSWdub3JlIHRoZSAiZmlyc3QiIHBhcmFtZXRlciBmb3Igbm93IC0tIGl0IHJlbGF0ZXMgdG8gaG93IG91ciBvcHRpbWFsIGxhbWJkYSBpcyBjaG9zZW4uIFJpZ2h0IG5vdywgd2VyZSB1c2luZyB0aGUgc2FtZSBjcml0ZXJpb24gd2UgdXNlZCBsYXN0IHdlZWsgLS0gd2hlcmUgdGhlIGZpcnN0IGxhbWJkYSB0byBzYXRpc2Z5IHRoZSByYXRpbyBjb25zdHJhaW50IGlzIGNob3Nlbi4pCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpydW5fbW9kZWxzKCIxLjEgUmF0aW8gPSAxIiwgIk1TRSIsIDEwMCwgIjIwMDYtMTItMzEiLCAxMDAsIDEsIDEsICJmaXJzdCIpCnJ1bl9tb2RlbHMoIjEuMiBSYXRpbyA9IDIiLCAiTVNFIiwgMTAwLCAiMjAwNi0xMi0zMSIsIDEwMCwgMSwgMiwgImZpcnN0IikKcnVuX21vZGVscygiMS4zIFJhdGlvID0gMyIsICJNU0UiLCAxMDAsICIyMDA2LTEyLTMxIiwgMTAwLCAxLCAzLCAiZmlyc3QiKQpgYGAKCkhlcmUsIHdlIHNlZSB0aGUgKHVuc3VycHJpc2luZykgcmVzdWx0IHRoYXQgKDEpIHRoZSBsYW1iZGEgc2VsZWN0ZWQgYnkgdGhlIG1vZGVsIChvbiBhdmVyYWdlKSBnZXRzIGxhcmdlciBhcyBvdXIgZGVjbGFyZWQgZmFpbHVyZXMvcHJlZGljdG9ycyByYXRpbyBpbmNyZWFzZXMsIGFuZCAoMikgYXQgdGhpcyB0cmFpbmluZyBzZXQgc2l6ZSwgdGhlIGZ1bGwgbW9kZWwgYW5kIGluZGl2aWR1YWwgbW9kZWxzIGRvbid0IGxvb2sgdGhhdCBkaWZmZXJlbnQgZnJvbSBhbiBNU0Ugc3RhbmRwb2ludC4gClRoaXMgYmVncyB0aGUgcXVlc3Rpb24sIGhvdyBkbyB0aGUgc2FtZSByZXBvcnRzIGxvb2sgZm9yIG90aGVyIHRlc3Qgc3RhdGlzdGljcz8gCgojIyMjIExhbWJkYSB0dW5pbmcsIGdpdmVuIGEgdHJhaW5pbmcgc2V0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBmYWlsdXJlIChBVUMpCgpIZXJlJ3MgQVVDICh3aXRoIHRoZSBzYW1lIHNlcmllcyBvZiBoeXBlcnBhcmFtZXRlcnMpOgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnJ1bl9tb2RlbHMoIjIuMSBSYXRpbyA9IDEiLCAiQVVDIiwgMTAwLCAiMjAwNi0xMi0zMSIsIDEwMCwgMSwgMSwgImZpcnN0IikKcnVuX21vZGVscygiMi4yIFJhdGlvID0gMiIsICJBVUMiLCAxMDAsICIyMDA2LTEyLTMxIiwgMTAwLCAxLCAyLCAiZmlyc3QiKQpydW5fbW9kZWxzKCIyLjMgUmF0aW8gPSAzIiwgIkFVQyIsIDEwMCwgIjIwMDYtMTItMzEiLCAxMDAsIDEsIDMsICJmaXJzdCIpCmBgYAoKSG1tLCBzb21lIGxlc3MgdGhhbiBpbXByZXNzaXZlIG91dC1vZi1zYW1wbGUgcGVyZm9ybWFuY2UgZm9yIEFVQyBvbiB0aGUgZnVsbCBtb2RlbC4gQXMgYSBnZW5lcmFsIHBhdHRlcm4sIHJhaXNpbmcgdGhlIGZhaWx1cmVzL3ByZWRpY3RvcnMgcmF0aW8gc2VlbXMgdG8gaW1wcm92ZSB0aGUgYmlhcyBiZXR3ZWVuIGluLXNhbXBsZSBhbmQgb3V0LW9mLXNhbXBsZSBzdGF0cy4gCgojIyMjIE1vcmUgZ2VuZXJhbGl6ZWQgQVVDIHR1bmluZwoKV2hpbGUgd2UncmUgbG9va2luZyBhdCBBVUMsIHNvbWUgY2hhbmdlcyBpbiB0aGUgb3RoZXIgaHlwZXJwYXJhbWF0ZXJzIGxvb2sgbGlrZSB0aGlzOgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KcnVuX21vZGVscygiMy4xIFJhdGlvID0gMSwgMjAwNyIsICJBVUMiLCAxMCwgIjIwMDctMTItMzEiLCAxMDAsIDEsIDEsICJmaXJzdCIpCnJ1bl9tb2RlbHMoIjMuMiBSYXRpbyA9IDEsIDIwMDgiLCAiQVVDIiwgMTAsICIyMDA4LTEyLTMxIiwgMTAwLCAxLCAxLCAiZmlyc3QiKQpydW5fbW9kZWxzKCIzLjMgUmF0aW8gPSAxLCAyMDA3LCBsYXJnZXIgc2FtcGxlIiwgIkFVQyIsIDUwLCAiMjAwNy0xMi0zMSIsIDUwMCwgMSwgMSwgImZpcnN0IikKcnVuX21vZGVscygiMy40IFJhdGlvID0gMSwgMjAwOCwgbGFyZ2VyIHNhbXBsZSIsICJBVUMiLCA1MCwgIjIwMDgtMTItMzEiLCA1MDAsIDEsIDEsICJmaXJzdCIpCnJ1bl9tb2RlbHMoIjMuNSBSYXRpbyA9IDMsIDIwMDgsIHNtYWxsZXIgc2FtcGxlIiwgIk1TRSIsIDUwLCAiMjAwOC0wNi0zMCIsIDEwMCwgMTAsIDMsICJmaXJzdCIpCnJ1bl9tb2RlbHMoIjMuNiBSYXRpbyA9IDQsIDIwMDgsIHNtYWxsZXIgc2FtcGxlIiwgIk1TRSIsIDUwLCAiMjAwOC0wNi0zMCIsIDEwMCwgMTAsIDQsICJmaXJzdCIpCnJ1bl9tb2RlbHMoIjMuNyBSYXRpbyA9IDMsIDIwMDgsIHNtYWxsZXIgc2FtcGxlIiwgIkFVQyIsIDUwLCAiMjAwOC0wNi0zMCIsIDEwMCwgMTAsIDMsICJmaXJzdCIpCnJ1bl9tb2RlbHMoIjMuOCBSYXRpbyA9IDQsIDIwMDgsIHNtYWxsZXIgc2FtcGxlIiwgIkFVQyIsIDUwLCAiMjAwOC0wNi0zMCIsIDEwMCwgMTAsIDQsICJmaXJzdCIpCmBgYAoKTXkgaW50ZXJwcmV0YXRpb25zIG9mIHRoZSBhYm92ZSBncmFwaHMgd291bGQgYmU6CgoqIEFVQyBzZWVtcyB0byBvZmZlciBtb3JlIHZpc2liaWxpdHkgaW50byBhIG1vZGVsJ3MgImNvcnJlY3RuZXNzIiB0aGFuIE1TRSBkb2VzLCBhbmQgbWF5YmUgcGFydCBvZiB0aGUgcmVhc29uIGZvciB0aGF0IGlzIHRoYXQgaXQgdmFyaWVzIG1vcmUgb2Z0ZW4gdGhhbiBNU0UgZG9lcyAoZm9yIGZ1bGwgdnMuIGluZGl2aWR1YWwgbW9kZWxzKS4gRXZlbiBpbiByZWxhdGl2ZWx5IHNtYWxsIHRyYWluaW5nIHNldCBzaXplcywgaXQgYmVjb21lcyBhcHBhcmVudCB0aGF0IGZ1bGwtdmFyaWFibGUgbW9kZWxzIHByb2R1Y2UgaGlnaGVyIEFVQ3MgdGhhbiBtb3N0IG9mIHRoZSBpbmRpdmlkdWFsIHZhcmlhYmxlcyAoMy4xLCAzLjIpLiBJdCBiZWNvbWVzIGVzcC4gYXBwYXJlbnQgd2hlbiBzYW1wbGUgc2l6ZXMgYXJlIGxhcmdlciAoMy4zLCAzLjQpLCBhdCB3aGljaCBwb2ludCBiaWFzIGJldHdlZW4gaW4tc2FtcGxlIGFuZCBvdXQtb2Ytc2FtcGxlIGRpc2FwcGVhcnMgdG9vLgoqIFRoZSBnb29meSBjaGFydHMgZnJvbSBsYXN0IHdlZWsgcmVtYWluIGdvb2Z5IChhdCBsZWFzdCB0byBteSBpbnR1aXRpb24pLiAzLjYgYW5kIDMuNyBoYXZlIGlkZW50aWNhbCBwYXJhbWV0ZXJzIHRvIHdoYXQgd2Ugc2F3IGxhc3Qgd2VlazogTVNFLCBmb3IgdHJhaW5pbmcgc2V0cyBvZiAxMDAgd2hlcmUgPiAxMCBmYWlsdXJlcyBhcmUgc2VsZWN0ZWQsIGFsbCBzZWVtIHRvIG92ZXJmaXQgYW5kIHBlcmZvcm0gaW5hY2N1cmF0ZWx5LiBUaGUgQVVDIHZlcnNpb24gb2YgdGhlIHNhbWUgcGFyYW1ldGVycywgdGhvdWdoLCAqZG9uJ3Qgc2hvdyogdGhlIHNhbWUgc3RvcnkgLS0gdGhleSBsb29rIHNpbWlsYXIgdG8gdGhlIG90aGVyIEFVQyBjaGFydHMuIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIGRpc2NyZXBlbmN5IGZvciBBVUMgYW5kIE1TRSwgc28gSSdtIHVuc3VyZSBob3cgdG8gaW50ZXJwcmV0PyAKCiMjIyMgTGFtYmRhIHR1bmluZyBieSBzZWxlY3RpbmcgdGhlIG9wdGltYWwgbGFtYmRhIGdpdmVuIG91ciByYXRpbyBjb25zdHJhaW50CgpUaGlzIGlzIHdoZXJlIHRoZSBsYXN0IHBhcmFtZXRlciBJJ20gY2FsbGluZyBjb21lcyBpbi4gSW4gZXZlcnkgaW5zdGFuY2UgdGh1cyBmYXIsIEkndmUgc2VsZWN0ZWQgKGFzIHdpdGggbGFzdCB3ZWVrKSB0aGUgdmVyeSBmaXJzdCBsYW1iZGEgdGhhdCBzYXRpZnNpZXMgdGhlIHJhdGlvIGNvbnN0cmFpbnQuIEluIHByYWN0aWNlLCB0aG91Z2gsIGdsbW5ldCBwcm92aWRlcyB1cyB3aXRoIGEgc2VyaWVzIG9mIGxhbWJkYSB0ZXN0cyB0aGF0IHNhdGlzZnkgdGhlIHJhdGlvIGNvbnN0cmFpbnQsIGFuZCB3aGljaCBpbiBzb21lIGNhc2VzIGtub2NrcyBvdXQgZXZlbiBtb3JlIHZhcmlhYmxlcyB0aGFuIGl0ICJzaG91bGQiLiBUaGUgYmVsb3cgZG9lcyBsYW1iZGEgc2VsZWN0aW9uIGJ5ICgxKSBzZWxlY3RpbmcgYWxsIGNhbmRpZGF0ZSBsYW1iZGFzIGFzIHRoZSBpbnB1dHMgZm9yIGEgY3Jvc3MtdmFsaWRhdGlvbiwgYW5kIHNlbGVjdGluZyBmb3IgcHJlZGljdGlvbiB0aGUgb25lIGxhbWJkYSB0aGF0IG1pbmltaXplcyB0cmFpbmluZyBlcnJvci4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnJ1bl9tb2RlbHMoIjQuMSBSYXRpbyA9IDIiLCAiTVNFIiwgNTAsICIyMDA2LTEyLTMxIiwgMTAwLCA1LCAyLCAiYmVzdCIpCnJ1bl9tb2RlbHMoIjQuMiBSYXRpbyA9IDIiLCAiQVVDIiwgNTAsICIyMDA2LTEyLTMxIiwgMTAwLCA1LCAyLCAiYmVzdCIpCnJ1bl9tb2RlbHMoIjQuMyBSYXRpbyA9IDQiLCAiTVNFIiwgNTAsICIyMDA2LTEyLTMxIiwgMTAwLCA1LCA0LCAiYmVzdCIpCnJ1bl9tb2RlbHMoIjQuNCBSYXRpbyA9IDQiLCAiQVVDIiwgNTAsICIyMDA2LTEyLTMxIiwgMTAwLCA1LCA0LCAiYmVzdCIpCmBgYAoKKiBGb3Igb3VyIE1TRSBncmFwaHMsIHRoZXJlIGlzIGEgc2ltaWxhciAidW5kZXJmaXR0aW5nIGVmZmVjdCIgdGhhdCB3ZSBzYXcgaW4gb3VyIGNoYXJ0ICgzLi4uKSBhYm92ZSwgYnV0IHdlIGFsc28gc2VlIHRoYXQgQVVDIGZvciB0aGUgZnVsbCBtb2RlbCBiZWNvbWVzIG5vdGljYWJseSB3b3JzZSB3aXRoIHRoaXMgbGFtYmRhIHNlbGVjdGlvbi4gCiogRGlmZmVyZW50IHJhdGlvcyBzZWVtIHRvIHByb2R1Y2UgbmVnbGlnaWJsZSBkaWZmZXJlbmNlcy4gCgojIyMjIFdoYXQncyBuZXh0PyAKCiogRWxhc3RpYy1uZXQgYXBwbGllZCB0byB0aGUgZmlyc3Qvc2Vjb25kIHNlY3Rpb25zIGFib3ZlCiogQ294IC8gcHJvcG9ydGlvbmFsLWhhemFyZHMgbW9kZWxpbmcKCgoKCgoK