0Pricing
R Academy · レッスン

ワークフロー:レシピとモデルの組み合わせ

前処理とモデルを単一のワークフローオブジェクトにまとめます。

「ワークフロー:レシピとモデルの組み合わせ」はCoddyKit上の無料R Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

ワークフローとは

ワークフローは、レシピとモデル仕様を1つのオブジェクトにまとめたものです。これは重要な問題を解決します。交差検証や最終的な学習では、前処理とモデル化の手順を1つの単位として扱う必要があります。そうしないと、正規化の平均値などのパラメーターがテスト用フォールドから漏洩する可能性があります。

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)は、最終的なワークフローと最初に作成したtrain/test分割オブジェクトを受け取ります。ワークフローを学習用部分で学習させ、テスト用部分で評価します。これは、チューニング完了後に行う標準的な最終モデル評価の手順です。

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)

比較のためのWorkflow Sets

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)は、1回の呼び出しでレシピを準備し、モデルを学習させます。
  • 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時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「ワークフロー:レシピとモデルの組み合わせ」で何を学びますか?

前処理とモデルを単一のワークフローオブジェクトにまとめます。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ワークフロー:レシピとモデルの組み合わせ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. recipes による特徴量エンジニアリング
  2. parsnip によるモデル仕様の定義
  3. ワークフロー:レシピとモデルの組み合わせ
  4. rsample による再標本化と交差検証
← R Academyに戻る