Goal is to predict CEO departure

Import Data

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(correlationfunnel)
## Warning: package 'correlationfunnel' was built under R version 4.3.2
## ══ Using correlationfunnel? ════════════════════════════════════════════════════
## You might also be interested in applied data science training for business.
## </> Learn more at - www.business-science.io </>
departures <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-04-27/departures.csv')
## Rows: 9423 Columns: 19
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr   (8): coname, exec_fullname, interim_coceo, still_there, notes, sources...
## dbl  (10): dismissal_dataset_id, gvkey, fyear, co_per_rol, departure_code, c...
## dttm  (1): leftofc
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Clean Data

skimr::skim(departures)
Data summary
Name departures
Number of rows 9423
Number of columns 19
_______________________
Column type frequency:
character 8
numeric 10
POSIXct 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
coname 0 1.00 2 30 0 3860 0
exec_fullname 0 1.00 5 790 0 8701 0
interim_coceo 9105 0.03 6 7 0 6 0
still_there 7311 0.22 3 10 0 77 0
notes 1644 0.83 5 3117 0 7755 0
sources 1475 0.84 18 1843 0 7915 0
eight_ks 4499 0.52 69 3884 0 4914 0
_merge 0 1.00 11 11 0 1 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
dismissal_dataset_id 0 1.00 5684.10 25005.46 1 2305.5 4593 6812.5 559044 ▇▁▁▁▁
gvkey 0 1.00 40132.48 53921.34 1004 7337.0 14385 60900.5 328795 ▇▁▁▁▁
fyear 0 1.00 2007.74 8.19 1987 2000.0 2008 2016.0 2020 ▁▆▅▅▇
co_per_rol 0 1.00 25580.22 18202.38 -1 8555.5 22980 39275.5 64602 ▇▆▅▃▃
departure_code 1667 0.82 5.20 1.53 1 5.0 5 7.0 9 ▁▃▇▅▁
ceo_dismissal 1813 0.81 0.20 0.40 0 0.0 0 0.0 1 ▇▁▁▁▂
tenure_no_ceodb 0 1.00 1.03 0.17 0 1.0 1 1.0 3 ▁▇▁▁▁
max_tenure_ceodb 0 1.00 1.05 0.24 1 1.0 1 1.0 4 ▇▁▁▁▁
fyear_gone 1802 0.81 2006.64 13.63 1980 2000.0 2007 2013.0 2997 ▇▁▁▁▁
cik 245 0.97 741469.17 486551.43 1750 106413.0 857323 1050375.8 1808065 ▆▁▇▂▁

Variable type: POSIXct

skim_variable n_missing complete_rate min max median n_unique
leftofc 1802 0.81 1981-01-01 2998-04-27 2006-12-31 3627
factors_vec <- departures %>% select( departure_code, tenure_no_ceodb, max_tenure_ceodb, ceo_dismissal) %>% names()

data_clean <- departures %>%
  select(-interim_coceo, -still_there, -eight_ks, -notes, -sources, -leftofc) %>%
  
    # remove NA's
  na.omit() %>%
  
  # address factors imported as numeric
  mutate(across(all_of(factors_vec), as.factor)) %>%
  
  # drop zero variance variable name
  select(-c(`_merge`))

Explore Data

data_clean %>% count(ceo_dismissal)
## # A tibble: 2 × 2
##   ceo_dismissal     n
##   <fct>         <int>
## 1 0              5822
## 2 1              1439
data_clean %>%
  ggplot(aes(ceo_dismissal)) +
  geom_bar()

fyear vs interim_coceo

data_clean %>%
  ggplot(aes(ceo_dismissal, )) + 
  geom_boxplot()

correlation plot

# step 1: binarize
data_binarized <- data_clean %>%
  binarize()

data_binarized %>% glimpse()
## Rows: 7,261
## Columns: 43
## $ `dismissal_dataset_id__-Inf_2159` <dbl> 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ dismissal_dataset_id__2159_4330   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ dismissal_dataset_id__4330_6564   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ dismissal_dataset_id__6564_Inf    <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ coname__BARRICK_GOLD_CORP         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `coname__-OTHER`                  <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ `gvkey__-Inf_6867`                <dbl> 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ gvkey__6867_13283                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ gvkey__13283_30025                <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ gvkey__30025_Inf                  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `fyear__-Inf_1999`                <dbl> 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, …
## $ fyear__1999_2006                  <dbl> 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, …
## $ fyear__2006_2012                  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, …
## $ fyear__2012_Inf                   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `co_per_rol__-Inf_6968`           <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ co_per_rol__6968_18252            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ co_per_rol__18252_33294           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ co_per_rol__33294_Inf             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ exec_fullname__John_W._Rowe       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `exec_fullname__-OTHER`           <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ departure_code__1                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ departure_code__2                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ departure_code__3                 <dbl> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, …
## $ departure_code__4                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ departure_code__5                 <dbl> 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, …
## $ departure_code__6                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ departure_code__7                 <dbl> 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, …
## $ ceo_dismissal__0                  <dbl> 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, …
## $ ceo_dismissal__1                  <dbl> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, …
## $ tenure_no_ceodb__1                <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ tenure_no_ceodb__2                <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `tenure_no_ceodb__-OTHER`         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ max_tenure_ceodb__1               <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ max_tenure_ceodb__2               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `max_tenure_ceodb__-OTHER`        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `fyear_gone__-Inf_2000`           <dbl> 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, …
## $ fyear_gone__2000_2006             <dbl> 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, …
## $ fyear_gone__2006_2013             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, …
## $ fyear_gone__2013_Inf              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `cik__-Inf_101063`                <dbl> 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, …
## $ cik__101063_832428                <dbl> 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, …
## $ cik__832428_1024302               <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ cik__1024302_Inf                  <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, …
# step 2: correlation
data_correlation <- data_binarized %>%
  correlate(ceo_dismissal__1)

data_correlation
## # A tibble: 43 × 3
##    feature        bin       correlation
##    <fct>          <chr>           <dbl>
##  1 ceo_dismissal  0             -1     
##  2 ceo_dismissal  1              1     
##  3 departure_code 3              0.929 
##  4 departure_code 5             -0.482 
##  5 departure_code 7             -0.298 
##  6 departure_code 4              0.274 
##  7 fyear          -Inf_1999     -0.0785
##  8 departure_code 6             -0.0784
##  9 co_per_rol     -Inf_6968     -0.0598
## 10 fyear_gone     -Inf_2000     -0.0589
## # ℹ 33 more rows
# step 3: plot
data_correlation %>%
  correlationfunnel::plot_correlation_funnel()

Model building

Split data

library(tidymodels)
## ── Attaching packages ────────────────────────────────────── tidymodels 1.1.1 ──
## ✔ broom        1.0.5     ✔ rsample      1.2.0
## ✔ dials        1.2.0     ✔ tune         1.1.2
## ✔ infer        1.0.5     ✔ workflows    1.1.3
## ✔ modeldata    1.2.0     ✔ workflowsets 1.0.1
## ✔ parsnip      1.1.1     ✔ yardstick    1.2.0
## ✔ recipes      1.0.8
## ── Conflicts ───────────────────────────────────────── tidymodels_conflicts() ──
## ✖ scales::discard() masks purrr::discard()
## ✖ dplyr::filter()   masks stats::filter()
## ✖ recipes::fixed()  masks stringr::fixed()
## ✖ dplyr::lag()      masks stats::lag()
## ✖ yardstick::spec() masks readr::spec()
## ✖ recipes::step()   masks stats::step()
## • Dig deeper into tidy modeling with R at https://www.tmwr.org
set.seed(1234)
data_clean <- data_clean %>% sample_n(100)

data_split <- initial_split(data_clean, strata = coname)
## Warning: Too little data to stratify.
## • Resampling will be unstratified.
data_train <- training(data_split)
data_test <- testing(data_split)

data_cv <- rsample::vfold_cv(data_train, strata = coname)
## Warning: Too little data to stratify.
## • Resampling will be unstratified.
data_cv
## #  10-fold cross-validation using stratification 
## # A tibble: 10 × 2
##    splits         id    
##    <list>         <chr> 
##  1 <split [67/8]> Fold01
##  2 <split [67/8]> Fold02
##  3 <split [67/8]> Fold03
##  4 <split [67/8]> Fold04
##  5 <split [67/8]> Fold05
##  6 <split [68/7]> Fold06
##  7 <split [68/7]> Fold07
##  8 <split [68/7]> Fold08
##  9 <split [68/7]> Fold09
## 10 <split [68/7]> Fold10

Preprocess data

library(themis)
## Warning: package 'themis' was built under R version 4.3.3
xgboost_ceo <- recipes::recipe(coname ~ ., data = data_train) %>%
  update_role(cik, new_role = "ID") %>%
  step_dummy(all_nominal_predictors()) %>%
  step_smote(coname)

xgboost_ceo %>% prep() %>% juice() %>% glimpse()
## Rows: 75
## Columns: 93
## $ dismissal_dataset_id                      <dbl> 2216, 3351, 6849, 1535, 858,…
## $ gvkey                                     <dbl> 7146, 10247, 61399, 5179, 32…
## $ fyear                                     <dbl> 1994, 1999, 2015, 2010, 2002…
## $ co_per_rol                                <dbl> 3482, 2117, 54385, 3231, 246…
## $ fyear_gone                                <dbl> 1994, 1999, 2016, 2010, 2002…
## $ cik                                       <dbl> 63754, 96021, 899923, 41719,…
## $ coname                                    <fct> MCCORMICK & CO INC, SYSCO CO…
## $ exec_fullname_Alvin.Bernard.Krongard      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Andrew.C..Teich             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Bailey.A..Thomas            <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Bill.D..Helton              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Bill.M..Lindig              <dbl> 0, 1, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Carl.A..Gilbert             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Charles.D..Way              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Christopher.J..Amenson      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Claude.E..Davis             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Dana.G..Mead                <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Daniel.D..Crowley           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1…
## $ exec_fullname_David.E..O.Reilly           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_David.P..King               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_David.S..Boyer              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_David.Stanley               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_David.Willis.Johnson        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Dennis.J..Picard            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Donald.R..Roden             <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0…
## $ exec_fullname_Edward.L..Grund             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Elliot.Bernstein            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Eric.A..Benhamou            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_George.D..Leal              <dbl> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0…
## $ exec_fullname_George.H..Glatfelter.II     <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_H..William.Lichtenberger    <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Howard.G..Bubb              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Howard.L..Lance             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Jack.O..Bovender.Jr.        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_James.A..Johnson            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_James.Stuart.Pignatelli     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_James.W..McGinley           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Jeffrey.J..Zwick            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_John.Bonnet.McCoy           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_John.M..Gregory             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_John.M..O.Meara             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_John.W..Rollins             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Kenneth.P..Manning          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Kenneth.W..Lowe             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Kevin.W..Mooney             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Leonard.D..Schaeffer        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Linda.A..Lang               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Lou.Weisbach                <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Mark.G..Parker              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Mark.T..Smucker             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Marshall.C..Turner.Jr.      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Michael.D..Dean             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Michael.J..Kowalski         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Michael.T..Wedge            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Mitchell.Harris.Caplan.J.D. <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Neil.R..Austrian            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Nicholas.J..St..George      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Norman.P..Blake.Jr.         <dbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0…
## $ exec_fullname_Patrick.S..O.Keefe          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Peter.D..Meldrum            <dbl> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Peter.Jeffrey.Kight         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Ralph.E..Faison             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Ralph.H..Thurman            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Robert.S..Silberman         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Ronald.A..Malone            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Stephen.F..Wiggins          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Stephen.G..Hanks            <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0…
## $ exec_fullname_Stephen.W..Golsby           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Steven.R..Appleton          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Thomas.C..Gallagher         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Thomas.Carson               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Thomas.M..Patrick           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Vernon.W..Hill.II           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_W..Thomas.Gould             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_William.Allen.Cooper        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_William.B..Ruger.Jr.        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_William.B..Timmerman        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0…
## $ exec_fullname_William.G..Bares            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_William.H..Lacy             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_William.L..Mansfield        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ exec_fullname_Yvon.Pierre.Cariou          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ departure_code_X2                         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ departure_code_X3                         <dbl> 0, 0, 0, 0, 1, 0, 0, 1, 0, 1…
## $ departure_code_X4                         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ departure_code_X5                         <dbl> 0, 1, 1, 1, 0, 0, 1, 0, 0, 0…
## $ departure_code_X6                         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ departure_code_X7                         <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 1, 0…
## $ ceo_dismissal_X1                          <dbl> 0, 0, 0, 0, 1, 0, 0, 1, 0, 1…
## $ tenure_no_ceodb_X2                        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ tenure_no_ceodb_X3                        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ max_tenure_ceodb_X2                       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ max_tenure_ceodb_X3                       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ max_tenure_ceodb_X4                       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

Specify model

library(usemodels)
## Warning: package 'usemodels' was built under R version 4.3.2
usemodels::use_xgboost(coname ~ ., data = data_train)
## xgboost_recipe <- 
##   recipe(formula = coname ~ ., data = data_train) %>% 
##   step_zv(all_predictors()) 
## 
## xgboost_spec <- 
##   boost_tree(trees = tune(), min_n = tune(), tree_depth = tune(), learn_rate = tune(), 
##     loss_reduction = tune(), sample_size = tune()) %>% 
##   set_mode("classification") %>% 
##   set_engine("xgboost") 
## 
## xgboost_workflow <- 
##   workflow() %>% 
##   add_recipe(xgboost_recipe) %>% 
##   add_model(xgboost_spec) 
## 
## set.seed(56480)
## xgboost_tune <-
##   tune_grid(xgboost_workflow, resamples = stop("add your rsample object"), grid = stop("add number of candidate points"))
xgboost_spec <- 
  boost_tree(trees = tune()) %>% 
  set_mode("classification") %>% 
  set_engine("xgboost") 

xgboost_workflow <- 
  workflow() %>% 
  add_recipe(xgboost_ceo) %>% 
  add_model(xgboost_spec) 

Tune hyperparameters

doParallel::registerDoParallel()

set.seed(45034)
xgboost_tune <-
  tune_grid(xgboost_workflow,
            resamples = data_cv,
            grid = 5)