データ化学工学研究室物語 第I部 第3章 データは表の形をしている

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

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

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

第3章 データは表の形をしている

 

新人トレーニングの二週目に与えられた課題は、先輩から送られてきた一つのファイルを説明することだった。

polymer_membrane_sample.csv

次回までに、この表の一行と一列が何を意味するか、自分の言葉で説明してみてください。

第2章の発表を終えた日の夜、遥は先輩から届いたメッセージをもう一度読んだ。

一行と一列。

それくらいなら、今度はすぐにできるかもしれない。

遥はファイルをダブルクリックした。表計算ソフトが開き、縦と横に整った格子が現れた。

左端には、polymer_001、polymer_002、polymer_003という名前が並んでいる。

その右には、英語の列名が続いていた。

polymer_descriptor_1。
polymer_descriptor_2。
preparation_temperature。
measurement_temperature。
co2_permeability。
co2_n2_selectivity。

数字は、行と列の交点に収まっていた。

遥はノートに書いた。

一行は、一つの高分子。
一列は、高分子の性質。

書き終えると、思ったより簡単だった。

けれど、研究室の事前課題に「csvファイルをテキストエディタで作成し、表計算ソフトで読み込んで確認する」とあったことを思い出した。

遥は一度ファイルを閉じ、今度はテキストエディタで開いた。

格子は消えた。

代わりに、英語と数字が一行ずつ並んでいた。列と列の間には、カンマがある。

polymer_descriptor_1,polymer_descriptor_2,preparation_temperature,measurement_temperature,co2_permeability,co2_n2_selectivity

その下に、各サンプルの数字が続いている。

表計算ソフトでは当たり前に見えていた表が、実際には、カンマで区切られた文字と数字の集まりであることが分かった。

csvのcは、commaのcだったはずだ。

遥は対話型AIを開きかけて、手を止めた。

まず、自分で確認してからにしよう。

ウェブでcsvファイルとxlsxファイルの違いを調べた。csvには、基本的にセルの色、文字の大きさ、数式、複数のシートといった表計算ソフト固有の情報は保存されない。カンマで区切られた値が、単純なテキストとして保存される。

遥はノートに追記した。

csv:値をカンマで区切ったテキスト。
表計算ソフトで開くと、行と列の表として見える。

少しだけ理解が進んだ気がした。

そこで最初に書いた二行を見直した。

一行は、一つの高分子。
一列は、高分子の性質。

本当にそうだろうか。

列には、preparation_temperatureとmeasurement_temperatureがある。前者は膜を作るときの温度、後者は性能を測定するときの温度らしい。

もし同じ高分子を、異なる条件で膜にしたらどうなるのだろう。
同じ高分子を、異なる温度で測定したらどうなるのだろう。

一行は、一つの高分子ではないのかもしれない。

遥は表の下までスクロールした。

polymer_descriptor_1とpolymer_descriptor_2が同じで、preparation_temperatureだけが異なる二行があった。別の二行では、高分子の記述子と作製温度が同じなのに、measurement_temperatureが異なっていた。

遥は最初の文に横線を引いた。

一行は、一つの高分子。

その下に書き直した。

一行は、一つの高分子膜について、作製条件と測定条件と測定結果をまとめた一つの記録。

まだ長い。

一行は、一つのサンプル。

けれど、その「サンプル」が何を指すのかを説明しなければならない。

遥は、対話型AIに尋ねた。

機械学習のデータセットにおけるサンプルとは何ですか。

回答には、「観測対象となる一つの事例」「表の一行に相当することが多い」とあった。

分かりやすい説明だった。

しかし、第2章の経験がある。遥は続けて質問した。

この説明は一般論として理解します。添付していない高分子膜データの一行が、一つの高分子を意味するか、一つの膜を意味するか、一つの測定を意味するかは判断できますか。判断に必要な情報を挙げてください。

今度の回答は、断定しなかった。

サンプルIDの定義。
同一高分子を異なる作製条件で作ったか。
同一膜を異なる測定条件で測ったか。
一行が実験試料を表すのか、測定記録を表すのか。

遥は、その項目をノートに写した。

AIに答えを決めてもらうのではなく、確認しなければならないことを増やしてもらう。

前の発表で学んだ使い方を、今度は少しだけ自分から試せた。

次に、列を見た。

polymer_descriptor_1とpolymer_descriptor_2。

名前から、高分子構造を数値化した記述子なのだろうとは想像できる。だが、それ以上は分からない。

一つ目は分子量かもしれない。
二つ目は極性かもしれない。
あるいは、まったく別の量かもしれない。

AIに尋ねれば、もっともらしい候補はいくつも出てくるだろう。

しかし、列名だけから意味を決めることはできない。

遥はノートに、赤い字で書いた。

推測はできる。
決定はできない。

翌日の午後、遥はSlackで先輩にメッセージを送った。

polymer_membrane_sample.csvについて確認したいことがあります。
一行は、一つの高分子そのものではなく、一つの作製・測定記録を表していると考えました。この理解でよいでしょうか。
また、polymer_descriptor_1と2の定義・単位が分からないため、データの説明資料があれば確認したいです。

送信してから、少しだけ不安になった。

「分からなければすぐ質問してください」とは言われている。それでも、こんな初歩的な質問をしてよいのだろうか。

数分後、先輩から返信が来た。

良い確認です。
一行を何とみなすかは、次回一緒に考えましょう。
zipファイルの中にdata_dictionary.txtがあります。まず、それを読んでみてください。

遥はダウンロードしたフォルダを開いた。

たしかに、csvファイルの隣に、小さなテキストファイルがあった。表だけを先に開いて、見落としていた。

data_dictionary.txt。

中には、各列の意味と単位が書かれていた。

polymer_descriptor_1:高分子の繰り返し単位の化学構造から計算した記述子A。単位なし。
polymer_descriptor_2:高分子の繰り返し単位の化学構造から計算した記述子B。単位なし。
preparation_temperature:製膜時の温度。単位は摂氏。
measurement_temperature:透過試験時の温度。単位は摂氏。
co2_permeability:二酸化炭素の透過係数。
co2_n2_selectivity:二酸化炭素と窒素の理想選択性。

遥は安心しかけた。

けれど、記述子Aと記述子Bが具体的に何を表すのかは、まだ書かれていない。

説明資料にも、分からないことは残る。

そこで遥は、列ごとに六つの項目を整理した。

列名。
意味。
単位。
数値か文字か。
いつ値が分かるか。
今回の予測で何に使うか。

最後の項目で手が止まった。

今回の予測で何に使うか。

表には列が並んでいる。だが、その列が入力なのか、予測したい値なのかは、表だけでは決まらない。

遥は第1章で先生が言ったことを思い出した。

何を入力として、何を知りたいのか。

今回の問いは、高分子の構造や作り方から、二酸化炭素の透過性と二酸化炭素・窒素の選択性を予測できるか、だった。

それなら、co2_permeabilityとco2_n2_selectivityが、予測したい値になる。

polymer_descriptor_1とpolymer_descriptor_2は、高分子の構造を表す入力候補だ。

preparation_temperatureも、膜を作る前に設定できるため、入力候補にできそうだ。

measurement_temperatureはどうだろう。

測定する前に設定できる値ではある。しかし、材料そのものの性能を比べたいなら、測定温度を同じにそろえた方がよい気もする。

遥は、二つの案を書いた。

案1:測定温度も入力として使い、さまざまな温度での性能を予測する。
案2:測定温度を一つにそろえ、その条件における材料の違いを比較する。

どちらが正しいのだろう。

しばらく考えたあと、「目的による」と書いた。

その一言は便利すぎる気もしたが、今はそれ以上に決められなかった。

新人トレーニング二回目の進捗報告会では、仮配属の学生たちがノートパソコンを持って研究室に集まった。

先生は、最初に今日の課題をホワイトボードに書いた。

表の列は、何を表しているか。
入力として使うものは何か。
予測したいものは何か。
数字の意味を説明できるか。

遥の順番になると、先輩から送られたデータセットを画面に映した。

「一行は、一つのサンプルです」

言ってから、すぐに付け加えた。

「ただし、ここでのサンプルは、一つの高分子そのものではありません。高分子構造、製膜条件、測定条件と、その条件で得られた測定結果をまとめた一つの記録です」

先生は表を見た。

「なぜ、一つの高分子ではないと考えましたか」

「同じ記述子の値を持つ行でも、製膜温度や測定温度が異なっていたからです。同じ高分子でも、条件が違えば別の行になっています」

「では、一行は一つの膜ですか」

遥は答えようとして、止まった。

同じ膜を異なる温度で測った可能性もある。
データの説明には、そこまでは書かれていない。

「一つの膜かどうかは、今の資料だけでは断定できません。一つの作製・測定条件の組み合わせに対する、一つの観測記録と表現する方が安全だと思います」

先生はうなずいた。

「よいと思います。『一行は一つのサンプル』はよく使う説明ですが、サンプルが何を意味するかはデータごとに違います」

先輩が、画面の左端を指した。

「polymer_001のような名前は、モデルへの入力にしますか」

遥は、列の整理表を見た。

「しません。サンプルを区別するための名前だからです」

「数字に変換すれば使えませんか。001、002、003と」

一瞬、使えそうに思えた。

数字なら、機械学習に入力できる。

しかし、その数字の大小に化学的な意味はない。

「使わない方がよいと思います。001より002が化学的に大きい、という意味ではないからです」

「その通りです」

先輩は笑った。

「機械が数字を扱えることと、その数字を入力にする意味があることは別です」

遥はその言葉をノートに書いた。

数字にできる。
だから使ってよい、ではない。

次に、先生はco2_permeabilityの列を指した。

「これは目的変数ですか」

「今回の問いでは、目的変数です」

「今回の問いでは?」

「はい。二酸化炭素の透過係数を予測したいからです。でも、別の研究目的なら、説明変数になる可能性もあると思います」

「例えば?」

遥は少し考えた。

「すでに透過係数を測定した後で、その値から別の性能を予測するなら、入力に使うことはできるかもしれません。ただ、膜を作る前に性能を予測したいなら、まだ測っていない透過係数は入力には使えません」

先生は、表の上に二つの言葉を書いた。

予測したい時点。
研究の目的。

「説明変数と目的変数は、列名だけで自動的に決まるものではありません。何をしたいか、いつ予測したいかによって変わります」

遥は、測定温度について考えた二つの案を説明した。

「さまざまな温度における性能を予測したいなら、measurement_temperatureを説明変数にできます。一方で、材料同士を同じ条件で比較したいなら、測定温度を固定したデータだけにする方法もあると考えました」

「どちらにしますか」

すぐに正解を求められたように感じた。

遥は画面の表を見た。

「新人トレーニングの最初の解析では、測定温度を一定にしたデータで比較してみたいです。その方が、まず高分子構造や製膜条件と性能との関係を考えやすいと思います。ただ、元のデータは消さず、測定温度を入力にした解析も後で比較したいです」

言い終えてから、少し驚いた。

先生や先輩に、どちらが正しいか聞くつもりだった。

けれど今は、自分なりの理由を付けて、一つの進め方を提案していた。

先生は答えを急がず、別の列を指した。

「では、膜厚はどうしますか」

遥の表には、膜厚という列はなかった。だが、実際の膜データなら含まれることがある、と第2章で調べていた。

「計画した膜厚なら、作製前に設定できる条件として使えると思います。でも、作製後に測った実際の膜厚なら、予測したい時点によっては使えません。それに、透過係数と、単位面積あたりの透過量を区別する必要があります」

先輩が小さくうなずいた。

第2章で直されたことが、今度は自分の判断に使えた。

画面を下へスクロールすると、一つだけ空欄のセルがあった。

co2_n2_selectivityの値が入っていない。

「この空欄は、ゼロとして扱いますか」

先生が尋ねた。

遥は、空欄と数字の0を見比べた。

「いいえ。ゼロと測定されたのか、測定していないのか、記録を失ったのかが分かりません。今は欠損している値として扱うべきだと思います」

「なぜ、ゼロにしてはいけないのでしょう」

「ゼロという値には、選択性がゼロだったという意味が入ってしまうからです。分からないことと、ゼロであることは違います」

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

空欄 ≠ 0

「これも大切です。データの中では、『測定されなかった』『記録されなかった』『本当にゼロだった』が、別の意味を持ちます」

表は、数字が整然と並んでいるように見える。

しかし、同じ数字でも、単位が違えば意味が違う。
同じ列でも、研究目的が違えば役割が変わる。
空欄にも、理由がある。
サンプル名のように、数字に変えても入力にしてはいけないものがある。

遥は、表を見るということが、思っていたよりずっと多くの判断を含むことに気づいた。

報告会の後、先輩が言った。

「瀬戸さんが今日作った整理表には、名前があります」

「名前?」

「データ辞書です。列名、意味、単位、データ型、取得方法などをまとめたものです」

「data_dictionary.txtと同じですか」

「近いです。ただ、瀬戸さんの表には、『予測したい時点で値が分かるか』『今回の研究で説明変数か目的変数か』もあります。研究の目的に合わせたデータ辞書ですね」

遥は、自分のノートを見た。

ただ列名を書き写しただけの表から始まった。それが、何度も書き直すうちに、データを使うための地図のようになっていた。

「これも研究なんでしょうか」

遥が尋ねると、先輩は少し考えた。

「少なくとも、モデルを作る前に必要な研究の仕事です。ここを曖昧にしたまま高度な手法を使っても、意味の曖昧な結果が精密に出てくるだけです」

意味の曖昧な結果が、精密に出てくる。

それは、少し怖い言葉だった。

対話型AIに、整った説明を出してもらったときと似ている。形がきれいであるほど、中身を確認したつもりになってしまう。

その夜、遥はデータ辞書を表計算ソフトで作り直した。

variable_name。
meaning。
unit。
data_type。
available_before_prediction。
role_in_this_study。
notes。

polymer_descriptor_1とpolymer_descriptor_2のnotesには、具体的な計算方法を先輩に確認する、と書いた。

preparation_temperatureは、説明変数候補。
measurement_temperatureは、最初の解析では値を固定し、別の解析では説明変数として比較する。
co2_permeabilityとco2_n2_selectivityは、今回の目的変数。
サンプル名は識別用であり、説明変数にはしない。
空欄は欠損値として理由を確認する。

最後に、元のcsvファイルは変更せず、コピーを作った。

polymer_membrane_sample_raw.csv。
polymer_membrane_sample_working.csv。

元データを残しておけば、自分の処理が間違っていても戻ることができる。

それも、誰かに細かく指示されたわけではなかった。研究室の資料に、データは必ずバックアップを取るようにと書かれていたことを思い出し、自分でファイルを分けた。

小さなことだった。

でも、昨日までの遥なら、渡されたファイルをそのまま編集していたかもしれない。

作業を終えたところで、先輩から次の課題が届いた。

次回は、表を図にしてみましょう。
co2_permeabilityの分布を示す図を一つ。
co2_permeabilityとco2_n2_selectivityの関係を示す図を一つ。
図の設定を少し変えて、見え方がどう変わるかも確認してください。

遥はcsvファイルを開いた。

数字の表は、もう最初に見たときと同じには見えなかった。

一行には、一つの観測の背景がある。
一列には、名前、意味、単位、取得方法、使える時点がある。
そして、どの列を入力にして、どの列を予測したい値にするかは、研究の問いによって決まる。

遥はノートの新しいページに書いた。

データは、表の形をしている。
でも、表だけでは、データの意味は分からない。

少し考えてから、もう一行加えた。

意味をそろえて、初めてモデルに渡せる。

次は、この表を図にする。

表の中に隠れているものが、図にすれば見えるのだろうか。

遥は、co2_permeabilityの列を選択した。

今度は、数字を眺めるだけでは終わらない。

 

===

続きはこちら

 

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