Elixir Consulting Group

Published October 28, 2026 ยท Independent educational guide

Split AI Evaluation Examples by Group, Time and Information Exposure

An AI evaluation can contain different row identifiers on its development and test sides while still repeating the same underlying customer, document or conversation. It can also put later information into development and earlier information into testing when the intended question concerns future use. Before interpreting a score, describe what is meant to be new and which information would actually exist at the point of use. Splitting rows is a mechanical operation; choosing the boundary is part of designing the question.

This guide develops that boundary through six original fictional examples. They examine row membership, supplied group labels, authored dates, unequal group sizes and known information exposure. They are not actual model evaluations, client records or predictions. No model was trained, prompt tested, random split drawn or scikit-learn function executed. Small local checks verify only the explicitly supplied memberships, comparisons and arithmetic. The practical purpose is to help a team explain what a proposed evaluation could answer before treating its eventual score as evidence.

Write the intended novelty before choosing a percentage

Begin with a sentence describing the intended encounter. Will the system handle another message from an already known account, a first message from an account never used in development, or requests arriving after a particular date? These are different questions even if all use the same input columns and scoring formula. An evaluation designed around one should not silently become evidence for the others. Retain that intended encounter with the split description so the row counts have a meaningful interpretation.

For a document assistant, new might mean a new excerpt from a familiar document, a new document from a familiar collection, or a document from a different source. For an intake classifier, it might mean a later request within a known case or a completely unseen case. This guide does not prescribe a universal grouping key. The useful first step is to identify which shared information could connect the examples and whether that connection belongs on the same side of the proposed comparison.

The scikit-learn cross-validation guide explains why fitting and testing on the same data is a methodological problem and why model selection can also expose information from a test set. That is limited methodological context here. Applying the vocabulary to a generative assistant still requires describing the actual workflow: prompt examples, revision notes, retrieval content and human choices can play different roles. Calling a folder test does not establish that it remained independent of those choices.

A percentage such as twenty percent is therefore not a complete design. It needs a denominator, a membership rule and a purpose. Twenty percent of rows may include nearly every account, while twenty percent of groups can contain far more or fewer than twenty percent of rows. Neither number alone answers whether the examples resemble the intended future use. Make those questions explicit before using a split ratio as shorthand for evaluation quality.

Check rows and groups as separate identities

Fictional case A contains four rows: R1 and R2 belong to the supplied group Cedar; R3 and R4 belong to Maple. Development uses R1 and R3, while evaluation uses R2 and R4. The row identifier intersection is empty. The group intersection contains Cedar and Maple, so both supplied groups appear on both sides. These statements can both be true. A check that reports only no repeated row IDs would miss the relationship represented by the group labels.

The case does not demonstrate actual model contamination or estimate how much a score would change. It provides no text, predictions or fitted system. It shows that row separation is weaker than the particular group-separation rule the exercise asks about. If the intended question is performance on unseen groups, the supplied arrangement does not satisfy that structural requirement. If the intended question is later interactions from known groups, the relevant design may be different and would need its own rationale.

Fictional case B uses the same four-row frame but assigns both Cedar rows to development and both Maple rows to evaluation. The row sets and supplied group sets are now disjoint. Evaluation contains two of four rows and one of two groups. That establishes the authored partition's memberships under the provided labels. It does not prove that Cedar and Maple are truly independent businesses, that the labels are correct or that the small frame represents an actual target population.

Keep the distinction between an entity and its label visible. Real records may use multiple identifiers for the same entity or reuse a label in ways that do not mean identity. The fictional examples define their groups explicitly, so the arithmetic has a clear basis. For a real evaluation, the grouping definition needs a source and a justified interpretation. A set intersection cannot resolve uncertain real-world identity simply because two strings happen to match or differ.

Choose a grouping level that fits the source relationship

Grouping can occur at several levels. Messages may belong to a conversation, conversations to an account, and accounts to an organization. If development and evaluation separate conversations but share the same organization, the arrangement answers a different novelty question from holding out organizations. Similarly, separating document chunks while sharing their parent document differs from holding out documents. Name the selected level and the levels it intentionally leaves shared so readers can understand the scope.

Do not automatically choose the broadest possible group merely because it sounds stricter. A grouping rule should relate to the intended use, the available evidence and the practical comparison. Overly broad groups may leave too few distinct units to examine the question; overly narrow ones may preserve relationships that the claimed novelty was supposed to exclude. This article supplies no recommended sample size or optimal grouping algorithm. It asks for an explicit rationale that can be evaluated against the task.

The GroupShuffleSplit documentation gives a concrete software distinction: its train and test size parameters refer to groups rather than individual samples. It also explains that separate randomized test splits need not be mutually exclusive across repetitions. Those are interface properties of that documented method, not a claim that the manually assigned teaching cases were generated by it. No scikit-learn runtime or random-number generator was used for the downloadable fixture.

If a report names a splitter, retain the actual method and relevant settings with the result. But do not use the method's name as a substitute for examining the produced membership. A supplied group column can still encode an unsuitable unit, and repeated evaluation subsets can share cases. Software can follow its documented interface while the evaluation claim remains broader than the information the grouping rule supports. Method selection and claim interpretation need to remain connected.

Count the rows that whole-group assignment actually selects

Fictional case C has three explicitly defined groups. Cedar contains eight rows; Maple contains one; Birch contains one. Assigning Birch alone to evaluation selects one of three groups but only one of ten rows. The group fraction is one third and the row fraction is one tenth. Selecting Cedar instead would keep the group fraction at one third while changing the row fraction to eight tenths. The examples are deliberately authored and report no random selection probability or recommended allocation.

This matters when someone reads a group-based test fraction as a row-based fraction. The two denominators answer different questions. Group count describes how many supplied group labels were selected; row count describes how many recorded examples those groups contribute. Neither is automatically a measure of semantic coverage, independence or representativeness. Keep both counts where the difference is material, rather than choosing whichever percentage makes the evaluation appear larger.

Unequal group sizes also affect the meaning of a later score. A row-weighted metric can give a large group more influence than a small one; an equal-group summary answers another question and may require handling undefined group-level metrics. The existing weighted-average and pooled-rate guide addresses those arithmetic choices. This split guide does not invent prediction values to claim a performance result. It establishes the population labels needed to understand which examples a future measure would summarize.

Inspect exclusions too. If a group lacks the information needed for assignment, dropping its rows changes the frame. If one large group determines most of the test volume, the evaluation may contain many rows while covering few supplied groups. These are design facts to report, not reasons to manufacture a more favorable denominator. A reader should be able to trace the count back to the included rows and the declared grouping rule.

Separate event time from information availability

A chronological evaluation needs a labeled time basis. Event date, file export date, annotation date and the time information became available are different attributes. A row describing an old event can contain a correction added later. Sorting solely by the event timestamp does not establish that every field existed at the simulated decision point. Before constructing a historical comparison, define what information the system would have been allowed to know at that point in the intended workflow.

Fictional case D supplies four rows dated June 1 through June 4, 2030. The authored development set is R1 and R3, while evaluation is R2 and R4. The latest development date is June 3; the earliest evaluation date is June 2. The condition that every development date precede every evaluation date is false. The dates identify an ordering issue under the exercise's declared rule. They do not establish an actual forecasting failure, a causal effect or observed system behavior.

A separate field in that case says that the label for the June 1 row became available June 5, while the proposed decision cutoff is June 4. The availability date is one day after the cutoff. The event being earlier does not make that later label available earlier. This is an invented example of information timing, not an inspection of a historical dataset. A real reconstruction would need evidence about availability rather than assuming it from the event date.

The practical question is which record version and fields existed at the time the system would have acted. If that cannot be reconstructed, describe the limitation rather than asserting a realistic historical simulation. A chronological row split can still be useful for a narrower exercise, but the claim should retain the gap. Keeping separate time labels makes it possible to identify what additional evidence would be needed instead of hiding the uncertainty inside a date filter.

Understand gaps in the units the method actually uses

The TimeSeriesSplit documentation describes ordered splits and a gap parameter expressed as a number of excluded samples. It also notes an equal-spacing condition for comparing test folds over the same duration. This is specific documented context. It does not establish that every business event stream is equally spaced or that a chosen number of excluded rows creates a required duration of separation. The teaching examples do not execute that method or reproduce its complete behavior.

Fictional case E places rows on June 1, June 2, June 10 and June 11, 2030. One supplied arrangement uses June 1 for development, excludes June 2, and evaluates June 10 and June 11. It excludes one row. The difference between the last development date and first evaluation date is nine calendar days. Another arrangement uses June 1 and June 2 for development, excludes June 10, and evaluates June 11. It also excludes one row, with a nine-day endpoint gap.

A third authored arrangement uses June 1 for development, excludes June 2 and June 10, and evaluates June 11. It excludes two rows and has a ten-day endpoint gap. These counts show how excluded-row counts and endpoint date differences describe different aspects of the arrangement. The original adjacent date gaps are one, eight and one days. The example does not supply a universal conversion from rows to elapsed time or a recommendation for a sufficient separation interval.

If the task needs a time-based buffer, specify the actual time condition and evaluate it against the relevant timestamps. If a method uses rows, report that unit accurately. Also state what the excluded interval is intended to address; a numerical gap does not itself prove that all shared information or delayed labels have been removed. A buffer can be part of a justified design while remaining insufficient as a stand-alone claim of independence.

Check group and time requirements together

A group-separated arrangement can violate a chronological rule, and a chronological arrangement can share groups. Neither check subsumes the other. When the intended question concerns both new entities and later use, write both conditions and inspect their intersection. Some data may not support the proposed comparison without exclusions or a narrower claim. Discovering that limitation is useful because it identifies the question the available frame can actually address.

For the fictional cases, the checks remain separate. Case B establishes disjoint supplied group labels but supplies no event dates, so it cannot establish temporal separation. Case D supplies dates but no group labels, so it cannot establish unseen-group evaluation. Do not import missing attributes from a neighboring case merely because both use R1-style identifiers. The cases are separate authored exercises, and their records do not create one combined evaluation dataset.

This separation is useful in a real design discussion as well. A report might say that account groups are disjoint and that evaluation events follow the development cutoff, while leaving label-availability reconstruction unresolved. That is more informative than a blanket leakage-free statement. It names two established structural properties and one open question. The reader can then judge whether the unresolved property matters for the intended use instead of assuming every possible dependency has been eliminated.

The guide provides no general contamination detector. Related documents, common templates, reused examples or information introduced during human revisions can require evidence beyond IDs and dates. A successful intersection check is a necessary check for a stated rule, not a proof of universal independence. Explain the actual relationships examined and retain the boundaries of that examination when presenting results.

Protect the role of examples after the first revision

Fictional case F names development cases D1 and D2 and proposed evaluation cases T1 and T2. Their identifiers are disjoint. The authored revision note then says that T1's expected answer was inspected while revising the prompt. The intersection between the evaluation IDs and the IDs marked inspected contains T1. Under the exercise's declared fresh-evaluation rule, the two proposed test cases are not both untouched. This is supplied exposure information, not a measured model response or an accusation about a real team.

The appropriate description depends on what happened. A familiar case can remain useful as a regression check for a known requirement, while no longer serving the same evidential role as a previously unexamined case. Reclassifying its role is more honest than deleting the revision history or claiming that a different filename makes it fresh. A new evaluation would need its own justified design and cannot be created simply by renaming T1.

Public teaching fixtures, including this guide's downloads, are intentionally visible along with their expected comparisons. They can help explain a boundary or check local arithmetic. They are unsuitable as evidence that an assistant performs well on protected unseen tasks. No score, sample-size adequacy, uncertainty interval, business improvement or release threshold follows from passing these examples. Their contribution is a transparent account of the limited properties that were checked.

For practical AI work, connect the split note to the evaluation-dataset owner and pilot criteria. The Dr Connor evaluation-dataset guide addresses the broader case-design question; the existing Elixir pilot owner addresses criteria for a next decision. This guide supplies the narrower structural bridge: identify what is new, assign the intended units, retain time and exposure information, and describe the resulting scope before interpreting performance. None of those resources supplies deployment permission or a professional assessment of a particular system.

When sharing a split description, include the frame version as well as the selected identifiers. A saved assignment against an earlier frame may omit later records or refer to rows whose contents changed. This exercise fixes every input explicitly; it makes no claim about changing live exports. For an actual comparison, retain enough authorized source context to explain which rows and versions the assignment concerned. Otherwise, identical membership labels can conceal a different input population even before any model is evaluated.

Frequently asked questions

Do disjoint row identifiers prove that groups are separate?

No. In fictional case A, all four row IDs are distinct across development and evaluation, but Cedar and Maple appear on both sides. The group intersection has two labels. That literal result does not measure model contamination; it shows why the declared grouping requirement needs its own check.

Does holding out one third of groups hold out one third of rows?

Not necessarily. In case C, Birch is one of three groups but contributes one of ten rows. Cedar is also one group but contributes eight rows. Report the denominators and actual membership, and do not treat either fraction as semantic coverage or representativeness.

Can an early event date justify using a later annotation?

The event date alone does not establish annotation availability. Case D deliberately gives an early event a label-availability date after the proposed cutoff. A real historical exercise needs evidence about the information available at the point of use, or a clear limitation on the claim.

Is a one-row gap always a one-day gap?

No. Excluded samples and elapsed time are different units. Case E uses unevenly spaced authored dates, and its excluded-row counts and endpoint differences must be read separately. This guide recommends no universal buffer and claims no scikit-learn execution or complete splitter conformance.

Can a case inspected during prompt revision remain an untouched test?

It cannot support that unchanged description under the exercise's stated freshness rule. In case F, T1 was explicitly inspected during revision. It may serve a declared development or regression role, but renaming it does not remove the supplied exposure history or create new evidence.

Do these example checks establish that an AI system is ready?

No. They verify supplied fictional memberships, labels, dates and counts only. No model, random splitter, client workflow or production evaluation was run. Actual performance, uncertainty, business value, professional review and operating approval remain outside the evidence represented by this guide.

Original fictional practice data

Original fictional teaching cases, not actual client records, reservations, model outputs, professional review or operating approval. No executable utility is supplied.

Six original fictional teaching cases; definitions and scope remain in the guide
fictional caseauthored inputsbounded result
A{"rows": [{"id": "R1", "group": "Cedar"}, {"id": "R2", "group": "Cedar"}, {"id": "R3", "group": "Maple"}, {"id": "R4", "group": "Maple"}], "development": ["R1", "R3"], "evaluation": ["R2", "R4"], "expectedSharedRows": [], "expectedSharedGroups": ["Cedar", "Maple"]}Row IDs disjoint but both supplied groups shared; not measured contamination
B{"rows": [{"id": "R1", "group": "Cedar"}, {"id": "R2", "group": "Cedar"}, {"id": "R3", "group": "Maple"}, {"id": "R4", "group": "Maple"}], "development": ["R1", "R2"], "evaluation": ["R3", "R4"], "expectedSharedRows": [], "expectedSharedGroups": [], "expectedEvaluationRows": 2, "expectedTotalRows": 4, "expectedEvaluationGroups": 1, "expectedTotalGroups": 2}Disjoint supplied row/group labels; not real entity independence or temporal separation
C{"groupSizes": {"Cedar": 8, "Maple": 1, "Birch": 1}, "selected": "Birch", "alternative": "Cedar", "expectedSelectedRows": 1, "expectedAlternativeRows": 8, "expectedTotalRows": 10, "expectedTotalGroups": 3}One of three groups gives1/10 or8/10 rows depending on selected supplied group; no random draw/coverage finding
D{"dates": {"R1": "2030-06-01", "R2": "2030-06-02", "R3": "2030-06-03", "R4": "2030-06-04"}, "development": ["R1", "R3"], "evaluation": ["R2", "R4"], "expectedDevelopmentMax": "2030-06-03", "expectedEvaluationMin": "2030-06-02", "labelRow": "R1", "labelAvailable": "2030-06-05", "cutoff": "2030-06-04", "expectedLateDays": 1}Latest development after earliest evaluation; early event label available after cutoff; not actual historical/model outcome
E{"dates": ["2030-06-01", "2030-06-02", "2030-06-10", "2030-06-11"], "arrangements": [{"development": [0], "excluded": [1], "evaluation": [2, 3], "expectedExcluded": 1, "expectedDays": 9}, {"development": [0, 1], "excluded": [2], "evaluation": [3], "expectedExcluded": 1, "expectedDays": 9}, {"development": [0], "excluded": [1, 2], "evaluation": [3], "expectedExcluded": 2, "expectedDays": 10}], "expectedAdjacentDays": [1, 8, 1]}Excluded-row counts and endpoint date gaps are different units; no universal buffer or splitter execution
F{"development": ["D1", "D2"], "evaluation": ["T1", "T2"], "inspectedDuringRevision": ["T1"], "expectedSharedIDs": [], "expectedExposedEvaluation": ["T1"]}IDs disjoint but supplied revision history exposes T1; not observed model output/untouched evaluation

Primary sources and editorial scope

AI-assisted website editorial. Sources read October 28, 2026 America/New_York. Original fictional split-membership and information-timing examples only; no actual model, random draw, scikit-learn execution, client data, historical reconstruction or performance measurement. Original examples checked independently. No record change, actual client dataset, observed model output, professional review, security certification or operating approval is asserted.

Related practical questions