理論創薬研究所の金子信人です。
今回は化学特性予測のための機械学習パッケージのオープンソースソフトウェアを紹介します。
参考文献
Chemprop: A Machine Learning Package for Chemical Property Prediction
(Esther HeidKevin P. GreenmanYunsie ChungShih-Cheng LiDavid E. GraffFlorence H. VermeireHaoyang WuWilliam H. Green and Charles J. McGill, Journal of Chemical Information and Modeling, 2024, 64, 1, 9-17.)
https://dx.doi.org/10.1021/acs.jcim.3c01250
機械学習とは学習データからその特徴を読み取り、未知データの予測を行うコンピュータアルゴリズムの一種で、近年のAIブームの一端を担っている技術になります。化学においては分子構造や化学的性質を学習データとして、未知の化学物質の特性を予測するために用いられています。今回紹介するChempropは物質の構造情報とそのプロパティを学習するパッケージで、回帰分析と分類分析の機能が提供されています。
動作環境
Intel Core i7-1265U
Windows 11 Pro
conda 25.3.1
Chempropのインストール
Pythonの仮想環境を作成し、PyPIからChempropをインストールします。
今回はGPU環境ではないのであらかじめCPUのみのPytorchをインストールしておきます。
$ conda create -n chemprop python=3.12 -y
$ conda activate chemprop
$ conda install pytorch cpuonly -c pytorch -y
$ pip install chemprop
Chempropによる溶解度の学習と予測
クイックスタートからサンプルとして配布されている溶解度データセットを使って学習と予測を行ってみましょう。
$ git clone https://github.com/chemprop/chemprop.git
$ cd chemprop
$ chemprop train --data-path tests/data/regression.csv --task-type regression --output-dir train_example
$ chemprop predict --test-path tests/data/regression.csv --model-path train_example/model_0/best.pt --preds-path train_example/predictions.csv
モデルの学習は数分で終了し、学習データはtrain_exampleに保存されます。
ここでは学習データと同じデータから溶解度の予測を行っていますが、おおよそ同じ値が得られました。
smiles | logSolubility | Predicted logSolubility |
OCC3OC(OCC2OC(OC(C#N)c1ccccc1)C(O)C(O)C2O)C(O)C(O)C3O | -0.77 | -1.1173626 |
Cc1occc1C(=O)Nc2ccccc2 | -3.3 | -2.6342313 |
CC(C)=CCCC(C)=CC(=O) | -2.06 | -2.546916 |
c1ccc2c(c1)ccc3c2ccc4c5ccccc5ccc43 | -7.87 | -8.481346 |
c1ccsc1 | -1.33 | -0.90503526 |
RMSDは0.7061、R2は0.8855と算出されました。近年開発されている溶解度予測ソフトウェア※1には及びませんが、汎用的な機械学習プログラムとしては非常に高い精度であると言えます。
Chempropによる親油性の学習と予測
例として低分子化合物の親油性の学習と予測を行ってみましょう。
MoleculeNet(https://www.moleculenet.org/)で公開されているLipophilicityのデータセットを使用します。
このデータセットには4200分子の水-オクタノール分配係数が記載されています。今回はこのうち上から100分子をテストデータとし、残りの4100分子を学習データとして作成したモデルからテストデータの水-オクタノール分配係数を予測させてみましょう。
$ mkdir Lipophilicity
$ cd Lipophilicity
$ wget https://deepchemdata.s3-us-west-1.amazonaws.com/datasets/Lipophilicity.cs
v
$ awk 'BEGIN{FS=OFS=","} {sub(/\r$/,"")} NR==1{print "smiles","exp"} NR>1 && NR<=101 {print $3,$2}' Lipophilicity.csv > Lipophilicity_test.csv
$ awk 'BEGIN{FS=OFS=","} {sub(/\r$/,"")} NR==1{print "smiles","exp"} NR>=102{print $3,$2}' Lipophilicity.csv > Lipophilicity_learn.csv
$ mkdir train
$ chemprop train --data-path Lipophilicity_learn.csv --task-type regression --output-dir train
$ chemprop predict --test-path Lipophilicity_test.csv --model-path train/model_0/best.pt --preds-path Lipophilicity_predictions.csv
smiles | Lipophilicity | Predicted Lipophilicity |
Cn1c(CN2CCN(CC2)c3ccc(Cl)cc3)nc4ccccc14 | 3.54 | 3.338566 |
COc1cc(OC)c(cc1NC(=O)CSCC(=O)O)S(=O)(=O)N2C(C)CCc3ccccc23 | -1.18 | -0.7544372 |
COC(=O)C@@Hc3ccccc3Cl | 3.69 | 3.4061437 |
OCC@HCN1C(=O)C(Cc2ccccc12)NC(=O)c3cc4cc(Cl)sc4[nH]3 | 3.37 | 3.1107576 |
Cc1cccc(CC@HC(C)(C)C)C(=O)NCC#N)c1 | 3.1 | 3.1931968 |
こちらはRMSDは0.5724、R2は0.8120と算出されました。テストデータは学習データには含まれていないにもかかわらず非常に高い精度での予測ができました。
ChempropによるBBB透過性の学習と予測
ここまで回帰分析を扱いましたが、分類分析についても試してみましょう。
同様にMoleculeNetで公開されているBBB(血液脳関門)透過性のデータセットを使用します。
先ほどと同じように上から100分子をテストデータとし、残りを学習データとして予測を行ってみます。
分類分析の場合はclassification
を指定します。ここではデータセットのうちエラーのあった部分を取り除いています。
$ mkdir BBB
$ cd BBB
$ wget https://deepchemdata.s3-us-west-1.amazonaws.com/datasets/BBBP.csv
$ awk 'BEGIN{FS=OFS=","; skip[61]; skip[63]; skip[96]} {sub(/\r$/,"")} NR==1{print "smiles","p_np"; next} NR>1 && NR<=101 && !(NR in skip){print $4,$3}' BBBP.csv > BBBP_test.csv
$ awk 'BEGIN{FS=OFS=","; skip[390]; skip[393]; skip[616]; skip[644]; skip[647]; skip[648]; skip[649]; skip[650]; skip[651]; skip[687]} {sub(/\r$/,"")} NR==1{print "smiles","p_np"; next} NR>=102 && !(NR in skip){print $4,$3}' BBBP.csv > BBBP_learn.csv
$ mkdir train
$ chemprop train --data-path BBBP_learn.csv --task-type classification --output-dir train
$ chemprop predict --test-path BBBP_test.csv --model-path train/model_0/best.pt --preds-path BBBP_predictions.csv
smiles | p_np | predicted_p_np |
[Cl].CC(C)NCC(O)COc1cccc2ccccc12 | 1 | 0.63125145 |
C(=O)(OC(C)(C)C)CCCc1ccc(cc1)N(CCCl)CCCl | 1 | 0.8915068 |
c12c3c(N4CCN(C)CC4)c(F)cc1c(c(C(O)=O)cn2C(C)CO3)=O | 1 | 0.17763571 |
C1CCN(CC1)Cc1cccc(c1)OCCCNC(=O)C | 1 | 0.96214366 |
Cc1onc(c2ccccc2Cl)c1C(=O)N[C@H]3[C@H]4SC(C)(C)C@@HC(O)=O | 1 | 0.019103616 |
分類分析の場合入力値は0,1になっていますが、出力値はそのあいだの値をとります。ここでは簡易的に四捨五入してデータセットとの一致を評価すると71%の正答率となりました。
おわりに
分子の構造情報とそのプロパティを学習するChempropを紹介しました。昨今のAIブームの要因ともなった機械学習ですが、初学者にとっては非常に難しく扱いにくいものでした。こういった簡便に利用できるパッケージを活用することでデータサイエンスを専門としない化学者にとってもより直接的に研究へ活用していくことができるのではないかと思います。
※1 Physics-Based Solubility Prediction for Organic Molecules (Daniel J. Fowles, Benedict J. Connaughton, James W. Carter, John B. O. Mitchell and David S. Palmer Chem. Rev. 2025, 125, 15, 7057–7098)
https://doi.org/10.1021/acs.chemrev.4c00855
前回記事
Direct MaxFlux法による遷移状態予測
https://www.insilico.jp/blog/2025/07/10/direct-maxflux/
Category: AI創薬関連