advanced11 min read20 of 24

    Model Drift and Silent Failure — When the Tool Changes Under You

    Nothing errors. The output just gets quietly worse, and the process that never checks is the one that never notices.

    Rohit Singh

    Mr. Chartist · SEBI RA INH000015297

    Module

    Software usually tells you when it breaks. A script that cannot reach the exchange website throws an error. A spreadsheet with a bad reference shows you a hash symbol in the cell. You notice, you fix it, you carry on. That expectation — that failure announces itself — is built so deeply into how people use tools that it barely registers as an assumption. It is the assumption this article is about, and in this particular corner of the work it is simply false.

    A model that has quietly become worse does not error. It returns an answer in the same format, at the same length, in the same confident register, at the same time of the morning. The extraction still has all its fields. The summary still reads well. The only difference is that a little more of it is now wrong, and nothing on the screen distinguishes the good run from the degraded one. You do not lose the tool in a way you can see. You lose it in a way you can only measure.

    There are three separate mechanisms behind that, and it is worth being clear that they are unrelated to each other. The world changes, so a pattern the model learned no longer holds. The provider changes the model under you, so the same prompt meets a different system. The data pipeline changes — a field renames, a feed goes stale, a page layout shifts — so the input degrades while the output stays fluent. Any one of them produces the same experience: nothing errors, everything is slightly worse.

    The defence is not vigilance, because vigilance decays faster than models do. It is a small, fixed, boring routine you run on a schedule, comparing today's output against a known-good answer you saved when you still trusted the tool. That routine is most of this article, and the rest is the reasoning that makes it worth keeping.

    The one thing to remember

    Silent degradation is the default failure mode of AI tooling — so keep a saved known-good answer to a fixed regression prompt, re-run it on a schedule, and let the comparison rather than your memory tell you whether the tool still works.

    Nothing Errors — Which Is Exactly the Problem

    Start with the shape of the failure, because it determines everything else. When a model degrades, the output does not become unreadable. It becomes marginally less accurate while remaining perfectly presentable. A figure that used to be lifted verbatim from the filing is now paraphrased into something close but not identical. A field that used to say "not stated" now gets a plausible guess. A summary that used to flag the one awkward sentence in the management commentary now smooths over it.

    None of that trips an alarm, because there is no alarm to trip. The tool has no notion of correct — it produces text that fits the request, and text that fits the request is exactly what a wrong answer also looks like. The only entity in the system capable of noticing is you, and you are reading the output for its content, not auditing it against a baseline you no longer remember.

    That last point is the real trap and it deserves stating plainly: your memory of how good the tool used to be is unreliable, and it drifts in the tool's favour. You remember that it "worked well". You do not remember that eight weeks ago it correctly returned "not stated in the filing" for a field that today it fills in with an invented number. Human recollection is not a baseline. Only a saved artefact is a baseline.

    So the entire discipline reduces to one structural move. At a moment when you have verified the output and trust it, freeze a copy. From then on you are never comparing today against a memory; you are comparing today against a document. Everything else in this article is scaffolding around that single idea.

    A degraded model does not produce an error. It produces the same answer, slightly wrong, in the same confident voice — and confidence is the one thing that never degrades.

    Nothing errors. The output just gets quietly worse.

    There is no failure event to notice. The error log stays empty the whole way down — so a scheduled re-check is the only thing that ever catches it.

    defensibleunusableoutput quality, relative to the day you validated itmonth 1OKmonth 2OKmonth 3OKmonth 4OKmonth 5OKmonth 6OKmonth 7OKerror logscheduled re-check — the only detectorno alert fires anywhere on this line
    The two lines that never meet. Output quality falls gradually while the confidence and the format of the answer hold perfectly flat — which is why the gap is only ever visible against a saved baseline, never against a memory.
    Degraded output keeps its format, its length and its tone, so nothing about the presentation signals a problem.
    There is no error state to catch, because the tool has no internal notion of a correct answer to fail against.
    Your memory of past quality drifts toward whatever you currently believe about the tool, so it cannot serve as a baseline.
    A frozen, dated, verified output is the only reference point that does not move.
    The check has to be scheduled rather than triggered — nothing will prompt you to run it.

    Three Unrelated Mechanisms, One Identical Symptom

    It is tempting to treat "the tool got worse" as one problem. It is three, they have different causes, and the fixes do not transfer. Separating them matters because when you notice a degradation you will want to know which one you are looking at — and the diagnostic question is different in each case.

    The first is regime change, and it is the oldest problem in this business rather than anything to do with AI. A relationship that held in the market for a stretch of time stops holding. A screening rule that surfaced useful names during a broad advance surfaces nothing but noise in a long directionless range. A feature that carried information when volatility was elevated carries none when it compresses. The model did not change at all here. The world it was fitted to did. Anything learned from historical data carries an unstated assumption that tomorrow resembles the sample, and markets periodically decline to cooperate.

    The second is a provider-side change. Hosted models are updated. Versions are retired, defaults are moved, safety behaviour is adjusted, and routing between variants can change without any announcement that reaches you. You did not upgrade anything; the thing behind your prompt is simply not the same thing it was last month. This is genuinely new relative to how traders are used to thinking about tools — you do not own this dependency, you rent it, and the landlord can renovate.

    The third is the data layer, and in practice it is the most common of the three and the least discussed. A source website changes its page structure and your scraper now returns an empty field that a downstream step happily interprets as zero. A feed starts arriving an hour late. A column gets renamed and a join silently drops rows. A corporate action is not adjusted for. The model receives worse input and does what it always does — produces a fluent answer over whatever it was given.

    MechanismWhat actually changedHow it shows upThe question that diagnoses it
    Regime changeThe market, not the toolA rule or feature that used to surface useful names surfaces noiseDid the conditions the method was fitted to still exist over this period?
    Provider model changeThe hosted model behind your promptA prompt that used to return a clean table returns prose, or ignores a constraintDoes my fixed regression prompt still return the saved known-good answer?
    Data pipeline decayThe input, before the model ever sees itBlank fields, stale prices, missing rows, unadjusted corporate actionsDo my raw inputs still match the source when I check three of them by hand?
    Prompt rotNothing — the prompt was always fragileOutput format varies run to run on identical inputDoes the same prompt on the same input give the same shape three times?
    Your own processHow carefully you read the outputErrors that were always there, now unchallengedWhen did I last verify a claim against the primary source?
    Same symptom, three different causes. The diagnostic question in the right-hand column is what tells you which one you are dealing with — and none of them announces itself.

    Watch out — Do not merge these into one story. A regime change is a research problem, a provider change is a vendor-dependency problem, and a broken feed is an engineering problem. Applying the wrong fix — retuning a strategy when the real issue was a renamed column — wastes weeks and leaves the actual fault in place.

    When the Vendor Changes the Model Under You

    This one is worth sitting with, because it has no analogue in the tools traders are used to. Your charting platform does not quietly replace the maths behind a moving average. Your broker does not silently change what a limit order means. But a hosted model is a service, not a possession, and services are maintained. Versions get deprecated. Defaults get moved to something newer. Behaviour gets adjusted for reasons that have nothing to do with you.

    The practical consequence is that a prompt is not a stable instruction. It is a request to a system whose behaviour you do not control, and prompts are more brittle than they feel. A prompt that reliably returned a six-column table can start returning a narrative paragraph with the same information buried in it. A prompt whose "if it is not in the document, write not stated" rule was respected can meet a version more inclined to be helpful, which fills the gap instead. Nothing about that reads as a failure. It reads as a slightly different answer.

    A newer version is also not automatically better for your job. Newer usually means better on broad benchmarks, and broad benchmarks are not your workflow. Your workflow is a specific extraction from a specific document type under a specific set of constraints, and a model that is stronger overall can be weaker on exactly that if it has become more verbose, more inclined to add context you asked it not to add, or more willing to infer.

    There is no way to prevent this and it is not a scandal — it is the deal. What you can do is detect it fast, and the detection mechanism is the regression prompt in the next section. Beyond that, two habits help: pin an explicit version where the product lets you rather than accepting the default, and keep the number of distinct AI-dependent steps in your process small enough that you can re-verify all of them in one sitting.

    You do not own a hosted model. You rent access to one, and the landlord can renovate without telling you which walls moved.

    Living with a dependency you do not control

    Do

    • Pin an explicit model version wherever the product exposes that choice, so a default change is not silently inherited.
    • Save the exact prompt text you rely on in a file, versioned, so you can prove what you asked for rather than reconstructing it.
    • Keep the count of AI-dependent steps small enough that re-verifying every one of them fits in a single sitting.
    • Re-run your regression prompt after any product announcement, interface change or noticeable shift in response style.
    • Write down the date on which you last verified each step, next to the step itself.

    Don't

    • Do not assume a newer version is better for your specific task — broad capability and your narrow job are different measurements.
    • Do not treat a prompt as a permanent instruction; it is a request to a system that can change beneath it.
    • Do not rely on release notes to tell you what changed in a way that matters to your workflow.
    • Do not adjust a prompt to fix a degradation before you have confirmed the degradation exists — you will bake a workaround around a problem you never diagnosed.
    • Do not run the same critical extraction through a chain of several models where a change in any one of them is invisible in the final output.

    The Fixed Regression Prompt — Your One Real Control

    Here is the mechanism, and it is deliberately unglamorous. Choose one task you genuinely rely on. Freeze an input for it — a specific filing PDF, a specific transcript, a specific block of text — and save that input file permanently, unchanged, forever. Write a prompt against that fixed input, save the prompt verbatim, and run it once while you are prepared to check the answer properly. Verify every claim in that answer against the source. Then save the verified output, with the date, and label it as the known-good baseline.

    From that point you have a regression test. On a schedule, you re-run the identical prompt against the identical input and put the new output beside the saved one. You are not asking "is this answer good?" — a question you will answer generously when you are busy. You are asking "is this the same answer?", which is a comparison rather than a judgement, and comparisons survive tiredness.

    Choose the input carefully, because a weak baseline tests nothing. It should contain a few specific numbers that must be reproduced exactly, at least one field that is genuinely absent so you can see whether the honest "not stated" survives, one sentence with hedged or ambiguous language, and enough length that the task is not trivial. A single clean paragraph will pass forever and tell you nothing. Do not use a document that will be revised, and do not use anything confidential — a public exchange filing is the natural choice, and it is public precisely so that keeping a copy is unproblematic.

    Differences that show up are not automatically failures. A rephrased sentence with identical substance is fine. What matters is a short list of specific defects: a number that no longer matches the source, an absent field that has acquired a value, a constraint you stated that is no longer being respected, a structural change from table to prose, or new material that is not in the document at all. Any one of those means the tool has moved and your process is currently running on an assumption that expired.

    The fixed regression prompt — save this text verbatim and never edit it
    You are extracting from a document. Follow these rules exactly. Do not add
    commentary, context, or anything not asked for below.
    
    --- BEGIN DOCUMENT ---
    [paste the SAME frozen document text every single time — never update this]
    --- END DOCUMENT ---
    
    Return exactly these fields, in this order, as a plain two-column table:
    
    1. Document type
    2. Reporting period covered
    3. Every rupee figure stated, each with the exact sentence it appears in
    4. Every percentage stated, each with the exact sentence it appears in
    5. Any forward-looking or guidance language, quoted verbatim
    6. Any stated risk, constraint or contingency, quoted verbatim
    7. Anything the document mentions without specifying — amount, date or condition
    
    Rules:
    - If a field is not present in the document, write exactly: not stated in the document
    - Quote verbatim. Do not paraphrase, round, convert units or clean up formatting.
    - Do not use any knowledge from outside the document text above.
    - Do not comment on what any of this means for the company or its share price.
    - End with a single line: the count of figures returned in field 3.

    When to use — Run it once when you trust the tool, verify every line against the source, and save that output as the dated baseline. Then re-run it unchanged on your schedule and compare — monthly at minimum, and immediately after any product update or any run that felt off.

    A good answer — A table, not prose. Verbatim quotes rather than tidied paraphrase. At least one honest "not stated in the document" where the field is genuinely absent. A figure count at the end that matches what you can find by reading the source yourself. If any of those four properties disappears, the tool has changed under you.

    Pro tip — Keep the baseline and the prompt in the same folder as a plain text file each, with the date and the model version in the filename. A baseline you cannot find in ten seconds is a baseline you will not use, and the whole value of this routine is that it costs almost nothing to run.

    A Cadence You Will Actually Keep

    Monitoring fails for boring reasons. It is proposed as a daily discipline, it survives eleven days, and then it quietly stops and nobody notices — which is the same failure mode as the thing it was meant to catch. So design the cadence for the version of you who is busy, not the version writing the plan.

    There are two tiers and they do different jobs. The scheduled tier runs whether or not anything seems wrong, because the entire point is that nothing will seem wrong. The triggered tier runs on events that are known to precede a change. Neither replaces the other: scheduled checks catch slow decay, triggered checks catch discrete breaks.

    Attach the scheduled check to something that already happens rather than to a date you have to remember. The first weekend of the month, or the session after quarterly results season ends, or the same morning you do your monthly journal review — the anchor matters more than the interval. Fifteen minutes once a month, actually performed, is worth more than a daily routine that lasted a fortnight.

    The triggered checks are cheap because they are rare. Re-run the regression prompt when the provider announces anything, when the interface changes, when the response style feels different in a way you cannot name, when you find one error by accident, and when you are about to rely on the output for something that matters more than usual. That last one is the most valuable and the most often skipped — the moment before a decision is exactly when you want to know the tool is still the tool.

    1. 1

      Weekly — spot-check three claims against the primary source

      Pick three factual claims from whatever the tool produced that week and check each against the filing, the transcript or the exchange page it came from. Fifteen minutes. You are not auditing everything; you are sampling, so that a systematic problem has a route to your attention.

    2. 2

      Monthly — run the fixed regression prompt and diff it

      Identical prompt, identical frozen input, output placed beside the saved baseline. Look specifically for changed numbers, filled-in absent fields, ignored constraints and format shifts. Log the date and the result even when nothing changed, because the log of no-change runs is what makes a change visible.

    3. 3

      Monthly — audit the data layer, not just the model

      Check three raw inputs by hand against the source: are prices current, are fields populated, is the row count what you expect, are corporate actions adjusted? Pipeline decay is the most common cause of a degraded answer and the one people never look for, because it happens before the part they are watching.

    4. 4

      Quarterly — re-verify the assumptions under any rule you use

      For any screening rule, feature or systematic method, ask what conditions it was built for and whether those conditions held over the last quarter. This is the regime-change check, and it is the one that no amount of software monitoring will do for you.

    5. 5

      On event — re-run everything after any product change

      A provider announcement, an interface change, a shift in response style, or a single error you found by accident. Any of those is a reason to run the regression prompt that day rather than waiting for the monthly slot.

    6. 6

      Every six months — refresh the baseline deliberately

      If the tool has legitimately changed and the new behaviour is verified good, save a new baseline with a new date and keep the old one. Never let the baseline update quietly or automatically — a baseline that follows the tool is not a baseline, it is a mirror.

    The monthly re-verification — fifteen minutes, on a fixed anchor

    Run this against the saved baseline rather than against your memory. Log the date and outcome every time, including the months when nothing changed.

    • Re-run the regression prompt with the identical frozen input — no edits to either, however tempting.
    • Place the new output beside the saved known-good output and read them in parallel rather than in sequence.
    • Check every number against the source document again: any figure that no longer matches is a hard failure.
    • Confirm the fields that were genuinely absent still return "not stated" rather than a plausible value.
    • Confirm every explicit constraint in the prompt is still being respected — no added commentary, no outside knowledge, no price talk.
    • Confirm the output structure is unchanged: a table is still a table, the field order still holds, the count line is still there.
    • Check three raw data inputs by hand for freshness, completeness and correct adjustment.
    • Write one line in the log: date, model version if known, pass or fail, and the specific defect if it failed.
    • If it failed, stop relying on that step until you have diagnosed which of the three mechanisms caused it.

    Regime Change Is Not a Bug in the Tool

    The third mechanism deserves its own treatment because people misdiagnose it constantly, and the misdiagnosis is expensive. When a systematic rule stops working, the instinct is to fix the rule — add a filter, retune a threshold, retrain on more recent data. Sometimes that is right. Often the rule is working exactly as designed and the conditions it was designed for have simply gone away.

    Anything fitted to historical data carries an assumption that goes unstated because it is uncomfortable: that the future will resemble the sample. Markets do not guarantee that. Liquidity conditions change, participation changes, volatility expands and compresses, sectoral leadership rotates, and the relationships that held through one stretch of NSE history are not promised through the next. A method that met only one kind of market has not been tested against the others — it has merely not encountered them yet.

    The practical distinction to draw is between a method that is failing and a method that is out of season. A trend-following approach in a long directionless range is not broken; it is in the environment that hurts it, and that environment will end. The way to tell them apart is not the recent result — it is whether the conditions the method depends on are currently present. If they are present and the method is failing, that is evidence. If they are absent, you have learned nothing about the method and you should not retune it on that evidence.

    Which is why the quarterly step above asks about conditions rather than about performance. Write down, in advance and in plain words, what has to be true in the market for your approach to have a chance — the kind of participation, the kind of volatility, the kind of follow-through after a breakout. Then check whether those things were present. A rule you retune every time it underperforms is a rule that is being continuously refitted to the recent past, which is the same overfitting problem described earlier in this module, arriving through a different door.

    A method that is out of season and a method that is broken produce identical recent results — only the conditions tell you which one you are holding.

    Watch out — Retuning a rule every time it underperforms is continuous refitting to the recent past. It feels like maintenance and it behaves like overfitting, and the tell is that the rule has never been allowed to be wrong for a full quarter without being changed.

    Write It Down, Because Nothing Else Will Remember

    Everything above collapses without a log, and the log is a plain file rather than a system. Date, what was checked, pass or fail, the specific defect, and what you did about it. That is the whole format, and the discipline is writing the entry on the months when nothing happened, because a run of unremarkable entries is precisely what makes an eventual change stand out.

    The log also solves a problem you do not know you have yet. When something eventually goes wrong, the first question is when it started, and without dated entries the honest answer is "some time in the last several months" — which is not enough to work with. With them, you can bracket the change between two dates, which usually points straight at the cause: a product update in that window, a website redesign in that window, a market regime that turned in that window.

    Alongside the log, keep a short dependency list: every step in your process that touches AI, what model and version it uses, what data it consumes, when it was last verified, and how bad it would be if it were quietly wrong. Most people discover on writing this that the list is longer than they thought, and that at least one item on it has never been verified at all. That discovery alone repays the exercise.

    And keep the ambition modest. This is not a monitoring platform and it should never become one, because an elaborate one will not survive contact with a busy quarter. Two text files and fifteen minutes a month is the whole system. It works because it is small enough to keep doing, and a check you keep doing is the only kind that catches a failure that never announced itself.

    The log is a plain dated file: what was checked, pass or fail, the defect, the action taken.
    Log the uneventful months too — the flat run is what makes the eventual change legible.
    Dated entries let you bracket when a degradation began, which usually identifies the cause on its own.
    Keep a dependency list of every AI-touching step with its model, its data, its last-verified date and its blast radius.
    Keep the whole apparatus small enough to survive a busy quarter, because an abandoned check is identical to no check.

    Pro tip — Put the "how bad if quietly wrong" column on the dependency list first and sort by it. Steps that feed a decision deserve monthly regression checks; steps that only save you reading time can be checked quarterly and forgiven when they slip.

    Common questions

    It is the gradual, unannounced decline in how useful a tool's output is. It has three separate causes: the market regime the method was fitted to changes, the provider updates the hosted model behind your prompt, or the data feeding the tool degrades. All three produce the same experience — no error message, the same format and tone, and answers that are quietly a little more wrong.

    Knowledge Check

    Question 1 of 3Score: 0

    What makes model drift harder to catch than an ordinary software bug?

    Rohit Singh — Mr. Chartist

    Written By

    Rohit Singh

    Mr. Chartist

    With 14+ years of experience in Indian financial markets, Rohit Singh (Mr. Chartist) is a SEBI Registered Research Analyst, Amazon #1 bestselling author, and the founder of Investology — a premium trading ecosystem trusted by a 1.5 Lakh+ strong community across India.

    INH000015297Full Bio

    Keep reading