Tal vez pueda pensar en ello de esta manera. Supongamos que tiene un conjunto de datos en el que hay 100 muestras, 90 en la clase "A" y 10 en la clase "B". En este diseño tan desequilibrado, si se hacen grupos aleatorios normales, se podría acabar construyendo modelos con muy pocas muestras (¡o NINGUNA!) de la clase "B". Si se construye un modelo entrenado con datos en los que hay tan pocos, o incluso ninguno, de la otra clase, ¿cómo se puede esperar que prediga eficazmente el grupo más raro? La validación cruzada estratificada permite la aleatoriedad, pero también se asegura de que estos conjuntos de datos desequilibrados tengan algo de ambas clases.
Para apaciguar las preocupaciones sobre el uso del CV estratificado con conjuntos de datos más "equilibrados", veamos un ejemplo utilizando 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 bien equilibrado los pliegues tendrán una distribución similar por azar. Por lo tanto, el CV estratificado es simplemente una medida de seguridad en estas circunstancias. Sin embargo, para abordar la varianza habría que examinar las distribuciones de cada pliegue. En algunas circunstancias (incluso partiendo de un 50-50) se podrían tener pliegues con distribuciones de 30-70 por azar (¡se puede ejecutar el código anterior y ver que esto ocurre realmente!). Esto podría conducir a un modelo de peor rendimiento porque no tiene suficiente de una clase para predecir con precisión lo que aumenta la varianza general de CV. Obviamente, esto es más importante cuando se tienen muestras "limitadas" en las que es más probable que haya 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 seguir conteniendo probablemente al menos una buena proporción de la clase "más rara". Sin embargo, no hay realmente ninguna pérdida computacional y ninguna razón real para renunciar a la estratificación si sus muestras están desequilibradas no importa la cantidad de datos que tengas en mi opinión personal.