Logging in large mathematical models
ahl.com
ahl.com
After contacting the author, who indicated he didn't have such problems, I literally spent months trying to debug the code. When I finally gave up and re-wrote my implementation basically from scratch, and found the same problems, I contacted the author again. He then indicated that indeed there was a problem with the method for these cases, that he understood the problem and found a way to fix it. In hindsight, the problem was not hard to understand (but still, the claims in the paper were unwarranted IMO).
Conclusion? I wish I was a math prodigy, then I would have spotted the problem instantly. Also, be wary of claims made in papers.
There's a rule of thumb in the machine learning community: if you want an algorithm that does X well, find a paper on doing X, and implement the method that the paper compares its proposal against. That way you're near state of the art, but you're also using a method that many people have used and tested.
If you do, you need more life experience.
And, yes, we all need more life experience :-)
This allowed me to be able to generate a spreadsheet (with the values and calculations in place) that could show a non-developer exactly how the outputs had been calculated (you could use the features of Excel to add visual annotations of precedents and dependencies).
I was pretty pleased with that approach.
https://docs.racket-lang.org/medic/index.html
Highly interestingly, albeit a bit off topic, the authors of the paper from Medic originated very recently took this technique, and cranked it to 11:
https://conf.researchr.org/event/sle-2017/sle-2017-papers-de...
…which won them a distinguished paper award!
This is like claiming you save and load a json object (instead of its serialization) in some hashmap / DB for fast lookup.
Am I missing something?
I'm pretty sure this can be applied outside the math, e.g. on systems with complex business rule over large datasets.
Doesn’t implementing this system with HDF5 cause headaches for concurrency in either direction?
1) if you've got models that are re-generated periodically based on new inputs/algorithm tweaks, then you can potentially end up with quite a few of these as you scale.
2) if you want to track the details that/debug the reason your production system made a given decision, you need to log not just your model but all of the parameters that went into that decision. If that type of decision happens many times a day, then you can end up with some pretty massive logs to go through.
In either case, storing that historical data in your transactional database can be a bit of a load, so it's ideal to keep it separate if you get any kind of volume. I've actually bumped into 2) at one job.