AIプロダクト品質保証ガイドライン2019まとめ - 02

# シリーズ一覧

- [AIプロダクト品質保証ガイドラインまとめ - 01](https://qiita.com/masso/items/33d53b46c8c9a0e9e872)
- [AIプロダクト品質保証ガイドラインまとめ - 02](https://qiita.com/masso/items/1113608c28a18c955bec) :point_left:<font color=red>本記事</font>


# 概要

この資料は、[QA4AIコンソーシアム](http://www.qa4ai.jp/)が作成する[AIプロダクト品質保証ガイドライン(2019.5)](http://www.qa4ai.jp/QA4AI.Guideline.201905.pdf)を短くまとめたものです。
元のドキュメントは読み物としては良いのですが、~~典型的な逆茂木型文章であり、分かりづらいのでまとめました。~~

# 本稿の使い方

- AIプロダクト品質保証ガイドラインの概要をざっと把握
- 気になったところや詳細を知りたいところは公式の資料を見る

といった使い方をしていただければと思います。


<font color=blue>※AIプロダクト：AI技術を用いた製品やサービス</font>

# 免責事項

本稿は学習の成果物の一つとして作成したものであり、記載内容の正確さは担保致しません。
したがって、本稿に記載した内容に基づくあらゆる事項について一切の責任を負いかねますので、予めご了承ください。

# 目次

1. 目的とスコープ
2. AIプロダクトの品質保証の枠組み
3. <font color=red>技術カタログ</font> :point_left:本稿のターゲット
4. 生成系システム
5. スマートスピーカー
6. 産業用プロセス
7. 自動運転
8. AIプロダクト品質保証コンソーシアムについて

# 3. 技術カタログ

## 前提

機械学習には大きく分けて「教師あり学習」「教師なし学習」「強化学習」がある。
「教師あり学習」は、昨今の性能向上やタスクの明確さから実運用が比較的進んでいるため、
本章では、教師あり学習の品質を中心に扱う。

## 用語の説明

|No|用語|本章における意味|
|:-:|:-:|:--|
|1|訓練データ／学習データ|学習アルゴリズムを実装したプログラムの入力データ|
|2|学習プログラム|学習アルゴリズムを実装したプログラム|
|3|モデル|学習プログラムの実行により得られ、<br>識別・予測・制御などを行うソフトウェア部品であり、<br>入出力の関係性を表したもの|
|4|ハイパーパラメータ|学習のおけるパラメータオプション（訓練により得られるものではない）|
|5|敵対的サンプル|（正常に振る舞う入力に比べて）微量に変化しているだけだが、出力を大きく変えるような入力データ|
|6|（モデルの）性能|正解率や精度等の指標で表されるもの。ISO25010 品質モデルで言えば「正確性」に相当する概念|

## 再掲：AIプロダクトの品質保証において考慮すべき軸

![axis5](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181972/c19f2dfe-f17b-e5de-c03c-87d1acc36a0f.png)

## 3.1. AIプロダクト固有の品質特性

### 3.1.1. （教師あり学習の）モデルに対する性能指標

<font color=blue>*Model Robustness に関連*</font>

#### （１）分類タスクにおける性能指標

- 正解率、混同行列、ROC、AUCなどの詳細は下記サイトなどを参考にしてください
    - [２クラス混同行列とその評価指標〜再現率、適合率、F値 | データ分析Navi](https://analysis-navi.com/?p=550)
    - [【ROC曲線とAUC】機械学習の評価指標についての基礎講座 | Np-Urのデータ分析教室](https://www.randpy.tokyo/entry/roc_auc)
- 要求やユースケースに合わせて適合率と再現率どちらを優先するか判断することが多い
- ３クラス以上の分類の場合は、クラスごとの適合率を求めたりその平均（マクロ平均）を求めたりする

#### （２）回帰タスクにおける性能指標

- 予測値と実測値の誤差をとらえる指標が用いられる
    - [平均二乗誤差(RMSE：Root Mean Squared Error)](https://aizine.ai/rmse-rmsle1114/#toc2)
    - [決定係数(Coefficient of Determination)](https://aizine.ai/r2-score0411/)

#### （３）汎化性能の指標

- 訓練データに限らない一般的なデータに対する性能を指す（一般化エラーを評価するなどと表現する）
- 過学習(オーバーフィッティング、High Variance)
    - 訓練データ固有の規則性・判断基準に合わせすぎて、他の入力データに対する性能が悪い
- 未学習(アンダーフィッティング、High Bias)
    - 訓練データの中でさえ必要な規則性や判断基準を表現できていない
- 汎化性能を向上させるために[交差検証](https://aizine.ai/cross-validation0910/)などを行う

### 3.1.2. データに対する評価

<font color=blue>*Data Integrity に関連*</font>

- 不適切な訓練データは不適切なモデルを出力する（[GIGO](https://f5.com/about-us/blog/articles/garbage-in-garbage-out-30805)）
- **不適切な訓練データ**とは
    - ラベル付けに**誤り**があるデータ（運用時の利用用途に照らし合わせて正確である必要がある）
    - 運用データ内の規則性（傾向、分布）と**異なる規則性（傾向、分布）**を持っている
    - 運用データに含まれる**パターンを網羅できていない**
- 評価用データについても同様の注意が必要
- この他、一般的なデータ品質（追跡可能性や移植性など）についても留意する [e.g. ISO/IEC 25012](http://kikakurui.com/x25/X25012-2013-01.html)

### 3.1.3. 頑健性

<font color=blue>*Model Robustness に関連*</font>

- 何かの変化に対してもモデルが安定して性能を達成するという品質特性を、頑健性（Robustness）と呼ぶ

### 3.1.4. 説明可能性

<font color=blue>*System Quality に関連*</font>

- システムからの出力を用いる人間が、出力を得る際に用いられた判断基準（モデルが学習した規則性）について把握することができる程度
- 要求や振る舞いを明確に形式知として書き出せない場合でも機能を実現できることが機械学習の強みである
- 一方で、**人間が出力を参考にして意思決定を行う場合**など、アプリケーションによっては説明可能性・解釈性が必要となる

### 3.1.5. 機械学習を用いたシステム全体における品質

<font color=blue>*System Quality に関連*</font>

- モデルの精度等は<font color=red>100%にはならない</font>し、それを達成することが<font color=red>システム開発の根本的な目標ではない</font>
- ビジネス・システムの観点から**目標KPIを定義し、その観点から品質を論じる**必要がある
- 仮説検定を行う

## 3.2. AIプロダクトにおける品質管理

<font color=blue>*Process Agility に関連*</font>

モデルの品質、およびモデルを含むシステム全体のマネジメントにおいては以下を留意する必要がある。

### （１）ステークホルダーの理解・協力を得る

- **探索的・試験的なプロセス**を辿り、場合によっては**要求やユースケースも調整**する必要がある為、
- その辺の理解を得る必要がある

### （２）性能劣化やその要因（候補）を迅速に検出できる監視機構を設ける

- 最初から<font color=red>性能劣化することは織り込み済み</font>で開発すべき、したがって監視機構を設けておく
- 性能劣化が回避できないのは、**全ての場面を想定して開発（訓練データ作成や学習）をすることができない**からである
- 結果としての性能だけでなく、**入力値の範囲や分布など個々の要素や互いの関連**についての監視も行う

### （３）オンライン学習を行う（実行時のデータもまた訓練データである）

- 実行時のデータを訓練データとして継続的に学習（モデル更新）し続けることで最新の分布に対応できる
- ただし、不適切なデータによってモデルが不適切に更新されないように
- <font color=red>継続的学習を自動化する際は、訓練データ選別・性能評価・テストも合わせて自動化する</font>

### （４）同一モデルを再現できるように情報を記録しておく

- **モデルを構築した状況を理解する為に、再現可能な状態にしておく**ことが望ましい
- モデルは**訓練データ・学習アルゴリズム（を実装したプログラム）・ハイパーパラメータ**とセットであるので、
- それらをまとめて記録しておく必要がある

## 再掲：AIプロダクトの品質保証において考慮すべき軸

![axis5](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181972/c19f2dfe-f17b-e5de-c03c-87d1acc36a0f.png)


## 3.3. AIプロダクトの品質保証技術

性能観点以外の品質保証技術については、現在発展途上であり、アプリケーションへの依存性も高い。
ここでは、汎用的な技術について述べる。

### 3.3.1. 疑似オラクル 

<font color=blue>*Model Robustness および System Quality に関連*</font>

- 検証したいシステムの多数・多種な入力を試すための比較システム（別の実装や古いバージョン）を疑似オラクルという
- ※疑似オラクルに関する記述は理解に苦しんだので、ここでは参考になりそうな文献を列挙します
    - [データセット多様性のソフトウェア・テスティング(中島震) | JStage](https://www.jstage.jst.go.jp/article/jssst/35/2/35_2_26/_pdf)
    - [機械学習における品質保証のチャレンジ | 国立情報学研究所](http://research.nii.ac.jp/~f-ishikawa/work/1712-JEITA_QA4ML.pdf)
    - [機械学習システムのためのメタモルフィックテスティング入門 | Qiita](https://qiita.com/tokumoto/items/cd3d17cae3b099badaf6)

### 3.3.2. メタモルフィックテスティング 

<font color=blue>*Model Robustness および System Quality に関連*</font>

- <font color=red>「入力に対してある一定の変化を与えると、出力の変化が理論上予想できる」</font>という関係（メタモルフィック関係）を用いることで、正否判断が可能なテストを得ること
- 「出力が期待通りではない＝コーディングミス or 実装されたモデルに対する理解の誤り」を意味するが、
- **メタモルフィック関係が本来成り立つと確信できるものであれば、その関係が成り立たないケースは実装不具合**を示唆すると考えられる
- ※参考文献
    - [機械学習システムのためのメタモルフィックテスティング入門 | Qiita](https://qiita.com/tokumoto/items/cd3d17cae3b099badaf6)

### 3.3.3. 頑健性検査 

<font color=blue>*Model Robustness および System Quality に関連*</font>

- 入力するテストデータに変化を加えて、出力が変化しないかを評価するなどがある
- 例えば、入力が画像データの場合
    - 照度変化
    - 一部他画像と合成
    - ゆがみ
    - 一部欠損

### 3.3.4. （ニューラルネットワークにおける）カバレッジ

<font color=blue>*Model Robustness に関連*</font>

- 盲目的に<font color=red>従来のプログラムに対するカバレッジ指標と同等に解釈、運用すべきではない</font>
- なぜなら、各ニューロンの数値大小を用いて、テストの多様性に関する評価や多様なテストを生成する手法が考えられているものの、
- **必ずしも求められる品質と強い相関があるわけではない**ことも報告されているからである

### 3.3.5. 説明可能性・解釈性のための技術

<font color=blue>*System Quality に関連*</font>

- 個々の出力に対する説明
    - 入力データのうちどの部分がある出力の決定に影響を大きく与えたのかといった情報を提示する技術
- モデル全体に関する説明
    - IF-THENルール形式や決定木を用いて、モデル全体が身に着けた判断基準や規則性を人が解釈できるようにする技術
- 参考：[David Gunning, Explainable Artificial Intelligence (XAI)](https://www.darpa.mil/program/explainable-artificial-intelligence)

**次章につづく**