오늘은 마이크로바이옴 데이터를 머신러닝 모델에 적용한 논문을 가져왔습니다. 간단하게 리뷰해 보겠습니다.
Explainable AI reveals changes in skin microbiome composition linked to phenotypic differences
위 논문에서 강조하는 것은 제목에도 나와있듯이 Explainable AI (이하, XAI)를 사용했다는 것입니다. XAI 란, 말 그대로 설명가능한 인공지능 이란 뜻으로, 머신러닝의 특징 중 하나인 블랙박스 모델에서 벗어나 모델이 결론을 도출하는 과정을 사람이 이해할 수 있도록 하는 것을 말합니다.
머신러닝은 기본적으로 엄청나게 많은 양의 데이터 속에서 사람이 보지 못하는 인사이트를 도출해 내는 것에 강점이 있습니다. 위 논문에서의 데이터로 예를 들면, 스킨 마이크로바이옴 데이터를 4가지 표현형에 대해 라벨링 한 후 (나이, 피부의 수분량, 폐경기, 흡연 여부) 머신러닝을 학습시켜 라벨링 되지 않은 데이터에 대해 표현형을 예측하게 되는데, 사람은 머신러닝 모델이 결론을 내리기까지 어떤 과정을 거쳤는지, 어떤 feature 가 중요하게 작용했는지 등을 알지 못한다는 것입니다.
그러므로, XAI를 사용하여 사람에게 예측 결과에 대한 설명을 함께 함으로써 사람은 이 머신러닝 모델에 어떤 부적절한 bias, noise 등이 영향을 주지는 않았는지 확인 가능함과 동시에 결과에 대한 더 나은 이해가 가능해집니다.
머신러닝 알고리즘 중에서, 이런 XAI의 특성을 가지고 있는 것에는 대표적으로 의사결정나무 알고리즘이 있습니다.
위와 같은 그림이 의사결정나무 알고리즘의 예시인데, 한눈에 봐도 직관적이고 어떤 과정을 통해서 결론이 도출되었는지를 쉽게 확인할 수 있습니다. 따라서 위 논문에서도 의사결정나무 알고리즘을 기반으로 하는 RF, XGBoost, LightGBM 등 3가지 알고리즘에 SHapley Additive exPlanations (이하, SHAP)를 더해서 결과에 대한 설명을 할 수 있는 모델을 만들었습니다.
SHAP는 게임이론을 바탕으로, 각 feature 가 결괏값에 기여한 정도를 계산합니다. 위의 예시를 보면 기본 아이디어에 대해서는 쉽게 이해할 수 있습니다. 총개의 feature 가 있는데 (y 절편 포함) 각 feature 가 기여하는 정도를 계산합니다. 예를 들어, parch라는 feature의 값으로 0 을 넣음으로써, -0.003 만큼 기여하게 됩니다. age feature 의 경우에는 8을 넣음으로써 0.27이라는 많은 상대적으로 많은 기여를 한 것을 계산하여, 위 예측에서는 나이가 중요하게 작용했다는 것을 직관적으로 확인할 수 있습니다.
해당 논문의 결과 피규어는 위와 같은 형식으로 되어있습니다. 이것이 SHAP를 수행했을 때 확인할 수 있는 결과 피규어이고, b) AGE - RF에 대해 간단하게 보겠습니다.
모델은 random forest를 사용했고 표현형 중 나이를 예측하기 위해 중요하게 작용했던 feature를 위에서부터 확인할 수 있습니다. 가장 먼저 Alloprevotella 가 Younger age에서 더 많이 나타나고 Older age 에서 더 적게 나타나는데 그 정도가 가장 큰 것을 확인할 수 있어 가장 많이 기여하고 있다고 볼 수 있습니다.
어떻게 보면 differential abundance 분석을 진행한 것과 비슷한 형식의 결과를 확인할 수 있습니다. 그러나 위의 결과는 머신러닝 모델을 학습시켜 예측한 것이므로 통계적인 분석을 통해 수행되는 ALDEX2, LEfse 등과는 완전히 다른 것입니다.
import xgboost
import shap
# train an XGBoost model
X, y = shap.datasets.boston()
model = xgboost.XGBRegressor().fit(X, y)
# explain the model's predictions using SHAP
# (same syntax works for LightGBM, CatBoost, scikit-learn, transformers, Spark, etc.)
explainer = shap.Explainer(model)
shap_values = explainer(X)
# visualize the first prediction's explanation
shap.plots.waterfall(shap_values[0])
실제 SHAP 구동하는 간단한 예시 코드입니다. 기본적으로 사용할 알고리즘을 import 하여 모델을 fitting 하는 것은 똑같고 학습한 모델을 explainer에 넣어주면 간단하게 시각화까지 할 수 있는 것 같습니다. sklearn에서도 동일한 문법을 사용하면 가능하다고 하니 기본적인 부분을 수행해 보는 것은 어렵지 않게 해 볼 수 있을 것 같습니다.
위의 코드를 실행한 결과이고 역시 직관적인 결과를 확인할 수 있습니다.
# reference
1) Carrieri, Anna Paola, et al. "Explainable AI reveals changes in skin microbiome composition linked to phenotypic differences." Scientific reports 11.1 (2021): 4565.
2) https://github.com/shap/shap
3) https://ema.drwhy.ai/shapley.html
'[머신러닝]' 카테고리의 다른 글
[머신러닝] 모델에 학습시키기 위한 마이크로바이옴 데이터의 형식 (0) | 2023.11.29 |
---|---|
[머신러닝] CNN 을 사용한 마이크로바이옴 데이터의 분류 (T2D vs healthy) (1) | 2023.11.26 |
실제 데이터로 머신러닝 모델 만들기 : 2 (1) | 2023.09.17 |
실제 데이터로 머신러닝 모델 만들기 : 1 (0) | 2023.09.16 |
제 6회 빅데이터분석기사 자격증 취득 후기 (0) | 2023.08.24 |