1. Condition Monitoring Overview

The shop runs 40 CNC machines and four compressors that supply the plant's air. Its eight HMCs are the bottleneck: they carry 28.7% of the shop's cutting hours at 71% utilization, against 39% to 50% for the other machine classes, and an hour of HMC downtime costs $185 in contribution margin, 1.67x the average for the rest of the fleet.

In July 2023 the shop began a pilot of sensor-based condition monitoring on the HMC cell and the compressors: wireless sensors on 40 points, monitored as 28 assets (each HMC's spindle, through-spindle coolant (TSC) pump and flood coolant pump, and each compressor).

Through the pilot, the sensor data has been monitored by the Vendor Rules layer, the sensor vendor's threshold alerts based on limits over baseline. These alerts led to 200 machine inspections from July 2023 to June 2025, and 80% of those inspections found nothing wrong. To improve these results, the pilot's second phase adds the ML Model layer, replacing Vendor Rules' relatively simple thresholds with an anomaly detection machine learning model. Over the evaluation year (July 2025 to June 2026), the ML Model ran in shadow mode beside Vendor Rules, with its ALERTs and ALARMs recorded and not acted on, in order to evaluate its performance.

This report evaluates the performance of the ML Model against Vendor Rules over the evaluation year.

Condition Monitoring Pilot Setup
Condition Monitoring Pilot Setup

Conditions in the Evaluation Year

Across the eight HMCs and four compressors, 44 conditions were confirmed from July 2025 to June 2026. 32 were on the sensor points and showed in the sensor data; the comparison in section 2 is on those. Of the other 12, one was on an HMC axis which has no sensor, four showed only in the machine's controller data (two compressor oil cooler faults and two rotary union leaks without coolant ingress), and seven had no precursor signature in any data (sudden trips, crashes and stoppages).

Sensor-detectable conditions by type, evaluation year
Sensor-detectable conditions by type

2. Model Results

The ML Model was trained on the first two years of sensor data and has been live in production since July 2025. The results below are presented for the entire evaluation year (July 2025 through June 2026).

The ML Model achieved notable improvements over Vendor Rules. It caught 23 of 32 conditions compared to 22 of 32; its ALERTs gave an 11% longer warning time and produced a 41% lower false-alert rate. Had the shop acted on the ML Model's ALERTs instead of Vendor Rules', it would have spent 25 fewer hours on inspections of false alerts over the year.

ML Model vs. Vendor Rules: ALERTS
ML Model and Vendor Rules, ALERT

The ML Model's ALARMs were generally more accurate than Vendor Rules', with a 9 percentage point higher share of ALARMs with a confirmed condition and a 61% lower false ALARM rate, but this came at the cost of less warning time.

ML Model vs. Vendor Rules: ALARMS
ML Model and Vendor Rules, ALARM

Detection at ALERT

ALERT is the level at which each method calls for an inspection, so this is the detection comparison. Over the evaluation year, only Vendor Rules' ALERTs triggered inspections in the maintenance queue. The ML Model ran in the background, where its results were recorded and not acted on, so its effectiveness could be measured against Vendor Rules.

Alert threshold by method
ML ModelVendor Rules
Anomaly score above the point's threshold, the 99.5th percentile of its scores on healthy training hours, for 6 consecutive hours; or above 5 times the threshold for 2 hours, except on pumps during a controller low-pressure alarmVelocity above the point's baseline plus 25% of the ISO 20816 zone B width, or high-frequency acceleration above its baseline plus 25% of its reference width; a bearing fault band 6 dB above its baseline for 3 hours; velocity in ISO zone C; or housing temperature at the asset class's warning limit. Baselines are set over 21 days after installation and after each repair.

A condition counts as caught when an ALERT was open on the asset in the 30 days before confirmation. An ALERT that opened more than seven days before the condition began, with no sign of degradation on the asset, is deemed coincidental and not counted.

Of the 32 conditions, the ML Model's ALERTs caught 23 and Vendor Rules caught 22. 18 conditions were caught by both models.

The chart below shows four representative conditions across different outcomes: a condition only the ML Model caught, one only Vendor Rules caught, one that both caught, and one that neither caught. The full chart across all monitored assets is found in the appendix.

Condition 1: Flood Pump Bearing Failure (HMC-01)
ML Model caught 58 days ahead, Vendor Rules raised no ALERT
Condition 1: Flood Pump Bearing Failure (HMC-01). ML Model caught 58 days ahead, Vendor Rules raised no ALERT
Condition 2: Flood Pump Wear (HMC-06)
Vendor Rules caught 51 days ahead, ML Model raised no ALERT
Condition 2: Flood Pump Wear (HMC-06). Vendor Rules caught 51 days ahead, ML Model raised no ALERT
Condition 3: TSC Pump Bearing Defect (HMC-01)
ML Model caught 72 days ahead, Vendor Rules 68 days ahead
Condition 3: TSC Pump Bearing Defect (HMC-01). ML Model caught 72 days ahead, Vendor Rules 68 days ahead
Condition 4: TSC Pump Seal Failure (HMC-06)
Neither raised an alert beforehand and it ended in a failure
Condition 4: TSC Pump Seal Failure (HMC-06). Neither raised an alert beforehand and it ended in a failure

The ML Model produces 0.140 false ALERTs per asset-month against Vendor Rules' 0.235. Vendor Rules raised 79 false alerts, which took 63 inspection hours. The ML Model raised 47, which would have taken about 37 hours at the same labor rate. At their peak month, Vendor Rules' inspections took 2.5% of the three technicians' available hours, against 1.1% if the ML Model's ALERTs were used to drive inspections.

The operating curve below shows conditions caught against false alerts per asset-month for ML Model and Vendor Rules at different alert threshold levels. The ML Model's curve lies to the left of Vendor Rules' current setting from the 88th percentile up: at those thresholds it raised fewer false alerts than Vendor Rules does today, while catching 19 to 23 conditions.

Conditions caught against false episodes per asset-month, evaluation year
Conditions caught against false episodes per asset-month

Escalation to ALARM

ALARM is each method's urgent level, so this tests whether an escalation pointed at a real problem.

ALARM threshold by method
ML ModelVendor Rules
An open ALERT plus a severity criterion for the asset class: velocity in ISO 20816 zone D; a stage 3 or 4 bearing signature; the housing temperature residual above its set level; the spindle thermistor at 44 °C or above for 10 minutes, or compressor discharge temperature at 100 °C or above, from the controller; or sustained cavitation on a TSC pumpVelocity above the point's baseline plus 50% of the ISO 20816 zone B width, or high-frequency acceleration above its baseline plus 50% of its reference width; velocity in ISO zone D; or housing temperature at the asset class's alarm limit

The ML Model's ALARMs were more accurate than Vendor Rules: 41% of its 34 ALARMs had a confirmed condition, against 32% of Vendor Rules' 79 ALARMs, and it produced a 61% lower false-alarm rate (0.054 against 0.137). On the sensor data alone, which both models read, the ML Model's false-alarm rate was even lower, at 0.033. This accuracy came at the expense of warning time: the ML Model's ALARMs gave a median of 19.0 days of warning against Vendor Rules' 26.9 days on the 11 conditions that both layers escalated.

Vendor Rules ALARMed before five of the seven unplanned failures, and the failures still happened: the inspections it triggered found no fault in one, found the problem without preventing the failure in one, and no inspection was raised in the other three.

Condition Diagnosis

Work requests on the ML Model's ALERTs and ALARMs correctly diagnosed the confirmed condition on 14 of the 23 conditions it caught.

The ML Model's work requests were strongest on conditions with a distinct signature, naming all six bearing defects (three with the damaged component located), four of six lubrication episodes and both imbalance and looseness cases. It struggled where conditions overlapped or share a signal: three of four pump-wear cases were misnamed, mostly as imbalance; the three spindle cooling faults were named lubrication, the condition sharing their alert; and one of two rotary union leaks was named bearing despite a 9.2% coolant pressure drop.

Diagnosis by confirmed condition
Diagnosis by confirmed condition

3. Model Overview

Sensors

The ML Model and Vendor Rules read from 40 sensor points: four on each of the eight HMCs and two on each of the four compressors. Once an hour, each point records one second of vibration on three axes, sampled 25,600 times a second, and its housing temperature. A measurement is taken only in a steady state (spindles above 3,000 rpm and steady for 10 seconds; pumps and compressors running), so hours are comparable.

Sensor points by asset type
Asset typePoints per unitLocationAxesTotal points
HMC spindle2Front and rear bearing housingsTriaxial16
TSC pump1Pump motor, drive endTriaxial8
Flood coolant pump1Pump motor, drive endTriaxial8
Compressor2Motor drive end; airend inletTriaxial8

The sensor node computes and reports 13 measurements (used by both layers): vibration velocity, high-frequency acceleration, bearing fault-frequency energies (six: the outer race, inner race and rolling elements, each at 1× and 2× its fault frequency), shaft-order energies (two: 1× and 2× running speed), crest factor, kurtosis and housing temperature. The ML Model also reads seven measurements (so 20 total inputs) of the machine's operating state from its controller, such as the spindle speed band and the cutting load, so it compares each hour with healthy hours under the same conditions.

ML Model at a glance

What it readsWhat it learnsWhat it produces
Every hourly measurement on 40 sensor points: velocity, high-frequency acceleration, the bearing fault bands, shaft-order energies, crest factor, kurtosis and the temperature residual, with the operating measurements from the controllerEach point's healthy pattern from up to two years of its own history, across operating regimes, re-centered after each repair and sensor remountAn hourly anomaly score per point, the inputs that moved most, and for those scores beyond threshold, a level per asset (ALERT, ALARM) with a suspected condition

The ML Model is an autoencoder, a neural network trained separately for each sensor point on that point's healthy hours. Each hour, it compresses the 20 inputs through a narrow bottleneck layer then rebuilds them. Having learned only healthy machine readings, it rebuilds a healthy hour closely. A developing fault moves the measurements in ways the healthy hours never did, so the rebuild falls short. The size of that gap is the model's anomaly score, and the measurements with the largest gaps are reported as the leading inputs.

Model outputs

Each hour, the ML Model's anomaly score level for each asset (the highest of its points) appears in the maintenance queue as OK, ALERT, or ALARM, beside Vendor Rules' level. An ALERT opens a work request naming the suspected condition and a recommended inspection. During the evaluation year these ALERTs and ALARMs were recorded and not acted on.

Maintenance queue at the snapshot
Maintenance queue at the snapshot

3.1 Training Data

From signal to inputs

Each hour's measurement starts as one second of acceleration, shown here from a healthy hour on an HMC spindle's front bearing. Its frequency spectrum shows the spindle's rotation as narrow peaks, which give the velocity and shaft-order measurements. The 2 to 10 kHz band, where bearing impacts first ring the housing, gives high-frequency acceleration, and demodulating it produces the envelope spectrum, checked for peaks at each bearing's defect rates (outer race, BPFO; inner race, BPFI; rolling elements, BSF). On this healthy hour, the envelope spectrum shows no peak at any defect rate.

One second of vibration, from raw signal to fault-frequency spectrum
One second of vibration, from raw signal to fault-frequency spectrum

Each of the 13 sensor measurements is calculated from these signals as one number for the hour, which is then compared to the point's normal level, so a healthy hour sits near zero. These measurements join the seven controller measurements which mark the hour's speed and load with an on/off flag (1 and 0; here, the machine was running with a light load at medium speed). Together they are the ML Model's 20 inputs, as shown below, which is calculated from the vibration data on the healthy hour as detailed above.

The Model's 20 Inputs: Representative Readings on a Healthy Hour
The Model's 20 Inputs: Representative Readings on a Healthy Hour

Healthy hours

The ML Model is trained on healthy hours which form the basis of its anomaly detection. An hour counts as healthy when the point was measured and no repair was under way, no work order was open, and, after any repair or sensor remount, the point's readings had settled at a new level. The 120 days before any confirmed condition are excluded, so that a fault developing before it was found does not enter training as a healthy hour.

On a healthy hour, vibration velocity sits in ISO 20816 zone A or B (1.2 to 2.3 mm/s on spindles, rising with load), kurtosis is near 3, crest factor is 4.1 to 5.0, and the envelope spectrum has no peak at a fault frequency. Healthy levels shift with spindle speed and rise with load, and the controller measurements let the model learn each point's healthy pattern across them.

Healthy measurements by speed band, spindle front points
Healthy measurements by speed band, spindle front points

The ML Model was trained on 157,703 healthy hours from July 2023 to June 2025 (512 to 7,249 per point). The chart below shows the number of healthy training hours for each sensor point. The number above each bar counts the point's repairs and sensor remounts in the training years. Each one removes hours from training, mostly the 120 days before the condition that led to it, so points with higher repairs and remounts had lower healthy training hours.

Healthy training hours per sensor point
Healthy training hours per sensor point

3.2 Scoring Summary

The ML model's ALERT threshold is the 99.5th percentile of each point's healthy training scores. Six consecutive hours above it raise ALERT, or two hours above five times it, except on a pump during a low-pressure alarm. ALARM follows on an open ALERT when a severity criterion for the asset class holds (section 2). If a point stays above its threshold for 30 days with no open work order, no confirmed condition and no significant upward trend, its threshold is reset on those 30 days; five points were reset in this way over the evaluation year.

On a healthy hour the model rebuilds every input to within about one unit, so the anomaly score stays low. A faulty hour is shown below, five weeks before HMC-01's TSC pump bearing was confirmed, where kurtosis, outer-race (BPFO) envelope energy and crest factor all peaked and the anomaly score rose to 262x the threshold; those inputs led the work request to name an outer-race bearing defect.

Inputs Against the model's rebuild on Healthy and Faulty Hours
Inputs against the model's rebuild, healthy hour and faulty hour
From score to level, one spindle point
From score to level, one spindle point

Over the evaluation year the ML Model scored 128,862 measured hours on 40 points. 71% were outside any episode, 22% inside an ALERT and 7% inside an ALARM, 178 alert-hours per asset-month against Vendor Rules' 276. It opened 81 ALERT episodes across 25 assets and escalated 34 to ALARM.

Score distribution, evaluation year
Score distribution, evaluation year
Hours by level, by month
Hours by level, by month

31% of the ML Model's ALERT hours led with shaft-order energies (imbalance, looseness, pump wear), 25% with the temperature residual, 28% with the fault bands, crest factor or kurtosis, 10% with velocity or high-frequency acceleration, and 6% with the controller measurements.

Scoring summary table
Asset classMeasured hoursALERT episodesALARMsMedian episode length, daysLeading input group
Compressor12,765549.5fault bands, crest factor or kurtosis
Flood coolant pump29,03714811.5fault bands, crest factor or kurtosis
HMC spindle58,028461111.3temperature residual
TSC pump29,032161120.3shaft-order energies

3.3 Condition Signatures

The five most common conditions of the evaluation year each carry their own vibration and temperature signature.

Signatures of the most common conditions
Signatures of the most common conditions

4. Model Evaluation

4.1 Model Selection

Four model types (PCA, Mahalanobis distance, isolation forest and an autoencoder) were trained per sensor point on five input sets (20 models trained), from the 13 sensor measurements to a full set of 52 inputs with the entire spectrum and envelope bands. Each model was trained with one threshold per point or one per spindle speed band. Each model was then scored and selected by a fixed rule: take the highest catch rate above chance (the share an alert would catch if it fell at random, given how much of the time it was open) at Vendor Rules' false-alert rate; and, among those within two caught conditions of the best, choose the simplest model.

The autoencoder with the 13 measurements was selected (skill of 0.356); the wider input sets did not improve it. A full detail of what each design choice added in the training round is in the appendix.

Top Model Candidates After Training
ModelInputsThresholdCatch at budgetChanceSkill above chanceCaught at operating pointFalse episodes per asset-monthSelected
Autoencoder [16-6-16], 200 epochs (retuned to 16-4-16)vendor (13)One per point0.770.420.35619.80.192✔
Autoencoder [16-6-16], 400 epochsextended (37)By speed band0.850.460.34721.20.234
Autoencoder [16-6-16], 200 epochsfull spectrum and envelope (52)One per point0.770.420.27419.40.241
Mahalanobis distanceextended (37)One per point0.730.470.25720.00.250

4.2 Accuracy and Validation

The evaluation year scores the ML Model and compares it to Vendor Rules' performance.

On the evaluation year, the ML Model caught 72% of conditions with 19.2 days of warning on its catches at 0.140 false episodes per asset-month, against 79% with 11.8 days of warning on its catches at 0.170 false episodes per asset-month on the training folds. It caught fewer conditions in evaluation than training, mostly on lubrication episodes, discussed in 4.3.

The ML Model raised fewer false alerts than Vendor Rules in every period, on both training folds and in all four quarters of the evaluation year. It caught a higher share of conditions on both folds and in Q2 and Q3, and a lower share in Q1 (44% against 78%, the quarter the monitoring report flags) and Q4 (67% against 83%).

Results by period
MethodMeasureFold 1Fold 2Evaluation yearQ1Q2Q3Q4
ML ModelCatch rate79%80%72%44%75%100%67%
ML ModelFalse alerts per asset-month0.1890.1500.1400.1180.1060.1570.179
ML ModelConditions1410329896
Vendor RulesCatch rate71%60%69%78%62%78%83%
Vendor RulesFalse alerts per asset-month0.2240.2460.2350.2010.3070.2420.287
Vendor RulesConditions1410329896

Over the evaluation year, the ML Model matched or beat Vendor Rules on every condition type except pump seal or impeller wear (four of six against five of six), and caught all six bearing defects, one unplanned bearing defect and one spindle cooling fault more than Vendor Rules. Lubrication, the most common condition, was caught at 60% by both methods.

Catch rate by condition type, evaluation year
Catch rate by condition type, evaluation year

A method can be credited with a catch simply because its alerts are open much of the time, so each condition type was checked against how often the same method alerted when nothing was wrong. In the chart below, the filled marker shows how often a method had an alert open while the condition was developing, and the hollow marker how often it had one open over matched healthy windows: stretches of the same length on the same asset with no condition present. The ML Model's alerts tracked bearing defects, lubrication and pump wear far above its healthy-window rate, while Vendor Rules' lubrication alerts barely exceeded theirs (70% against 59%); on spindle cooling, the ML Model did no better than its healthy-window rate (75% against 83%).

Alerts on each condition type against matched healthy windows
Alerts on each condition type against matched healthy windows

4.3 False Alerts & Misses

Measured against the share of healthy hours in each context, the ML Model's false alerts fell less often on new programs than Vendor Rules' (64% of its false alerts against 76%, with new programs making up 68% of healthy hours), where unfamiliar cutting loads push vibration past Vendor Rules' fixed limits. A higher share of the ML Model's false alerts fell on known programs (19% against 14%), in line with their 19% of healthy hours, and on the compressors (6%, where Vendor Rules raised none), also in line with their hours. Both methods' raised false alerts at elevated rates in the two weeks after a repair re-centered a point, at about twice that period's 4% share of healthy hours.

False alerts by context
False alerts by context

The ML Model raised half the false-alert hours as Vendor Rules (14,964 vs. 31,492). 49% of the ML Model's false alert-hours came from sensor points whose healthy level moved outside the range it was trained on. 17 of its 47 false alerts, across seven sensor points, opened this way. Of the rest, 12 were short crossings above threshold and 12 had no identifiable cause.

False alert-hours by cause, evaluation year
False alert-hours by cause, evaluation year

The ML Model missed nine of the 32 conditions:

Conditions the ML Model missed
AssetConditionConfirmedReason
HMC-01-SPlubrication2025-08-14Score crossed the threshold without staying above it
HMC-06-SPspindle cooling2025-09-12ALERT opened more than a week before the condition with no sign of it
HMC-06-CPpump seal or impeller2025-09-20Score crossed the threshold without staying above it
CMP-02lubrication2025-09-29Point re-centering after a repair
HMC-06-TSCpump seal or impeller2025-09-30Score crossed the threshold without staying above it
HMC-08-SProtary union2025-10-01ALERT opened more than a week before the condition with no sign of it
HMC-02-SPlubrication2025-12-24Inside an ALERT opened more than 120 days earlier
HMC-02-SProtary union2026-05-10Inside an ALERT opened more than 120 days earlier
HMC-01-SPlubrication2026-05-11ALERT opened more than a week before the condition with no sign of it

4.4 Limitations

Appendix

Indicators

InputWhat it measuresSource
VelocityVibration velocity RMS, 10 to 1,000 Hz (mm/s)Sensor
HF accelerationHigh-frequency acceleration RMS, 2 to 10 kHz (g)Sensor
BPFO 1xEnvelope energy at the outer-race fault frequencySensor
BPFO 2xEnvelope energy at twice the outer-race fault frequencySensor
BPFI 1xEnvelope energy at the inner-race fault frequencySensor
BPFI 2xEnvelope energy at twice the inner-race fault frequencySensor
BSF 1xEnvelope energy at the rolling-element fault frequencySensor
BSF 2xEnvelope energy at twice the rolling-element fault frequencySensor
1x orderSpectral energy at 1x running speedSensor
2x orderSpectral energy at 2x running speedSensor
Crest factorPeak over RMS of the accelerationSensor
KurtosisImpulsiveness of the accelerationSensor
Temperature residualHousing temperature less its expected value for the operating state (C)Sensor
Light loadCutting load regime: lightController
Medium loadCutting load regime: mediumController
Heavy loadCutting load regime: heavyController
RunningRunning without a cutting regime (pumps, compressors)Controller
Low speedSpindle speed band: lowController
Mid speedSpindle speed band: midController
High speedSpindle speed band: highController

Platform

ComponentRole
Azure Data Lake Storage Gen2Raw sensor, controller, CMMS and ERP exports
Unity CatalogCatalog, schemas, external location and access control
Lakeflow Declarative PipelinesBronze, silver and gold tables with expectations
Lakeflow JobsTraining, scoring, levels and work requests, evaluation, monitoring
MLflow with the Unity Catalog model registryThe 40 point models as one registered model, alias champion
Declarative Automation Bundles deployed through GitHub ActionsDevelopment and production targets

Model training

What each design choice added to model training performance
Design choiceRoundCaughtFalse alerts per asset-monthStuck pointsResult
37 inputs instead of the 13 measurementsSelection round20.00.226not adopted
45 inputs instead of the 13 measurementsSelection round19.00.223not adopted
52 inputs instead of the 13 measurementsSelection round20.00.253not adopted
13 inputs (the 13 measurements, kept)Selection round20.00.200kept
One threshold per point (same model)Tuning round19.80.185kept
Thresholds by speed bandTuning round19.80.186not adopted
3 hours of persistence instead of 6Version 13 folds18.00.223not adopted
6 hours of persistence (kept)Version 13 folds19.00.170kept
12 hours of persistence instead of 6Version 13 folds17.00.131not adopted
Fix round 1 baselineFix round 119.60.1686.0
F1: hold the last accepted levelFix round 119.60.1836.0adopted
F2: a shorter post-repair windowFix round 119.80.1578.0set aside: stuck points 8.0 against 6.0
F3: spindle temperature residual with regime termsFix round 119.80.1615.6adopted
F4: fast ALERT at 5 times the thresholdFix round 119.60.1706.0adopted (tightened)
Final round baselineFinal round21.40.1705.6
T1: training without Vendor Rules alert hoursFinal round22.00.21014.6set aside: false alerts 0.210, stuck points 14.6
T2: seasonal temperature term only with 9 monthsFinal round21.80.1868.6set aside: stuck points 8.6
T3: no ALERT under 1,000 training hoursFinal round14.80.1115.6set aside: caught 14.8
S1: post-repair level window of up to 60 daysFinal round21.40.1615.6adopted
Improvement round baselineImprovement round19.40.1373.2
C1: the wear-stretch exclusionImprovement round19.20.1275.4set aside: strict 19.2, stuck points 5.4
C2: the seasonal clamp on the temperature residualImprovement round19.40.1475.0set aside: stuck points 5.0
C3: re-arm of a point flat above its thresholdImprovement round19.40.1353.2adopted
C4: post-repair window after repairs to other componentsImprovement round19.40.1323.2adopted

Full timeline

Alerts, inspections and failures over the evaluation year, all 28 assets
Alerts, inspections and failures, all assets

Spindles and compressors carry two sensor points; each lane shows the higher level of the two at each hour.