13장. REST API 와 FastAPI
예측 API 의 짜임
약국에서 처방전을 내면 약사는 처방전을 확인하고, 약을 짓고, 복용법을 적어 줍니다. 예측 API 도 요청을 검사하고, 모델이 읽는 표로 바꾸고, 예측하고, 결과를 쓰기 좋은 꼴로 돌려줍니다.
1번에서 주문 JSON 을 받고, 2번에서 Pydantic 이 검사합니다. 3번에서 검사한 값을 학습 때와 같은 열 이름의 pandas 표 한 줄로 바꿉니다. 4번에서 모델이 지연 확률을 계산하고, 5번에서 확률, 기준값으로 정한 예상, 모델의 판을 담아 돌려줍니다. 여기서 처방전 확인이 입력 검사, 약 짓기가 예측, 복용법이 응답의 꼴입니다.
이 장의 엔드포인트
| 엔드포인트 | 받는 것 | 돌려주는 것 |
|---|---|---|
GET /health | 없음 | 상태와 모델의 판. 서버가 살아 있는지 감시할 때 |
GET /model | 없음 | 판, 특성, 기준값, 시험 성능 |
POST /predict | 주문 하나 | 지연 확률, 지연 예상, 기준값, 판 |
POST /predict/batch | 주문 최대 500개 | 건수와 주문마다의 결과 |
응답의 꼴
prob, threshold = 0.6143, 0.5
# 확률은 그대로, 판단은 기준값으로, 어떤 모델의 답인지는 판으로
response = {"지연확률": round(prob, 3), "지연예상": prob >= threshold, "기준값": threshold, "판": "delay-lr-1"}
print(response)코드에 나오는 함수
| 코드 | 쉬운 뜻 |
|---|---|
prob, threshold = 0.6143, 0.5 | 설명용 확률과 기준값(threshold, 문턱)이다 |
round(prob, 3) | 확률을 소수 셋째 자리까지 반올림한다 |
prob >= threshold | 확률이 기준값 이상이면 True, 아니면 False 다 |
"판": "delay-lr-1" | 어떤 모델이 낸 답인지 알리는 모델의 판(version) 이름이다 |
이 코드가 뜻하는 것
일기예보는 "비 올 확률 60%"와 함께 "우산을 챙기세요" 같은 한마디를 덧붙이고, 몇 시에 발표한 예보인지도 알려 줍니다. 여기서 비 올 확률이 지연확률, 우산을 챙기라는 한마디가 지연예상, 우산을 챙기는 문턱이 기준값, 발표 시각이 모델의 판입니다. 다만 예보는 듣는 사람이 문턱을 고를 수 없지만, 이 API 는 확률을 함께 주므로 부르는 쪽이 자기 기준값을 따로 쓸 수 있습니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
prob, threshold = ... | 모델이 낸 확률과 정해 둔 기준값 | 비 올 확률과 우산 문턱 |
"지연확률": round(prob, 3) | 확률은 그대로 담는다 | 확률 숫자 |
"지연예상": prob >= threshold | 기준값으로 판단한 결과를 담는다 | 우산을 챙길까 |
"기준값", "판" | 판단의 기준과 모델 이름을 함께 담는다 | 예보의 기준과 발표 시각 |
실행하면 {'지연확률': 0.614, '지연예상': True, '기준값': 0.5, '판': 'delay-lr-1'} 이 나옵니다. 0.614 가 0.5 이상이라 지연예상이 True 입니다. 같은 확률이라도 기준값이 0.7 인 쪽은 지연이 아니라고 판단하게 됩니다.
주의할 점
- 확률과 판단을 함께 돌려주면, 부르는 쪽이 자기 기준값을 따로 쓸 수 있습니다. 1장에서 본 것처럼 기준값은 업무에 따라 다릅니다.
- 여러 건을 부를 때는 한 건씩 여러 번보다 묶음(batch) 한 번이 빠릅니다. 네트워크 왕복과 모델 호출이 한 번이 되기 때문입니다(실습 4).