Second Opinion

How the pipeline works

Follow a reading through every stage.

Each stage below runs in your browser on a small, seeded synthetic example, using simplified versions of the real code. The numbers show how each stage works. They are not results from any plant.

01 // PrepareKeep every row

Add context, never remove it.

Preparation reads the Z-info export and keeps every row with its source file and row number. Problems are flagged for review, never deleted, filled in, averaged or converted. Click a row to see what happens to it.

Data preparation guide →

Illustration · synthetic rows, not real data · column set shortened

02 // ScoreEach point keeps its own history

Compare today with its own last 28 days.

For each day, the detector takes the previous 28 calendar days of the same series (never today, never another plant), with at least 14 valid days. The score is the distance from the prior median, in robust spreads. Drag across the chart or use the sliders.

History detector guide →
Daily readingPrior medianMedian ± threshold × spreadWindow used (clipped)Flagged

Illustration · synthetic series · one threshold for both directions here; the real thresholds are calibrated per series and per direction (minimum 2.0) on data through 2023 for an assumed 1% workload

03 // RulesData-quality checks alongside the score

Catch what a score cannot see.

Three simple rules run next to the score: stuck (the same value on 7 or more days after a history that varied), dropout (a zero after a window without zeros) and negative. Inject an artificial fault, as the project's fault evaluation does, and switch the rules off to compare.

Rules in the methodology →
Daily readingPrior medianScore flagRule hit

Illustration · synthetic series · recovering artificial faults is not real-world accuracy

04 // CasesRanked within one plant

Turn flagged days into a review order.

Flagged days of one series become one case when at most one unflagged day separates them. Cases are ranked within the plant: rule hits first, then more flagged days, then a higher peak score. This is a documented review order, not a severity. Click a day to cycle it through not flagged, score flag and rule hit.

Cases in the methodology →
Default 1
Score flagRule hitCase

Illustration · three synthetic series at one plant · peak scores are invented

05 // Second viewExperimental Isolation Forest

Unusual combinations isolate quickly.

The forest splits the data at random. A rare combination of features ends up alone after only a few splits; a typical one takes many. Averaged over 100 trees, fewer splits give a higher ai_score. That means rarer, not faulty. Click any point to isolate it.

Isolation Forest guide →
Lower ai_scoreHigher ai_scoreRandom split

Illustration · two synthetic features shown · the real model uses six history-based features and one forest per measurement group, and never uses identifiers or compares plants

06 // EvaluateChronological, no labels

Set the bar on one year, test it on the next.

The forest trains on data through 2023. The alert threshold is set on 2024 validation scores (the 99th percentile by default), then frozen and applied to the held-out 2025. Move the percentile to see how the threshold and workload shift.

Training and thresholds →

Illustration · synthetic score distributions · bar height is the square root of the count · a different held-out rate is expected and says nothing about accuracy

To compare the two methods fairly, each one picks its own top readings per plant per day from exactly the same eligible readings. The baseline takes rule hits first, then the history score; the forest takes the highest ai_score. Change the budget for one plant on one day.

Default 1

Illustration · six synthetic readings from one measurement group · overlap describes the methods; it does not show which is more useful

Second Opinion · Built for TAI / Z-infoRead the methodology · Back to top ↑