0Pricing
R Academy · 강의

워크플로: 레시피와 모델 결합

전처리와 모델을 하나의 워크플로 객체로 묶습니다.

워크플로: 레시피와 모델 결합은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

워크플로란 무엇인가요

워크플로는 레시피와 모델 사양을 하나의 객체로 묶습니다. 이는 중요한 문제를 해결합니다. 교차 검증과 최종 적합 과정에서 전처리 단계와 모델링 단계를 하나의 단위로 처리해야 하며, 그렇지 않으면 정규화 평균과 같은 매개변수가 테스트 폴드에서 누출될 수 있습니다.

library(workflows)

# Start an empty workflow
wf <- workflow()
print(wf)

# Workflows have two slots: preprocessor and model
# Both must be filled before fitting

add_recipe() 및 add_model()

add_recipe(rec)를 사용해 레시피 전처리기를 연결하고, add_model(spec)을 사용해 parsnip 모델 사양을 연결합니다. 파이프 연산자를 사용하면 코드의 의미가 매우 명확해집니다.

library(recipes)
library(parsnip)
library(workflows)

rec <- recipe(price ~ ., data = train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_normalize(all_numeric_predictors())

spec <- linear_reg() |> set_engine('lm')

wf <- workflow() |>
  add_recipe(rec) |>
  add_model(spec)

print(wf)

워크플로에서 fit() 사용

워크플로에서 fit(wf, data = train)을 호출하면 학습 데이터를 사용해 레시피에 자동으로 prep()을 적용한 다음, 전처리된 특징으로 모델을 학습합니다. prep()이나 bake()를 직접 호출할 필요가 없습니다.

fitted_wf <- fit(wf, data = housing_train)

# The fitted workflow stores both the prepped recipe
# and the trained model
print(fitted_wf)

적합된 워크플로에서 predict() 사용

predict(fitted_wf, new_data = test)를 호출하면 워크플로가 학습된 레시피를 사용해 새 데이터에 자동으로 bake()를 적용한 후 예측을 생성합니다. 따라서 테스트 데이터를 전처리하는 것을 잊을 위험이 없어집니다.

# Predictions automatically preprocess the test data
preds <- predict(fitted_wf, new_data = housing_test)
head(preds)

# For classification
preds_prob <- predict(fitted_wf, new_data = test_df, type = 'prob')
preds_class <- predict(fitted_wf, new_data = test_df, type = 'class')

last_fit() — 전체 데이터로 학습하고 테스트에서 평가

last_fit(wf, split)은 최종 워크플로와 초기 학습/테스트 분할 객체를 받습니다. 워크플로를 학습 부분에 적합한 뒤 테스트 부분에서 평가하며, 조정이 끝난 후 수행하는 표준 최종 모델 평가 단계입니다.

library(rsample)

split <- initial_split(housing_data, prop = 0.8, strata = price)

# Fit on training, evaluate on test
final_res <- last_fit(wf, split)

# View performance on the held-out test set
collect_metrics(final_res)

extract_fit_parsnip()

extract_fit_parsnip(fitted_wf)는 적합된 워크플로에서 학습된 parsnip 모델 객체를 추출합니다. 그런 다음 계수나 변수 중요도를 확인하거나 모델 설명 도구에 전달할 수 있습니다.

fitted_wf <- fit(wf, data = housing_train)

# Extract the parsnip model
parsnip_fit <- extract_fit_parsnip(fitted_wf)

# Now access the underlying model
tidy(parsnip_fit)      # coefficients for lm
vip::vip(parsnip_fit)  # variable importance plot

extract_recipe()

extract_recipe(fitted_wf)는 적합된 워크플로에서 준비된 레시피를 반환합니다. 어떤 변환이 적용되었는지 확인하거나, 학습된 전처리를 가져와 외부 데이터에 독립적으로 적용할 때 유용합니다.

fitted_wf <- fit(wf, data = housing_train)

# Get the prepped recipe
prepped_rec <- extract_recipe(fitted_wf)

# Inspect normalization stats
tidy(prepped_rec, number = 3)  # step_normalize details

# Apply recipe to completely new external data
new_baked <- bake(prepped_rec, new_data = brand_new_df)

워크플로에서 augment() 사용

augment(fitted_wf, new_data)는 입력 데이터 프레임에 예측 열을 추가해 반환합니다. 회귀에서는 .pred를 추가하고, 분류에서는 .pred_class와 각 클래스의 확률 열을 추가합니다.

fitted_wf <- fit(wf, data = housing_train)

# Append predictions to the test data frame
results <- augment(fitted_wf, new_data = housing_test)

# Now compute metrics directly
library(yardstick)
results |>
  metrics(truth = price, estimate = .pred)

워크플로 업데이트

처음부터 다시 만들지 않고도 update_recipe() 또는 update_model()을 사용해 워크플로의 개별 구성 요소를 업데이트할 수 있습니다. 동일한 레시피를 유지하면서 모델 엔진을 바꾸고 싶을 때 실험 과정에서 유용합니다.

# Original workflow with lm
wf_lm <- workflow() |>
  add_recipe(rec) |>
  add_model(linear_reg() |> set_engine('lm'))

# Swap model to random forest, keep same recipe
wf_rf <- update_model(
  wf_lm,
  rand_forest(trees = 300) |>
    set_engine('ranger') |>
    set_mode('regression')
)

fit_rf <- fit(wf_rf, data = housing_train)

add_formula()와 add_recipe() 비교

레시피가 필요하지 않다면 add_formula(outcome ~ .)을 전처리기로 사용할 수 있습니다. 이는 최소한의 변환만 적용합니다(수식 사양만 적용). 특징 공학이 필요하면 add_recipe()를 사용하고, 빠른 기준선 모델에는 add_formula()를 사용합니다.

# Simple baseline — no recipe needed
baseline_wf <- workflow() |>
  add_formula(price ~ sqft + bedrooms + bathrooms) |>
  add_model(linear_reg() |> set_engine('lm'))

baseline_fit <- fit(baseline_wf, data = housing_train)
baseline_preds <- predict(baseline_fit, new_data = housing_test)

# Compare RMSE to recipe-based model
yardstick::rmse_vec(housing_test$price, baseline_preds$.pred)

비교를 위한 워크플로 집합

workflowsets 패키지의 workflow_set()은 여러 레시피와 모델 사양을 조합한 워크플로 모음을 만듭니다. 그런 다음 workflow_map()을 사용해 모든 조합을 한 번에 조정하고 평가할 수 있습니다.

library(workflowsets)

all_workflows <- workflow_set(
  preproc = list(basic = basic_rec, full = full_rec),
  models  = list(
    lm  = linear_reg() |> set_engine('lm'),
    rf  = rand_forest(trees = 200) |> set_engine('ranger') |> set_mode('regression')
  )
)

# Fit all 4 combinations on resamples
results <- workflow_map(all_workflows, 'fit_resamples', resamples = cv_folds)
autoplot(results)

빠른 확인

직접 적합하고 예측하는 대신 last_fit(workflow, split)을 사용하는 가장 큰 이점은 무엇인가요?

워크플로 요약

레시피와 모델을 결합하는 워크플로의 핵심 내용:

  • workflow() |> add_recipe(rec) |> add_model(spec)은 전처리와 모델링을 하나로 묶습니다.
  • fit(wf, data = train)은 한 번의 호출로 레시피를 준비하고 모델을 학습합니다.
  • predict(fitted_wf, new_data)는 예측 전에 새 데이터에 자동으로 bake()를 적용합니다.
  • last_fit(wf, split)은 학습 데이터로 학습하고 테스트 데이터에서 평가하므로 최종 모델 평가에 사용합니다.
  • extract_fit_parsnip()과 extract_recipe()는 확인을 위해 구성 요소를 추출합니다.
  • augment()는 지표를 쉽게 계산할 수 있도록 데이터 프레임에 예측값을 추가합니다.
  • workflow_set()은 여러 레시피와 모델 조합을 동시에 비교합니다.
# Canonical tidymodels workflow pattern
split    <- initial_split(data, prop = 0.8)
train    <- training(split)
test     <- testing(split)

rec  <- recipe(y ~ ., data = train) |> step_normalize(all_numeric_predictors())
spec <- rand_forest(trees = 300) |> set_engine('ranger') |> set_mode('regression')

wf   <- workflow() |> add_recipe(rec) |> add_model(spec)

final_res <- last_fit(wf, split)
collect_metrics(final_res)

자주 묻는 질문

“워크플로: 레시피와 모델 결합” 강의는 무료인가요?

네 — “워크플로: 레시피와 모델 결합” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“워크플로: 레시피와 모델 결합”에서 뭘 배우나요?

전처리와 모델을 하나의 워크플로 객체로 묶습니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“워크플로: 레시피와 모델 결합” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. recipes를 활용한 특성 공학
  2. parsnip으로 모델 사양 정의
  3. 워크플로: 레시피와 모델 결합
  4. rsample을 활용한 재표본추출과 교차 검증
← R Academy(으)로 돌아가기