Fatigue and Risk Index
Fatigue and Risk indexes in Skillo
We calculate the Fatigue Index and Risk Index for each shift.
We use the same algorithm that was in the rr446cal.xls file from Network Rail.
We did not and do not alter the algorithm in any way.
The Fatigue and Risk index algorithm
The HSE FRI is an advanced tool designed to calculate the Fatigue Index and Risk Index of employee shift schedules.
Unlike basic calculators that simply look at the number of hours an employee works or how many hours of rest they get, this algorithm acts as a biomathematical model.
It simulates the human biological clock to understand how exhausted a worker will actually feel.
The Biological Clock and Circadian Rhythm
The most crucial feature of this algorithm is how it handles the Circadian Rhythm (our body's internal 24-hour clock). Human biology dictates that we are meant to be awake during the day and asleep at night.
Because of this, the algorithm heavily penalizes schedules that force a worker to fight their biology. For example, if an employee switches from a day shift to a night shift, their Fatigue and Risk scores will spike dramatically—even if they are given a perfectly legal, long break between the shifts.
This happens for two reasons:
- Truncated Recovery: If a night-shift worker goes to bed at 7:00 AM, their biological clock will wake them up after only a few hours of sleep, meaning they cannot fully recover. The algorithm recognizes this and calculates a "sleep debt".
- The "Witching Hour": Working during the natural circadian low (typically between 2:00 AM and 5:00 AM) mathematically triggers an automatic increase in risk and alertness failure within the algorithm, regardless of how rested the worker is.
In short, this algorithm measures not just HOW MUCH time off a worker gets, but WHEN that time off occurs.
Technical Details
The algorithm calculates the FatigueIndex and RiskIndex per duty (shift) by evaluating three distinct components. It heavily relies on the Three-Process Model of Alertness/Fatigue (Process S for sleep pressure, Process C for circadian rhythm, and Process W for sleep inertia) and utilizes a derivative of the Karolinska Sleepiness Scale (KSS) for cumulative sleepiness estimation.
1. Component Breakdown
For each shift, the algorithm isolates three factors:
- Duty Timing Component: Evaluates the baseline fatigue and risk based purely on the shift's start time, duration, and commute length. It utilizes a Three-Process estimation assuming a standard baseline workload.
- Breaks Component: Isolates the effect of the specific workload and break patterns during the shift. It calculates a continuous work recovery factor (Rr) that diminishes with continuous work and recovers during breaks.
- Cumulative Component: The most complex factor. It models sleep opportunity, sleep debt, and the carrying over of fatigue/risk from consecutive prior shifts.
2. Fatigue Index Calculation
The final Fatigue Index is calculated using a probabilistic combination of the three components:
FatigueIndex = 100 * (1 - (1 - CumulativeComponentFatigue) * (1 - DutyTimingComponentFatigue - BreaksComponentFatigue))
- pKss: Within the Cumulative component, a KSS value (
pKss) is derived to estimate sleepiness based on predicted sleep pressure and circadian phases.
3. Risk Index Calculation
The final Risk Index is a straightforward multiplier of the three components:
RiskIndex = CumulativeComponentRisk * DutyTimingComponentRisk * BreaksComponentRisk
- Time of Day Risk: Risk calculations utilize a 24-hour sine wave function to artificially inflate the risk multiplier if
OnDutyhours overlap with circadian lows.
4. Sleep Recovery Modeling (Logistic Curve Fitting)
To accurately model "Truncated Recovery" (the biological difficulty of sleeping during the day), the system relies on empirical curve-fitting. Specifically, the amount of restorative sleep obtained is calculated using a logistic (sigmoid) function based on the worker's BedTime.
RKFit = -2.28827436527851 + 11.7995318577367 /
(1 + 0.472949055173571 * Math.Exp(-1.77393493516727 + 0.16244804759197 * (BedTime - 20)));
The highly precise decimal values are not universal constants, but rather empirical coefficients derived from non-linear statistical regression on sleep diary/actigraphy data. This S-curve allows the system to perfectly map the non-linear drop-off in sleep duration as a worker goes to bed later into the morning.
What we send to the algorithm
We send in the same information that you would put in the excel file.
There are 4 parameters for the algorithm describing the shift break pattern.
We did not want to create as much friction in Skillo so we simplified things a bit.
Described below.
🔵 day
- The day the shift starts on
🔵 on duty
- Shift start time
🔵 off duty
- Shift end time
🔵 commuting time
- The total of the departure plus arrival time divided by 2
🔵 breaks frequency
-
The total duration of the shift, minus the break, divided by 2.
-
If you have a 9 hrs shift with a 1hr break this will be (9 - 1) / 2 = 4.
🔵 breaks average
- The break duration.
🔵 longest work
-
The total duration of the shift, minus the break, divided by 2.
-
If you have a 9 hrs shift with a 1hr break this will be (9 - 1) / 2 = 4.
🔵 breaks after longest work
- The break duration.
🔵 workload
-
One of the following:
-
Extremely demanding, no spare capacity
-
Moderately demanding, little spare capacity
-
Moderately undemanding, some spare capacity
-
Extremely undemanding, lots of spare capacity
-
🔵 attention frequency
-
One of the following:
-
All or nearly all of the time
-
Most of the time
-
Some of the time
-
Rarely or nearly none of the time
-
📌 If you have additional information, insights, research, or details regarding how the Fatigue and Risk Index algorithm works, we would love to hear from you!
Please reach out and send your suggestions or information to team@skillo.co.uk.