3 Replies Latest reply: Feb 8, 2010 7:15 PM by 728481 RSS

    How is skill weighting handled?

    jona
      We use skill weighting for our workgroups as sometimes we need backup from one to the other. It works okay, but sometimes not as well as we would hope. I have two problems in troubleshooting this. For one, our Agent Skills Report doesn't run right. We have agents repeated in the skill section 2 or 3 times with different values. So that means I have to go into the agents to verify the real values. But what's more troubling is that I can't find any documentation to explain how the skill-weighting is calculated. On a relative basis, it's not so much of a problem, but let's say I set Skill1 = 90 and IdleTime to 10. Now lets say I have 2 agents Available: Agent1 has Skill1=100 and Agent2 has Skill2=99. I'm assuming that if the IdleTime=10, Agent1 would almost always get calls firt, but I would expect there's a time where Agent2 would get the call first. But how do you figure that out? Multiply the workgroup Skill1 of 90 by the Agent Skill1 value then add the seconds Available multiplied by the IdleTime of 10? I'm completely making that up, but there must be some calculation, right?

      And if it's in the Knowledge in Support, I apologize in advance, but MyOracleSupport is down anyway so I can't get to it.
        • 1. Re: How is skill weighting handled?
          728481
          I had the actual algorithm at one point, but can’t seem to find it. I’ll send a note to engineering to see if they will send it over.

          It is worth noting that a skill difference of 1 between the agents when everything else is equal isn’t going to make the weighting obvious.

          To see the actual scores, you can view the ACDServer logs (the log does need to be set to trace level 5). The output will look like this for a new interaction:

          Receive : new Interaction[272997976658302] workgroup[2255 - WorkgroupNameRemoved], type[CALL ], project[9580] ,EWT [0] and Priority[3], Number of Working Agents [2]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[1349], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[1349], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 5 : -171325760 : 7615 : ACDServer : 736 : Info : Agent[1349 - AgentNameRemoved], Workgroup[2255], Score[9900], Idle Time [7], Status[ON BREAK], Picked Status[NONE], Predictive[NO],Current-Max Email[0-0], Current-Max chat[0-0]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[1374], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[1374], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 5 : -171325760 : 7615 : ACDServer : 736 : Info : Agent[1374 - AgentNameRemoved], Workgroup[2255], Score[4950], Idle Time [7350], Status[BUSY], Picked Status[NONE], Predictive[NO],Current-Max Email[0-1], Current-Max chat[0-1]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[3315], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[3315], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 5 : -171325760 : 7615 : ACDServer : 736 : Info : Agent[3315 - AgentNameRemoved], Workgroup[2255], Score[9900], Idle Time [35], Status[BUSY], Picked Status[PHONE], Predictive[NO],Current-Max Email[0-2], Current-Max chat[0-1]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[8966], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[8966], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 5 : -171325760 : 7615 : ACDServer : 736 : Info : Agent[8966 - AgentNameRemoved], Workgroup[2255], Score[9900], Idle Time [1170], Status[ON BREAK], Picked Status[NONE], Predictive[NO],Current-Max Email[0-1], Current-Max chat[0-1]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[51735], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : Checking agent[51735], entity[1], workgroup[2255]
          08/02/2010 09:56:50.746 : 5 : -171325760 : 7615 : ACDServer : 736 : Info : Agent[51735 - AgentNameRemoved], Workgroup[2255], Score[9900], Idle Time [1000], Status[ON BREAK], Picked Status[NONE], Predictive[NO],Current-Max Email[0-0], Current-Max chat[0-0]
          08/02/2010 09:56:50.746 : 0 : -171325760 : 7615 : ACDServer : 736 : ************************ AddInteraction

          The agent with the highest score (who is also available) will be associated to the call. In this case, no agents were immediately available for the call.

          Dave
          • 2. Re: How is skill weighting handled?
            jona
            Whew!
            Okay, that leaves me some follow-up items.

            Until that day the only values we used were 10, 25, 50, 75, 90, and 100. I figured a 1-point difference wouldn't mean much, but it was as much a point as anything. I can't tell what difference 1 point makes any more than I can tell what difference 90 points makes. (Sorry if this reads as being snappy -- that's not my intent.)

            Wow! ACDServer logs? Trace level 5? That is completely foreign to me. However, it may be useful. As an admin/supervisor, where would I go to even see that stuff?
            • 3. Re: How is skill weighting handled?
              728481
              Here is the actual algorithim....

              Jeff



              Variable Definitions and Assumptions:
              A workgroup W that has a single Skill S
              Agent1 and Agent2 assigned to the workgroup W
              The weight Idle time of the workgroup W is WI. So, the Skill weight is 100 - WI.
              The agent1 weight for S is A1
              The agent2 weight for S is A2
              The agent1 SKILL SCORE is A1 X (100 - WI), call this S1
              The agent2 SKILL SCORE will be A2 X (100 - WI), call this S2
              The idle time of agent1 is I1 (real idle time + 60 seconds)
              The idle time of agent2 is I2 (real idle time + 60 seconds)

              Formula
              Score Agent 1 = (S1 * (100 - WI) * Maximum (I1, I2)) + (I1 * WI * Maximum (S1,S2))
              Score Agent 2 = (S2 * (100 - WI) * Maximum (I1, I2)) + (I2 * WI * Maximum (S1,S2))

              Example
              Idle time weight = WI which equals 10
              Skill weight = 100 - WI which equals 90
              Agent1 skill weight = A1 which equals 100
              Agent2 skill weight = A2 which equals 90
              Agent1 skill Score = S1 which equals 100 * 90 = 9000
              Agent2 skill Score = S2 which equals 90 * 90 = 8100
              Agent1 idle time = I1 which equals 100 (real idle time is 40 secs but we always add 60 secs)
              Agent1 idle time = I2 which equals 200 (real idle time is 140 secs but we always add 60 secs)

              Then
              Agent 1 Score = [9000 * (100 - 10) * Maximum (100, 200)] + [100 * 10 * Maximum
              (9000,8100)]
              Agent 2 Score = [8100 * (100 - 10) * Maximum (100, 200)] + [200 * 10 * Maximum
              (9000,8100)]
              So
              Agent 1 Score = (9000 * 90 * 200) + (100 * 10 * 9000) -> (162,000,000 + 9,000,000) =
              171,000,000
              Agent 2 Score = (8100 * 90 * 200) + (200 * 10 * 9000) -> (45,800,000 + 18,000,000) =
              163,800,000