In part 1 of this two part blog post I talked about why you should start using Machine Learning. In particular, I discussed that the barriers to entry in Machine Learning are going down, and although applying it to your business problems may not be easy, it is definitely within reach and can yield great benefits. In part 2, I would like to offer three guiding principles on how to start using Machine Learning.
#1 Don't be afraid to launch without Machine Learning
If you haven't read Martin Zinkevich's write-up of best practices for Machine Learning from Google, I recommend you do. Rule #1 on the list is this: "Don't be afraid to launch a product without Machine Learning." Remember that Artificial Intelligence (AI) and Machine Learning offer a way to power-up an already great idea, they are not the product itself. Therefore, it's probably not necessary to have Machine Learning baked into your app on day one.
The bottom line is that Machine Learning requires data. If you are developing a new app you may not have any relevant historical data. So, it's better to start with a simple algorithm that may be incomplete, and later add a Machine Learning based implementation trained on data you've collected. Take for example an eBook marketplace. If you want to recommend books to your readers, you could start by simply recommending the most read books by genre. Later on, you could utilize Machine Learning to develop a more complex heuristic that takes into account previously read books, book ratings, what friends are reading, etc.
#2 Think ahead and build for it
The reliability of Machine Learning output depends on having the right quantity and quality input. This means you have to plan for collecting the significant data points that will feed your model, implement a process for cleaning and preparing the data, and build infrastructure to support large quantities of data (yep, Big Data).
To help organize your thoughts in this respect, I'd like to refer to the intelligent app stack as described by Soma Somasegar. I visualize this as a pyramid of building blocks that result in a finished data product. Briefly, the building blocks are:
- Data Infrastructure: This comprises the technology components that collect, process and store data. If you are building a mobile app, what technology will you use to collect data into a central location? Maybe Apache Kafka or AWS Kinesis. How will you support processing data from thousands or millions of users? Maybe Apache Spark or AWS Lambda.
- Data Collection and Preparation: This involves the software and processes that clean and transform data into a Machine Learning ready format. It is a well known fact among data scientists that you will spend most of your time and effort here. Unfortunately this is not as well known or accepted among business stakeholders. But if you short change this process you will pay with bad results.
- Learning Services: At this layer is creating and training Machine Learning models, and integrating your application with these models. But the focus is on first trying a Machine-Learning-as-a-Service approach that leverages existing, cloud-based services rather than rolling your own (more on that in principle #3).
- Interfaces: Now we venture beyond the data and Machine Learning aspects and into how the application is delivered. Today, it is important to create applications that can be delivered over a variety of interfaces including mobile, web, voice, instant messaging, or API.
- Finished Product: Put all these together and you have a complete data product. This may be a "net new" product (one that is impossible without AI) or more commonly a product that is improved by AI.
#3 Leverage existing, cloud-based Machine Learning services
The last principle I'd like to leave you with is this: start building Machine Learning into your product by leveraging existing, cloud-based services. Machine Learning and Deep Learning as a service are already available from the major cloud providers including Amazon Web Services, Google Cloud Platform, and Microsoft Azure. In addition, there are many specialized Machine-Learning-as-a-service providers such as Clarifai (for image and video recognition), and DataRobot (for general AI applications) to name only two. These services will only improve with time and it will become the rare case where you need to roll your own implementation and won’t be able to use an existing service.
With so many services providing general Machine Learning, image and speech recognition, unstructured text processing, chat bot frameworks, and more, how do you choose between them? Here are a few rules of thumb:
- Does it have the AI features you need, plus any you anticipate using in the near future? You might need to consider availability of specific Machine Learning models or entire categories of services such as video recognition.
- Does it provide higher levels of abstraction? For example you could use a speech recognition API to put together a chat bot, but it would be better to leverage a purpose built chat bot service.
- If evaluating a major Cloud provider, does the broader ecosystem of services fit your needs?
- Does it provide straightforward tools and API's for creating, training, and integrating Machine Learning models?