【AI品質・AIテストまとめ】AIシステムの品質を高めるために

# はじめに

◆この記事は何？
AI品質の考え方やAIテスト技法を紹介する記事

◆対象は？
AI品質・AIテストが分からない人
主にAIシステムの開発・運用担当者

◆この記事のねらい
AI品質を高める

# AI品質・AIテストの基本的な考え方

結論から言えば、**AI品質・AIテストは従来のソフトウェア品質・テストとは異なります。**

予測モデルは、出力に対する正解を定義できたとしても、予測精度には限界があります。
100%の正解率を常に求めることはできません。

このため、既知のデータを用いて、**どれだけ正解や正解に近い値を求めることができたかを評価する**ことが最も基本的な品質評価になります。

例えば、品質特性として正解率や適合率などの指標を用います。

AIテストについて、「[AIソフトウェアのテスト](https://amzn.asia/d/8v4jBk0)」では次のように言及されています。

> 正解が分からないのですから、従来のソフトウェアテストは一切成り立ちません。

![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/7a237854-af75-ed6b-8823-d0ad1188fbbc.png)


＜参考＞
[ソフトウェア品質知識体系ガイド － SQuBOK Guide － 第3版](https://amzn.asia/d/4AxXGxu)


# AIシステムにおける品質の概念

AI品質について、次の三つの観点で整理できます。
1. 訓練データ及びテストデータの品質
1. AIモデルの品質
1. AIシステムの品質

「訓練データ及びテストデータの品質」が「AIモデルの品質」に影響を及ぼし、「AIモデルの品質」が「AIシステムの品質」に影響を及ぼします。

![c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/2b15b8f9-cbef-0583-1708-7d469cf1ea1b.png)


# ①訓練データ及びテストデータの品質

訓練データはAIモデルの品質に影響を及ぼします。

訓練データとテストデータ、そしてコンセプトドリフトに注意しておく必要があります。

- 訓練データとテストデータの関係
    - 訓練データに現れない範囲の入力が運用時に与えられる場合、運用時の性能が低くなることが多い
    - 訓練データだけでなく、テストデータも運用環境の想定に対する妥当性及び十分性が重要となる
    - 訓練データとテストデータのいずれもがデータセットの内容を代表するように注意しておく
- コンセプトドリフト
    - 予測対象とする目的変数の統計的性質が時間とともに変化すること
        - 例えば、需要予測モデルで売り上げを予測したいとき、売上の傾向が時間とともに変化すること
    - 対策
        - 最新の訓練データによる学習モデルの再訓練

# ②AIモデルの品質

AI品質・AIテストの基本は「どれだけ正解や正解に近い値を求めることができたかを評価する」です。

そのために性能指標を考えます。代表的な性能指標は次のとおりです。

### (1)性能指標

[「ソフトウェア品質知識体系ガイド － SQuBOK Guide － 第3版」](https://amzn.asia/d/4AxXGxu)で挙げられている性能指標は次のとおりです。

- 性能指標
    - 分類
        - 正解率（accuracy）
            - 「正解数」/「問題総数」
        - 再現率（Recall）
            - 検出すべきものを、どれだけ検出できているか
            - 検出漏れの少なさを表す
            - 「真陽性の数」/「真陽性と偽陰性の総数」
        - 適合率（Precision）
            - 検出したものすべてのうち、どれだけ正しいものが入っているか
            - 誤検出の少なさを表す
            - 「真陽性の数」/「真陽性と偽陽性の総数」
        - F値（F-Measure）
            - 再現率と適合率の調和平均
        - ROC曲線(Receiver Operatorating Characteristic curve)
            - 分類に用いるしきい値の設定などにより適合率と再現率のトレードオフがどう変わっていくかを見る
            - 縦軸：再現率(真陽性率)、横軸：偽陽性率
        - AUC（Area Under Curve）
            - ROC曲線の適合率と再現率のトレードオフにおける総合性能を表す
            - ROC曲線を作成したときのグラフの下の部分の面積。値が1に近いほど判別性能が高い。
    - 回帰
        - 決定係数
            - 推定された回帰式の当てはまりの良さを表す
        - 平均二乗誤差（RMSE）


### (2)汎化性能・学習状態の評価

運用時には訓練データに含まれない値が入力として与えられます。
このため、訓練データに限らない一般的なデータに対する性能（汎化性能）に留意する必要があります。

基本的には訓練データ外のデータに対しては性能が落ちるため、一般化エラーを評価するとも言います。

AIモデルの品質として、学習状態にも注意が必要です。

- 学習状態
    - 過学習
        - 訓練データ固有の規則性や判断基準に特化して、他の入力データに対する性能が悪くなること
    - 未学習
        - 訓練データ内ですら必要な規則性や判断基準を表現できていないこと

汎化性能の観点から評価するには交差検証(Cross Validation)が有効です。

### (3)AI固有の品質特性

AIシステム固有の品質特性に、頑健性や説明可能性があります。

- 頑健性（robustness）
    - 入力の変化に対してモデルが安定して性能を達成するという品質特性
    - 敵対的サンプル（adversarial example）
        - 入力の微量な変化により、出力が大きく変わることがあり、これは敵対的サンプルと言われる
- 説明可能性（explainability）
    - システムからの出力を用いる人間が、出力を得る際に用いられた判断基準について把握できる程度を表す

＜参考＞
[「AIプロダクト品質保証ガイドライン 2024.04版」](https://www.qa4ai.jp/download/)


# AIテスト技法

性能指標以外のAIモデルの品質技術について説明します。

## 疑似オラクル
「オラクル」とは入力に対する出力の正解の求め方や根拠のことです。

テストの入力とその期待値を直接定義することが困難な状況（定義できない、高コストなど）において実行結果からテストの成否を判断する代替のオラクルを「疑似オラクル」と言います。

◆例
- 同じ機能を実現した別の実装との比較を行う（Nバージョンプログラミング）
- 古いバージョンとの比較を行う

![n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/03b35661-dcb0-ab86-8b4e-233afacc781f.png)


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

メタモルフィックテスティングとは、「入力に対してある一定の変化を与えると、出力の変化が理論上予想できる」というメタモルフィック関係を用いることにより、正否判断が可能なテストを得るテスト手法です。

◆例
- 全てのデータにそれぞれ同一の値を加えても出力は変わらない
- 全てのデータについて正負を反転させると出力も反転する

また、メタモルフィック関係が成り立たない場合、システムの不具合を意味するほか、システムに対する理解が不十分であったことも示唆されます。

![m.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/f07f78f4-1a3f-3fe2-e4e2-f3c7ae256c2a.png)


## 頑健性検査

頑健性検査とは、入力の変化に対してモデルが安定して性能を達成するという頑健性を評価するために行う検査です。

入力の変化が出力に与える影響を把握し、許容範囲内であることを評価することができます。

例えば、入力が画像である場合、照度の変化や一部欠損やゆがみなどを与えます。

セキュリティ攻撃も含めて、運用環境に存在する外乱の影響が十分少ないかを評価、またはリスクを把握できます。

◆例
- [deepXplore](https://arxiv.org/abs/1705.06640)

![rob.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/376f27fd-b672-ddbc-5fc9-c6ec36b78cec.png)


<参考>
[「AIプロダクト品質保証ガイドライン 2024.04版」](https://www.qa4ai.jp/download/)

[「ニューラルネットワーク・ソフトウェアの頑健性検査」(中島 震) ](https://jglobal.jst.go.jp/detail?JGLOBAL_ID=202002280277649293)

[「AIモデルの定量的な頑健性評価手法」(仲 義行, 大平 英貴, 高橋 信太郎)](https://www.global.toshiba/content/dam/toshiba/jp/technology/corporate/review/2021/03/f01.pdf)

## ニューロンカバレッジ

ニューロンカバレッジとは、ニューラルネットワークにより実装されたモデルにおいて、テストケース群によりどれだけ多様な内部挙動が実行されたかを表す指標です。

「アクティベーション」と呼ぶニューロン発火の有無、ニューロンにより計算された値の代償、レイヤーに含まれるニューロンの発火パターンなどの多様性を評価します。

「サーチベースドテスティング」などを用いて、ニューロンカバレッジを高めるようなテストケースを生成できます。

より多様な内部挙動を検査するテストケース群が得やすくなることが期待できます。

![んc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/0afcc5ed-b5ad-2b0d-eb79-52e08e3f40a0.png)

＜参考＞
[「AIソフトウェアのテスト」](https://amzn.asia/d/8v4jBk0)

## 最大安全半径

学習用データから離れた入力データに対しては、適切な推論ができません。

妥当な推論結果が得られる正確な範囲はわからないものの、少なくともこの範囲であれば妥当な値が得られるという範囲を求める考え方があります。この範囲を「最大安全半径」といいます。

最大安全半径が大きいAIシステムであるほど、入力データが変化しても妥当な出力結果が得られる良いAIシステムだと言えます。

![r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/76e692c1-2488-5f49-4878-280c63834050.png)

＜参考＞
[「AIソフトウェアのテスト」](https://amzn.asia/d/8v4jBk0)

## 網羅検証

絶対に守ってほしい条件については、「どのような入力データでも事前に与えられた条件を出力データが逸脱することはない」ことを検証する方法が「網羅検証」です。

入力データの範囲と期待される推論結果の条件を指定し、範囲内のすべての入力データに対して、推論結果がその条件を満たすことを検証します。

◆例
- 入場料算定システムであれば、入場料を10万円を超えることはない

![moura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/f981c676-5acf-3900-0641-6e01a0ff9c1f.png)


＜参考＞
[「AIソフトウェアのテスト」](https://amzn.asia/d/8v4jBk0)


## 説明生成

機械学習モデルにおいて、ある入力を元に特定の出力が得られた根拠やモデルが獲得した計算規則についての説明を生成する技術を説明生成といいます。

説明生成は品質評価に有効に働きます。

- グローバルな説明生成
    - モデルをより単純で人が理解できる計算規則の表現で近似する手法
    - 例
        - [defragTrees](https://github.com/sato9hara/defragTrees)
- ローカルな説明生成
    - 各出力に対して、入力のどの部分による影響が大きかったかを提示する手法や影響を与えた訓練データを提示する手法がある
    - 例
        - [LIME](https://arxiv.org/abs/1602.04938)
        - [SHAP](https://shap.readthedocs.io/en/latest/)

# ③AIシステムの品質

### 従来の品質技法の活用

[「AIプロダクト品質保証ガイドライン 2024.04版」](https://www.qa4ai.jp/download/)では、「System Quality」と表現されます。

> System Quality では、AI プロダクト全体の品質の確保について考慮する。System Qualityには、AIコンポーネントを一つの特殊なコンポーネントと捉えることによって、従来の演繹的開発の品質保証のノウハウが活用できる可能性がある。

冒頭で、「従来のソフトウェア開発におけるテストとは異なる」と述べましたが、AIモデルによる推論を含むAIコンポーネントを特殊と捉えることで、従来のソフトウェア開発におけるテストや品質保証技術を活用できることがあります。

例えば、予測モジュールをモック（スタブ）にすることで、期待値を設定できることがあります。

![mock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616496/d3586843-975a-fbca-b981-5d3e65dd9289.png)

### システム全体の評価

[「AIプロダクト品質保証ガイドライン 2024.04版」](https://www.qa4ai.jp/download/)では、システム全体の評価について次のように述べられています。

> システム全体として価値を適切に提供できているかどうかを検討する必要がある。システムの価値が何を意味するのかはシステムやドメイン、ビジネスモデルに依存するが、AIプロダクトの場合にはまだ「とりあえずやってみる」という事例も散見されるため、自分たちがAIプロダクトの価値をどのように捉えているかも含めて反復的に検討する必要がある。

[「ソフトウェア品質知識体系ガイド － SQuBOK Guide － 第3版」](https://amzn.asia/d/4AxXGxu)では、具体的な手法として、KPIの設定、A/Bテスティング、仮説検定が挙げられています。


> ビジネスやシステムの全体的な観点から目標となるKPIを定義し、その観点から品質を論じる必要がある。(中略)例えば、ユーザー満足度がKPIとなる場合、A/Bテスティングなどによってシステム投入有無の比較を行い、投入によってKPIが向上することの仮説検定を行うなどして、システム全体の品質を評価する。



# おわりに

この記事では、AIに関する品質やテストについて紹介しました。

参考になれば幸いです。

# 参考

[「ソフトウェア品質知識体系ガイド － SQuBOK Guide － 第3版」](https://amzn.asia/d/4AxXGxu)

「[AIソフトウェアのテスト](https://amzn.asia/d/8v4jBk0)」

[「QA4AIガイドライン」](https://github.com/qa4ai/Guidelines/tree/main)

[「機械学習品質マネジメントガイドライン」](https://www.digiarc.aist.go.jp/publication/aiqm/guideline-rev4.html)

[機械学習システムのためのメタモルフィックテスティング入門](https://qiita.com/tokumoto/items/cd3d17cae3b099badaf6)

[テスト技術者資格制度 Foundation Level シラバス AI テスティング](https://jstqb.jp/dl/JSTQB-Syllabus.Foundation_CT-AI_v1.0.J01.pdf)