-------
Training/retraining
- train on an ad-hoc basis, every few months right now moving to more frequently and regularly as we streamline the process
- training done locally, in memory (we're "medium data" so no need for distributed process), using a version-controlled ipython notebook
- we extract model and preprocessing parameters from the model and preprocessors that were fit in the retraining process, dump to a json config file in the production classification repo
-------
Production classification
- we classify activity in our system on a nightly cron*
- as part of the cron we instantiate the model using config dumped from the retraining process. This means the config is fully readable in the git history (amazing for debugging by wider eng. team if something goes wrong)
- classifications and P(fraud) gets sent to the GoCardless core payments service which then decides whether to escalate cases for manual review
-------
* We're a payments company, processing Direct Debit bank-to-bank transfers. Inter-bank Direct Debit payments happen slowly (typically >2 days) so we don't need a live service for classifications.
Quite simple as production ML services go, but it's currently only 2 people working on this (we're hiring!).