머신 러닝(Machine Learning)의 주요 목표 중 하나는 분석 모델의 성능이 일관성을 가지면서도 성능이 꾸준히 개선되도록 하는 것이다. 여러분은 아주 간단한 아이디어를 생각해낸 후 이를 실제 알고리즘으로 구현까지 해낸 경험이 있을 것이다. 필요한 경우 라이브러리를 쓰기도 하면서 말이다. 새로운 알고리즘을 사용하기 위해서는 관련 옵션도 써야 하고, 성능도 향상시켜야 한다. 이와 동시에, 성능이 저하되지 않도록 하는 방법도 알아야 한다.
확률기반 알고리즘(stochastic algorithm)을 테스트하는 것이 어떻게 보면 불가능한 것처럼 보이므로, 모든 변경사항을 전문가에게 물어보는 것도 한 방법일 수 있다. 하지만 이렇게 하면 말 그대로 너무 느리다는 문제가 있다. 알고리즘을 업데이트했을 때 이전보다 성능이 더 좋아졌는지 자동으로 확인할 수는 없을까? 기존 알고리즘을 다른 라이브러리에 있는 임의의 알고리즘으로 바꾸거나, 여러분이 구현한 것에 대해 더 깊이 있게 연구할 수 있도록 코드를 설계하려면 어떻게 하면 될까? 이것이 이 책을 쓰게 된 이유다.
이 책에서 우리는 테스트 주도형 개발(TDD, Test-Driven Development)이 무엇인지, 머신 러닝에서 이것이 어떤 가치를 지니는지 알아볼 것이다. 테스트 개발을 위해 파이썬 2.7의 nosetests 라이브러리를 사용한다. 머신 러닝 알고리즘을 위해 statsmodels와 scikit-learn 라이브러리를 사용한다. statsmodels는 회귀분석(regression) 구현에 매우 유용하다. scikit-learn 라이브러리는 여러 가지 분류분석(classification) 알고리즘에 사용될 것이다.