[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"glossary-cross-validation::en":3,"gloss-cluster-cross-validation::en":23,"gloss-next-cross-validation::en":9},{"slug":4,"category":5,"name":6,"definition":7,"meta_desc":8,"faq":9,"schema_markup":9,"related":10},"cross-validation","mlops","Cross-Validation","Cross-validation estimates how well a model generalises by splitting the data into k folds, training k times with a different fold held out as the test set each time, and averaging the results. Instead of one score from one arbitrary split, you get k scores whose spread tells you how much the estimate depends on which rows happened to land where. That spread is the point. A single hold-out score on a small dataset can move several points purely by luck of the draw, and teams routinely mistake that movement for a real improvement; cross-validation makes the uncertainty visible and gives a fairer comparison between candidate models or hyperparameters. It costs k times the training compute, which is why it is standard for small and medium datasets and rare for large models, where a single well-constructed hold-out is the practical choice. The variants matter as much as the method. Stratified folds preserve the class balance in each fold and are the default for classification with rare classes. Group folds keep all rows from the same entity in one fold, for the same reason a naive split leaks. Time-series cross-validation trains on a growing prefix and tests on the next window, never on the past. And when cross-validation is used to select a model, the selection itself sees every fold, so the winning score is optimistic — a genuinely untouched final test set is still needed to report an honest number.","Cross-validation rotates the hold-out across k folds so you see the spread, not one lucky score — plus the stratified, grouped and time-series variants.",null,[11,14,17,20],{"slug":12,"name":13},"hyperparameter-tuning","Hyperparameter Tuning",{"slug":15,"name":16},"overfitting","Overfitting",{"slug":18,"name":19},"statistical-significance","Statistical Significance",{"slug":21,"name":22},"train-test-split","Train\u002FTest Split",[24,28,32,35,38,42,45,48,51,54,57,60],{"slug":25,"category":5,"name":26,"updated_at":27},"annotation-guidelines","Annotation Guidelines","2026-08-24T03:30:02+00:00",{"slug":29,"category":5,"name":30,"updated_at":31},"baseline-model","Baseline Model","2026-08-24T02:46:38+00:00",{"slug":33,"category":5,"name":34,"updated_at":31},"batch-inference","Batch Inference",{"slug":36,"category":5,"name":37,"updated_at":31},"canary-prompt","Canary Prompt",{"slug":39,"category":5,"name":40,"updated_at":41},"champion-challenger","Champion-Challenger (A\u002FB Model Testing)","2026-08-24T02:46:37+00:00",{"slug":43,"category":5,"name":44,"updated_at":31},"class-imbalance","Class Imbalance",{"slug":46,"category":5,"name":47,"updated_at":31},"continuous-batching","Continuous Batching",{"slug":49,"category":5,"name":50,"updated_at":31},"data-labeling","Data Labeling",{"slug":52,"category":5,"name":53,"updated_at":41},"drift-detection","Drift Detection",{"slug":55,"category":5,"name":56,"updated_at":41},"eval-harness","Eval Harness",{"slug":58,"category":5,"name":59,"updated_at":41},"experiment-tracking","Experiment Tracking",{"slug":61,"category":5,"name":62,"updated_at":31},"explainability","Explainability"]