No meeting, no call, no site visit, nothing installed on your
network. You email a CSV of data you already log. I run it and email back what
moved, what the numbers will support, and what they will not.
James Jardine · ORCID 0009-0004-9073-7192
Thirty years a pipefitter in Alberta gas plants. I write the software myself.
What you send
One CSV. Historical is fine, redacted is fine, one unit is enough.
Rows in time order — oldest first. A few hundred at minimum; a few thousand is better.
One column per channel. Sixteen is the natural fit. Fewer works and is stated as a limitation in the report.
Optional: a column naming the run or batch, and a column labelling condition — ok / fault, before / after, whatever you use.
No system access. No VPN. No agent on your network. A file goes one way and
a report comes back the other.
What comes back
Whether each channel carries a readable signal at all, or is too flat to say anything about.
If you labelled conditions: whether the groups actually separate, with a permutation test behind the number rather than an assertion.
Every confound I can see from the file itself — stated on the face of the report, not buried.
A worked example you can check yourself
Run on IndPenSim, a public 100-batch penicillin fermentation
dataset — 113,935 samples, 22 process sensors, ten batches with a known
fault. None of this is my data or a customer's; you can download it and repeat it.
Faulted batches vs healthy · same control regime
p = 0.018The engine separated the faulted batches
p = 0.22Control — healthy vs healthy, correctly found nothing
The second number matters as much as the first. A test that
cannot come back empty is not a test.
Two things the report said out loud, unprompted:
FlagThe faulted batches were all run at the end of the campaign, so “faulted” and “run last” cannot be told apart from that file. The finding is suggestive, not settled — and no analysis fixes it after the fact.
FlagComparing the faults against all 90 healthy batches gives an effect roughly 2.4× larger — because those 90 span three different control strategies. Against the 30 that actually match, it shrinks. The published figure for this dataset uses the larger comparison.
What it refuses to do
Each of these is a mistake I made, found, and turned into a gate.
StopsIf the measurement scale saturates on your data, it reports nothing and says why. A flat channel returns a clean, believable result that means nothing at all.
StopsNo number is reported without a control that could have killed it.
NeverNo model is trained on your data and no threshold is tuned toward an answer. The one thing that can adapt is the measurement scale — if your channels move too fast for the standard one, it is refitted to your data’s own spread and the report says so on its face. That refit reads the shape of your data only; it never sees your labels, so it cannot be steered toward a result you were hoping for.
Says soIf your data cannot answer your question, that is the report. You get a plain “this does not show what you were hoping” rather than a number dressed up to look like one.
Cost
The first file costs nothing. No account, no card, no trial
that converts. You get the report and decide whether it was worth anything. If
it was not, we are done and you have lost one data export.
There are no production customers yet. You would be the first, which is
exactly why I am not asking for money.
Attach the CSV, or a link to it if
it is large. One line about what the channels are and what you are trying to
find out is enough — I will ask if I need more. The reply comes by email;
I do not need a call and will not ask you for one.
If your file is too sensitive to
send, say so and I will tell you exactly which columns and how many rows would
be enough, or how to shift and rescale it so the structure survives and the
values do not.