본문 바로가기
Fundamentals & Beyond/테스트 주도 머신러닝

들어가며

by Toddler_AD 2026. 7. 19.

머신러닝의 주요 목표 중 하나는 분석 모델의 성능이 일관성을 가지면서도 꾸준히 개선되도록 하는 것이다. 여러분은 아주 간단한 아이디어를 생각해낸 후 이를 실제 알고리즘으로 구현까지 해낸 경험이 있을 것이다. 필요한 경우 라이브러리를 쓰기도 하면서 말이다. 새로운 알고리즘을 사용하기 위해서는 관련 옵션도 써야 하고, 성능도 향상시켜야 한다. 이와 동시에, 성능이 저하되지 않도록 하는 방법도 알아야 한다.

 

확률기반 알고리즘(Stochastic Algorithm)을 테스트하는 것이 어떻게 보면 불가능한 것처럼 보이므로, 모든 변경사항을 전문가에게 물어보는 것도 한 방법일 수 있다. 하지만 이 방법은 말 그대로 너무 느리다는 문제가 있다. 알고리즘을 업데이트했을 때 이전보다 성능이 더 좋아졌는지 자동으로 확인할 수는 없을까? 기존 알고리즘을 다른 라이브러리에 있는 임의의 알고리즘으로 바꾸거나, 여러분이 구현한 것에 대해 더 깊이 연구할 수 있도록 코드를 설계하려면 어떻게 하면 될까? 이것이 이 책을 쓰게 된 이유다.

 

이 책에서 우리는 테스트 주도 개발(Test-Driven Development, TDD)이 무엇인지, 머신러닝에서 이것이 어떤 가치를 지니는지 알아볼 것이다. 테스트 개발을 위해 파이썬의 nosetest 라이브러리를 , 머신러닝 알고리즘을 위해 statsmodels와 scikit-learn 라이브러리를 사용한다. statsmodels는 회귀분석(regression) 구현에 매우 유용하다. scikit-learn 라이브러리는 여러 가지 분류분석(classification) 알고리즘에 사용될 것이다.

 

이 책의 구성

1장, 테스트 주도 머신 러닝의 소개

  • 테스트 주도 개발(TDD)이 무엇인지, 실제로 어떻게 생겼는지, 어떻게 수행되는지 알아본다.

2장, 퍼셉트론의 개념 기반 테스트

  • 간단한 버전에서 시작해 퍼셉트론(Perceptron)을 개발한다. 퍼셉트론이 비결정적(non-deterministic) 형태로 동작하는 특성을 지녔지만, 테스트가 가능하도록 알고리즘 동작(behavior)에 대한 정의도 작성한다.

3장, Multi-armed bandit 알고리즘을 이용한 문제 해결

  • Multi-armed bandit 문제와 여러 가지 알고리즘의 테스트, 반복 수행에 따른 성능의 변화 등을 알아본다.

4장, 회귀분석을 이용한 예측

  • statsmodels를 사용해 회귀분석을 구현하고, 주요 성능 지표에 대해 알아본다. 분석 모델 조정에 대해서도 살펴본다.

5장, 로지스틱 회귀분석을 이용한 '흑과 백'의 판단 결정

  • 앞 장에 이어 회귀분석에 대해 살펴보고, 여러 가지 타입으로 성능 측정을 정량화하는 방법에 대해 알아본다. 이 장에서도 회귀분석 모델을 개발하기 위해 statsmodels를 사용한다. 

6장, 나이브 베이즈 분류분석기 제작

  • 테스트 주도 개발 기법을 이용해 처음부터 가우시안 나이브 베이즈(Gaussian Naive Bayes) 알고리즘을 개발하는 데 도움을 준다.

7장, 알고리즘 선택을 통한 최적화

  • 6장에 이어 추가 사항을 계속 알아본다. 그리고 새로운 알고리즘인 랜덤 포레스트(Random Forest)를 적용해 이 결과를 향상시킬 수 있는지 살펴본다.

8장, 테스트 주도 기반 scikit-learn 학습

  • 스스로 학습하는 방법에 대해 알아본다. 여러분은 이미 이와 관련한 경험이 많을 거라고 본다. 이 장에서는 scikit-learn 문서에 대해 테스트 프레임워크를 사용하는 법을 살펴보고 이를 기반으로 구현해본다. 

9장, 전체 통합 작업

  • 여러 가지 다양한 알고리즘이 필요한 비즈니스 문제를 다룬다. 간단한 개념에서 출발해 우리에게 필요한 모든 것을 개발하고, 서드파티 라이브러리와 우리가 구현한 코드를 통합한다. 이 모든 작업을 테스트 주도로 진행한다.

 

준비 사항

이 책에서는 소프트웨어 단위 테스트를 위해 mosetest를 쓸 것이다. 또한 scikit-learn과 statsmodels 라이브러리도 사용한다.