2013年2月23日土曜日

コールセンターの必要席数試算(アーランCと稼働率の関係)

コールセンターの必要席数を試算するときに、アーランを使う場合と使わない場合があると思います。

アーランを使う場合と使わない場合とで必要席数が大きく異なる場合、アーランを使わない場合に利用されている稼働率という指標を適当に設定しているケースがよくあります。そもそも、目標応答率が高いということは、取りこぼしがないように、入電が同時に沢山発生したときを考慮して席数を多めに配置するわけですから、当然ながら稼働率は下がります。なので、目標応答率70%のときも、95%のときも稼働率が80%なんてことは試算上はあってはならないのであります。

ということで、試しに、アーランCの結果を正とした場合に、各目標応答率に対する適正な稼働率を算出してみたいと思います。

各目標応答率に対する適正な稼働率を算出する


ちなみに、アーランを使わない場合の席数試算方法は下記になります。

必要席数 = 1時間当たり入電数 ÷ ( 60 ÷ ( 平均通話時間 + 平均後処理時間 ) × 稼働率 )
※平均通話時間と平均後処理時間の単位が”分”の場合の式です。単位が”秒”なら、60は、3600になります。

アーランを使う場合は、依然このブログで投稿した『JavaScriptでアーランCによりコールセンターの必要席数を計算する』で記載している計算方法を使いましょう。

ソースコードは下記です。下にあるボタンを押すとこれを起動させるようにしました。

1時間当たり入電数(件):
平均通話時間(分):
平均後処理時間(分):


<table>
<tr><td>1時間当たり入電数(件):</td><td><input id="call" type="text" size="50" /></td></tr>
<tr><td>平均通話時間(分):</td><td><input id="acd" type="text" size="50" /></td></tr>
<tr><td>平均後処理時間(分):</td><td><input id="acw" type="text" size="50" /></td></tr>
</table>
<input type="button" id="startBtn" value="稼働率を計算" /><br />
<div id="kadoritsuResult"></div>

<script type="text/javascript">
$(function(){
    $('#startBtn').click(function(){start();});
});

function start(){
 $('#kadoritsuResult').empty();
 var call = $('#call').val();
 var acd = 60*$('#acd').val();
 var acw = 60*$('#acw').val();
 var aht = acd+acw;
 var kadoritsu = 0;
 var sheet = 0;
 var text = '<br /><table class="kadoritsuTable">';
 
 text += '<tr><td>応答率</td><td>稼働率</td><td>必要席数</td></tr>';

 for(var sl=0.5;sl<1;sl+=0.01){
  sheet = erlangc(call,aht,sl);
  kadoritsu = Math.round((getKadoritsu(call,aht,sheet))*100)/100;
  text += '<tr><td>' + parseInt(sl*100) + '%</td><td>' + kadoritsu +'</td><td>' +
  sheet + '席</td></tr>';
 }

 text += '</table>';
 
 $('#kadoritsuResult').append(text);
}

function getKadoritsu(call,aht,sheet){
 return call/(3600/aht)/sheet
}

function erlangc(call,aht,sl){
    sl = 1 - sl;
    if(sl<=0)sl=0.0009;
    var erlang = aht*call/3600;
    var sheet = parseInt(erlang);
    var p = 1.0;
    var up = 1.0;
    var down = 0.0;
    var temp;

    while(p>=sl){
        sheet++;
        //分子
        for(var x=0; x<sheet; x++){
            up *= erlang/(sheet-x);
        }
        up = up*sheet/(sheet-erlang);
        //分母
        for(var x=0; x<sheet;x++){
            temp = 1.0;
            if(x!=0){
                for(var y=0; y<x;y++){
                    temp *= erlang/(x-y);
                }
            }
            down += temp;
        }
        down += up;
        p = up/down;
        up = 1.0; down = 0.0;
    }
    return sheet;
}
</script>

0 件のコメント:

コメントを投稿