2022 年 10 月 5 日に、金子弘昌著の「化学・化学工学のための実践データサイエンス―Pythonによるデータ解析・機械学習―」が出版されました。
これまで他に、三冊の本 「化学のための Pythonによるデータ解析・機械学習入門」 と 「Pythonで気軽に化学・化学工学」 と 「Pythonで学ぶ実験計画法入門 ベイズ最適化によるデータ解析」 を出版しました。今回の本は、データ解析や機械学習の中級編になります。ある程度データ解析や機械学習の経験がある方、もしくは上のいずれかの書籍をお読みになった方が、さらに上を目指すための本になります。
データ解析・機械学習やプログラミングの内容については、金子研の学部生、修士過程の学生、博士課程の学生にも確認してもらいながら精査しました。その精査も経て、よい仕上がりになったと思います。
ここでは本書の “まえがき”、目次、そして第１章と第２章を無料公開します (およそ 10000 字)。これらの無料公開をご快諾いただきました朝倉書店の皆さまに感謝申し上げます。自信のある本だからこそ、ここまで無料公開できます。本書をご購入するときの参考になれば幸いです。それでは、よろしくお願いいたします。
## まえがき
分子設計・材料設計・プロセス設計・プロセス管理において、データ解析・機械学習をすることが一般的になってきました。ケモインフォマティクス・マテリアルズインフォマティクス・プロセスインフォマティクスという言葉も色々な場面で使われています。企業の中に、データ・AI・MI・インフォマティクス・デジタルといった単語を含む研究所名や部署名も増えてきました。実際、大学・企業・研究所などの多くの方々から、データ解析・機械学習に関する著者への相談がたくさんあります。
データ解析・機械学習を実施する多くの方はプログラミング言語として Python を利用していますが、一方でプログラミングが苦手でありデータ解析・機械学習の利用が進まない方もいらっしゃるかもしれません。そのような方でも、データケミカル株式会社 (著者が最高技術責任者 CTO) が提供しているデータ解析・機械学習のクラウドサービス「Datachemical LAB (データケミカルラボ)」  を利用することで、プログラミングなしでデータ解析・機械学習による分子設計・分子設計・材料設計・プロセス設計・プロセス管理が可能になっており、データ解析・機械学習の利活用が加速的に進んでいます。
データ解析・機械学習で用いられている技術は進化を続けています。例えば、環境省の大型プロジェクトである令和４年度地域資源循環を通じた脱炭素化に向けた革新的触媒技術の開発・実証事業において、「革新的多元素ナノ合金触媒・反応場活用による省エネ地域資源循環を実現する技術開発」が採択されプロジェクトが開始されましたが、その中核技術の一つはデータ解析・機械学習に関するものです。
以上のような背景の中、すでに回帰分析やクラス分類によりモデル構築や予測を検討したことのある、データ解析・機械学習による分子設計・材料設計・プロセス設計・プロセス管理の中級者向けの本として本書を執筆しました。初学者向けの本はすでに出版されており、これからデータ解析・機械学習や Python を学ぶ人は、以下の書籍のいずれかを読むことで、本書を読むための知識・技術を効率的に習得できます。ぜひあわせてお読みいただければと思います。
- 金子弘昌, 「化学のための Pythonによるデータ解析・機械学習入門」, オーム社, 2019
- 金子弘昌, 「Pythonで気軽に化学・化学工学」, 丸善, 2021
- 金子弘昌, 「Pythonで学ぶ実験計画法入門 ベイズ最適化によるデータ解析」, 講談社, 2021
本書では、著者が運営するデータ化学工学研究室で培われた知識・技術、そして実施された研究の成果をまとめた Python ライブラリである DCEKit をふんだんに活用しています。高度化したデータ解析・機械学習の技術も DCEKit に含まれており、分子設計・分子設計・材料設計・プロセス設計・プロセス管理の様々な問題・課題に対応できるでしょう。今も進化を続けている DCEKit を、本書を通して存分に堪能してください。
本書の第１章には学ぶために必要な Python 環境と DCEKit の準備について記載があります。必ずお読みください。第２章からは、データ解析・機械学習における項目ごとに各章がまとまっています。はじめから順番に読む必要はなく、目次から気になる項目をお読みいただければと考えています。
本書の原稿の確認やサンプルプログラムの検証について、明治大学のデータ化学工学研究室 (金子研究室) の石田敦子さん、畠沢翔太さん、森下敏治さん、岩間稜さん、谷脇寛明さん、山影柊斗さん、山本統久さん、杉崎大将さん、池田美月さん、金子大悟さん、中山祐生さん、本島康平さん、湯山春介さん、吉塚淳平さん、⼭本彩乃さん、川越琳太さん、⽩⽊優也さん、佐溝茂良さん、安藤瑠海さん、落合晴希さん、木村昭瑛さん、酒井優太さん、高岡翔さん、中西大和さん、松原正佳さん、和久津優太さん、瀧上将太郎さんにご助力いただきました。ここに記し、感謝の意を表します。ありがとうございました。また、自宅で執筆していても温かく見守ってくれた妻の藍子と、おとなしくしてくれた娘の瑠那と真璃衣に感謝します。
1. はじめに
1.1 分子設計・材料設計・プロセス設計・プロセス管理
1.2 事前準備～Python 環境と DCEKit～
2. データセットの作成
2.1 データ解析前における説明変数 x の決め方・選び方の方針
2.2 複数の物質が混合されてできた物質の特徴量の作成
2.3 モデルの逆解析により得られるサンプルの多様性を高める
3. 化学データ・化学工学データの前処理
3.1 説明変数の標準化をするべきときと、するべきでないとき
3.2 標準偏差(分散)が0の説明変数を削除してよいのか
3.3 対数変換やロジット変換による特徴量の非線形変換
3.4 スペクトル・時系列データの前処理の方法
3.5 外れ値検出もしくは外れサンプル検出
3.6 回帰分析のときに外れサンプルを検出する手法
3.7 欠損値(欠損データ)の補完
4. 特徴量選択(変数選択)
4.1 特徴量選択(変数選択)をするときに注意すること
4.2 同じ値を持つ特徴量の削除
4.3 相関係数で特徴量選択
4.4 相関係数で特徴量のクラスタリング
4.6 スペクトル解析における波長領域の選択
5. データセットの可視化・見える化
5.1 データセットの可視化をする理由
5.2 データの可視化・見える化のための手法を選ぶときのポイント
5.3 見える化・可視化した結果を評価する指標
5.4 GTM
6. クラスタリング
6.1 クラスタリングのメリット
6.2 GMM
7. 回帰分析とクラス分類
7.1 定性的な特徴量を定量的な特徴量に変換する方法
7.2 回帰分析からクラス分類へ、またはクラス分類から回帰分析へ変換するときのメリットとデメリット
7.3 アダブースト
7.4 勾配ブースティング
7.5 各サブモデルの適用範囲を考慮したアンサンブル学習
7.6 半教師あり学習(半教師付き学習)
7.7 半教師あり学習におけるサンプル選択
7.8 転移学習
7.9 モデルの予測精度を上げるための考え方・方針
8. モデルの検証
8.1 回帰分析手法・クラス分類手法の選び方
8.2 モデルの評価と最適化に関する注意
8.3 最適化する際の注意点
8.4 ハイパーパラメータの選択に失敗してしまったときの対処法
8.5 回帰分析における目的変数の実測値 vs. 推定値プロットの見方
8.6 オーバーフィッティング(過学習)とその対処法
8.7 小さなデータセットが抱える大きな問題と、その対処法
8.8 回帰分析・クラス分類をするときの、トレーニングデータとテストデータの分け方
8.9 ダブルクロスバリデーション(モデルクロスバリデーション)
8.10 yランダマイゼーションでオーバーフィッティング(過学習), chance correlation(偶然の相関)の危険度を評価
8.11 クロスバリデーションのとき、特徴量の標準化はどうするか
8.12 クロスバリデーションなしでのハイパーパラメータの最適化
8.13 テストデータの MAE をトレーニングデータから推定する方法
8.14 テストデータ・バリデーションデータにおけるモデルの精度が低いときのポジティブな側面
9. モデルの適用範囲・ベイズ最適化
9.1 モデルを構築するのにサンプルはいくつ必要か
9.2 内挿・外挿はモデルの適用範囲内・適用範囲外と異なる
9.3 守りの AD、攻めの BO
9.4 モデルがどれくらい外挿できるかの検証方法
9.5 ガウシアンカーネルを用いたサポートベクター回帰ではモデルの適用範囲を考慮しなくてよいのか
9.6 特徴量を適切に非線形変換することでモデルの適用範囲を拡大する
10. モデルの逆解析
10.1 モデルの逆解析をするときのチェックリスト
10.2 モデルの予測性能が低いときも、モデルの逆解析をやるべきか
10.3 目的変数の予測値だけでなく、説明変数の感度も設計のときに考慮する
10.4 ランダムフォレストや決定木で構築したモデルの逆解析
10.5 部分的最小二乗法でモデル逆解析をするときのメリット
10.6 材料設計の限界 (モデルの逆解析の限界) はわかるのか
10.7 モデルの予測結果の活用方法～モデルの逆解析と目的変数の評価～
10.8 目的変数が複数個ある時のモデルの逆解析
10.11 True GMR と説明変数に制約条件がある中での遺伝的アルゴリズムを用いた解析
## 1. はじめに
### 1.1 分子設計・材料設計・プロセス設計・プロセス管理
高機能性材料を研究・開発・製造する際、化学データや化学工学データを活用してデータ解析・機械学習を行い、分子設計・材料設計・プロセス設計・プロセス管理を効率化することが一般的となっています [1]。分子設計では、化合物の化学構造・分子構造を数値化した分子記述子 x と活性・物性・特性 y との間で数理モデル y = f(x) を構築します。構築されたモデルに基づいて、新たな化学構造に対する活性・物性・特性の値を予測したり、活性・物性・特性が所望の値となる化学構造を設計したりします。
材料設計では、材料の活性・物性・特性 y と材料の合成条件や製造条件 x との間で数理モデル y = f(x) を構築します。モデルに基づいて、実験前もしくは製造前に材料の合成条件や製造条件から材料の活性・物性・特性を予測したり、目標の材料を達成するための合成条件や製造条件を設計したりします。
プロセス設計では、目標の性能をもつ装置やプラントを設計するため、プロセスシミュレーションもしくは実験を行う際のプロセス条件 x と装置・プラントの性能 y との間で数理モデル y = f(x) を構築することで、装置やプラントの目標の性能を達成するためのプロセス条件を効率的に設計できます。
プロセス管理では、温度や圧力などの簡単に測定可能なプロセス変数 x と製品品質を代表する濃度・密度などの測定が困難なプロセス変数 y との間で数理モデル y = f(x) を構築します。モデルを用いることで、簡単に測定可能なプロセス変数の値から、測定が困難なプロセス変数の値をリアルタイムかつ連続的に推定できます。推定値を実測値の代わりに使用することで、効率的なプロセス制御を達成できます。
分子設計・材料設計における研究・開発はケモインフォマティクスやマテリアルズインフォマティクス、プロセス設計やプロセス管理における研究・開発はプロセスインフォマティクスと呼ばれ、それぞれ活発な議論がなされています。これらの詳細については著者の前著 [1] に記載されているため、興味のある方はそちらをご覧ください。
分子設計・材料設計・プロセス設計・プロセス管理それぞれの分野において、データ解析・機械学習を行うために、サンプルや特徴量を収集してデータセットを作成する必要があります。そして得られたデータセットの前処理を行ったり、特徴量を選択したり、データセットを可視化・見える化したり、クラスタリングしたりたりして、データ解析を進めます。回帰分析やクラス分類により x と y の間で数理モデルを構築する際は、予測精度の高いモデルを構築することが重要です。データセットごとにモデルの予測性能を適切に評価して、オーバーフィッティング (過学習) していない予測精度の高いモデル構築手法を選択する必要があります。
モデルを運用して分子設計・材料設計・プロセス設計・プロセス管理をする際は、モデルの適用範囲 (Applicability Domain, AD) を考慮する必要があります。AD とはモデルが本来の予測性能を発揮できる x のデータ領域のことです。新しいサンプルの x の値が AD 内であれば y の予測値を信頼できますが、AD 外であれば信頼できません。与えられたデータセットに基づいて AD を設定し、新しいサンプルの y の値を予測する際は AD 内か AD 外か検討します。
AD を考慮することで的確な予測を達成できる一方で、分子設計・材料設計・プロセス設計に必要なことは、活性・物性・特性 y の目標値からそれを実現するための特徴量 (合成条件・プロセス条件など) x を導くことです。これをモデルの逆解析と呼びます。モデルの逆解析により、例えば x が提案された後、実際に合成などを行い y の値を測定します。測定値が目標を満たしていれば開発は終了となりますが、目標を満たしていなければ、そのデータをデータセットに追加してモデルを再構築し、次の x を提案します。このように実験・モデル構築・モデルの逆解析を繰り返すことを適応的実験計画法と呼びます。特に y の目標値が既存のデータセットにおける y の値から遠い場合にはベイズ最適化 (Bayesian Optimization, BO) により効率的に目標までの合成条件を探索できます。
BO を含む一般的な逆解析で行われていることは、x の仮想サンプルを大量に生成し、それらをモデルに入力して y の値を予測し、予測値が良好な仮想サンプルを選択する、すなわち順解析を網羅的に繰り返す擬似的な逆解析にすぎません。これでは人が事前に想定した x の探索範囲における y を予測することにすぎず、当初想定しない条件でこそ発現する新機能の探索には全く対応できません。そこで著者の研究室では、y の値から x の値を直接的に予測する、すなわち数理モデルを直接的に逆解析する手法「直接的逆解析法」を開発しています [2,3]。数理モデルを解析することで、y の目標値から直接 x の値を自由自在に予測できます。さらに直接的逆解析法では y が複数、すなわち活性・物性・特性が複数存在する場合でも、すべての物性の目標値を満たす x の値を提案できます。
第 2 章以降では、分子設計・材料設計・プロセス設計・プロセス管理におけるデータ解析・機械学習の過程であるデータセットの作成、データセットの前処理、特徴量選択、データセットの可視化・見える化、クラスタリング、回帰分析・クラス分類、AD、BO、モデルの (直接的) 逆解析について学びます。また各過程における注意点についても説明します。
### 1.2 事前準備～Python 環境と DCEKit～
本書では以下の各項目について概要を理解していることが前提になります。
- データセットの作成
- 化学構造の数値化
- 時系列データ
- 特徴量
- 目的変数、説明変数
- データセットの可視化・見える化
- クラスタリング
- クラス分類
- 回帰分析
- モデルの検証
- モデルの予測精度
- トレーニングデータとテストデータ
- クロスバリデーション
- モデルの適用範囲
- モデルの逆解析
- 実験計画法
- 適応的実験計画法
- ベイズ最適化
- Python プログラミング
著者の前著 [1,4,5] のいずれかを読むことで、これらの知識・技術を効率的に身につけられます。
ぜひあわせてお読みいただければと思います。
本書にはプログラミング言語 Python のサンプルプログラムを同封しています。以下がダウンロード用 URL [6] です。
サンプルプログラムを実行する環境として、Anaconda [7,8] がインストールされていること、もしくはこちらの記事 [9] にあるいずれかの方法で環境が準備されていることを前提としています。なお刊行時点では、Anaconda3 からインストールされた Python 3.7.9 で Spyder において動作を確認しています。ダウンロード用 URL [6] におけるサンプルプログラムは Python や使用しているライブラリのバージョンアップなどに対応して随時修正予定です。
サンプルプログラムの中には DCEKit [10] がインストールされている必要があるものもあります。Windows の方は Anaconda Prompt もしくは Miniforge Prompt、MacOS の方はターミナルを起動して、以下を実行して DCEKit をインストールしましょう。
DCEKit の詳細や使い方についてはこちらのウェブサイト [10,11] に詳細が記載されています。ただサンプルプログラムを実行するだけでしたら、特にお読みいただく必要はありません。
また本書でも使用する DCEKit におけるサンプルプログラムは、こちら [12] からダウンロードできます。ぜひご活用ください。
## 2. データセットの作成
目的変数 (活性・物性・特性など) y と説明変数 (特徴量・記述子・合成条件・製造条件・プロセス条件・プロセス変数など) x との間に、予測精度の高い回帰モデルやクラス分類を構築したり、構築したモデルを逆解析して有効な x のサンプル候補を獲得したりするためには、適切に x を設計してデータセットを作成する必要があります。本章ではそのための方針について説明します。
### 2.1 データ解析前における説明変数 x の決め方・選び方の方針
目的変数 y と説明変数 x との間に、クラス分類や回帰分析によって数理モデル y = f(x) を構築します。モデルを構築するためにはデータセットが必要であるため、y と x を決めてからサンプルを集めます。モデルを構築するときには何らかの目的が存在するはずであり、もちろん y として適切に数値化もしくはカテゴリー化する必要はあるかもしれませんが、基本的に y はその目的に応じて決めることになります。
一方で x に関しては、モデル構築前にデータセットを準備する際、データ解析・機械学習を実施する人が設定する必要があります。x を作成したり、選択したりする方針が 2 つあります。
1 つ目の方針として、予測精度の高いモデルを構築できる x を準備します。y を的確に説明できる x ほどよいといえます。モデルの予測精度や予測精度の評価に関しては、第 8 章をご覧ください。
例えば実験系において、サンプルごとの y の値の違いを説明するための実験条件は、x に入れたほうがよいです。x を決める時点ではモデルの予測精度が高いかどうかはわからないため、少しでも y と関係していると考えられる特徴量は、x に入れておきましょう。実際は、すべてのサンプルで同じ値をもつ実験条件以外は、x に追加しておくとよいでしょう。
ただ、絶対に y と関係のない特徴量は、事前に除きましょう。なぜなら x が多いほど偶然の相関 (8.10 節参照) が起こりやすく、モデルがトレーニングデータにオーバーフィットしやすいためです。
もう一つの方針として、y の値を予測するときに x の値がわかるかどうかです。モデル y = f(x) に x の値を入力することで y の値を予測するため、y の値を予測したいサンプルにおいて x の値が必要です。例えば分子設計のとき、分子の化学構造から計算できる特徴量であれば、化学構造を生成した後にその特徴量を計算できるため、y の値の予測に用いることができます。しかし、分子の物性のような特徴量は、分子を合成してその物性を測定しないと特徴量の値が得られないため、分子設計をするときの x としては適切ではありません。
材料設計のとき、原料の組成や反応温度・反応時間などの実験条件であれば、データ解析する人が値を設定できるため、x として用いることができます。しかし、例えば高分子の分子量や分子量分布など実際に重合して測定しないと値が得られない特徴量は、材料設計において x として使用するのは適切ではありません。
ソフトセンサーにおける目的の一つに、y の値を迅速に予測することがあります。温度・圧力などのようにハードセンサーによってリアルタイムに値が得られる特徴量であれば、x として用いることはできますが、測定に時間がかかるような特徴量の場合は、測定時間の分、y の値の予測に時間がかかってしまうため、適切ではありません。
以上のように、回帰モデル・クラス分類モデルの予測精度だけでなく、y を予測するときに値が得られるかどうか、という観点でも x を決めたり選んだりするようにしましょう。
### 2.2 複数の物質が混合されてできた物質の特徴量の作成
ポリマー設計において、共重合体 (コポリマー) の特徴量を考えるとき、各モノマーを数値化した後に、それらのモノマーの組成比を重みとした重みつき平均 (加重算術平均もしくは単に加重平均) を計算することで数値化することがあります。また合金の特徴量を考えるとき、用いる金属元素もしくは非金属元素を数値化した後に、それらの組成比を重みとした加重平均を計算することで数値化します。他にも、複数の物質を混合して材料を作る場合など、一般的に混合物の特徴量を考えるとき、各物質の組成比を重みとした加重平均によって、対象の材料を数値化することが行われます。
これは適当に加重平均を計算しているわけではありません。特徴量を作成するとき、混合物をどのように数値化するか、と考えます。非常に単純な例ですが、化学構造を置換基の数で数値化するとき、複数の化合物を混ぜた後の置換基の数は、それぞれの化合物の置換基の数に、混合した量 (物質量) を掛け合わせて、すべて足し合わせたものといえます。加重平均の考え方です。もちろん、それらの化合物間の関係 (水素結合など) については考慮できませんが、それぞれの化合物が独立に存在すると仮定したときに数値化していると考えることはできます。原子量・分子量・式量に関しても、置換基と同じ考え方ができます。
もちろん、複雑な構造記述子や金属元素もしくは非金属元素の情報において、加重平均を計算してよいのか、と考える場合もありますが、上で示した考え方を拡張して、加重平均で数値化します。また物質の特徴量によっては、重みをつけて算術平均を計算するのではなく、重みでべき乗して幾何平均を計算する (加重幾何平均を計算する) 方が適切なこともあります。なお加重幾何平均については、対数変換をすると、各特徴量を対数変換した後に加重平均を計算したものに対応しますので、そちらの方が変換しやすいかもしれません。他にも、調和平均、max-pooling, min-pooling, 重み付き分散といった変換方法があります。
ケモインフォマティクス・マテリアルズインフォマティクス・プロセスインフォマティクスにおいて、混合物を数値化するときには、単純に重みつき平均を取るだけでなく、どのようにして混合物を数値化して特徴量とすれば、特徴量と活性・物性・特性との間の関係性を得られやすいか、といった視点で考えるとよいでしょう。ただ前節に書いた通り、y の値の予測や数理モデルの逆解析ができなければ意味がない場合には、そのような視点も入れて特徴量を決めましょう。
### 2.3 モデルの逆解析により得られるサンプルの多様性を高める
目的変数 y と説明変数 x の間で回帰モデルやクラス分類モデル y = f(x) を構築することで、y がわからないサンプルでも x の値をモデルに入力して y を予測できます。予測精度の高いモデルを構築するためには、適切に x を設計することが大切です。もちろん 2.1 節で述べたように、x を設計するときは y の値の予測やモデルの逆解析をすることも考慮する必要があります。
特に、モデルの逆解析をすることで多様な解 (多様な x のサンプル) を獲得したい場合、x を設計するときに念頭に入れておくべきこととして、x を抽象化することが挙げられます。
x が具体的なものであればあるほど、トレーニングデータと同じようなサンプルしかモデルの逆解析で得られなくなり、抽象化度を上げれば上げるほど、多様なサンプルが得られるようになります。例えば、分子の水素結合を x の特徴量として表現しようとしたとき、水酸基の数やフッ素の数といった具体的な記述子で考慮できるかもしれません。しかし、y を予測したい分子に、アミノ基のある分子があるとき、その分子における水素結合を考慮することはできません。このようなとき、x を抽象化して、例えば電気陰性度のような記述子を準備しておくことで、広く水素結合受容体の置換基をもつ分子の水素結合を考慮して、y を予測することができます。
ポリマー設計、特にコポリマー (共重合体) の設計をするとき、混合するモノマーの組成比を x の特徴量とすることで、モデルの逆解析により、それらのモノマーをどのような割合で混合させれば y が望ましい値になるかを検討できます。しかし、そのような x で構築されたモデルでは、トレーニングデータで使用されたモノマーの種類しか予測できません。トレーニングデータにあるモノマーの中で、それらをどのような割合で混合すればよいかは設計できますが、新たなモノマーを使用したときに y の値がどうなるかをまったく予測できません。このようなとき、x を抽象化して、例えば前節のように、各モノマーの化学構造の記述子を計算し、モノマーの組成比で重み付き平均を計算することで、新たなモノマーを用いるときでも y の値を予測できるようになります。
無機材料を扱うとき、例えば用いられる金属元素の組成比を x の特徴量とすることで、各金属の割合と y の間の相関関係をモデル化でき、最適な無機材料にするためにどのような割合で金属を混合すればよいかを検討できます。しかし、このようなモデルはトレーニングデータにある金属種の範囲内でしか y の予測ができず、トレーニングデータにない金属種が使用されている無機材料の予測ができません。このようなとき、x を抽象化して、例えば各金属元素の特徴量を準備して、その組成比で重み付き平均を計算して x とすることで、新たな金属種を用いるときでも y の値を予測できるようになります。
一つ注意点として、x を抽象化したからといって、必ずしもモデルの予測精度が向上するわけではありません。予測精度は向上するかもしれませんし、逆に低下するかもしれません。特徴量の抽象化度を上げることで、モデルの逆解析が可能なサンプルの候補数やその多様性は増えますが、モデルの予測精度も考慮しながら x を設計するとよいでしょう。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。