Services How We Work Sectors Academy Library About Contact Open the Toolbox →
Operate Track · Tool 03 Guide

Bad Actor / Pareto Analysis: Finding the 20% That Costs You 80%

Every maintenance program has a small number of assets that account for a disproportionate share of its cost and effort. Bad Actor analysis is the structured way to find them. This guide covers the method generally — the three Pareto axes, how to choose a cost basis, how to read the 80% cut — then walks through getting the right input file from Microsoft Dynamics 365 (with sections for other CMMSs to follow as we add them).

IEC 62740 §6.3 ISO 14224 NORSOK Z-008 Pareto Principle
⚡ TL;DR

Bad Actor analysis ranks equipment by where the cost actually lives, so root-cause effort goes to assets where it pays back. The Pareto principle (~20% of assets cause ~80% of cost) makes the ranking sharp enough to act on.

Three axes tell three different stories: cost finds the expensive failures, frequency finds the irritating repeat-offenders, HSE consequence finds the dangerous ones. Pick the axis the business actually cares about — or all three in sequence.

The output is a short list. The next step is always the same: take the top 1–3 entries into Root Cause Analysis and feed the findings back into FMECA and RCM.

The big idea: most of the pain comes from a small number of assets

If you sort the equipment in any operating facility by total maintenance spend and draw a cumulative line, the curve always has the same shape: a steep climb at the start, then a long flat tail. A small head of the distribution — usually around 20% of the equipment population — carries the majority of the cost. This is the Pareto principle, named after Vilfredo Pareto who first observed it in late-19th-century Italian land ownership and which has since shown up in essentially every cost or quality distribution that has been measured.

In maintenance terms the consequence is simple. If you spread improvement effort evenly across the asset register, most of it lands on equipment that isn't actually a problem. The same effort, focused on the top 10–20 tags, would move the needle much further. Bad Actor analysis is the structured way to identify which tags those are, on which axis, and what to do about them.

The work is not the ranking. The work is what comes after — root cause analysis on the top offenders, then revisions to the FMECA and RCM so the next failure on a similar asset is rare instead of inevitable. Bad Actor is the prioritisation step that decides where to point the RCA effort. Without it, RCA gets done on whatever failed last week, not on what's costing the most.

Three axes, three stories

The same dataset produces different rankings depending on what you measure. There is no single correct axis; the right one is determined by what the business is trying to optimise. Most useful Bad Actor work runs all three and looks at the overlap.

Axis 1

By cost

Sum the maintenance cost charged against each asset (or model, or location). Rank descending. The top entries are where money is actually going. This is the default for finance-driven reviews.

Best forBudget impact
MissesCheap-but-frequent issues
Bias riskOne catastrophic event dominates
Axis 2

By frequency

Count fault events per asset (or per failure mode). Rank descending. The top entries are the repeat-offenders — the tags that consume planner attention, fitter time, and store-room patience even when each event is cheap.

Best forOperational headache
MissesRare-but-massive events
Bias riskCounts trivial work orders the same as major events
Axis 3

By HSE consequence

Weight events by criticality (C1 / C2 / C3 per NORSOK Z-008 or equivalent) and rank by total weighted score. The top entries are the assets that could hurt someone or release containment, even if they haven't yet.

Best forRisk reduction
MissesLow-criticality cost burdens
Bias riskOnly works if criticality is up to date

The Bluestream Bad Actor tool runs all three from a single export. The axis picker on the sidebar lets you switch instantly. A standard workflow is:

  1. Cost first — that's what the business will fund work against.
  2. Frequency second — that's what the planners will recognise. Any asset that's top-20 on both is unambiguous.
  3. HSE third — even if a C3 asset isn't on the cost or frequency lists, a single failure could change that. Track them separately.

Reading the Pareto chart

A Pareto chart is a bar chart sorted by descending value, overlaid with a cumulative-percentage line. The bars show how much each entry contributes; the cumulative line shows how quickly you reach the majority. The 80% horizontal cut is the standard reference.

Anatomy of a Pareto chart A bar chart sorted descending by cost with a cumulative percentage line overlaid. A horizontal dashed line marks the 80% threshold. Bars to the left of the cut are highlighted as the vital few; bars to the right are the trivial many. Labelled regions point out the head (steep climb), the elbow (where the cumulative line crosses 80%), and the long tail. cost cum % 80% cut Vital few ~20% of entries ยท ~80% of cost Trivial many ~80% of entries ยท ~20% of cost elbow
Anatomy of a Pareto chart Bars descending by cost, cumulative line climbing. The elbow — where the cumulative line crosses 80% — is where the "vital few" end and the "trivial many" begin. Improvement effort focused left of the elbow has the highest return per hour invested.

What to look for when reading the chart:

Choosing the right cost basis

A modern CMMS exposes several cost columns per work order — what was budgeted, what was actually posted, what was classified as corrective vs preventive, and so on. The Bad Actor ranking changes depending on which column you sum. Pick deliberately.

Cost basisWhat it representsWhen to use it
Actual costThe total cost actually posted to the work order after it closed — labour, materials, contractors, the lot.The default for any mature program with closed work orders. Reflects what really happened.
Corrective cost onlyThe subset of Actual cost that the CMMS classified as reactive / unplanned / breakdown response (as opposed to scheduled PM).When you want to find unplanned bad actors — assets where the PM strategy is failing. Filters out the baseline planned-work cost.
Original budgetThe cost committed at work-order planning time, before the work actually happened.Test environments (UAT) and any tenant where work orders haven't been posted yet. Use as a fallback when Actual cost is empty.
Preventive costThe subset classified as planned / preventive maintenance.Reverse Bad Actor: assets receiving the most preventive spend are candidates for PM optimisation (PMO) — maybe the strategy is over-engineered.

The Bluestream tool defaults to auto-detect: it scans the dataset and picks Actual cost if it's non-zero, falls back to Corrective cost, then to Original budget. So UAT exports just work, mature-prod exports just work, and there's no configuration step. You can override the basis explicitly from the dropdown.

The corrective vs preventive distinction is only as good as the CMMS coding. If your work-order categorisation is loose (technicians put "Repair" against everything), the corrective-cost number won't be reliable. Either spend a session cleaning the historical coding, or fall back to Actual cost as the basis and treat the result as "all-in" spend without splitting planned from unplanned.

Filter by criticality first

Most asset registers have hundreds of C1 (low-consequence) tags — spare pump bodies, redundant utility valves, abandoned-in-place instruments. They show up in the Pareto if you let them, and they drown the signal. The Bluestream tool defaults to C2 + C3 only, which is almost always what you want for a real Bad Actor exercise.

Toggle C1 back on if you want a complete picture, but the analysis is usually cleaner without it. If a C1 asset is consuming a lot of cost, the question that asks itself is whether the criticality is correctly rated — not whether to attack the asset.

A worked example

Suppose you drop a 12-month, 100-event cost export into the tool. The Pareto, ranked by model, comes out something like this:

By cost (Actual basis)

Pareto ยท top-down
1. LM2500 turbines $ 570,000 (23.8%, cum 23.8%) · 3 events
2. Frame 5 turbine $ 559,000 (23.3%, cum 47.2%) · 4 events
3. BB2 ANSI pumps $ 225,000 ( 9.4%, cum 56.6%) · 23 events
4. Centaur 40 compressors$ 208,000 ( 8.7%, cum 65.3%) · 6 events
5. M6-MFG heat exchanger $ 148,000 ( 6.2%, cum 71.5%) · 3 events
6. BEM Shell/Tube HE $ 124,000 ( 5.2%, cum 76.7%) · 2 events
7. BB3 pumps $ 121,000 ( 5.1%, cum 81.7%) · 11 events
—— 80% cut ——

Two gas-turbine models drive nearly half the spend off the back of just 7 events. The Pareto-by-cost answer is to look at the turbines first.

Now switch to the frequency axis on the same data:

By frequency (event count)

Pareto ยท top-down
1. BB2 ANSI pumps 23 events ( ~ $10k average)
2. BB3 pumps 11 events
3. OH2 pumps 10 events
4. Centaur 40 / BB1 6 events each
...

A completely different story. The turbines are nowhere near the top — they're rare events. But BB2 ANSI pumps fail 23 times in a year across 5 tags. That's an average of nearly one failure per pump every two months. The Pareto-by-frequency answer is BB2 ANSI — almost certainly a systemic class issue (coupling, mounting, seal flush, something common to the model).

The combined reading: if you only had budget for one investigation, the turbines pay back faster on a per-event basis but the BB2 ANSI population is a class-level systemic problem that, if solved, prevents 20+ future events. Mature programs run both: RCA on the next major turbine event when it happens; immediate Generic Maintenance Concept review for the BB2 ANSI fleet.

From ranking to RCA

The ranking is not the deliverable. The deliverable is the changes you make to the maintenance program based on it. The Bluestream tool makes this explicit: every row in the ranked table has a Send to RCA button that pre-populates the Root Cause Analysis tool with the asset, top symptom, top cause, and cost context.

From there the loop is the standard Operate-track flow: RCA on the top offender → corrective and preventive actions → write-back into FMECA (the new or refined failure mode) and RCM (the revised maintenance strategy). The next Bad Actor refresh, run a quarter later, should show the offender dropping down the list — that's the audit signal that the program is improving.

Refresh cadence: monthly is plenty for most facilities. Quarterly is fine for stable programs. Re-running Bad Actor weekly produces too much noise — individual events shift the ranking and you end up chasing the wrong tail. Aggregate periods are more signal-rich than instantaneous ones.

Getting the input file from your CMMS

The Bluestream Bad Actor tool ingests any spreadsheet with at minimum an Asset column, a Fault column, and a cost column. Different CMMSs expose this data via different paths and column names. We map the common ones automatically so you don't have to rename anything; sections below cover the path per CMMS.

If your CMMS isn't listed yet, the universal fallback is: export work-order history with one row per cost transaction, including asset tag, fault description, criticality, and cost columns. Save as .xlsx or .csv and drop it in the upload zone.

Microsoft Dynamics 365 โ€” Asset Management

Supported

D365 Asset Management ships a purpose-built Asset fault cost control inquiry that produces exactly the right shape with no transformation needed.

Path

Modules → Asset managementInquiriesAsset faultAsset fault cost control

Step-by-step

  1. Open the inquiry above. You'll see four grouping panels: Group by date, Group by asset, Group by functional location, Group by fault, and Group by project.
  2. Tick every chip across all five groups. This produces the maximum-resolution 26-column export. Sub-tools can collapse fields later; we want everything on the way out.
  3. Click Calculate cost. The grid below populates with one row per cost transaction (typically 1 header row + 1 Hour row + 1 Item row per fault).
  4. Use the standard D365 Export to Excel button (Office button at the top, or right-click → Export all rows). The file lands as Cost control_*.xlsx in your Downloads folder.
  5. Drop the file into the Bad Actor tool's upload zone. The tool reads the 26 columns directly — no renaming, no transformation.

Field mapping

The D365 columns map to internal keys as follows (handled automatically by the importer):

D365 columnUsed as
FaultThe aggregation key — one fault may produce several transaction rows that are summed
Asset · Model · Manufacturer · Asset typePareto axis choices (tag-level vs class-level vs vendor)
Criticality1 / 2 / 3 filter at the top of the sidebar
Functional location · Functional location typeSystem-level Pareto axis
Fault symptom · Fault area · Fault type · Fault causeFailure-mode Pareto axes — useful for RCA targeting
Actual costDefault cost basis when posted
Corrective costCost basis when you want to isolate reactive spend
Original budgetFallback for UAT or pre-posting environments
Fault date · Year · Quarter · Month · WeekDate facets for time-range filtering (currently informational; date filter ships in v2)

Notes specific to D365

  • Each fault expands to 3 rows (or sometimes more): a header row with the fault metadata and blank cost cells, plus one transaction row per cost line (typically Hour = labour and Item = spares). The tool sums by Fault ID and ignores blank-transaction header rows automatically.
  • In a fresh UAT tenant, Actual cost is empty because work orders are still in planning. The tool falls back to Original budget automatically, so you can prototype the analysis before go-live.
  • The Asset fault analysis inquiry (one level above Cost control in the menu) returns frequency and probability data but no cost. It's a useful cross-check but Cost control is the right primary source.
  • The Asset fault PDF report (under Reports rather than Inquiries) is for sign-off and archival; not exportable in a useful format for analysis.

SAP PM (Plant Maintenance)

Walkthrough coming

The right SAP PM source is the IW39 / IW49 work-order list with cost fields (Actual cost · Planned cost) and the asset/notification hierarchy. We're documenting the exact field selection, the right cost layout variant, and how to handle the standard PM-vs-CO settlement split. Until then, export IW39 with at minimum: Equipment, Functional Location, Object Part / Damage / Cause / Activity (the four-level catalog), and Actual cost. Save as .xlsx and drop into the tool — the Equipment column maps to Asset, the catalog fields map to Fault symptom / area / cause.

Need this section sooner? Tell us your SAP version and configuration and we'll prioritise.

IBM Maximo

Walkthrough coming

Maximo customers should pull from the WORKORDER / FAILUREREPORT entities, joined to ASSET for criticality, with the Actual Labor + Actual Material cost columns. We're documenting the standard report or BIRT export. Until then, the work-order list view in the Work Order Tracking application, exported with Asset, Failure Class, Problem, Cause, Remedy, and the cost summary columns, works as-is.

Need this section sooner? Tell us your Maximo version and we'll prioritise.

eMaint / Fiix / Asset Care / Other

Walkthrough coming

Most modern cloud CMMSs (eMaint, Fiix, MaintainX, Limble, UpKeep) and Microsoft-stack variants (Asset Care, Dynaway) expose a work-order export with the same fundamental fields: asset tag, failure category, cost. The Bad Actor tool's flexible column matcher accepts any spreadsheet with those minimum columns — the tool will detect headers like Asset, Fault, and Actual cost and route them automatically.

Want a dedicated walkthrough for your CMMS? Let us know — we add them in order of demand.

Common mistakes

  1. Running Bad Actor weekly. Individual events move the ranking around; the wrong asset ends up at the top because of last Tuesday. Monthly is the minimum useful cadence; quarterly for stable programs.
  2. Acting on cost alone for safety-critical assets. A C3 asset that hasn't failed yet costs nothing. That doesn't mean it's not your highest priority. Always check the HSE axis separately.
  3. Ignoring the long tail. The tail is the program's baseline running cost. If it grows year-on-year while the head shrinks, you're cleaning up bad actors but the program quality is degrading underneath. Track total tail spend as a separate KPI.
  4. Picking the wrong group dimension. Grouping by Asset (individual tag) finds specific bad actors; grouping by Model or Asset Type finds class-level bad actors. The class-level grouping is what catches systemic Generic Maintenance Concept issues; the tag-level grouping catches one-off installation problems. Run both.
  5. Using Actual cost when the CMMS is poorly coded. If technicians put "Corrective" against scheduled work because the dropdown is confusing, your corrective-vs-preventive split is wrong. Spend a session cleaning the historical coding before relying on the split, or fall back to total Actual cost.
  6. Stopping at the ranking. The ranked table is not an output. The output is the changes to the FMECA / RCM / GMC for the top entries, and the RCA reports that justify those changes. A Bad Actor list with no follow-through is documentation, not analysis.

References

Next steps