0 votes
20 views
ago by (30.6k points)
We would like tasks to go to the person most likely to finish them quickly and to raise the priority of instances at risk of missing their SLA. Is there anything built in, and how would we implement it with the platform's extension points?

1 Answer

0 votes
ago by (30.6k points)

Nothing decides assignments by machine learning out of the box, but BAW has the right hooks, and the data to train on already exists (PDW / BAI): task durations per person and activity, instance cycle times, business data.

  • Best assignee: a team filter service (runs when the task is created) calls a prediction ("expected completion time per candidate") and returns the team narrowed to the best few members - the task still goes to a team, so claiming and absence handling keep working. The prediction can come from an ADS predictive model, a small model served through Open Prediction Service, or simply from statistics computed nightly from the PDW into a table.
  • SLA risk: a timer or a step early in the instance calls a model ("probability of breaching the due date given amount, region, current backlog") and sets priority / due date accordingly; re-evaluate at milestones; escalate through the normal timer events.
  • Workload balancing without ML: the filter service reads open task counts per member (REST search or SQL) and prefers the least loaded - often 80 % of the benefit.
// team filter service "Best approvers" - input team, request; output filteredTeam (top 3 by predicted handling time, fallback = whole team)
var candidates = [];
for (var i = 0; i < tw.local.team.members.listLength; i++) candidates.push(tw.local.team.members[i]);
tw.local.candidates = new tw.object.listOf.String();
for (var c = 0; c < candidates.length; c++) tw.local.candidates.insertIntoList(c, candidates[c]);
// next step: nested service flow "Predict handling time" (ADS / Open Prediction Service behind it): candidates + request in, scores out
// the prediction call is a nested service flow step in the filter service: inputs candidates (list of String), request; output scores (list of Score{user, hours})
// script after it:
var scores = [];
for (var i = 0; i < tw.local.scores.listLength; i++) scores.push({ user: tw.local.scores[i].user, hours: tw.local.scores[i].hours });
scores.sort(function (a, b) { return a.hours - b.hours; });
tw.local.filteredTeam = new tw.object.Team(); tw.local.filteredTeam.name = tw.local.team.name;
tw.local.filteredTeam.members = new tw.object.listOf.String();
var n = Math.min(3, scores.length);
for (var j = 0; j < n; j++) tw.local.filteredTeam.members.insertIntoList(j, scores[j].user);
if (n == 0) tw.local.filteredTeam.members = tw.local.team.members;                      // never return an empty team

// SLA risk step in the BPD (script after a prediction step): raise priority and shorten due date
if (tw.local.breachProbability > 0.6) { tw.local.priority = "High"; tw.local.dueInHours = 4; }

Data for the model (nightly from PDW / BAI): per task - activity, assignee, claimed-to-completed hours, hour of day, business attributes; per instance - cycle time, breach flag. Start with a gradient boosting model or even a lookup table of medians per (activity, user); measure the effect with an A/B split by team before rolling out; keep humans able to override (a "route manually" option in the dashboard); and explain the routing in the task's narrative ("assigned by predicted handling time") so that people trust it. Keep the filter fast (one batched prediction call, cached statistics) - it runs on every task creation.

References

Related questions

723 questions

807 answers

98 comments

4.8k users

Join BPM Community Discord Channel

Welcome to BPM Tips Q&A, Community wiki/forum where you can ask questions and receive answers from other IBM BPM experts and members of the community. Users with 2000 points will automatically be promoted to expert level.
Created by Dosvak LLC
Our Youtube Channel
...