I was recently asked by someone, “What do I need to do to get into Machine Learning and Finance industry?” I told them that I would think about it and get back to them. I have been in many interviews for Machine Learning Engineers and I do have a set of questions that I frequently use to get a feeling for where someone is in their career and where they are hoping to go. We are looking for people at various phases in their growth, so it is less of a concern about whether someone is some elite developer and more about whether they are inquisitive and eager to learn. I will not share the questions I use in interviews, but I will happily share the attributes I am looking for.
Sound Engineering
Before anything else, I am looking for someone’s engineering acumen. I went to college for Chemical Engineering and I believe on our first day the professor defined engineering as problem solving under constraints. The key thing that we learned was how to take an abstract problem statement, break it down into manageable pieces, and then solve the smaller subproblems. I believe that most of engineering discplines could be boiled down to this, they just deal with different problem domains.
I believe a key differentiator between more and less experienced developers is in understanding where to break the problem down. Problems have an inherent amount of complexity. Good design can mitigate that complexity keep it from growing out of control. It is the same concept of algorithmic complexity. We analyze an algorithm and see how the runtime grows as the size of the problem increases. In the same way, we can look at an architecture and see how the complexity grows as we increase functionality and services.
The domain of Machine Learning is still relatively fresh, and the industry is still churning with new Python libraries popping out every other week. Therefore, the solutions we build for delivering Machine Learning Models must be well designed because they will likely need to evolve. Building a system that can cleanly evolve over time is a difficult engineering challenge. I am looking for people who understand the implications of decisions in the near term but also how it will affect the evolveability of the system going forward.
Strong Machine Learning Fundamentals
Though this may seem obvious, there are some nuances I wanted to highlight. While I am fascinated by the advances we are seeing with Neural Networks and Reenforcement Learning, they should not be the first tool you reach for. I am going to ask someone about a hypothetical problem and get their feedback on how they would approach it. If the first thing they suggest is, “Oh, use a Neural Network!” red flags are going to go off. Neural Networks are powerful, but they should not be the first tool you reach for in your toolbox.
It is impressive just how far you can get with Linear Regression and Logistic Regression. These algorithms are robust, and their behavior is easily explained. It is enourmously valuable to be able to explain the behavior of a model to your non-ML colleagues in terms they can understand. You can then take things a step further and do some data exploration and try subsetting your population and having different models for the different populations. Think of it as a brute force Ensemble technique. Now, if you reach the end of Linear and Logistic Regression, I am all for trying more sophisticated techniques. You just should not start with the fanciest tool in your toolbox.
I also want someone to understand the failure modes of the model and how they impact the outcome. It is easy to get caught up in trying to tune a model for a particular metric but is that really the best thing for how it will be used in production? Machine Learning models really took off when they were applied to the field of advertising where the upside of being correct was large but the downside of being wrong was low. This was a perfect application of these tools. What happens when the downside of a wrong prediction is large? What if a wrong prediction leads to someone dying? What metric are you going to tune the model for in that scenario? I want someone who is going to ask the question, “Why do you want to predict that? How do you plan to use the prediction?” because only when you know that can you really discern the best model.
Team Skills
The industry often calls these “Soft Skills”. I think that undervalues how critical they are. The problems we are facing now are so large and complex they cannot be completed by a single individual. If someone does not have the ability to operate well within a team, I am not interested. I do not care how much of a wizard you are. If you are one of the fabled 10X developers but you apply a negative multiplier to the rest of the team, it is going to be a net loss for us.
The first and most critical Team Skill is the ability to communicate in writing. This includes the clarity of your code, emails, chat, diagrams, all of it. If you do not have the ability to put your thoughts down into a written form, it is going to be difficult for you to pass your ideas around the team. So much of our communication now occurs through text whether it be email, code, pull requests, and chat messages. I will not automatically disqualify someone if there writing is not amazing, but it is a clear differentiator. If you have a blog where I can see your work and how you explain your thoughts, you are automatically in the top 5% of people I interview.
Next, I want to know if you can explain complex ideas. Throughout the interview I am going to be listening for what you are passionate about or have a deep understanding of. I am then going to ask you to explain that concept to me. I may already be familiar with the subject, but I want to know if you can explain it to someone who is not a domain expert. Developers who can break complex problems down into explainable pieces are a rare breed.
Technical Skills
There is a reason this section comes last. While it is important, it is the the that least differentiates people. I care little about which stack or set of technologies you have worked with in the past. If you happen to be familiar with what we are using it is a small bonus, but it is nowhere near the most important thing. I will want to know if you have worked with the concepts though. I want to know if you have worked with Object-Oriented and Functional languages. I want to know if you have worked with Relational Databases or streaming systems. The reason for this is more to guage what training someone would need should they come on board. Finding someone who spends time learning on their own is a huge bonus because it shows curiousity and initiative, not because I expect them to work overtime to get up to speed.
Academics
I don’t care. I honestly don’t. I used to be really intimidated by people with degrees from top end schools and honestly, the above areas matter more in the long run. I work with people from wildly different backgrounds. Do not count yourself out if you do not have a Computer Science degree. I cannot remember where anyone on my team went to school or whether they have degrees.
Final Thoughts
So, what do I say to my friend who asks me, “How do I get into Machine Learning and Finance?” I say, practice and show your work. Start a blog. Talk about what you are learning each week. Learn to turn complex problems into clear prose. Find a problem that you are intersted in and create a GitHub repo where you document your progress. Find some interesting data set and perform some analysis on it. Document what you find. Create a model for predicting an outcome and explain which metrics you used to tune the model and why you chose those metrics. Do it using Pull Requests with tagging. Create a simple ML Model that you deploy as a Nuget package and setup an automated CI/CD pipeline to deliver new versions of the model when you merge to the main branch. These are the daily things we do as being developers.
Finally, and perhaps most importantly, get involved in the community. Just find a developer tribe you jive with and connect with some people. I know there are some hostile communities out there but there is also an abundance of generous developers. I know Python has tons of resources. I love F# and it is the most generous community I have been a part of. R also has great people and meetups. Connecting with people and learning from them will create more opprotunities than anything else.