Quizás puedas pensarlo de esta manera. Digamos que tiene un conjunto de datos donde hay 100 muestras, 90 en la clase 'A' y 10 en la clase 'B'. En este diseño muy desequilibrado, si haces grupos aleatorios normales, podrías terminar construyendo modelos en muy pocos (¡o NUNCA!) De la clase 'B'. Si está construyendo un modelo que está capacitado en datos donde hay tan pocos, o incluso ninguno, de la otra clase, ¿cómo podría esperar que prediga el grupo más raro de manera efectiva? La validación cruzada estratificada permite la aleatorización, pero también asegura que estos conjuntos de datos no balanceados tengan algunas de ambas clases.
Para calmar las preocupaciones sobre el uso de CV estratificado con conjuntos de datos más 'equilibrados', veamos un ejemplo usando el código R.
require(mlbench)
require(caret)
require(cvTools)
# using the Sonar dataset (208 samples)
data(Sonar)
# see the distribution of classes are very well balanced
prop.table(table(Sonar$Class))
> prop.table(table(Sonar$Class))
M R
0.5336538 0.4663462
# stratified
# set seed for consistency
# caret::createFolds does stratified folds by default
set.seed(123)
strat <- createFolds(Sonar$Class, k=10)
# non-stratified using cvTools
set.seed(123)
folds <- cvFolds(nrow(Sonar), K=10, type="random")
df <- data.frame(fold = folds$which, index = folds$subsets)
non_strat <- lapply(split(df, df$fold), FUN=function(x) x$index)
# calculate the average class distribution of the folds
strat_dist <- colMeans(do.call("rbind", lapply(strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
non_strat_dist <- colMeans(do.call("rbind", lapply(non_strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
strat_dist
> strat_dist
M R
0.5338312 0.4661688
non_strat_dist
> non_strat_dist
M R
0.5328571 0.4671429
Como puede ver, en un conjunto de datos que está bien equilibrado, los pliegues tendrán una distribución similar por azar. Por lo tanto, el CV estratificado es simplemente una medida de garantía en estas circunstancias. Sin embargo, para abordar la varianza, deberá observar las distribuciones de cada pliegue. En algunas circunstancias (incluso a partir de 50-50), podría tener pliegues que tienen divisiones de 30-70 por azar (¡puede ejecutar el código anterior y ver que esto realmente sucede!). Esto podría conducir a un modelo de peor desempeño porque no tenía suficiente de una clase para predecirlo con precisión, aumentando así la varianza CV general. Obviamente, esto es más importante cuando tiene muestras 'limitadas' donde es más probable que tenga diferencias muy extremas en la distribución.
Ahora con conjuntos de datos muy grandes, la estratificación puede no ser necesaria porque los pliegues serán lo suficientemente grandes como para contener al menos una buena proporción de la clase 'más rara'. Sin embargo, realmente no hay pérdida computacional ni razón real para renunciar a la estratificación si sus muestras están desequilibradas, sin importar cuántos datos tenga en mi opinión personal.