データ化学工学研究室物語 第I部 第9章 AIにも得意な場所と苦手な場所がある

データ化学工学研究室物語

第I部 研究室配属前夜のデータ化学工学

研究室配属前の学部三年生が、AI・機械学習を化学・化学工学の研究に使う考え方を学ぶ。

第9章 AIにも得意な場所と苦手な場所がある

 

新人トレーニングの八週目に与えられた課題は、モデルが返した予測値に、もう一つの情報を添えることだった。

構造グループを分けた評価で、各テストサンプルと最も近いトレーニングサンプルとの距離を計算してください。
距離と予測誤差との関係を確認してください。
モデルが予測しやすいサンプルと、予測しにくいサンプルの違いを考えてください。

第8章の報告会が終わった日の夕方、先輩から slack に届いた課題を、遥は研究室の席でもう一度読んだ。

距離。
予測誤差。
予測しやすいサンプル。
予測しにくいサンプル。

前の週、同じ高分子構造がトレーニングデータとテストデータの両方に入らないように、構造ごとのグループ分割を行った。

外側のすべての推定値を集めた MAE は 0.41。
RMSE は 0.52。

既知の高分子構造について別の作製条件を予測するより、未知の高分子構造を予測する方が難しかった。

特に polymer_047 は、実測値と推定値が大きく離れた。

第6章の PCA では、他の高分子から離れた場所にあった。
第7章の k近傍回帰では、最も近いトレーニングサンプルでさえ十分には似ていないように見えた。

それなら、既知材料からの距離を計算すれば、予測値をどこまで信じてよいか判断できるのだろうか。

遥は最初に、第6章で作った PCA の散布図を開いた。

構造グループ分割で得られた各サンプルの絶対誤差を、点の大きさとして PCA の地図へ重ねる。

polymer_047 は、地図の端にあり、点も大きかった。

やはり、離れた材料ほど予測しにくいのかもしれない。

しかし、図をよく見ると、地図の中央にあるのに誤差の大きい点もあった。反対に、端に近い位置にありながら、誤差の小さい点もあった。

それに、PCA の2次元の図には、元の121個の記述子と製膜温度の情報がすべて残っているわけではない。

第6章では、第1主成分と第2主成分を合わせても、構造記述子の情報の約50 %しか表していなかった。

遥はノートに書いた。

PCA の地図で遠いことと、モデルが使う元の空間で遠いことは同じではない。
距離は、モデルと同じ説明変数空間で計算する。

前の週に作成した group_cross_validation_predictions.csv には、外側foldごとのトレーニングサンプルとテストサンプルが記録されていた。

遥は、foldごとに同じ処理を行うことにした。

最初に、外側のトレーニングデータだけで、説明変数の平均値と標準偏差を計算する。
次に、その値を使って、外側のトレーニングデータとテストデータを標準化する。
最後に、各テストサンプルから最も近いトレーニングサンプルまでのユークリッド距離を計算する。

コードは次のようになった。

scaler = StandardScaler()
autoscaled_x_train = scaler.fit_transform(x_train)
autoscaled_x_test = scaler.transform(x_test)

neighbor_model = NearestNeighbors(n_neighbors=1)
neighbor_model.fit(autoscaled_x_train)
nearest_distance, nearest_index = neighbor_model.kneighbors(autoscaled_x_test)

第8章と同じように、テストデータ自身の平均値と標準偏差は使わない。

予測時に知ることのできないテストデータの分布を、距離の計算へ入り込ませないためだった。

遥は、五つの外側foldについて処理を実行し、各サンプルの最近傍距離と絶対誤差を一つの表へまとめた。

横軸を最近傍距離、縦軸を絶対誤差とした散布図を作る。

全体としては、右へ進むほど、誤差の大きい点が増えるように見えた。

既知材料から遠い高分子ほど、予測を外しやすい。

そう書きかけて、遥は点のばらつきを見た。

距離が小さくても、絶対誤差が 0.6 を超えるサンプルがある。
距離が大きくても、絶対誤差が 0.2 未満のサンプルもある。

距離と絶対誤差の相関係数は 0.43 だった。

正の関係は見える。
しかし、距離だけで誤差が一意に決まるわけではない。

polymer_047 の最近傍距離は 18.1 で、全サンプルの中でも大きい方だった。絶対誤差は 0.70 だった。

一方、最近傍距離が 17 を超える別の高分子では、絶対誤差は 0.18 だった。

遥はノートに書いた。

遠いサンプルは、危険である可能性が高い。
ただし、遠いから必ず外れるわけではない。
近いから必ず当たるわけでもない。

最近傍距離を一つだけ使うことにも、少し不安があった。

たまたま一つだけ近い材料があっても、その周囲に他の材料がまったくなければ、十分にデータがある場所とは言いにくい。

遥は対話型 AI に尋ねた。

機械学習モデルの予測信頼性を、トレーニングサンプルまでの距離やデータ密度から評価する考え方を説明してください。最近傍1点の距離と、複数の近傍点までの距離を使う場合の違いも説明してください。

回答には、モデルの適用範囲、Applicability Domain、略して AD という言葉があった。

AD:モデルが、構築時に確認された予測性能を発揮すると期待できる説明変数の領域。

新しいサンプルがトレーニングデータに似ている、あるいはデータ密度の高い場所にあれば AD 内と判断しやすい。

反対に、トレーニングデータから離れていれば AD 外と判断し、その予測値を慎重に扱う。

遥は研究室の入門資料でも、同じ言葉を確認した。

モデルが計算できる範囲ではない。
モデルの予測を信頼できると期待する範囲。

その違いが重要だった。

k近傍回帰は、どれほど遠いサンプルでも、最も近い k 個を探して平均を計算する。

近い材料が十分になくても、プログラムは停止しない。
数字は返る。

けれど、その数字が、トレーニングデータで確認した誤差と同程度に信頼できるとは限らない。

遥は、最近傍1点ではなく、近い5点までの平均距離を使ってみることにした。

一つの偶然に左右されにくくし、周囲のデータ密度を見るためだった。

ただし、トレーニングサンプル自身の距離を計算すると、自分自身までの距離が 0 になる。

そこで、トレーニングデータでは近い6点を探し、自分自身を除いた5点の距離を平均した。

number_of_neighbors_for_ad = 5

neighbor_model = NearestNeighbors(
n_neighbors=number_of_neighbors_for_ad + 1
)
neighbor_model.fit(autoscaled_x_train)

train_distances, _ = neighbor_model.kneighbors(autoscaled_x_train)
train_mean_distance = train_distances[:, 1:].mean(axis=1)

テストデータには自分自身がトレーニングデータに含まれていないため、近い5点をそのまま平均する。

test_distances, _ = neighbor_model.kneighbors(
autoscaled_x_test,
n_neighbors=number_of_neighbors_for_ad
)
test_mean_distance = test_distances.mean(axis=1)

次に、どこまでを AD 内とするか、しきい値を決める必要があった。

遥は最初、距離と誤差の散布図を見ながら、大きな誤差が増え始める場所へ線を引こうとした。

しかし、その線はテストデータの誤差を見て決めることになる。

第8章で、テストデータを見ながらモデルや分割を選んではいけないと学んだばかりだった。

AD のしきい値も、最終評価に使うテストデータを見ずに決めなければならない。

遥は、外側foldごとに、トレーニングサンプルの5近傍平均距離の95パーセンタイルをしきい値にした。

ad_threshold = np.percentile(train_mean_distance, 95)
inside_ad = test_mean_distance <= ad_threshold

この規則では、トレーニングデータの中で特にデータ密度の低い約5 %を境界の外側とする。

95という値が唯一の正解だから選んだわけではない。

研究室のサンプルプログラムにある最初の例として用い、しきい値を厳しくした場合と緩くした場合の違いも後で確認する。

五つの外側foldを合わせると、120サンプルのうち95サンプルが AD 内、25サンプルが AD 外と判定された。

AD 内の MAE は 0.30。
AD 内の RMSE は 0.39。

AD 外の MAE は 0.83。
AD 外の RMSE は 0.86。

全サンプルで計算した MAE 0.41 と比べると、AD 内では誤差が小さかった。

AD 外では、大きく外れたサンプルが多い。

予想していた傾向だった。

けれど、AD 内の95サンプルを一つずつ見ると、絶対誤差が大きい点も残っていた。

反対に、AD 外の25サンプルの中にも、実測値に近い推定値を得た点があった。

遥は分類した。

AD 内で、誤差が小さいサンプル。
AD 内だが、誤差が大きいサンプル。
AD 外だが、誤差が小さいサンプル。
AD 外で、誤差が大きいサンプル。

四つの組が、すべて存在した。

AD は、正解と不正解を完全に分ける境界ではない。

トレーニングデータによる支えが比較的十分かどうかを示す、一つの注意信号だった。

なぜ AD 内でも大きく外れるのだろう。

遥は、誤差の大きい AD 内サンプルを確認した。

構造記述子と製膜温度は近い。
しかし、同じ構造群の中でも透過係数が大きくばらついていた。

データに入っていない膜の密度や高次構造、分子量、測定誤差などが関係している可能性がある。

説明変数の空間で近いことは、目的変数も必ず近いことを意味しない。

反対に、AD 外なのに誤差が小さいサンプルは、今回たまたま関係を外挿できた可能性がある。

一度当たったからといって、同じ距離にある別の候補も当たるとは限らない。

遥はノートに書いた。

AD は、モデルが知らない場所を検出する。
AD 内は、正解を保証しない。
AD 外は、必ず誤ることも意味しない。

翌日の午後、遥は紺色のパーカーの先輩に結果を見せた。

「最近傍距離が大きいほど、誤差も大きくなる傾向はありました。でも、きれいには分かれませんでした」

先輩は散布図を見た。

「それで、AD をどう決めましたか」

「各外側foldのトレーニングデータだけで、5近傍平均距離を計算しました。その95パーセンタイルをしきい値にしました」

「なぜ、テストデータの誤差からしきい値を決めなかったのですか」

「しきい値までテストデータに合わせると、最終評価の情報を使って、都合よく AD を作ったことになるからです」

「では、95パーセンタイルが最適ですか」

遥は、用意していた比較表を開いた。

90パーセンタイルでは、AD 内と判定されるサンプルが減り、AD 内の MAE は小さくなった。
99パーセンタイルでは、より多くのサンプルを AD 内として扱えたが、AD 内の MAE は大きくなった。

「しきい値を厳しくすると、信頼しやすい範囲は狭くなります。緩くすると、多くの候補へ予測値を出せますが、誤差の大きいサンプルも AD 内に入りやすくなります」

「どちらが良いのでしょう」

「用途によると思います」

遥は、また便利な言葉を使った気がして、続けた。

「見逃しを減らして多くの候補を評価したい初期探索なら、少し広い範囲も考えられます。実験コストが高く、予測の信頼性を優先するなら、厳しいしきい値がよいかもしれません。ただし、今回のテスト結果が最も良くなる値を後から選んで、最終性能として報告するのは適切でないと思います」

先輩はうなずいた。

「AD にも、モデルと同じように設定があります。設定した理由と、どの程度の候補をカバーできるかを一緒に示す必要があります」

カバーできる範囲。

遥は、95サンプルが AD 内だったことを思い出した。

120サンプルのうち約79 %。

AD 内の誤差だけを示すと、モデルの性能は良く見える。

しかし、残りの約21 %には予測を適用しない、あるいは慎重に扱うという条件が付く。

「AD 内の MAE 0.30 だけを報告してもよいですか」

先輩は首を横に振った。

「AD 内で使うモデルとして評価するなら、その値は重要です。ただし、AD 内に入った割合も必要です。全体の結果、AD 内外の結果、カバー率を示しましょう。都合の悪い AD 外を見えなくしてはいけません」

遥はスライドに追加した。

全体:120サンプル、MAE 0.41。
AD 内:95サンプル、カバー率約79 %、MAE 0.30。
AD 外:25サンプル、MAE 0.83。

数字が一つ増えるたび、モデルの説明は複雑になった。

けれど、MAE 0.30 だけより、何に対する数字なのかが分かる。

先輩は、polymer_047 の行を指した。

「AD 外の候補は、捨てますか」

遥は少し考えた。

「モデルの予測値だけを根拠には選びません。でも、新しい構造であること自体は、研究上の価値があるかもしれません」

「では、どうしますか」

「実験や信頼できるシミュレーションで値を確認します。結果が得られれば、データセットへ追加してモデルを更新できます。別のモデルや不確実性の評価方法でも確認したいです」

「そうですね。AD 外は、悪い材料という意味ではありません。今のデータとモデルでは、十分な根拠を持って予測できない材料です」

捨てる候補ではなく、今のモデルだけでは判断できない候補。

第4章で、外れた点をすぐ削除しなかったことと似ていた。

離れているサンプルは、間違いとは限らない。

むしろ、新しい知識を得る入口になることがある。

新人トレーニング八回目の進捗報告会で、遥は最初に、最近傍距離と絶対誤差の散布図を示した。

先生が尋ねた。

「この図から、距離が大きければ必ず誤差が大きいと言えますか」

「言えません。正の傾向はありますが、近くても外れるサンプルと、遠くても当たるサンプルがあります」

「では、距離を見る意味は何ですか」

「トレーニングデータによる支えが少ないサンプルを、予測値を使う前に検出するためです。誤差を正確に言い当てるものではなく、注意が必要なサンプルを見つける指標です」

先生は、1近傍距離と5近傍平均距離の比較を見た。

「なぜ、5点を使ったのですか」

「1点だけ近いサンプルがあっても、周囲のデータ密度が低い場合があるからです。複数の近傍までの距離を平均して、局所的にデータが集まっているかを見ました。ただし、5が唯一の正解ではありません」

「トレーニングサンプルの距離を計算するとき、なぜ6点を探したのですか」

「自分自身までの距離が0になるためです。自分を除いた5点を使いました」

先生はうなずいた。

「しきい値は、どのデータで決めましたか」

「各foldのトレーニングデータだけです。外側のテストデータは、しきい値の設定には使いませんでした」

「AD 内なら、予測値は正しいですか」

「正しいとは保証できません。今回も AD 内で大きく外れたサンプルがありました。説明変数に入っていない要因、測定誤差、局所的な関係の違いなどが考えられます」

「AD 外なら、予測値は必ず間違いですか」

「それも言えません。AD 外でも誤差の小さいサンプルはありました。ただし、トレーニングデータから離れているため、同じ性能が再現される根拠は弱いと考えます」

先生はホワイトボードに書いた。

計算できる。
信頼できる。
実験で確認する価値がある。

「この三つを分けてください」

遥は、画面にある polymer_047 の予測値を見た。

モデルは計算できた。
AD では信頼性に注意が必要と判断された。
それでも、新規性のある構造として、実験する価値がないとは限らない。

先生は続けた。

「モデルにとって得意な場所は、何によって決まりますか」

「トレーニングデータがどこにあり、どの特徴量で材料を表し、どのモデルを使ったかによって決まります」

「モデルそのものだけの性質ですか」

「違います。同じモデルでも、データが増えれば AD は変わります。記述子や作製条件の表し方を変えても、距離と AD は変わります」

「では、AD は真実の境界ですか」

「今のデータと方法で設定した、運用上の境界です」

答えながら、遥は第6章の「似ている材料」を思い出した。

似ているという言葉は、選んだ記述子、標準化、距離によって決まった。

AD も同じだった。

どこからが遠いかは、最初から世界に一本の線として存在するわけではない。

研究目的と許容するリスクを考え、人が規則を決める。

遥は最後のスライドを示した。

モデルは、AD 外でも予測値を返す。
AD は、予測値を信頼できる可能性が比較的高い領域を示す。
AD 内は正解を保証せず、AD 外は不正解を意味しない。
AD の結果には、しきい値、カバー率、AD 内外の誤差を添える。
AD 外の候補は捨てず、実験・シミュレーション・追加データ取得の対象として考える。

先生は尋ねた。

「今回、自分で追加して試したことは何ですか」

「課題では最も近い1点までの距離を求めるように書かれていましたが、5近傍の平均距離も計算しました。1点だけ近い場合と、周囲に複数のデータがある場合を分けたかったからです。それから、しきい値を90、95、99パーセンタイルに変えて、カバー率がどう変わるか確認しました」

「何が分かりましたか」

「厳しいしきい値ほど AD 内の誤差は小さくなりやすいですが、予測を使える候補は減りました。良い数値だけでなく、どれだけの候補を対象にできるかも考える必要があります」

先生は短くうなずいた。

「モデルの弱点を隠すための AD ではなく、モデルを安全に使うための AD にしてください」

報告会のあと、遥は結果を保存した。

ad_distance_error_relationship.csv。
ad_predictions_groupcv.csv。
ad_thresholds_by_fold.csv。

各ファイルには、外側fold、標準化に用いたトレーニングデータ、近傍数、しきい値、AD 内外の判定を記録した。

同じ候補を後から予測するとき、どの規則で「信頼しやすい」と判断したかを再現できるようにするためだった。

作業を終えると、先輩から次の課題が slack に届いた。

virtual_polymer_candidates.csv を共有します。
各候補について、二酸化炭素透過係数と二酸化炭素・窒素選択性を予測してください。
各予測モデルの AD 内か AD 外かも判定してください。
目標を満たす候補の中で、予測値は特に良いが AD 外の候補と、予測値は少し低いが AD 内の候補を比較してください。
次に検討する候補を、理由とともに提案してください。

遥はファイルを開いた。

縦には、まだ実験されていない仮想的な高分子構造と製膜条件が並んでいた。

これまでは、与えられた一つの候補について、物性を予測した。

次は、多くの候補の中から、欲しい性能をもつものを探す。

けれど、予測値が最も良い候補が、最も信頼できる候補とは限らない。

既知材料に近い、安全な候補。
既知材料から遠い、挑戦的な候補。

どちらを選ぶかは、モデルだけでは決められない。

遥はノートの新しいページに、二つの問いを書いた。

この候補の性質は何か。
欲しい性質をもつ候補はどれか。

似ているようで、向きが違う。

その下に、次の章の題名を書いた。

欲しい性質から考える。

===

続きはこちら

タイトルとURLをコピーしました