ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

生成AI時代のソフトウェア開発者とレビュアーの責任

生成AIがドキュメントもコードも書くようになり、成果物を作るコストを大きく下げられる場面が増えた。一方で、成果物を作る速度や量が増えれば、人間による確認やレビューが相対的なボトルネックになりやすい。

では、生成AIを前提としたソフトウェア開発では、開発者とレビュアーの役割をどのように考えるべきなのだろうか。少し考察してみた。

先に要約すると、私の考えは次のようになる。

  • 人間が手書きしようが、生成AIが生成しようが、レビュアーへ提出する成果物の内容と品質には、開発者自身が一次的な責任を持つべきである。
  • すべてを人間が同じ密度で確認することが現実的でない場合でも、要求・設計方針・テスト観点・リスクなど、品質を左右する判断は人間が押さえる必要がある。
  • レビュアーは、生成AIやツールに任せられる部分と、人間が重点的に見るべき部分を改めて見極める必要がある。
  • 生成AIをチームの各メンバーの配下にアサインしたと考えたとき、どのような役割分担にすればチーム全体のパフォーマンスと品質を高められるかを考えることで、道が見えるのではないか。

生成AIによって品質問題が生まれたのか

生成AIが業務に活用されるようになっても、成果物の品質問題はなくなっていない。

もちろん、ハルシネーションなど生成AI特有の問題もある。一方で、現在目にする品質問題のすべてが生成AIによって新しく生まれたわけでもない。

要求の抜け、暗黙知の伝達不足、不十分なテスト、成果物を十分に理解しないまま利用するといった問題は、以前から存在していた。

生成AIは、そうした従来から存在する弱点を、生成速度や生成量によって目立たせる側面があるのではないか。

代表的な例をいくつか考えてみる。

1. 暗黙知が反映されない

ドキュメントをどれほど整備しても、暗黙知は存在する。それは業務知識にとどまらない。過去の経緯、ユーザーの好み、プロジェクト固有の制約、「なぜこのような設計になっているのか」といった事情など、多岐にわたる。

これまでは、プロジェクトに長く従事していれば、仕事をする中で自然とそれらを学ぶことができた。そのため、メンバーに対して明示的に指示をしなくても、暗黙知がある程度反映された成果物が出てきた。

現在の生成AIは、リポジトリや設計書、過去の履歴などを参照し、それらを踏まえて成果物を生成することもできる。

ただし、AIがアクセスできる形になっていない情報は、AIも利用できない。

人間のメンバーであれば、会議で聞いた話や過去のトラブル、ユーザーとのやり取りなどから自然と身につけてきた情報がある。しかし、それが文書やデータとして残っていなければ、生成AIからは見えない。

これは、プロジェクトに参加したばかりで暗黙知を持たないメンバーと似ている。そのようなメンバーに仕事を依頼するときと同じように、必要な背景や制約を伝える必要がある。

むしろ生成AIの利用をきっかけに、これまで暗黙知だったもののうち、何を明文化して共有すべきなのかが改めて問われるようになったともいえる。

2. 指示されていない要求は満たされないかもしれない

生成AIに対して、ある機能を実装するよう指示したとする。要求された機能は正しく実装されている。しかし、パフォーマンスが悲惨なコードになっているかもしれない。機能については詳しく指示したものの、パフォーマンスについては何も伝えていなかったからだ。

では、テストでカバーすればよいだろうか。生成AIに大量のテストケースを作らせ、それらをすべてパスすることで品質を担保しようとするかもしれない。

しかし、そのテスト観点が十分であることを、誰が確認するのだろうか。先ほどの例でいえば、パフォーマンスに関するテストは含まれているだろうか。

生成AIがコードを書き、そのコードに対するテストまで生成して、すべてのテストをパスしたとしても、そもそも要求やテスト観点に抜けがあれば、それを発見できないことがある。

理想をいえば、生成されたコードを人間が確認し、十分なテストも実施すべきだろう。しかし、大量のコードが生成される状況で形式的な全量確認を求めても、流し読みになれば意味がない。

だからといって、実装の確認が不要というわけでもない。

重要なのは、要求・設計方針・テスト観点・リスクなど、品質を左右する判断を人間が押さえたうえで、生成AI・自動テスト・人間によるレビューなどをどう組み合わせるかを考えることだ。

すべての組織が同じ方法を取れるわけではない。それぞれのチームが、自分たちの開発速度と品質を両立できる落としどころを探していく必要がある。

3. 「作れるから作る」ドキュメントが増える

生成AIの利用が広がってから、ボリュームは多いものの、中身の薄いドキュメントを目にする機会が増えたように感じる。

以前は、ドキュメントを書くこと自体にそれなりの負担があった。そのため、「誰が何のために読むのか」「何を伝えたいのか」という目的を多少なりとも意識して書く必要があった。

生成AIを使えば、その作成コストは大きく下がる。しかし、人間が内容を理解し、妥当性を判断するコストまで同じ割合で下がるわけではない。

100ページのドキュメントを短時間で生成できても、その100ページに本当に意味があるのかを判断する仕事は残る。

生成AI時代には、「どう効率よく作るか」だけではなく、「そもそも、その成果物を作る必要があるのか」を考えることも、開発者側の責任となる。

4. 生成結果を盲目的に信じる

生成AIに技術的な解説を生成させ、その説明をうのみにし、公式ドキュメントや一次情報で裏付けを取らないケースもある。

裏付けを取らずに情報を信じるという意味では、個人ブログやQ&Aサイトを盲信する問題と共通している。一方で、生成AIは存在しない情報をもっともらしく作ることもできるため、その点では従来以上に注意が必要だろう。

それでも基本は変わらない。重要な判断をするのであれば、一次情報を確認する。情報の根拠を確認する。

生成AIを使うようになったからこそ、その原則はむしろ重要になっている。

生成AIは既存の弱点を増幅する

ここまで挙げた問題には、生成AI固有のものもあれば、以前から存在していたものもある。

私が特に問題だと感じているのは後者である。

要求が曖昧なまま実装する。十分なテスト観点を持たない。成果物を理解しないままレビューへ流す。必要性を考えずドキュメントを作る。情報源を確認せず内容を信じる。

こうしたことは、生成AI以前から起きていた。

生成AIは、それらを圧倒的な速度で行えるようにした。そのため、一つ一つの確認が不十分なままでも、大量の成果物を生み出せてしまう。

だからこそ、AI生成物だけを特別扱いするのではなく、生成速度が上がったことを前提として、開発者とレビュアーの役割を見直す必要があるのではないだろうか。

開発者は「作る人」から「生成物に責任を持つ人」へ

これまでも、設計者や実装者が成果物を作り、それを別のメンバーがレビューするという工程は一般的だった。

もちろん、レビュアーが確認していたのは誤字脱字や細かな実装ミスだけではない。要件に対して設計が妥当なのか、将来の保守性に問題はないのか、性能やセキュリティ上の懸念はないのかといった、より俯瞰した観点も含めてレビューしていたはずである。

つまり、以前から成果物の品質は、作成者とレビュアーの双方によって支えられていた。

だが、生成AIによって、その役割の比重は変わりつつある。

従来は、設計者・実装者自身が成果物を書く作業に多くの時間を使っていた。生成AIがその一部を担うようになると、人間は「何を作らせるのか」「どのような方針で作らせるのか」「どの観点で品質を確認するのか」を判断する比重が大きくなる。

開発者の責任は、すべてを自分の手で書くことではない。

自分がレビューへ提出する成果物について、その目的・設計・テスト・重要なリスクの根拠を理解し、説明できる状態にすることだ。

一方、レビュアーの役割は、その確認作業を代行することではない。作成者とは異なる視点から、設計や実装、リスクを改めて検証することにある。

レビューとは、作成者が何も確認していない成果物を、代わりに検査してもらう工程ではない。

この意識への転換が、生成AI時代にはこれまで以上に重要になる。

レビュアーの役割も変わる

従来のレビュアーも、自身の役割を見直す時期に来ている。

誤字脱字、文章表現、形式上の不整合、静的解析で検出できる問題など、機械的に確認しやすい項目は増えている。生成AIによるレビューも、その一次確認に利用できる。

その分、人間が判断すべき部分へ時間を振り向けるべきだろう。

例えば、

  • 要件に対して設計方針が妥当か
  • 過去の経緯や組織の暗黙知と矛盾していないか
  • 利用者にとって使いやすいか
  • 性能、セキュリティ、運用上のリスクを見落としていないか
  • 将来的な保守まで考えて、この設計を採用してよいか

といった判断である。

もちろん、人間が実装を見なくてよいという意味ではない。

重要なのは、すべてのレビュー項目を同じ方法、同じ密度で確認し続けることではなく、自動化できる確認と人間が判断すべき確認を整理し、限られたレビュー時間をどこへ使うかを考えることだ。

生成AIを「新入社員」と考えてみる

あくまで役割分担を考えるための比喩だが、生成AIを「広範な知識を持ち、圧倒的な速度で作業できる一方、組織固有の事情を十分には知らない新入社員」のように捉えると分かりやすい。

もし、各チームメンバーの配下に、このような新入社員が一人ずつ突然アサインされたとしたらどうするだろうか。

何を任せるのか。何を本人に確認させ、何を上位者がレビューするのか。どのような知識をドキュメント化して共有するのか。そして、作れるからという理由だけで、成果物を際限なく増やしてよいのか。

生成AI時代の開発プロセスを考えることは、こうした組織設計を考えることに近い。

今後、生成AIが社内ドキュメントや過去の成果物から固有の事情を読み取る能力はさらに高まっていくだろう。それでも、AIがアクセスできる形になっていない情報や、人間の判断の中にしか存在しない前提が完全になくなるとは考えにくい。

そこにこそ人間が介入し、生成AIをより良い方向へ導く役割が残るのではないだろうか。

生成AIによって人間の仕事が単純に減るのではなく、仕事の重心が「自分で書くこと」から「何を作るべきかを決め、どのような観点で品質を確保し、その結果に責任を持つこと」へ移っていく。

その変化を前提として、開発者とレビュアーの役割を改めて設計する必要がある。

本記事におけるAIの活用について

この記事の初稿は筆者自身が作成した。その後、ChatGPT を使用して文章表現の推敲、論点の整理、不足している観点の洗い出しを行った。また、公開前には Deep Research を利用し、記事中の主張について関連する研究や公的資料を調査したうえで、反論を含めたレビューも行った。

それらの結果を参考にしながら、どの指摘を採用するかは筆者自身が判断し、最終的な文章を作成している。

この記事で述べてきた通り、生成AIを利用したとしても、最終的な成果物に対する責任は人間にあると考えている。本記事についても、その考え方に基づいて作成した。

機械学習における CV と DCV の違いと内部挙動

はじめに

機械学習における CV (Cross-Validation) と DCV (Double Cross-Validation) の違いを説明した記事は数多くありますが、概念やライブラリの使い方を中心としたものが多いようです。

本記事では、CV と DCV の内部で、どのデータを用いて何を行っているのかに踏み込んで説明します。また、説明の根拠となる文献の記述をできるだけ本文中に示します。

なお、DCV は Nested Cross-Validation または Nested Resampling と呼ばれることもあります。文献によって用語の使い方が異なる場合がありますが、本記事では「外側 CV の各訓練データの中で、内側 CV によるモデル選択を繰り返す二重構造」を DCV と呼ぶことにします。

なぜ CV が必要なのか

機械学習において、ハイパーパラメータはモデルの性能を左右する重要な要素です。

適切なハイパーパラメータは、使用する機械学習手法やデータセットによって異なるため、多くの場合、実際のデータを用いて選択します。

ここで問題になるのが、何を基準に良いハイパーパラメータを選ぶかです。

機械学習の目的は、学習に使用したデータではなく、未知のデータに対して良い予測を行うことです。しかし、学習に使用したデータで同じモデルを評価すると、未知データに対する性能を過度に良く見積もる可能性があります。

Using the same data to train and test a model is a bad strategy as it would lead to an overly optimistic performance estimate.
[3, 3 Evaluation and Benchmarking]

学習に使用したデータに対する誤差は、学習済みモデルがそのデータにどの程度適合したかを示すものであり、未知データに対する性能を直接示すものではありません。

そこで、手持ちのデータを訓練用と評価用に分けながら繰り返し評価する CV を使用します。

k-fold CV の基本的な動作

k-fold CV では、データセットを k 個の部分集合、すなわち fold に分割します。

基本的な手順は次のとおりです。

1. データセットを k 個の fold に分割する。
2. 1 個の fold を検証データとし、残りの k−1 個を訓練データとする。
3. 訓練データでモデルを学習する。
4. 検証データに対する予測誤差を計算する。
5. 検証データとする fold を順番に変えながら、手順 2~4 を k 回繰り返す。
6. k 回の評価結果を集約する。

[2] の資料では、手順 6 について、「k 個の予測誤差の平均を計算します」としています。また、その平均値について、「CV スコアは汎化誤差(未知データに対する誤差)の推定値」と説明しています。
[2, スライド24]

したがって、各 fold の大きさが同じで、評価指標の集約方法にも問題がない場合は、k 個の予測誤差の平均を CV スコアとして使用します。

ただし、fold の大きさが異なる場合や、RMSE のような非線形な評価指標を使用する場合には注意が必要です。

例えば、次の二つは必ずしも一致しません。

  • fold ごとに RMSE を計算してから平均する
  • すべての out-of-fold 予測をまとめて一つの RMSE を計算する

そのため、実際には使用するライブラリが評価値をどのように集約しているかも確認する必要があります。

CV で「学習手順全体」を評価する

Varma と Simon は、CV によって性能を適切に評価するための前提について、次のように説明しています。

CV methods are proven to be unbiased only if all the various aspects of classifier training takes place inside the CV loop. This means that all aspects of training a classifier e.g. feature selection, classifier type selection and classifier parameter tuning takes place on the data not left out during each CV loop.
[1, Background]

すなわち、特徴量選択、機械学習手法の選択、ハイパーパラメータ調整など、データに基づいてモデルを決めるすべての処理を、各 CV ループの訓練データだけで行う必要があります。

k-fold CV によるハイパーパラメータ選択

「予測誤差が小さいほど良い」という評価指標を使用するものとします。

k-fold CV を用いてハイパーパラメータを選択する場合、一般には次の手順になります。

1. データセットを k 個の fold に分割する。
2. 評価するハイパーパラメータ候補を一つ選ぶ。
3. 1 個の fold を検証データとし、残りの fold でモデルを学習する。
4. 検証データに対する予測誤差を計算する。
5. 検証データとする fold を順番に変えながら、手順 3~4 を繰り返す。
6. k 個の予測誤差を集約し、評価対象ハイパーパラメータの CV 誤差とする。
7. 別のハイパーパラメータ候補について、手順 3~6 を繰り返す。
8. CV 誤差が最も小さいハイパーパラメータを選択する。
9. 選択したハイパーパラメータを用いて、データセット全体でモデルを学習する。

ここで重要なのは、CV 誤差には二つの異なる用途があることです。
第一の用途は、複数の候補からハイパーパラメータを選ぶことです。
第二の用途は、モデルやモデル構築手順の未知データに対する性能を推定することです。

同じCV結果を、これら二つの用途にそのまま使用してよいとは限りません。

最小の CV 誤差を性能評価値として使えるか

複数のハイパーパラメータ候補について CV 誤差を計算し、その中から最も小さい値を選んだとします。

各候補の CV 誤差には、サンプルのばらつきや fold 分割による偶然の変動が含まれます。その中から最小値を選ぶと、本当に性能が良い候補だけでなく、偶然 CV 誤差が小さくなった候補も選ばれやすくなります。

したがって、ハイパーパラメータ選択に使用した最小 CV 誤差を、そのまま最終モデルの性能推定値として使用すると、未知データに対する性能を楽観的に評価する可能性があります。

ここで問題になっているのは、CV をハイパーパラメータ選択に使用すること自体ではありません。次の二つを同じ CV 結果で行うことが問題です。

  • CV 誤差を用いて最適なハイパーパラメータを選ぶ
  • 選択に使った最小 CV 誤差を、選択後のモデルの性能として報告する

mlr3book では、このことを次のように説明しています。

HPO requires additional resampling to reduce bias when estimating the performance of a model. If the same data is used for determining the optimal configuration and the evaluation of the resulting model itself, the actual performance estimate might be biased (Simon 2007).
[4, 4.3 Nested Resampling]

つまり、ハイパーパラメータ選択を含めたモデル構築と、構築されたモデルの評価は分けて行う必要があります。

DCV によるモデル選択と性能評価の分離

この問題に対処するため、DCV では次の二つを別の CV ループで行います。

  • 内側CV:モデル構成の選択
  • 外側CV:モデル構成の選択を含む構築手順の性能評価

mlr3book では、DCV の役割を次のように説明しています。

Nested resampling separates model optimization from the process of estimating the performance of the tuned model by adding an additional resampling
[4, 4.3 Nested Resampling]

つまり、モデルの最適化と、最適化済みモデルの性能推定を分離するために、もう一つ外側のリサンプリングを追加します。

内側 CV では、ハイパーパラメータを選択します。複数の機械学習手法も候補として比較する場合は、手法の選択も内側 CV に含めます。

外側 CV では、その選択処理を含むモデル構築手順を、内側 CV で一度も使用していないデータによって評価します。

DCV の具体的な手順

外側 CV を m-fold、内側 CV を n-fold とします。

1. データセットを m 個の外側 fold に分割する。
2. 1 個の fold を外側テストデータとし、残りを外側訓練データとする。
3. 外側訓練データだけを n 個に分割し、内側 CV を行う。
4. 内側 CV によって、ハイパーパラメータやモデル構成を選択する。
5. 選択した構成を用いて、外側訓練データ全体でモデルを学習する。
6. 学習したモデルを、外側テストデータで評価する。
7. 外側テストデータとする fold を変えながら、手順2~6を m 回繰り返す。
8. m 個の外側評価値を集約する。

処理の構造を簡略化すると、次のようになります。

外側 CV
    外側訓練データと外側テストデータに分割する

    外側訓練データだけを用いて内側 CV を行う
        各ハイパーパラメータ候補を評価する
        最適な候補を選択する

    選択したハイパーパラメータ候補を用いて外側訓練データ全体で学習する
    外側テストデータで予測誤差を計算する

外側 fold で得られた予測誤差を集約する

重要なのは、外側テストデータがハイパーパラメータ選択を含めたモデルの構築に使用されないことです。外側テストデータは、モデル構築処理が完了した後の評価にだけ使用します。

外側 CV の集約値は何を表すのか

外側 CV で得られた m 個の誤差の集約値は、特定の一組のハイパーパラメータを持つ一つのモデルの性能を表すものではありません。外側 fold ごとに訓練データが異なるため、内側 CV によって選ばれるハイパーパラメータも異なる可能性があります。

mlr3book では、DCV の性能評価が次のものに基づくと説明されています。

Nested resampling is a method to compare models and to estimate the generalization performance of a tuned model, however, this is the performance based on multiple different configurations (one from each outer fold) and not performance based on a single configuration.
[4, 4.3 Nested Resampling]

例えば、外側 CV が 5-fold の場合、内側 CV によって 5 つの異なるハイパーパラメータ構成が選ばれる可能性があります。

したがって、DCV が直接評価しているのは、「特定のハイパーパラメータを設定した一つのモデル」ではなく、「与えられた訓練データの中で内側 CV を行い、モデル構成を選択し、その構成でモデルを学習する手順」です。

より正確には、外側 CV の集約値は、内側 CV によるモデル選択を含む一連のモデル構築手順を、未知データに適用したときに期待される性能を推定するものです。

なお、DCV によって、あらゆるバイアスが完全になくなるわけではありません。外側 CV の各モデルは、データセット全体より少ないデータで学習されます。そのため、データセット全体で学習する最終モデルよりも、外側 CV の誤差がやや大きくなる場合があります。

したがって、DCV については「完全に不偏な誤差推定値が得られる」と断定するよりも、「モデル選択に使用した最小 CV 誤差をそのまま報告する方法より、モデル選択による楽観的バイアスを抑えた性能推定ができる」と表現する方が適切です。

DCV は最終モデルを決める手法ではない

DCV は最終的な一組のハイパーパラメータを直接決める手法ではありません。

外側 fold ごとに内側 CV が行われるため、複数の異なるハイパーパラメータ構成が得られます。これらのうち、どれか一つをそのまま最終モデルの構成として採用することが、 DCV の目的ではありません。

mlr3book でもこのように述べています。

A common mistake is to think of nested resampling as a method to select optimal model configurations.
[4, 4.3 Nested Resampling]

DCV によって、モデル構築手順の期待される予測性能が実用上十分であることを確認した後は、次の手順で最終モデルを作成します。

1. データセット全体を対象に、DCV の内側で使用したものと同じモデル選択手順を実行する。
2. モデル選択手順の結果を踏まえ、最終的なモデル構成を選択する。
3. 選択した構成を用いて、データセット全体で最終モデルを学習する。

このとき選択される最終的なモデル構成は、DCV の各外側 fold で選択されたものと一致するとは限りません。

DCV の外側評価値は、この最終モデルそのものを直接評価した値ではありません。同じモデル選択手順を新しいデータに適用した場合に期待される性能の推定値として解釈します。

複数のモデル構築手順を比較する場合

DCV は複数のモデル構築手順の比較にも使用できます。

例えば、次の二つを比較できます。

  • 内側 CV でハイパーパラメータを調整する SVR
  • 内側 CV でハイパーパラメータを調整する Random Forest

このとき、両者に同じ外側 fold を使用することで、同じデータ条件における性能を比較できます。

The result from the outer resampling can be used for comparison to other models trained and tested on the same outer folds.
[4, 4.3 Nested Resampling]

また、内側 CV の候補に複数の機械学習手法を含め、機械学習手法とハイパーパラメータを同時に選択することもできます。

その場合、外側 CV が評価するのは、「複数の機械学習手法とハイパーパラメータ候補の中から、内側CVによって最適な組合せを選択する手順」です。

ただし、外側 CV の結果を用いて多数のモデル構築手順から最良の一つを選び、その同じ外側CVスコアを最終性能として報告すると、比較段階における新たな選択バイアスが生じる可能性があります。

複数の構築手順から一つを選んだ後にも、完全に独立した最終性能評価が必要であれば、別のテストデータを用意するか、さらに外側の評価設計を検討する必要があります。

まとめ

通常の CV と DCV の違いは、単に CV を一回行うか、二重に行うかという点だけではありません。

通常の CV によるハイパーパラメータ調整では、CV 誤差を用いて最適な候補を選択します。しかし、選択に使用した最小 CV 誤差をそのまま性能評価値として報告すると、未知データに対する性能を楽観的に評価する可能性があります。

DCVでは、内側 CV でハイパーパラメータなどのモデル構成を選択し、外側 CV でその選択処理を含むモデル構築手順全体を評価します。機械学習手法もデータに基づいて選択する場合は、その選択も内側 CV に含めます。

したがって、外側 CV の誤差が表しているのは、特定の一つのハイパーパラメータ構成の性能ではありません。内側 CV による選択を含む、モデル構築手順全体に期待される性能です。

DCV による評価が完了した後は、データセット全体に対して同じモデル選択手順を適用し、最終的なハイパーパラメータを決定したうえで、データセット全体を用いて最終モデルを学習します。

参考文献

[1] Sudhir Varma and Richard Simon (2006): Bias in error estimation when using cross-validation for model selection

[2] 二反田篤史(2021): 「機械学習の基礎と展望」
https://www.mi.u-tokyo.ac.jp/pdf/3-3_ml_basic_and_future.pdf

[3] Applied Machine Learning Using mlr3 in R, Chapter 3.
https://mlr3book.mlr-org.com/chapters/chapter3/evaluation_and_benchmarking.html

[4] Applied Machine Learning Using mlr3 in R, Chapter 4.
https://mlr3book.mlr-org.com/chapters/chapter4/hyperparameter_optimization.html

本記事におけるAIの活用について

以下の編集プロセスを経ました。
1. 筆者が初稿を書き起こす。
2. ChatGPT で推敲(正確性や読みやすさの改善)を実行する。
3. 筆者が全体的な見直しを行う。
4. ChatGPT で改めて推敲を実行する。
5. 筆者が最終チェックを行う。

よって、文責は筆者にあります。

「化学のためのPythonによるデータ解析・機械学習入門(改訂2版)」略語集

「化学のためのPythonによるデータ解析・機械学習入門(改訂2版)」は略語が頻出します。そこで、繰り返し登場する略語について一覧にまとめました。スムーズに読み進めるためのお役に立てば幸いです。

なお、本記事の内容は(改訂2版)を基準としていますが、初版でも活用できると思われます。

用語の説明は可能な限り同書を参考にしましたが、まとめが難しかったケースではAIで生成しています。その場合、"(AI)"と記載しています。

並び順はページ数を基準としています。

略称  英語  日本語  説明 ページ
PCA  Principal Component Analysis  主成分分析  多数の特徴量を、主成分軸上に投影したデータの分散が最大になるように主成分軸の方向を順に決め、少数の互いに直交する軸へ変換する手法です。これにより、情報の損失を抑えながらデータを低次元化し、サンプル間の関係を可視化できます。(AI)  26
t-SNE t-distributed Stochastic Neighbor Embedding    t-SNEとは、高次元空間におけるサンプル間の類似度を同時確率分布で表し、その分布と低次元空間における類似度の分布との差が小さくなるようにサンプルを配置する次元削減手法です。低次元空間ではスチューデントの t 分布を用いることで、近いサンプル同士を近く、異なる集団を離して可視化しやすくします。(AI)  43
OLS  (MLR) Ordinary Least Squares  (Multiple Linear Regression)  最小二乗法による線形重回帰分析  目的変数を複数の説明変数の線形結合で表し、実測値と推定値との差である残差の二乗和が最小となるように各説明変数の回帰係数を決定する手法です。(AI)  53
MAE Mean Absolute Error    誤差の絶対値の平均値。  58
RMSE Root-Mean-Squared Error    誤差を2乗して平均値を計算し1/2乗したもの。  58
PCR Principal Component Regression  主成分回帰  説明変数を選択せずに、PCAで説明変数を互いに無相関な主成分に変換してから、主成分と目的変数との間でOLSを行うこと。  61
CV Cross Validation  クロスバリデーション  データを複数のグループに分け、一部を学習用、残りを検証用として交代で用いることで、未知のデータに対するモデルの予測性能を評価する方法です。複数回の評価結果をまとめることで、特定のデータ分割に左右されにくい性能評価ができます。(AI)  62
PLS Partial Least Squares  部分的最小二乗法  主成分間の無相関性を維持しながら目的変数の情報を考慮して主成分を計算し、主成分と目的変数との間で回帰モデルを構築する手法の1つ。目的変数と主成分との間の共分散が最大になるように主成分軸の方向が決められます。  64
SVR Support Vector Regression  サポートベクター回帰  SVMを回帰分析に応用した手法で、基本的にはOLS,PCR,PLSのような線形の回帰分析手法ですが、カーネルトリックという手法により非線形手法に拡張できます。  70
DCV Double Cross-Validation  ダブルクロスバリデーション  外側のCVで分けたトレーニングデータに対して内側のCVを行い、ハイパーパラメータを最適化した後、その条件で構築したモデルを外側のテストデータに適用することで、モデルの予測性能をより適切に評価する方法です。(AI)  80
k-NN k-Nearst Neighbors algorithm  k近傍法  あるサンプルのクラスを推定するときに、クラスがすでにわかっているサンプルの中から、クラスを推定したいサンプルに最も近いk個のサンプルを選び、それらのクラスで多数決をとってクラスを決定する方法です。  82, 102 
SVM Support Vector Machine  サポートベクターマシン  SVRの基になった手法であり、2つのクラスを分類します。  87
DT Decision Tree  決定木  説明変数に対する条件でサンプルを順に分割し、各ノードに含まれるサンプルのクラスができるだけ偏るように分岐条件を決め、終端ノードに到達したサンプルのクラスを推定する分類手法です。(AI)  93
RF Random Forests  ランダムフォレスト  DTモデルをたくさんつくり、新しいサンプルにおけるクラスの推定結果を、各DTモデルの推定結果を多数決することで決めます。  96
AD Applicability Domain  モデルの適用範囲  回帰モデルやクラス分類モデルが本来の推定性能、つまりモデルを構築するときに用いたデータセットに対して示す性能、を発揮できる説明変数のデータ領域のこと。  99
OCSVM One-Class Support Vector Machine    主に正常とみなされるトレーニングサンプルの分布を学習し、カーネル関数を用いてサンプルが密集する領域を囲む境界を求める手法です。新しいサンプルがその領域の内側にあれば既知のデータ分布に近いサンプル、外側にあれば外れサンプルとして判定できるため、異常検知やモデルの適用範囲(AD)の評価に用いられます。  103