Upgrade to Pro — share decks privately, control downloads, hide ads and more …

tidymodels紹介「モデリング過程料理で表現できる説」

Ringa_hyj
December 05, 2020

 tidymodels紹介「モデリング過程料理で表現できる説」

JapanR 20201205 一般LT
R
tidymodels

Ringa_hyj

December 05, 2020
Tweet

More Decks by Ringa_hyj

Other Decks in Technology

Transcript

  1. japan.R 2020/12/5

    View Slide

  2. @Ringa_hyj
    @Ringa_hyj
    Name <- ‘@Ringa_hyj’
    自 己 紹 介
    スライドの
    間違い・指摘
    歓迎致します

    View Slide

  3. https://www.slideshare.net/YutakaKuroki/tokyo-r-20181110 https://speakerdeck.com/dropout009/tokyo-dot-r83
    Rコミュニティを通して知ったtidymodelsの存在
    https://speakerdeck.com/dropout009/tidymodelsniyorutidynaji-jie-xue-xi
    https://speakerdeck.com/s_uryu/tidymodels

    View Slide

  4. 知らないパッケージを知る機会
    やっぱRコミュニティええなぁ…
    受け取ったからには
    何かお返ししたい!!
    今日やること

    View Slide

  5. tidymodelsの紹介
    検 証 対 象
    今日やること

    View Slide


  6. 今日やること

    View Slide

  7. 料理に例えるので親しんでもらいたい
    今日やること
    install.packages(‘tidymodels’)
    library(tidymodels) いれてみて!!

    View Slide

  8. 飛行機の遅延予測

    View Slide

  9. 食材 の準備 =
    欠損値
    messy
    データ準備・前処理
    library(nycflights13)
    #まず確認
    library(skimr)
    skim(flights)
    library(tidyverse)
    glimpse(flights)
    #余分なゴミを落とす
    flight_data <-
    flights %>%
    mutate(
    arr_delay = ifelse(arr_delay >= 30, "late", "on_time"),
    arr_delay = factor(arr_delay),
    date = as.Date(time_hour)
    ) %>%
    inner_join(weather, by = c("origin", "time_hour")) %>%
    select(dep_time, flight, origin, dest, air_time, distance,
    carrier, date, arr_delay, time_hour) %>%
    na.omit() %>%
    mutate_if(is.character, as.factor)

    View Slide

  10. 食材 の準備 = データ準備・前処理

    View Slide

  11. 食材 の確認 =
    #食材の状態や揃っているかを確認
    p <- ggplot(flight_data, aes(x = carrier,fill=arr_delay)) +
    geom_bar(stat = "count",position = "stack") +
    stat_count(aes(label = ..count..),
    geom = "text", vjust = 2, colour = "red")
    library(plotly)
    ggplotly(p)
    EDAで確認
    EDA

    View Slide

  12. 食材 の確認 = EDA

    View Slide

  13. 味見・評価 する人 = train,test,valid
    #試食者にだけウケる味でなく
    #色々な人に良い評価をもらうため
    set.seed(123)
    data_split <- initial_split(flight_data, prop = 0.7)
    train_data <- training(data_split)
    test_data <- testing(data_split)
    train test
    valid
    感想:内輪ウケ
    世間的な評価
    口コミ
    感想:一般ウケ

    View Slide

  14. 調理手順 の設定 = モデル学習用の前処理
    #どんな手順で調理するのが効率的か
    #料理直前の下ごしらえ
    #trainとtestの人で提供する食材の部分が変化しないか
    flights_rec <-
    recipe(arr_delay ~ ., data = train_data) %>%
    update_role(flight, time_hour, new_role = "ID") %>%
    step_date(date, features = c("dow", "month")) %>%
    step_holiday(date, holidays = timeDate::listHolidays("US")) %>%
    step_rm(date) %>%
    step_dummy(all_nominal(), -all_outcomes()) %>%
    step_zv(all_predictors())
    #step_smote()今回不均衡だが不使用 ← themisにも対応
    #recipeをかけた後がどうなるか
    #調理前にデータを味見する
    #prep, bake, juice
    flights_rec%>% prep() %>% juice()
    flights_rec %>% prep() %>% bake(test_data)

    View Slide

  15. 調理手順 の設定 = モデル学習用の前処理
    従来まで
    ・testにないカテゴリをone hotしないように!
    ・ID列を予測に使ってないよな?
    ・どの列box-coxしたっけ?
    ・日付から月,日,曜日の特徴量合成したっけ?
    ・正規化終わってたっけ?
    ・予測対象がleakしてないよな?
    ・あ、testにも同じパラメタで処理しなきゃいけないんだった…
    juice(), bake()
    レシピを展開

    View Slide

  16. 調理器具 の設定 = モデル決め
    #調理前の下ごしらえも終わった
    #調理器具によってはマッチしない下ごしらえもある
    #フライパンか鍋か、IHかガスか
    lr_mod <-
    logistic_reg() %>%
    set_engine("glm")

    View Slide

  17. 調理器具 の設定 = モデル決め
    モデル式の記述の違い(ベクトル,マトリックス,列名)
    lm glmnet
    lr_mod <- logistic_reg() %>% set_engine("lm")
    lr_mod <- logistic_reg() %>% set_engine("glm")

    View Slide

  18. 調理器具 の設定 = モデル決め
    内部パラメタの名前の違い(おなじチューニングパラメタなのに…)
    ranger randomForest
    ranger randomForest parsnip
    抽出サイズ mtry mtry → mtry
    木の数 num.trees ntree → trees
    分割サイズ min.node.size nodesize → min_n

    View Slide

  19. 調理場
    手順と器具を持って へ = 学習・推論
    #調理場へ持っていく
    flights_wflow <-
    workflow() %>%
    add_model(lr_mod) %>%
    add_recipe(flights_rec)
    #いざ調理
    flights_fit <-
    flights_wflow %>%
    fit(data = train_data)
    #完成
    predict(flights_fit, test_data)
    predict(flights_fit, test_data, type = "prob")

    View Slide

  20. 調理場
    手順と器具を持って へ = 学習・推論
    従来のsummary()
    oh, messy…

    View Slide

  21. 調理場
    手順と器具を持って へ = 学習・推論
    tidy() is tidy !

    View Slide

  22. 調理場
    手順と器具を持って へ = 学習・推論
    bootstrapして
    fitして
    結果をnest & tidyにして
    回帰係数のサンプリング分布から
    最善モデルの選択

    View Slide

  23. 料理人 から話を聞く= レシピ,データ逆引き
    #さっき調理fitした結果
    #flights_fit <-
    # flights_wflow %>%
    # fit(data = train_data)
    #食材教えてぇな
    flights_fit %>%
    pull_workflow_mold()
    #レシピ教えてぇな
    flights_fit %>%
    pull_workflow_prepped_recipe() %>%
    broom::tidy()
    flights_fit %>%
    pull_workflow_preprocessor() %>%
    broom::tidy()

    View Slide

  24. #評価結果は?
    flights_pred <- predict(flights_fit, test_data, type = "prob") %>%
    bind_cols(test_data %>% select(arr_delay,time_hour,flight))
    flights_pred %>%
    roc_curve(truth = arr_delay, .pred_late) %>%
    autoplot()
    世間的な評価
    口コミ
    評価 を調べる= 評価指標の確認

    View Slide

  25. 評価 を調べる= 評価指標の確認
    Tidymodelsのpredict思想
    ・ 入 力 デ ー タ と 同 じ だ け の p r e d を
    ( 行 数 一 致 、 b i n d _ c o l で き る )
    ・ I D 列 を 常 に 隣 に 保 持 で き る よ う に
    ・ 列 名 は 「 . p r e d 」 で 被 り な く

    View Slide

  26. Enjoy !

    View Slide

  27. reference
    https://www.tidymodels.org/
    https://rstudio-conf-2020.github.io/applied-ml/Part_3.html#1
    https://unsplash.com/
    https://www.tidyverse.org/blog/2020/02/themis-0-1-0/

    View Slide