Jump to content

Aggregating multiple KPI Alerts into one final Health Score


Recommended Posts

  • Seeq Team

Monitoring KPI's for your process or equipment is a valuable method in determining overall system performance and health. However, it can be cumbersome to comb through all the different KPI's and understand when each is deviating from an expected range or set of boundaries. 

We can, however, shorten our time to insight by aggregating all associated KPI's into one Health Score; the result allows us to monitor just one trend item, and take action when deviations occur. 

 

To walk through the steps of building a Health Score, I will walk through an example below which looks at 4 KPI's for a Pump, and aggregates them into one final Health Score. Note that the time period examined is a 3 month period leading up to a pump failure.

 

KPI DETAILS

KPI #1

The first indicator I can monitor on this pump is how my Discharge Pressure is trending relative to an expected range determined by my Manufacturer's  Pump Performance Curve. (To enable using a pump curve in Seeq, reference this article for more information: Creating Pump and Compressor Curves in Seeq). 

As my Discharge Pressure deviates from the expected range, red Capsules are created by using a Deviation Search in Seeq. 

image.png

 

KPI #2

The second indicator I can monitor on this pump is whether the NPSHa (available) is remaining higher than the NPSHr (required) as stipulated by the Manufacturer's Pump Datasheet.

If my NPSHa drops below my NPSHr, red Capsules will be created by using a Deviation Search in Seeq. (No deviations noted in the time period evaluated).

image.png

 

KPI #3

The third indicator I can monitor on this pump is whether the pump Vibration signals remain lower than specified thresholds (these could be determine empirically, from the Manufacturer, or industry standard).

In this case I have 4 Vibration signals. I am using a "Union" method to combine the 4 conditions into the final KPI Alert, which will show red Capsules if any of the 4 vibrations exceed their threshold. The formula for this KPI Alert condition is as shown below:

$vib1>$limit1 or $vib2>$limit2 or $vib3>$limit3 or $vib4>$limit4

image.png

 

KPI #4

The fourth indicator I can monitor on this pump is whether the flow through the pump is remaining higher than minimum allowable as stipulated by the Manufacturer's Pump Curve/Datasheet.

If my measured Flow drops below my Flow Limit, red Capsules will be created by using a Deviation Search in Seeq. (No deviations noted in the time period evaluated).

image.png

 

BUILDING THE HEALTH SCORE

Now that we have 4 conditions, 1 for each KPI if exceeding the determined normal operating range, we need to aggregate these into the Health Score. 

First, we determine how much % time each KPI alert has been active during each Day (in fraction form, ie range of 0 to 1). We do this by creating a Formula for each KPI Alert condition, with the syntax as follows:

#Determine the % duration that a KPI alert is active during each Day (in fraction form)
$kpi1.aggregate(percentDuration(), days(), startKey()).convertUnits('').toStep()

The result of applying this to all 4 KPI Alert conditions should be as follows - you may note that if a KPI Alert condition is "on" for the full duration of a day, it will show a value of 1. If partially "on", it will show a fractional value between 0 and 1, and if no Condition is present at all, it will show a value of 0.

image.png

Now we aggregate these individual indicators into a rolled up Health Score, by using the Sum of Squares method, and then dividing by the total number of indicators.

To do so, enter the following in a formula:

#Aggregate the Sum of Squares of the fractional alert values
($k1.pow(2) + $k2.pow(2) + $k3.pow(2) + $k4.pow(2))/4

image.png

 

I could also have performed the above 2 steps in 1 Formula:

#First determine the % duration that a KPI alert is active during each Day (in fraction form)
$k1 = $kpi1.aggregate(percentDuration(), days(), startKey()).convertUnits('').toStep()
$k2 = $kpi2.aggregate(percentDuration(), days(), startKey()).convertUnits('').toStep()
$k3 = $kpi3.aggregate(percentDuration(), days(), startKey()).convertUnits('').toStep()
$k4 = $kpi4.aggregate(percentDuration(), days(), startKey()).convertUnits('').toStep()

#Then aggregate the Sum of Squares of those fractional values
$sumOfSquares = $k1.pow(2) + $k2.pow(2) + $k3.pow(2) + $k4.pow(2)

$sumOfSquares/4

 

I can also add a Health Score high limit (in my example 0.25 = if one KPI Alert is active for a full day), to trigger some action (perhaps schedule pump maintenance), prior to failure. A new red Capsule will appear if my Health Score exceeds this limit of 0.25 (can be configured via Value Search or Deviation Search). Enter the following into Formula to create this limit (a new scalar):

image.png

 

Below you will see my final Health Score trend item as well as the limit and Health Score Alert condition.

image.png

Optionally, I can use the High Limit to create a shaded boundary for my Health Score, using the Boundaries Tool. (I also create a low limit of 0 to be the lower boundary).

image.png

image.png

We can see that in the month leading up to Failure (early Feb), I had multiple forewarning indications through this aggregated Health Score. In future, I could monitor this Pump health in a dashboard in a Seeq Organizer Topic, and trigger some maintenance activity proactively.

Dashboard Example:

image.png

  • Like 4
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...