データ化学工学研究室物語
第Ⅱ部 高精度モデルの落とし穴
学部四年生から修士課程へ。実際の研究で調べ、試し、考え、自分の問いを育てていく。
第2章 数字が生まれた場所へ
翌朝、遥が最初に開いたのは、Notebook ではなく、昨日の二行の出典になっていた論文だった。
画面の左に原著論文、右に複数の高分子膜を比較した論文を並べる。その下には、引き継いだ表がある。
二つの record_id。
二つの source_id。
表示された桁まで一致する、透過係数と選択性。
昨日は、その一致を見つけた。
今日は、その数字が同じ場所から来たのかを確かめる。
遥は原著論文の最初から読み始めた。
要旨には、なぜこの高分子を作ったのか、どのような性能が得られたのかが書かれていた。背景を読むと、同じような材料でも、構造や処理の工夫によって性能が違うらしいことが分かる。
面白そうだった。
けれど、知らない言葉を一つずつ調べていると、なかなか実験方法へたどり着かない。ノートには用語の意味が増えていくのに、昨日の問いはそのままだった。
この二行は、二つの独立した観測なのか。
昼前、先輩が席の後ろを通った。
「どこまで分かりました?」
「まだ、最初の方です。全部読んでから、表を確認しようと思っていて」
先輩は、画面の下にある二行を見た。
「全体の目的を読むのは大切です。ただ、今確かめたいことは、どこに書かれていそうですか」
「値が載っている表と、その説明です」
「では、そこから実験方法や補足資料へ戻ってみましょう。最初から順番に読まないと、表を見てはいけないわけではありません」
遥は、原著論文の表へ移動した。
見慣れた値があった。
その行には試料の名前があり、表の見出しには気体の種類と単位が書かれていた。表の下の注記には、測定条件に関する説明がある。
数字の隣に、数字の使い方が書かれていた。
遥は引き継ぎ表の値だけでなく、試料名、気体、単位、測定温度を照合した。そこから、表の試料がどの作製手順に対応するかを、実験方法の節で探す。
右側の比較論文にも、同じ値があった。
ただし、その論文の実験方法を読んでも、この高分子を新しく作製したという記述には行き当たらなかった。比較表の説明へ戻ると、該当する行は既報値であり、付された参照文献から引用したものだと説明されていた。
その参照文献は、左側に開いている原著論文だった。
引用先が同じというだけではない。
引用した値であることが明記され、試料の対応も、数値と条件も確認できた。
遥は、二つの論文の該当箇所を交互に見た。
右の論文は、左の論文と同じ実験を繰り返したのではなかった。
左の論文の結果を、他の膜と比較するために載せていた。
ノートに書いた。
二つの収集記録。
一つの報告結果。
画面の上では、二行とも整ったデータだった。文献名も付いている。けれど、文献が二つあることは、実験の裏付けが二つあることとは違った。
遥は、消しゴムに手を伸ばしかけた。
「一つの報告結果」を、「一回の実験」に直そうとして、止まる。
この原著論文の値は、一回だけの測定値なのだろうか。
それとも、何度か測った平均なのだろうか。
本文と補足資料を見直したが、この行の値が何回の測定からまとめられたのかまでは、確認できなかった。
一回の実験と書けば、また、分かったことより先へ進んでしまう。
遥は元の言葉を残し、その下に付け加えた。
元の報告値を作るまでの測定回数は、今回確認した記載からは分からない。
「ここまでで、どう考えますか」
先輩が戻ってくると、遥は二つの表と注記を見せた。
「この二行は、別々の測定結果ではなく、同じ報告値を別の文献から収集したものと判断しました。比較論文の方に、既報値を引用したと書かれています」
「引用の番号だけで決めたわけではないんですね」
「はい。元の試料と、どの物性の値かも確かめました。ただ、その報告値が何回の測定の平均かまでは分かりません」
先輩は、遥がノートへ書いた二行を見た。
「その区別でよいと思います。論文に示された一つの値と、実験室で行われた一回の測定は、必ずしも同じ単位ではありませんから」
遥は、二行のうち、比較論文から取られた方を選択した。
これで、一つ消せる。
そう思ってから、元の表を開いていることに気づき、手を離した。
「元データは残します。解析に使うときに、同じ結果を二度使わないようにします」
「どちらを残したかだけでなく、どうしてそうしたかも、残せますか」
遥は、新しい確認表を開いた。
元の record_id。
収集した文献と、その中の場所。
元の実験結果を報告した文献と、対応する表・試料。
確認した結果と、その根拠。
解析に使うかどうか。
原著論文から取った記録を、解析用の代表として残す。比較論文から取った記録には、同じ報告結果へ結び付く別の出典であると書く。
原著論文の方が、いつでも無条件に正しいと決めたわけではない。
今回は、そこに試料と測定の説明があり、値も照合できたため、元の報告へたどれる記録を選んだ。
後から訂正や別の情報が見つかれば、その判断も見直す。
「平均は取らなくてよいですか」
遥が尋ねると、先輩は二つの値を指した。
「今回は、同じ報告値の再掲です。二つを平均しても、独立した測定が増えたことにはなりませんね」
「同じ値だから、平均しても変わらないですけど」
「値だけではなく、何個の観測をまとめたことにするかが変わってしまいます。再掲と、別々に測った値をまとめる話は、分けましょう」
遥は、代表として残す記録に、もう一方の record_id も関連付けた。
片方を見えなくするのではない。
二つの文献から、一つの報告結果へ戻れるようにする。
そう考えると、削除という言葉だけでは、自分がした処理を説明できない気がした。
午後、遥は同じような候補を、もう少し探した。
すべての文献を最初から読み直すのではなく、まず、構造記述子と測定条件が一致して見える行を並べ、出典の関係を確認する。
数値の一致は、読む順番を決める手がかりにした。
それだけで同じ観測と判定する規則にはしなかった。
次に見つかった記録にも、最初の二行と似た繰り返し単位が描かれていた。文字列の書き方は違うが、原子のつながりをたどると、同じ構造に見える。
ただ、透過係数は一致していなかった。
測定温度と気体の種類は、同じだった。
遥は、同じ構造で値が違う理由を、AIに尋ねかけた。
製膜条件。分子量。残留溶媒。測定誤差。
答えに挙がりそうな言葉は、少し想像できた。
でも、その候補のどれが、この行に当てはまるのかは、まだ分からない。
今必要なのは、もっともらしい理由の一覧より、この論文で何をしたかだった。
遥は原著論文の該当する試料の説明へ進んだ。
この行は、既報値の比較欄ではなく、その研究で作製した膜の結果として示されていた。実験方法には、対象となる高分子を膜にし、性能を測った手順が書かれている。
同じ構造の高分子を扱っている。
しかし、最初の報告値をもう一度載せた記録ではない。
遥は、二つの構造式の間に引きかけた線を、途中で止めた。
構造を同じものとしてまとめることと、観測結果を一つにすることを、同じ操作にしてはいけなかった。
先輩へ見せる前に、ノートに自分の考えを書いた。
構造の分類では、同じグループにする候補。
報告結果の整理では、別の結果として残す。
「今度は、同じ構造なのに、両方残すんですね」
先輩に言われ、遥はうなずいた。
「この論文では、新しく作製した膜の測定結果だと確認できたからです。値が違うことだけが理由ではありません」
「値が同じだったら?」
「それでも、別に作った膜の結果と確認できれば、同じ報告値の再掲としては扱いません」
逆に、別の単位や丸め方で載っているだけなら、見かけの数字が違っても同じ報告結果の可能性がある。
値が同じかどうかは、大切な手がかりだった。
けれど、最後の判断をしてくれるものではなかった。
遥は、確認表の「独立した観測」という欄へ印を付けようとした。
先輩が、そこを指した。
「別に作製したことと、すべての意味で独立していることも、少し分けておきましょう」
「別々の膜でも、ですか」
「例えば、同じ原料から作っていたり、同じ装置や方法で測っていたりすることはあります。別の膜であることは重要ですが、どんな共通点もなくなったわけではありません」
「今分かったのは、少なくとも再掲ではなく、別に作製・測定した結果として報告されていることですね」
「そうです。そこまでを、そのまま書いておけばよいです」
同じか、違うか。
二つのどちらかに丸を付ければ終わると思っていた。
実際には、何が同じで、何が違うのかを、書き分ける必要があった。
遥は、欄の名前を直した。
同じ構造か。
同じ試料か。
同じ報告結果か。
分からない場所には、「未確認」と書いた。
その日の最後に見た組では、片方の論文の試料名と、補足資料の試料名がうまく対応しなかった。
似た略号が使われている。しかし、どの膜の結果を指しているかを、いま読んだ範囲では確定できない。
「未確認」が、また一つ増えた。
何も分からなかったわけではない。どの表とどの説明の対応が足りないのかは、書けた。
遥は、まずそこまでを先輩に伝えた。
「この組は、今の資料だけでは決められませんでした。別の補足資料があるかを確認したいです。そこでも分からなければ、問い合わせが必要か相談したいです」
「了解です。確認した場所を残して、いったん次へ進んでもよいと思います。すべての行に、今日中に答えを付けなくても大丈夫です」
帰る前に、遥は対話型AIを開いた。
今度は、個々の文献の結論を尋ねなかった。
文献から集めたデータについて、「同じ構造」「同じ試料」「同じ報告結果」を分けて記録したいです。照合表に必要な確認項目の候補を挙げてください。論文本文を提示していないので、個々の記録が同じかどうかは判定しないでください。
返ってきた項目を、自分の確認表と比べた。
出典の場所、原著論文との関係、試料名、作製条件、測定条件、確認した根拠。
多くは、すでに書いてあった。
確認した日と、判断を見直した履歴は、まだなかった。
遥は、その二つを加えた。
AIが長い表を作ったから、全部の欄を埋めなければならないわけではない。
今回の判断を、後から自分や先輩が確かめるために必要な欄を選んだ。
分からない作製条件を推測して埋める欄は、作らなかった。
木曜日の進捗報告に向けて、遥はスライドを一枚作った。
最初の図は、散布図ではなかった。
左に二つの文献、右に一つの報告結果を置き、線で結んだ。
その下には、同じ繰り返し単位から、別々に作製された膜の記録へ分かれる図を置いた。
同じになったところと、違うまま残したところ。
表だけで説明しようとしたときより、整理の意味が見えた。
隣の同期が、画面をのぞいた。
「それもモデルの図?」
「モデルに入れる前の図。どの数字が、どこから来たかを整理してる」
「データ、増えた?」
遥は、少し迷った。
読んだ文献の数は増えた。
確認用の欄も増えた。
でも、解析で別の結果として数える行は、一つ減る。
「一つ減らす理由が、分かった」
同期は、二つの文献から一本にまとまる線を見た。
「ああ。同じ結果を、二回数えていたのか」
「うん。今確かめた、この組については」
全体でどのくらいあるかは、まだ調べていなかった。
小さな確認を、全データの結論に広げないように、その一言を付けた。
報告会で、遥はその図を最初に示した。
「前回気になった二行は、同じ報告値を別々の文献から収集した記録と確認しました。一方、同じ構造でも、別に膜を作製して測定した結果として残す記録もありました」
確認した文献の表と注記を、次の画面に映す。
今回は、問いを予想して答えを用意しただけではなかった。自分がどこを読んで、どこで判断を変えたかを順に示せた。
先生は、最初の二行を見た。
「元のデータから消しましたか」
「消していません。収集記録は残し、解析用では同じ報告結果を一度だけ使う方針にしました。どの記録を代表にしたかと、他の出典との対応も残します」
「structure_group は、どうしますか」
「元の番号は保存します。その上で、文献をまたいで構造を確認したグループを、別の列に作りたいです。ただし、同じ構造だからといって、すべての測定結果を一つにはしません」
遥は、新しく付ける名前を画面に示した。
record_id:収集した一行を区別する。
source_id:どの文献から収集したかを示す。
reported_result_id:どの報告結果に対応するかを示す。
structure_group_checked:確認した構造のまとまりを示す。
後ろの二つは、今回の整理のために遥が加える列だった。
「これらは識別と照合、データを分けるための情報です。番号をそのまま予測モデルの説明変数に加えるわけではありません」
先生は、下側の図を指した。
「同じ構造で、別に作った膜の結果は残す。その二つが、トレーニング側と評価側に分かれてもよいでしょうか」
遥は、自分の研究の目的を思い出した。
「未知の高分子構造を予測したいので、今回の評価では同じ側へまとめます。別の観測結果として残すことと、別の構造として分割してよいことは違います」
「すでに知っている構造で、新しく膜を作る場面なら?」
「別の評価問題になると思います。その場合でも、同じ報告値の再掲を両側へ分けることはしません。別に作った膜を予測したことにはならないからです」
先生はうなずいた。
「何を一つと数えるかと、何を未知として残すか。両方を、研究の目的に合わせて整理していますね」
遥は、前回の散布図を補足資料から開いた。
MAE 0.10。
RMSE 0.15。
値の横には、引き継いだ版の評価結果、と書いてある。
「この数字は、今回の確認で間違いと決まりましたか」
「その設定で計算した結果であることは変わりません。ただし、未知の構造や別の観測を評価できていたかについて、問題のある組が見つかりました。同じ報告値がトレーニング側にあれば、その値を知らないつもりの評価にはなりません」
「では、小さい誤差の原因は、再掲の重複ですか」
「それだけとは、まだ言えません。今回確かめたのは一部の記録です。ほかの重複や構造の対応も確認し、解析用のデータを整理してから評価し直す必要があります」
先輩も、保存された分割の一覧を開いた。
「この組が両側に入る分割は確認できました。全体への影響は、次に分けて調べましょう」
遥は、少し安心した。
問題を見つけたら、すぐに全体の原因まで言わなければならないわけではない。
どこまで確かめたかをそろえれば、次の検討を一緒に考えられた。
先生は、「未確認」とした組について尋ねた。
「こちらは、どう扱う予定ですか」
「元の表と確認表には残します。まず、対応を確認できた範囲で暫定的な解析用データを作り、保留した記録と理由、対象の範囲を示したいです。未確認の行を、自動的に全部別の観測と数えることはしません」
「確認できたものだけなら、元のデータより対象が偏る可能性もありますね」
「はい。使った行数だけでなく、構造や測定条件の範囲も比べます。暫定的な結果を、収集した全データに対する結果とは言わないようにします」
「それで進めましょう。確認できない項目が残ることも含めて、今使えるデータを定義してください」
報告会のあと、遥は、これから行う作業を先輩と相談した。
元のファイルは、v02 のまま残す。
確認した対応関係は、record_provenance_review.csv に記録する。
解析用データは、元の記録と確認表を対応付けて、別のファイルとして作る。
同じ報告結果を二重に使っていないか、確認した同じ構造が分割の両側に入っていないかを、予測の前に点検する。
「列を追加しただけで、前のプログラムがその列を使ってくれるわけではないですね」
遥が言うと、先輩はうなずいた。
「どの列で分割しているかを、実際に出力して確かめましょう。前に再現した結果も、消さずに残しておいてください」
高精度なモデルを作るプログラムの前に、確認するための処理が一つ増える。
それも、次の数字を自分の言葉で説明するために必要だった。
遥は、評価し直す前に、解析用データへ残す規則を書いた。
同じ報告結果の再掲は、一度だけ用いる。
別に作製・測定された結果は、来歴を残して区別する。
未知の構造を評価する分割では、同じと確認した構造を両側へ分けない。
判断できていない記録は、その理由と扱いを明示する。
この規則は、誤差を小さくするために決めたものではない。
どのような観測を使って、何を知らない状態として予測するのかを決めるためのものだった。
もし評価した誤差が大きくなっても、結果が気に入らないから規則を戻すのではない。
一方で、規則に誤りが見つかれば、理由を記録して直す。
遥は、元の MAE 0.10 と比較するための欄を、まだ空白にしておいた。
サンプルが変われば、比較する対象も変わる。同じ対数尺度の MAE と RMSE を示すにしても、数値だけで手法が良くなった、悪くなったと判断しない。
まず、どの記録が、何として残ったかを確かめる。
夕方、先生と先輩に見てもらうため、遥は確認表と短い説明を slack に共有した。
前回の二行は、同じ報告結果の再掲と確認しました。根拠となる表と注記の位置を記録しています。
同じ構造でも別に作製した膜の結果は、再掲とは区別して残します。
構造の対応と、報告結果の対応は、別々の項目にしました。
未確認の組もあります。次は、確認した規則から解析用データと分割を作り、予測前に重なりを点検します。
最後に、これまで調べた範囲と、残っている範囲を添えた。
画面の隅には、最初に読んだ原著論文がまだ開いていた。
最初は、その表の中から、欲しい数字だけを取り出そうとしていた。
今は、数字の隣の試料名と、表の下の小さな注記にも目が行く。
それらがなければ、一行が何を表すかを決められなかった。
モデルを使う前の、面倒な準備。
昨日までは、少しそう思っていた。
でも、自分が予測したいものを考えると、ここは研究の外側ではなかった。どの実験結果を一つの手がかりとして受け取り、何をまだ知らないものとして残すかを決める、研究そのものの一部だった。
遥はノートの新しいページへ、二つの問いを書いた。
何を、同じものとしてまとめるか。
何を、違うものとして残すか。
その下に、明日の作業を足す。
確認した対応関係を使って、データの分け方を作り直す。
予測の誤差が、どのくらいになるかは、まだ分からない。
ただ、次に画面へ現れる点については、前より具体的に説明したかった。
この一つの点を、何として数えたのか。
遥は、確認表を保存した。
===
続きはこちら
