この記事は2019年9月14日に書かれたものです。
現在は内容が古い可能性もありますのでご注意ください。

Rを使った平均応答時間の分析


こんにちは、@24guchiaです。

弊ブログをTwilioしか書かないブログかな?
と思われている方もいらっしゃるでしょうが、
Twilio以外も書きます。
統計解析向けのR言語というものを今回は使い、
平均応答時間の分析をしました。

Twilioも関係はありますが、今回はRがメインです。
そもそもTwilioを利用しているのは、
電話機をソフトフォンにするのはメインの狙いではなく、
データを用いた業務改善施策を行うためにTwilioを選択しています。
これについては、下記記事で触れているので、
読んでみてください。

Twilioでのテレフォニーリニューアルについて

通話などのデータが取れるTwilioとデータを分析できる
Rの組み合わせはなかなかおもしろいです。

そもそも応答時間とは?

コールセンターのKPIの一つで、
着信があってから、オペレーターが対応するまでの時間です。
短ければ短いほどよい指標です。

コールセンターでなくても、電話応対をする会社であればよく
「3コール以内に取るように!」と先輩社員などから
言われたことがあるかもしれません。
応答時間を短くし、お客様を待たせないようにするのは、
一般的な会社員でもご存知かと思います。

3コール以内って結局何秒なんだ?とまで考える方は少ないかもしれませんが、
9秒と考えてもらって構いません。
日本では呼び出し音は1秒音が鳴り、2秒待機するのが1コール。
1コール3秒なので、9秒です。

法律でも定められているため、基本的には
平均応答時間を9秒以内にすることを目指していけばよさそうです。
https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E9%9F%B3

R言語を選択した理由

社内勉強会でR言語もくもく会という会が、毎週月曜日に行われていて、
それに参加しているからです。
社内のデータサイエンティストである@SKUEさんが主催で、
R言語で何ができるかの説明や、
もくもくした結果に対するフィードバックをくれる貴重な場で、
毎週楽しく参加しています。

Rだと、ggplot2というグラフ描画が得意なパッケージが使え、
かなり優秀だと思いました。

アウトプット

こんな感じのグラフが出ました。
ggplot2geom_tileを使って描画しています。

※ データは仮のものです。下記JavaScriptコードでダミーを作成しています
https://github.com/enyuka/rlang_mokumoku/blob/master/src/analyse_phone/data/mk_dummy_data.js

このグラフから分かることは
050xxxxyyyyの平均応答時間は10秒前後で推移しているので、サービスレベルが高く、
対して、0120xxxyyyは平均応答時間が14秒前後で推移しています。
そのため、この番号はサービスレベルが低いと言わざるをえません。
この番号に関しては、受電できる人を増やしたり、
IVRを用いて、そもそも受電しないなどの施策を行い、
改善をすることが求められます。

こういう提案を勘ではなく、ビジュアル化により誰が見てもわかる形式で
データを元に決定できるのでとてもいいですね。

以下、実装についてです。

コード

どういうコードになったかの説明をします。
Githubはこちら

使ったデータ形式

  • MMDD_MMDDという形式のディレクトリの1ヶ月分を用意
    • 例: 0701_0702, 0702_0703
  • 各ディレクトリには+8150xxxxyyyy.csvという形式のCSVが入っている
  • CSVの中身は1列目にConferenceSid,2列目が応答時間です
  • Githubにあげているデータは仮のデータです

乱雑データと整然データ

データ分析しづらいデータを乱雑データ
データ分析しやすいデータを整然データと言います。

乱雑データ

乱雑データは下記のようなデータ。

date 050xxxxyyyy 0120xxxyyy
0701 10 14
0702 9 15

エクセルとかでは見やすそうなデータですね。
セルの中身はその日の平均応答時間です。

当初、このような形式にする必要があると思って、
悪戦苦闘していましたが、ggplotに渡すに当たり、
引数がxとyしか指定できず、
なんか違うっぽいな・・・と思い、@SKUEさんレビューいただき、
整然データについて教えてもらいました。

整然データ自体は下記惑星本で学んでハイライトまでしていたのですが、
ちゃんと理解できていませんでしたね?

ちなみにこの惑星本@SKUEさんにも、Tokyo RのSlackでもおすすめされました。
とてもいい本だと思います。

整然データ

整然データの定義は下記です。
上で紹介した惑星本こと、RユーザのためのRStudio[実践]入門から引用します。

    1. 1つの列が1つの変数を表す
    2. 1つの行が1つの観測を表す
    3. 1つのテーブルが1つのデータセットだけを含む
      出典元: RユーザのためのRStudio[実践]入門

先の乱雑データは1列目は日付の変数ですが、
各番号は各行の見出し、平均応答時間は行列にまたがってしまってます。

上で紹介した雑然データを整然データをしたのが下記です。

date number sec
0701 +8150xxxxyyyy 10
0702 +8150xxxxyyyy 9
0701 +81120xxxyyy 14
0702 +81120xxxyyy 15

整然データの定義に則ったデータ形式です。
各列は1つの変数ですし、1つの行はその日のその番号の平均応答時間です。
これで整然データができたので、これをggplot2で描画し、
色の調整をすることで、できたのがアウトプットの図です。

ちなみに乱雑データを苦労して作ったので、
せっかくなのでこれもGithubに上げてあります。
https://github.com/enyuka/rlang_mokumoku/blob/master/src/analyse_phone/messy_analyse_speed_of_answer.r

まとめ

Twilioの強みはオムニチャネルやコンタクトセンターを作れるFlexなど
色々とありますが、データを分析しやすい形で残せるのも
大きな特長の一つです。

残したデータを分析し、データドリブンで業務改善を進めていきましょう。