tidymodels
tidymodels
- RESTful API예측모형을 가져와서 다음 후속 업무에 제대로 사용될 수 있는지 파악해보자. .rds
확장자를 갖는 파일에 예측모형을 바이너리로 배포한다. 이것을 plumber
를 사용해서 RESTful API로 감싸 배포하는 방법을 살펴보자. Josiah Parry (2019-09-12), “Intro to Tidy modeling”, GitHub도 유사한 사례로 볼 수 있다.
library(tidyverse)
library(tidymodels)
# penguin_predictvie_model <- fit(lasso_spec_final, data = penguin_df)
# write_rds(penguin_predictvie_model, "data/penguin_predictvie_model.rds")
penguin_predictvie_model <- read_rds("data/penguin_predictvie_model.rds")
obs_df <- tibble("species" = "Adelie",
"bill_length_mm" = 39.1,
"bill_depth_mm" = 18.7,
"flipper_length_mm" = 181,
"body_mass_g" = 3750)
predict(penguin_predictvie_model, obs_df)
# A tibble: 1 x 1
.pred_class
<fct>
1 male
# A tibble: 1 x 2
.pred_female .pred_male
<dbl> <dbl>
1 0.255 0.745
배관공(plumber)를 사용해서 수월하게 tidymodels
예측모형을 RESTful API로 변환시킬 수 있다. tidy odels
이전 RESTful API 사용에 대한 내용은 R 병렬 프로그래밍 - RESTful API부분을 참고한다.
먼저 jsonlite
팩키지 toJSON()
함수를 사용해서 펭귄 한마리를 만들어보자.
[{"species":"Adelie","bill_length_mm":39.1,"bill_depth_mm":18.7,"flipper_length_mm":181,"body_mass_g":3750}]
.json
파일 확장자를 갖는 파일로 데이터프레임에서 펭귄 한마리를 추출해서 저장시킨다.
predict
API 명세api.R
파일에 다양한 API를 명세하는데 predict/
API를 준비하여 명세한다.
#* Perform a prediction by submitting in the body of a POST request
#* @post /predict
get_prediction <- function(req) {
example <- req$postBody
parsed_example <- jsonlite::fromJSON(example)
penguin_predictvie_model <- readr::read_rds("data/penguin_predictvie_model.rds")
prediction <- predict(penguin_predictvie_model, new_data = parsed_example)
probability <- predict(penguin_predictvie_model, new_data = parsed_example, type = "prob")
return(dplyr::bind_cols(prediction, probability) %>%
bind_cols(parsed_example))
}
run.R
파일을 실행시켜 RESTful API를 웹서비스로 띄워 펭귄 정보를 넘기면 성별 여부를 판정하고 관련 정보를 반환시키게 작성한다.
RESTful API predict/
를 띄운 상태에서 .json
파일을 던져 결과를 실행시킨다.
curl localhost:8000/predict --header "Content-Type: application/json" --request POST --data @data/penguin_one.json
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 372 100 217 100 155 7233 5166 --:--:-- --:--:-- --:--:-- 12400
[{".pred_class":"male",".pred_female":0.2554,".pred_male":0.7446,"species":"Adelie","island":"Torgersen","bill_length_mm":39.1,"bill_depth_mm":18.7,"flipper_length_mm":181,"body_mass_g":3750,"sex":"male","year":2007}]
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com