Every column arrives with the rules it already obeys.
RootCause profiles every column and every series before anyone runs a query. Expected categories and the spellings that map to them. Ranges, sign constraints and orderings between fields. Seasonality and period. Each one stored with a confidence level and the number of rows it was tested against. Agents and analysts read the same set.
A 14-week cycle, fitted and stored, so a movement gets compared to the same week last cycle.
Observed splits into a 14-week seasonal component, a trend, and a residual inside a two sigma band.
- Detected period
- 14 weeks
- Trend
- upward · +4.2% QoQ
- Residual volatility
- 11.4% · up 2.7 points since May
- Outside the band
- 1 week · 11 May · flagged
Tested against 3.8M rows. Last profiled 4 Aug 2026. Re-derived on source change.
An agent with no profile will average your credit notes into the unit price.
Ask for average unit price and it will include the 1,146 negative rows your finance team files as credit notes. Ask for regional totals and it will count CA, Calif. and CALIFORNIA as three regions. Ask whether last month was unusual and it will compare against the month before, with no idea the series runs on a fourteen-week cycle.
The rules exist. They live with the analyst who has been there six years, and in a spreadsheet nobody has opened since March. Neither is readable by an agent.
RootCause derives the rules from the data and writes them onto the ontology, where every model, agent and analyst picks up the same set.
Five spellings of California resolve to one member.
For every categorical column RootCause derives the expected value set, folds spellings into canonical members, and keeps the mapping so a raw value can always be traced back. A value seen once gets flagged instead of folded, because a single odd string is sometimes a typo and sometimes the first order of a new product line. That call stays with you.
Canonical member California, covering 1.7M rows across five spellings: CALIFORNIA, Calif., CA, california, CALIF. Tested against 6.2M rows. CALI-FORNIA? appears once and stays unresolved until somebody decides what it is.
Ranges, signs and orderings are stored as constraints you can enforce.
Observed minimum and maximum. Distributional shape. Inferred sign constraints. Orderings between fields. If contract_start precedes contract_end across 920,000 rows, the ordering is a rule. If 912 rows break it, those rows are a finding with a count attached.
Constraints do two jobs here. They stop an agent returning an answer your business considers impossible, and they surface the rows where your data already does the impossible.
The rows that break a rule ship with the rule
Seasonality is fitted once and read by everything downstream.
For every time-indexed numeric series RootCause fits trend, seasonal component and residual, identifies the period, and stores the fit with a confidence level and a two sigma band on the residual.
Two things follow. An analyst asking whether a movement is unusual gets an answer measured against the same point in the cycle. And when that series becomes a variable in a causal model, its seasonal structure is already characterized.
Adaptive means RootCause re-derives on a schedule.
Data drifts. A category set that was exhaustive in March gains two members by May. A sign constraint that held for two years breaks the week a new billing source comes online.
RootCause re-profiles on a schedule and on source change, versions every constraint, and reports what moved. A changed constraint becomes a review item with a diff and a row count. The previous version stays pinned until somebody rules on the new one, so a shift in your data reaches a person instead of quietly degrading every answer built on top of it.
unit_priceconstraint brokenunit_price >= 0- 1,146 negative unit pricesall after 9 July · all from source billing_v2
- Constraint marked brokenv3 stays pinned until somebody rules on it
- Range floor otherwise unchanged$0.12 minimum across positive rows
v3 · July to v4 · August. The constraint was not rewritten. It was flagged, versioned, and put in front of the data owner.
Point it at a column you think you already understand.
Bring one table from a system you know well. Most customers learn something about it on the first call.