class: center, middle, inverse, title-slide # 欠損値への対応 ## Part of 📖Data Preprocessing Cookbook 👨🍳 ### Uryu Shinya ###
uribo
u_ribo
### 2019-07-03 (updated: 2019-08-27) --- --- # 概要 - 統計、機械学習モデルによっては欠損値を許容しないものが存在する - 欠損値を含んだデータ分析には3種類の障害がある - 欠損の発生には主に3つの要因が存在するが、「欠測をデータ内で統制すればランダム」を仮定することが多い (MAR) --- # 欠損を含んだデータによる障害 - 統計的処理が不可能になる - 結果にバイアスが生じる - データ資源が無駄になる --- # 欠損データのデメリット1: 統計的処理が不可能に ```r x <- c(1, NA_real_, 3, 5) mean(x) ``` ``` ## [1] NA ``` --- # 欠損データのデメリット2: 結果のバイアス ```r # 欠損を除去すれば計算はできるが mean(x, na.rm = TRUE) ``` ``` ## [1] 3 ``` --- # 欠損データのデメリット3: データ減少 ```r (x2 <- na.omit(x)) ``` ``` ## [1] 1 3 5 ## attr(,"na.action") ## [1] 2 ## attr(,"class") ## [1] "omit" ``` ```r mean(x2) ``` ``` ## [1] 3 ``` --- # 欠損発生の3つのメカニズム - 欠損は完全にランダム (MCAR) - (**MAR**) - (NMAR) --- # 欠損への対応3ステップ 1. 欠損値の特定、可視化… 欠損状況、どのように欠損しているか(パターンの有無) 2. 欠損メカニズムの理解… ランダムな欠損かどうか判断する 3. 欠損メカニズム、欠損状況に応じた削除もしくは置換(補完) - MARを仮定し、最尤法もしくは多重代入法を用いるのがベター - 機械学習的なアプローチもある --- # 欠損の視覚化 日本語入力で問題ない --- # 欠損の削除 - 欠損を含む行または特定の列で欠損がある場合に削除を行う - データセット全体で欠損がある行を削除するのは、リストワイズ除去と呼ばれる ![](../images/missing_df_set.png) .pull-left[ ```r # すべての列のいずれかで欠損している行を削除 df_hazard_kys %>% recipe(hazard ~ .) %>% * step_naomit(all_predictors()) %>% prep() %>% juice() %>% nrow() ``` ``` ## [1] 2064 ``` ] .pull-right[ ```r # 特定の列だけに欠損が含まれる場合に除去 df_hazard_kys %>% recipe(hazard ~ .) %>% * step_naomit(precipitation_max_1hour) %>% prep() %>% juice() %>% nrow() ``` ``` ## [1] 2064 ``` ] --- # 欠損の削除 --- # 代表値による代入 ```r # step_medianimpute() ``` --- # knn 欠損する値以外の変数を利用 近傍データを探索、重み付け和で欠損値を補完 ```r # step_knnimpute() ``` --- # Session info .scroll-output[ ``` ## ─ Session info ────────────────────────────────────────────────────────── ## setting value ## version R version 3.6.0 (2019-04-26) ## os Debian GNU/Linux 9 (stretch) ## system x86_64, linux-gnu ## ui X11 ## language (EN) ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC ## date 2019-08-27 ## ## ─ Packages ────────────────────────────────────────────────────────────── ## package * version date lib ## assertr 2.6 2019-01-22 [1] ## assertthat 0.2.1 2019-03-21 [1] ## backports 1.1.4 2019-04-10 [1] ## base64enc 0.1-3 2015-07-28 [1] ## bayesplot 1.7.0 2019-05-23 [1] ## boot 1.3-22 2019-04-02 [2] ## broom * 0.5.2 2019-04-07 [1] ## callr 3.2.0 2019-03-15 [1] ## cellranger 1.1.0 2016-07-27 [1] ## class 7.3-15 2019-01-01 [2] ## cli 1.1.0 2019-03-19 [1] ## codetools 0.2-16 2018-12-24 [2] ## colorspace 1.4-1 2019-03-18 [1] ## colourpicker 1.0 2017-09-27 [1] ## conflicted * 1.0.4 2019-06-21 [1] ## crayon 1.3.4 2017-09-16 [1] ## crosstalk 1.0.0 2016-12-21 [1] ## dials * 0.0.2 2018-12-09 [1] ## digest 0.6.19 2019-05-20 [1] ## dplyr * 0.8.1 2019-05-14 [1] ## DT 0.7 2019-06-11 [1] ## dygraphs 1.1.1.6 2018-07-11 [1] ## emo 0.0.0.9000 2019-06-28 [1] ## evaluate 0.14 2019-05-28 [1] ## forcats * 0.4.0 2019-02-17 [1] ## generics 0.0.2 2018-11-29 [1] ## ggplot2 * 3.2.0 2019-06-16 [1] ## ggridges 0.5.1 2018-09-27 [1] ## glue 1.3.1.9000 2019-08-27 [1] ## gower 0.2.1 2019-05-14 [1] ## gridExtra 2.3 2017-09-09 [1] ## gtable 0.3.0 2019-03-25 [1] ## gtools 3.8.1 2018-06-26 [1] ## haven 2.1.0 2019-02-19 [1] ## here 0.1 2017-05-28 [1] ## hms 0.4.2 2018-03-10 [1] ## htmltools 0.3.6 2017-04-28 [1] ## htmlwidgets 1.3 2018-09-30 [1] ## httpuv 1.5.1 2019-04-05 [1] ## httr 1.4.0 2018-12-11 [1] ## icon 0.1.0 2019-08-27 [1] ## igraph 1.2.4.1 2019-04-22 [1] ## infer * 0.4.0.1 2019-04-22 [1] ## inline 0.3.15 2018-05-18 [1] ## ipred 0.9-9 2019-04-28 [1] ## janeaustenr 0.1.5 2017-06-10 [1] ## jsonlite 1.6 2018-12-07 [1] ## knitr 1.23 2019-05-18 [1] ## later 0.8.0 2019-02-11 [1] ## lattice 0.20-38 2018-11-04 [2] ## lava 1.6.5 2019-02-12 [1] ## lazyeval 0.2.2 2019-03-15 [1] ## lme4 1.1-21 2019-03-05 [1] ## loo 2.1.0 2019-03-13 [1] ## lubridate 1.7.4 2018-04-11 [1] ## magrittr 1.5 2014-11-22 [1] ## markdown 1.0 2019-06-07 [1] ## MASS 7.3-51.4 2019-03-31 [2] ## Matrix 1.2-17 2019-03-22 [2] ## matrixStats 0.54.0 2018-07-23 [1] ## memoise 1.1.0 2017-04-21 [1] ## mime 0.7 2019-06-11 [1] ## miniUI 0.1.1.1 2018-05-18 [1] ## minqa 1.2.4 2014-10-09 [1] ## modelr 0.1.4 2019-02-18 [1] ## munsell 0.5.0 2018-06-12 [1] ## nlme 3.1-139 2019-04-09 [2] ## nloptr 1.2.1 2018-10-03 [1] ## nnet 7.3-12 2016-02-02 [2] ## parsnip * 0.0.2 2019-03-22 [1] ## pillar 1.4.1 2019-05-28 [1] ## pkgbuild 1.0.3 2019-03-20 [1] ## pkgconfig 2.0.2 2018-08-16 [1] ## plyr 1.8.4 2016-06-08 [1] ## prettyunits 1.0.2 2015-07-13 [1] ## pROC 1.15.0 2019-06-01 [1] ## processx 3.3.1 2019-05-08 [1] ## prodlim 2018.04.18 2018-04-18 [1] ## promises 1.0.1 2018-04-13 [1] ## ps 1.3.0 2018-12-21 [1] ## purrr * 0.3.2 2019-03-15 [1] ## R6 2.4.0 2019-02-14 [1] ## Rcpp 1.0.1 2019-03-17 [1] ## readr * 1.3.1 2018-12-21 [1] ## readxl 1.3.1 2019-03-13 [1] ## recipes * 0.1.5 2019-03-21 [1] ## reshape2 1.4.3 2017-12-11 [1] ## rlang 0.3.4 2019-04-07 [1] ## rmarkdown 1.13 2019-05-22 [1] ## rpart 4.1-15 2019-04-12 [2] ## rprojroot 1.3-2 2018-01-03 [1] ## rsample * 0.0.4 2019-01-07 [1] ## rsconnect 0.8.13 2019-01-10 [1] ## rstan 2.18.2 2018-11-07 [1] ## rstanarm 2.18.2 2018-11-10 [1] ## rstantools 1.5.1 2018-08-22 [1] ## rstudioapi 0.10 2019-03-19 [1] ## rvest 0.3.4 2019-05-15 [1] ## scales * 1.0.0 2018-08-09 [1] ## sessioninfo 1.1.1 2018-11-05 [1] ## shiny 1.3.2 2019-04-22 [1] ## shinyjs 1.0 2018-01-08 [1] ## shinystan 2.5.0 2018-05-01 [1] ## shinythemes 1.1.2 2018-11-06 [1] ## SnowballC 0.6.0 2019-01-15 [1] ## StanHeaders 2.18.1-10 2019-06-14 [1] ## stringi 1.4.3 2019-03-12 [1] ## stringr * 1.4.0 2019-02-10 [1] ## survival 2.44-1.1 2019-04-01 [2] ## threejs 0.3.1 2017-08-13 [1] ## tibble * 2.1.3 2019-06-06 [1] ## tidymodels * 0.0.2 2018-11-27 [1] ## tidyposterior 0.0.2 2018-11-15 [1] ## tidypredict 0.3.0 2019-01-10 [1] ## tidyr * 0.8.3 2019-03-01 [1] ## tidyselect 0.2.5 2018-10-11 [1] ## tidytext 0.2.1 2019-06-14 [1] ## tidyverse * 1.2.1 2017-11-14 [1] ## timeDate 3043.102 2018-02-21 [1] ## tokenizers 0.2.1 2018-03-29 [1] ## withr 2.1.2 2018-03-15 [1] ## xaringan 0.10 2019-05-14 [1] ## xfun 0.7 2019-05-14 [1] ## xml2 1.2.0 2018-01-24 [1] ## xtable 1.8-4 2019-04-21 [1] ## xts 0.11-2 2018-11-05 [1] ## yaml 2.2.0 2018-07-25 [1] ## yardstick * 0.0.3 2019-03-08 [1] ## zoo 1.8-6 2019-05-28 [1] ## source ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (hadley/emo@02a5206) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (tidyverse/glue@7ac044a) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (ropenscilabs/icon@a510f88) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## ## [1] /usr/local/lib/R/site-library ## [2] /usr/local/lib/R/library ``` ]