Data quality, coverage and contamination
Code-Set Revisions and Process Changes in Multi-Year Operational Datasets
Quick answer
Concept drift in historical training data means that the meaning of a label, not just the mix of inputs, changed partway through the record. Code sets get revised, reason codes get split or retired, and policies change what earns a given outcome. Before training, get the supplier's code-set version history and process-change dates. Then confirm change points with per-month label frequencies and choose one of three strategies: remap old codes, train only on the post-change window, or condition the model on the period.
By SourceX Editorial · Updated
- 01Your data spec
- 02Matched to businesses
- 03Rights and samples reviewed
- 04Licensed delivery
Why label meaning changes inside operational records
Label meaning changes because the systems that generate operational labels are governed by taxonomies, policies and people, and all three get revised. A support desk that had one "Billing" disposition in 2021 may have split it into "Billing – refund" and "Billing – dispute" in 2023. A claims team may tighten the threshold for "approved with adjustment."
Neither change shows up in the text of the records; it shows up only in what the label column now means.
This is different from input drift, which is covered in detecting drift between licensed historical data and your production traffic. Input drift is a shift in P(x). Label-definition drift is a shift in P(y | x): the same ticket written in 2020 and in 2024 would receive a different code.
Research on temporal degradation reports that model performance drops as training data ages relative to test data [1]. Both the facts and the language used to describe them change over time [2]. Representativeness itself is time- and place-dependent [3], so a five-year export is effectively several related datasets stacked on one another.
Fraud is the clearest example. Labels arrive late, only some cases are investigated, and the patterns being labeled shift as attackers adapt. Dal Pozzolo and colleagues treat concept drift, class imbalance and delayed supervision as a single linked problem [4]. Operational buyers inherit the same structure in chargebacks, claims denials and escalation outcomes.
Where code-set revisions come from
Code-set revisions come from two sources: external standards that publish versioned releases, and internal taxonomies that change without notice. External changes are easier to handle because they have release dates and published crosswalks or addenda.
- Healthcare remittance. Claim Adjustment Reason Codes (CARCs) and Remittance Advice Remark Codes (RARCs) on X12 835 transactions are maintained by a national committee that adds, changes and retires codes, with list updates published several times a year [5]. A denial classifier trained on 835 data spanning many releases sees codes whose descriptions were reworded or whose use was narrowed.
- Diagnosis coding. NCHS publishes ICD-10-CM code files and addenda by fiscal-year release [7]. Codes are added, expanded to more specific children and occasionally deleted, so a diagnosis label at one specificity in one year may appear only at a finer specificity the next.
- Merchant categories. ISO 18245 defines merchant category code values, and as of October 2026 the current edition is ISO 18245:2023 [6]. Card networks and acquirers also maintain their own assignments, so a merchant's MCC in transaction history can change even when the business does not.
- Internal taxonomies. These include CRM disposition codes, Zendesk or Salesforce Service Cloud case reasons, ERP return reason codes and loss-reason picklists. They change when an admin edits a picklist, often with no record beyond the field's audit history. Return reasons and RMA codes are a common case; see product returns and RMA reason data.
Process and policy changes are the hardest to detect, because the code set stays the same while the decision rule behind it moves. Examples include a new underwriting cutoff, a revised refund policy, a reorganized tier-2 escalation path, or a new QA rubric for agents. In lending, adverse action reasons interact with this directly; see credit decision records with adverse action reasons. The bias implications are covered separately in historical decision bias in operational labels.
What to ask the supplier before you profile anything
Ask the supplier for the change history before you run any statistics, because a change point you find without context is only a hypothesis. Useful requests include:
- Code-set version history for every label field, with effective dates and the system of record (for example, picklist audit history in Salesforce, or a reason-code master table in SAP or Oracle).
- Dates of policy, SOP or rubric changes that affect how the label is assigned. Include who assigns it: an agent, a rules engine, an auditor, or a downstream system.
- Platform migrations, such as a move from one ticketing system to another, and how legacy codes were converted during the migration. Data acquired through mergers often carries two taxonomies; see checking title on data acquired through a merger or asset sale.
- Any crosswalk tables already used internally for reporting continuity.
- Whether historical records were re-coded in place when a code was retired. In-place re-coding silently erases the change point.
Data Cards recommend documenting collection and annotation methods and the decisions that affect model performance [8]. Code-set history belongs in that documentation, attached to the delivery rather than buried in an email thread. When SourceX sources a dataset, diligence materials covering source, rights, preparation and allowed use are prepared per dataset. Ask for label-history documentation alongside those materials when you describe your request through the SourceX buyer request.
Detecting change points in label distributions
The fastest detection method is to plot each label's share of records per month and look for step changes that do not match seasonality. A gradual trend usually reflects the business. A vertical step on the first day of a month or quarter usually reflects a taxonomy edit, a migration or a policy change.
Practical checks, in rough order of cost:
- Code appearance and disappearance. List each code's first-seen and last-seen month. Codes that appear the month after another disappears are candidate splits or renames.
- Share plots with a stacked view. If "Billing" drops from 18% to 4% while "Refund" and "Dispute" appear at a combined 14%, you have found a split.
- Change-point detection. Run a standard detector (for example, PELT or binary segmentation from the
ruptureslibrary) on the monthly share series for each label. Treat the detected dates as candidates to reconcile against supplier history, not as findings. - Conditional checks. Fix a slice of inputs, such as tickets that mention "chargeback," and plot their label distribution over time. A shift here is evidence of P(y | x) drift rather than a change in input mix.
- Classifier probe. Train a model on year one and score year three. A cluster of confident disagreements concentrated after one date points to a definition change, not random noise. Confident-learning methods were built to surface likely label errors [9], and the same tooling can help rank period-specific disagreements for review.
- Field-level metadata. Check for nulls that begin on a date, new free-text "other" values, and changes in average text length of the disposition notes.
For thresholds on how many records to hand-review once a change point is suspected, see sample sizes for estimating a dataset's error rate.
Choosing a strategy: remap, truncate or condition on period
The right strategy depends on whether the old and new labels can be related one to one, and on how much post-change data you have. Most multi-year projects end up combining the strategies per field.
Illustrative example: invented to show structure; it does not describe an available dataset.
| Situation | Strategy | What you do | Main failure mode |
|---|---|---|---|
Rename or 1:1 recode (code R07 becomes RET-DMG) | Remap | Apply a crosswalk; keep both label_raw and label_mapped | Crosswalk applied to the wrong effective date |
| Merge (two old codes become one new code) | Remap to the coarser code | Map both old codes to the new one | Losing a distinction the product later needs |
| Split (one old code becomes several new codes) | Truncate or relabel | Train fine-grained heads on post-split data only, or relabel a pre-split sample by hand | Pre-split records forced into one child code inflate it |
| Same code, new policy threshold | Condition or truncate | Add label_regime as a feature, or train on post-change data | The model learns the old policy for production inputs |
| Short post-change window | Condition plus targeted relabel | Use all years with a regime feature; hand-relabel a stratified pre-change sample | The regime feature is unavailable at inference |
| Evaluation set | Truncate | Build test sets only from the latest regime | Optimistic scores from old-regime labels |
When conditioning on period, set the regime feature to the current value at inference time. Then verify that predictions on recent holdout data match the current definition. Keep remapped and raw labels side by side so you can audit the crosswalk later, and log the crosswalk version in your training metadata.
A label-regime register for each dataset
A label-regime register is a small table that records each period during which a label field had stable meaning. Training and evaluation code can then filter or condition on it. It belongs next to the data, versioned with it.
Illustrative example: invented to show structure; it does not describe an available dataset.
field: case_disposition
system_of_record: "ticketing system picklist (audit history export)"
regimes:
- id: R1
effective_from: 2020-01-01
effective_to: 2022-06-30
code_set_version: "picklist v3"
assigned_by: agent_at_close
notes: "Billing is a single code"
- id: R2
effective_from: 2022-07-01
effective_to: 2024-02-29
code_set_version: "picklist v4"
assigned_by: agent_at_close
notes: "Billing split into BILL_REFUND and BILL_DISPUTE; no back-fill"
- id: R3
effective_from: 2024-03-01
effective_to: null
code_set_version: "picklist v4"
assigned_by: qa_auditor_override_allowed
notes: "Same codes; new QA rubric changes dispute criteria"
crosswalk:
- { from: "BILLING", to: ["BILL_REFUND", "BILL_DISPUTE"], type: split, from_regime: R1 }
detected_change_points: [2022-07-01, 2024-03-04]
reconciled: true
The R3 regime is the dangerous case. The code set is identical, so a version check passes, but the assignment rule changed. Only the supplier's process history or a conditional label-share check would reveal it.
How label drift affects evaluation and SFT
Label drift distorts evaluation most, because a mixed-regime test set rewards a model for matching outdated definitions. Build evaluation sets from the most recent regime. If you need longitudinal evaluation, report metrics per regime rather than pooled. Our guidance on verifying outcome fields as ground truth covers the reliability checks that should run inside each regime.
For supervised fine-tuning on decisions, such as "given this case, choose a resolution and explain it," old-policy examples teach the model to reason under rules that no longer apply. Filter them out, or put the policy version in the prompt so the model can condition on it. Track label-regime coverage alongside the other metrics in training data quality metrics.
For how often buyers refresh operational data to limit this problem, see how often AI buyers want fresh data. More quality checks are collected in the training data quality assessment hub.
Licensing multi-year operational records with label history
SourceX sources operational datasets from US companies on request, including support and sales histories, engineering records, and finance and legal workflows. It then manages the licensing process. Each dataset is rights-reviewed and delivered under a license that defines records, uses, term and delivery, with diligence materials prepared per dataset. Describe the fields, years and label history you need at SourceX for AI data buyers.
Frequently asked questions
Is label-definition drift the same as data drift?
No. Data drift usually refers to a change in the input distribution. Label-definition drift is a change in what the label means for the same input, P(y | x). The two need different checks: input-side drift tests compare feature distributions, while label-definition drift needs conditional label-share checks and the supplier's change history.
Should I back-fill old records with new codes?
Only if the mapping is one to one or you hand-relabel a sample to estimate the error. Forcing pre-split records into one child code creates confident but wrong labels. Keep the raw label and record which records were mapped.
How many years of operational data are worth licensing?
That depends on how many label regimes the period contains and how much data sits in the latest one. A longer span helps with rare classes and seasonality. Records from superseded regimes still need remapping, truncation or a regime feature before they help a model trained for the current definitions.
Sources
- Association for Computational Linguistics, "Industry-track paper on temporal degradation of models as training data ages (NAACL 2022 Industry Track)" (2022). https://preview.aclanthology.org/moar-dois/2022.naacl-industry.5.pdf
- Institute for Logic, Language and Computation, University of Amsterdam, "Thesis on temporal change in facts and language (ILLC, University of Amsterdam)". https://eprints.illc.uva.nl/id/document/12847
- arXiv, "Paper on representativeness of datasets (arXiv:2101.03827)" (2021). https://arxiv.org/pdf/2101.03827
- IEEE Transactions on Neural Networks and Learning Systems (Dal Pozzolo, Boracchi, Caelen, Alippi, Bontempi), "Credit Card Fraud Detection: A Realistic Modeling and a Novel Learning Strategy" (2017). https://boracchi.faculty.polimi.it/docs/2017_FraudsTNNLS.pdf
- Commonwealth of Massachusetts (Mass.gov), "835 Payment Advice and EOB/CARC & RARC Lists". https://www.mass.gov/info-details/835-payment-advice
- International Organization for Standardization, "ISO 18245:2023 Retail financial services: Merchant category codes" (2023). https://www.iso.org/standard/79450.html?browse=tc
- Centers for Disease Control and Prevention, National Center for Health Statistics, "Comprehensive Listing of ICD-10-CM Files". https://www.cdc.gov/nchs/icd/comprehensive-listing-of-icd-10-cm-files.htm
- Google Research (Pushkarna, Zaldivar, Kjartansson), FAccT 2022, "Data Cards: Purposeful and Transparent Dataset Documentation for Responsible AI" (2022). https://arxiv.org/pdf/2204.01075
- arXiv (Northcutt, Athalye, Mueller), NeurIPS 2021 Datasets and Benchmarks, "Pervasive Label Errors in Test Sets Destabilize Machine Learning Benchmarks" (2021). https://arxiv.org/abs/2103.14749
Tell us what your models need
Share scope, volume, language, format, timing and licensing requirements.