データ分析、初歩の初歩 - 開発は顧客問合せへの工数をどうすれば減らせるのか

表題に対しデータをちゃんと取って作戦をたてたいと思い、考察した内容。ポエムに近い。

https://qiita.com/mura416@github/items/6320a4173bd373897a98

>1. 数と率
2. 比較
3. 分布
4. 時系列
5. 相関関係と因果関係

だよねえ、と思いながら色々こねくり回してみた。が、まだまだ考える余地がある。

## 動機

### ざっくりと話の前提
- 開発チームは保守・安定Version、最新Versionと、複数Versionに跨り
    - 不具合修正作業
    - コーディング
    - 調査
        - etc 
        - ...をしながら
    - 問合せ解決のための「やりとり」、コミュニケーション
        - ...もこなしている。その役割分担が無理ゲーではという話はここではしない。まずはそういう状況下にあるとする。
- しかし当然、プログラムをより良くする上では、**もっと実際の作業（開発者しかできない、手を動かす作業、あわよくば技術の探求、勉強）に時間を裂きたい。**
    - 「やりとり」なんかは最小限のほうが良い、とその所属メンバーである私は思っている。
    - **コミュニケーションしたくないという意味ではない。それもう何回も言ってるよ～というのを無くしたいのです。**
- その他
    - 社内には開発の他に、顧客問合せを爆速で水先案内するいわゆるコンタクトセンターチームが居る。
    - 開発も、もう少しシステマチックに保守・安定Version問合せに対応する手続きが確立できれば、それ専任の人員を追加アサインすることを上司に提案できるんだが。


### やりたいこと

- 開発チームが保守Versionの問合せのやりとりに割く時間割合が多すぎるのでは、という仮説をデータから可視化したい
    - ここを駆逐できればもっと開発に時間を裂けるのではないかという仮説
    - 可視化すれば駆逐するにはどういう作戦が考えられるか、考えやすくなるのではという仮説
- **淡い期待: コンタクトセンターにもっと依頼できるのでは。**
- **淡い期待: あるいは、「コンタクトセンター から溢れるが開発の中ではルーチン作業となっている」ゾーンがまだまだあるのでは。**


つまりそれほど難しい分析学を身に着けたいと言うほどではないが、
自分の仮説に根拠と裏付けをつくるためにそれなりに**現在の状況を可視化したい。**
ちょっとこなれたExcel使い程度のことをExcelではない方法でやれたらいいな。などと思ったということです。**自分のために。**



## やってみる

自分の担当分野に関する問い合わせをCSV形式で取得した。こんな感じになる。
実際は1000の桁のレコードがあるので結構色々数字遊びができる。


|記入者|区分|更新日時|更新日|プロダクト|バージョン|サブシステム|URL|
|:----|:----|:----|:----|:----|:----|:----|:----|
|磯野カツオ| |2021/01/15 23:45|2021/1/15|Great Product|安定Ver|ツール|https://xx.examples.com/examples=zzzz|
|フグ田サザエ| |2021/01/15 23:27|2021/1/15|Great Product|安定Ver|汎用検索|https://xx.examples.com/examples=zzzz|
|さくら友蔵 様|お客様|2021/01/15 23:19|2021/1/15|Great Product|最新Ver|汎用検索|https://xx.examples.com/examples=zzzz|
|フグ田タラオ| |2021/01/15 23:06|2021/1/15|Great Product|最新Ver|未設定|https://xx.examples.com/examples=zzzz|
|磯野波平| |2021/01/15 23:05|2021/1/15|Great Product|最新Ver|共通|https://xx.examples.com/examples=zzzz|
|...|...|... |...|...|...|...|...|





たとえば上の例で、「安定Ver」 のレコードをどうにかできないものかと思うわけですね。
だって単純作業の塊だから...



### 全顧客問い合わせ数
- 全顧客問い合わせ数 における各Version 毎の割合 を出してみよう。
- PythonでとりあえずCSVからカウントしてみようと思った
    - （Excelで集計できるけど。このあたりまあやってみたかっただけ。）
    - （安定Versionがよく問い合わせを受けているねということです。）


|バージョン|件数|割合 (%）|
|:----|:----|:----|
|安定Ver|3992|**57.6711933**|
|最新Ver1|1484|21.43889049|
|最新Ver2|655|20.88991621|

```count.py
import pandas as pd
import sys

args = sys.argv
print(args)
print("第1引数：" + args[1])
print("第2引数：" + args[2])

def countbyversion():
    df = pd.read_csv(args[1], header=0, parse_dates=['更新日'])
    ret = df.groupby(['バージョン']).agg({'URL':'count'})
    ret.to_csv('output.csv', index=True, header=True)

if (args[2] == "countbyversion"):
    countbyversion()
```


### 開発チームの回答数
- 開発チームの回答数 における各Version ごとの割合
    - これをみて、ホラッ、私達の仕事の4割は安定Versionとの闘いじゃない、と思ったりするのだ。が。

|記入者|バージョン|件数|回答数に占める安定Versionの割合(%)|
|:----|:----|:----|:----|
|磯野カツオ|安定Ver|18|40.90909091|
|磯野カツオ|最新Ver1|16| |
|磯野カツオ|最新Ver2|9| |
|フグ田サザエ|安定Ver|30|42.25352113|
|フグ田サザエ|最新Ver1|19| |
|フグ田サザエ|最新Ver2|12| |
|磯野波平|安定Ver|10|35.71428571|
|磯野波平|最新Ver1|3| |
|磯野波平|最新Ver2|11| |


```py
def countbypersonandver():
    df = pd.read_csv(args[1], header=0, parse_dates=['更新日'])
    ret = df.groupby(['記入者', 'バージョン']).agg({'URL':'count'})
    ret.to_csv('output.csv', index=True, header=True)
```



### コンタクトセンターの回答数
- コンタクトセンターの回答数 における各Version ごとの割合
    - あれ、コンタクトセンターの回答数、むしろ7割が安定Versionに関するところなのか...。

|記入者|バージョン|件数|回答数に占める安定Versionの割合(%)|
|:----|:----|:----|:----|
|磯野タラオ|安定Ver|200|71.42857143|
|磯野タラオ|最新Ver1|56| |
|磯野タラオ|最新Ver2|18| |
|磯野タイコ|安定Ver|204|73.91304348|
|磯野タイコ|最新Ver1|55| |
|磯野タイコ|最新Ver2|12| |
|磯野ノリスケ|安定Ver|72|75.78947368|
|磯野ノリスケ|最新Ver1|15| |
|磯野ノリスケ|最新Ver2|2| |


### 安定、下位Versionと戦っている割合

こんな感じだった。

- 開発： 40 %前後
- コンタクトセンター：70 %前後


## つまり

コンタクトセンターは下位Versionの問合せを結構吸収してくれているのだな...
だいぶ肌感と違ったな...いやいや、でもこれで正しく作戦が立てられるのだ。そう思うことにする。
開発の私としてはこの割合を限りなく1桁パーセントにしたい。


### 冒頭に戻り、本当のやりたいこと

> - 開発チームが保守Versionの問合せのやりとりに割く時間割合が多すぎるのでは、という仮説をデータから可視化したい
    - ここを駆逐できればもっと開発に時間を裂けるのではないかという仮説
    - **可視化すれば駆逐するにはどういう作戦が考えられるか、考えやすくなるのではという仮説**
- 
淡い期待: コンタクトセンターにもっと依頼できるのでは。
 とおもったがそうでもなかった。
- **淡い期待: あるいは、「コンタクトセンター から溢れるが開発の中ではルーチン作業となっている」ゾーンがまだまだあるのでは。**
- 気づいたこと: そういえば普通に各Version毎の利用数どれほどだっけ
- 気づいたこと: 3月4月のほうが忙しいんだよね、そのへんどうだっけ
- 気づいたこと: 各Versionだけじゃなく詳細機能別とかどうだっけ

が次の作戦になりそう。


## 学び

冒頭の [データを見るときに気をつけていること](https://qiita.com/mura416@github/items/6320a4173bd373897a98) をもう一度見ると、当記事では以下が触れられていない。

> - 分布
> - 時系列
> - 相関関係と因果関係

実際には時期別特徴や、Version毎の利用数から問合せに至る率、単に数が多ければ問合せも多いだろうという関係や、プロダクトの中の詳細機能ごとの特徴なども考えてよさそうだ。さらには、**この安定Versionに対して開発が対応したところで実際、プログラムの修正はどれだけ必要なのか？なども考えたい。**

ただの感想: しかしこういうの実際に数字にしてみないと気づけなかったなあ。ともかく、「コンタクトセンター から溢れるが開発の中ではルーチン作業となっている」ゾーン は何か？具体的に見てみようとおもう。これに気づけてよかった。ここから先は具体的になっていってしまうのでこのお話はこのへんで。

以上参考になればさいわいです



## 参考

https://qiita.com/ysdyt/items/9ccca82fc5b504e7913a

https://qiita.com/minoru_t/items/2a7e8edb8e168d795ebc

https://qiita.com/kannoma/items/d8ab1f7b6cfa62b05707#github

https://github.com/pandas-dev/pandas/blob/master/doc/cheatsheet/Pandas_Cheat_Sheet.pdf

https://qiita.com/01ken93miya/items/3ab55f4ae969022aebbd